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
Trang 1 Nhóm: 1
GVHD: Nguyễn Thanh Cẩm
SVTH: Trịnh Lâm Vũ
Trang 2Giớ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.
Trang 3Mô 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
Trang 4Chi 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)
Trang 5Ví 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
Trang 6Ví 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)}
Trang 7Ví 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)}
Trang 8
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)}
Trang 9Ví 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)
}
Trang 10Ví 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
Trang 11Ví 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