Tải bản đầy đủ (.ppt) (12 trang)

SLIDE GIỚI THIỆU THUẬT TOÁN THAM LAM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (427.6 KB, 12 trang )

KHOA CÔNG NGHỆ THÔNG TIN
Môn: Thuật toán

 Nhóm: 1
 GVHD: Nguyễn Thanh Cẩm
 SVTH: Trịnh Lâm Vũ


Thuật toán PRIM
Giới thiệu
 Trong khoa học máy tính, thuật toán Prim là một thuật toán
tham lam để tìm cây bao trùm nhỏ nhất của một đồ thị vô
hướng có trọng số liên thông. Nghĩa là nó tìm một tập hợp
các cạnh của đồ thị tạo thành một cây chứa tất cả các đỉnh,
sao cho tổng trọng số các cạnh của cây là nhỏ nhất.


Thuật toán PRIM
Mô tả
 Mô tả: Thuật toán xuất phát từ một cây chỉ chứa đúng một
đỉnh và mở rộng từng bước một, mỗi bước thêm một cạnh
mới vào cây, cho tới khi bao trùm được tất cả các đỉnh của
đồ thị. Còn được gọi là thuật toán lân cận gần nhất. Thuật
toán đúng chỉ dừng lại khi n đỉnh thu được bằng n đỉnh
nhập vào và n-1 cạnh.


Thuật toán PRIM
Chi tiết thuật toán
 Các bước:
-



Đầu vào: Một đồ thị có tập hợp đỉnh V và cạnh E

-

Khởi tạo: V(mới) = x, x là một cạnh bất kỳ, E(mới) = {}

-

Lặp lại cho tới khi V(mới) = V
+ Chọn cạnh (u,v) có độ dài nhỏ nhất thỏa mãn u
thuộc V(mới) và v không thuộc V(mới).
+ Thêm v vào V(mới) và thêm cạnh (u,v) vào E(mới).

-

Xuất ra V(mới) và E(mới) .


Thuật toán PRIM
Ví dụ minh họa
 Bước 1: Nhập vào đồ thị gồm V và E
-

Tập hợp đỉnh V = {A,B,C,D,E,F} – 6 Đỉnh

-

Tập hợp cạnh E = {(A,B:5)(B,C:8)(C,D:15)(D,E:10)(E,A:9)


(A,F:4)(B,F:7)(C,F:12)(D.F:7)(E,F:3)} – 10 Cạnh

* Chú thích
O : Cạnh đang đượct xét
O : Cạnh và đỉnh đã được chọn


Thuật toán PRIM
Ví dụ minh họa
 Bước 2: Khởi tạo V(mới) chứa {B} và E(mới) { }
(Lựa chọn đỉnh B là đỉnh ngẫu nhiên trong đồ thị đưa vào V(mới))
 Bước 3: Lựa chọn cạnh (u,v) nhỏ nhất
Có các cạnh (B,A), (B,C) và (B,F)
Chọn cạnh (B,A) vì có độ dài nhỏ nhất
 Thêm A vào V(mới) và (B,A) vào E(mới)
 Tiếp tục xét các cạnh (u,v) mới
Với điều kiện u thuộc V(mới) và v k thuộc
V(mới)
Lúc này V(mới) = {B,A} , E(mới) = {(B,A:5)}


Thuật toán PRIM
Ví dụ minh họa
 Bước 3: Tiếp tục xét ta có:
(B,C),(A,F),(A,E),(B,F) trong đó (A,F) là cạnh có độ dài ngắn nhất
Thêm F vào V(mới) và (A,F) vào E(mới)
Lúc này V(mới) = {B,A,F}, E(mới) = {(B,A:5)(A,F:4)}


Thuật toán PRIM

Ví dụ minh họa
 Bước 3: Tiếp tục xét ta có:
(B,C),(F,C),(F,D),(F,E),(A,E) trong đó ta thấy cạnh (F,E) có độ dài ngắn
nhất, lựa chọn F,E.
Thêm E vào V(mới) và (F,E) vào E(mới)
Lúc này V(mới) = {B,A,F,E}
E(mới) = {(B,A:5)(A,F:4)(F,E:3)}


Thuật toán PRIM
Ví dụ minh họa
 Bước 3: Tiếp tục xét ta có:
(B,C),(F,C),(F,D),(E,D) trong đó ta thấy cạnh (F,D) có độ dài ngắn nhất,
lựa chọn F,D.
Thêm D vào V(mới) và (F,D) vào E(mới)
Lúc này V(mới) = {B,A,F,E,D}
E(mới) = {(B,A:5)(A,F:4)(F,E:3)(F,D:7)
}


Thuật toán PRIM
Ví dụ minh họa
 Bước 3: Tiếp tục xét ta có:
(B,C),(F,C),(D,C) trong đó ta thấy cạnh (B,C) có độ dài ngắn nhất, lựa
chọn B,C.
Thêm C vào V(mới) và (B,C) vào E(mới)
Lúc này V(mới) = {B,A,F,E,D,C}
E(mới) = {(B,A:5)(A,F:4)(F,E:3)(F,D:7)
(B,C:8)}
V(mới) = V(ban đầu) : 6 đỉnh

Ngừng lặp thuật toán


Thuật toán PRIM
Ví dụ minh họa
 Bước 4: Xuất kết quả
V(mới) = {B,A,F,E,D,C} – 6 đỉnh
E(mới) = {(B,A:5)(A,F:4)(F,E:3)(F,D:7)(B,C:8)} – 5 cạnh
Độ dài của cây khung nhỏ nhất: 5+4+3+7+8 = 27




×