Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
412 KB
Nội dung
Cây khung tối thiểu THUẬT TOÁN KRUSKAL Ý tưởng Cho đồ thị có trọng số G = (V, E) Thuật toán xây dựng tập cạnh ET khung nhỏ T=(VT, ET) theo bước Trước hết xếp cạnh đồ thị G theo thứ tự không giảm trọng số Bắt đầu từ ET=∅, bước ta duyệt danh sách cạnh xếp, từ cạnh có độ dài nhỏ đến cạnh có độ dài lớn hơn, để tìm cạnh mà việc bổ sung vào tập ET không tạo thành chu trình tập 2/51 THUẬT TOÁN KRUSKAL Giải thuật Bắt đầu từ đồ thị rỗng T có n đỉnh Sắp xếp cạnh G theo thứ tự không giảm trọng số Bắt đầu từ cạnh dãy này, ta thêm dần cạnh dãy xếp vào T theo nguyên tắc cạnh thêm vào không tạo thành chu trình T Lặp lại Bước số cạnh T n−1, ta thu khung nhỏ cần tìm 3/51 THUẬT TOÁN KRUSKAL Ví dụ: Bắt đầu T = ∅ Sắp xếp không giảm theo trọng số (v3, v5) 4, (v4, v6) 8, (v4, v5) 9, (v5, v6) 14, (v3, v4) 16, (v1, v3) 17, (v2, v3) 18, (v2, v4) 20, (v1, v2) 33 4/51 THUẬT TOÁN KRUSKAL N = (đỉnh) cạnh v2 v4 v1 v6 v3 v5 Tổng trọng số = + + + 17 + 18 = 56 (v3, v5) 4, (v4, v6) 8, (v4, v5) 9, (v5, v6) 14, (v3, v4) 16, (v1, v3) 17, (v2, v3) 18, (v2, v4) 20, (v1, v2) 33 5/51 THUẬT TOÁN PRIM Ý tưởng Cho đồ thị có trọng số G = (V, E) Bắt đầu, khởi tạo tập VT = {1 đỉnh } Sau lặp hết đỉnh đồ thị (Tức VT = V) Mỗi bước lặp, ta chọn cạnh nhỏ (u,v) cho u ∈ VT, v ∈ V – VT Thêm v vào VT, (u,v) vào ET Kết thúc ta đc khung tối thiểu T = (V T, ET) 6/51 THUẬT TOÁN PRIM Ví dụ: Chọn đỉnh VT = {v1} (Sắp xếp không giảm theo trọng số) (v3, v5) 4, (v4, v6) 8, (v4, v5) 9, (v5, v6) 14, (v3, v4) 16, (v1, v3) 17, (v2, v3) 18, (v2, v4) 20, (v1, v2) 33 7/51 THUẬT TOÁN PRIM Ví dụ: v1 Chọn (v1, v3) V = {v1, v3}, E = { (v1, v3) } T T Lặp lại, VT = {v1, v3, v5}, v5 v3 ET = { (v1, v3), (v3, v5) } (v3, v5) 4, (v4, v6) 8, (v4, v5) 9, (v5, v6) 14, (v3, v4) 16, (v1, v3) 17, (v2, v3) 18, (v2, v4) 20, (v1, v2) 33 8/51 THUẬT TOÁN PRIM N = (đỉnh) v2 v4 v1 v6 v3 v5 Tổng trọng số = + + + 17 + 18 = 56 9/51 THUẬT TOÁN PRIM Mô tả thông qua bảng thao tác TT (u,v) Khởi tạo (v1, v3, 17) (v3, v5, 4) VT v1 v1, v3 V - VT v2, v3, v4, v5, v6 v2, v4, v5, v6 v1, v3, v5 v2, v4, v6 ET ∅ (v1, v3) (v1, v3), (v3, v5) 10/51 THUẬT TOÁN PRIM Giải thuật VT:={v*}, v* đỉnh tuỳ ý đồ thị G ET:=∅ Với đỉnh vj∉VT, tìm đỉnh wj∈VT cho m(wj,vj) = m(xi, vj)=:βj xi∈VT gán cho đỉnh vj nhãn [wj, βj] Nếu không tìm đuợc wj (tức vj không kề với đỉnh VT) gán cho vj nhãn [0, ∞] 11/51 THUẬT TOÁN PRIM Giải thuật Chọn đỉnh vj* cho βj* = βj vj∉VT VT := VT ∪ {vj*}, ET := ET ∪ {(wj*, vj*)} Nếu |VT| = n thuật toán dừng (VT, ET) khung nhỏ Nếu |VT| < n chuyển sang Bước 12/51 THUẬT TOÁN PRIM Giải thuật Đối với tất đỉnh vj∉VT mà kề với vj*, ta thay đổi nhãn chúng sau: Nếu βj > m(vj*, vj) đặt βj:=m(vj*, vj) nhãn vj [vj*, βj] Ngược lại, ta giữ nguyên nhãn vj Sau quay lại Bước 13/51 THUẬT TOÁN PRIM Ví dụ 14/51 THUẬT TOÁN PRIM 15/51 BÀI TẬP Đồ thị G vô hướng cho danh sách cạnh sau: c,k,4 c,e,7 h,k,5 g,h,8 a,b,4 d,k,8 e,h,5 f,h,9 b,c,8 f,b,6 d,e,5 b,e,6 d,c,5 e,f,5 d,g,5 a,f,6 e,g,7 k,g,6 Phát biểu thuật toán Kruskal / Prim Tìm khung tối thiểu theo thuật toán Kruskal / Prim Chỉ tổng trọng số cạnh dãy cạnh khung tối thiểu 16/51 [...]... Nếu |VT| = n thì thuật toán dừng và (VT, ET) là cây khung nhỏ nhất Nếu |VT| < n thì chuyển sang Bước 4 12/51 THUẬT TOÁN PRIM Giải thuật 4 Đối với tất cả các đỉnh vj∉VT mà kề với vj*, ta thay đổi nhãn của chúng như sau: Nếu βj > m(vj*, vj) thì đặt βj:=m(vj*, vj) và nhãn của vj là [vj*, βj] Ngược lại, ta giữ nguyên nhãn của vj Sau đó quay lại Bước 3 13/51 THUẬT TOÁN PRIM Ví dụ 14/51 THUẬT TOÁN PRIM...THUẬT TOÁN PRIM Giải thuật 1 VT:={v*}, trong đó v* là đỉnh tuỳ ý của đồ thị G ET:=∅ 2 Với mỗi đỉnh vj∉VT, tìm đỉnh wj∈VT sao cho m(wj,vj) = min m(xi, vj)=:βj xi∈VT và gán cho đỉnh vj nhãn [wj, βj] Nếu không tìm đuợc wj như vậy (tức là khi vj không kề với bất cứ đỉnh nào trong VT) thì gán cho vj nhãn [0, ∞] 11/51 THUẬT TOÁN PRIM Giải thuật 3 Chọn đỉnh vj* sao cho βj*... danh sách cạnh như sau: c,k,4 c,e,7 h,k,5 g,h,8 a,b,4 d,k,8 e,h,5 f,h,9 b,c,8 f,b,6 d,e,5 b,e,6 d,c,5 e,f,5 d,g,5 a,f,6 e,g,7 k,g,6 1 Phát biểu thuật toán Kruskal / Prim 2 Tìm cây khung tối thiểu theo thuật toán Kruskal / Prim 3 Chỉ ra tổng trọng số các cạnh và dãy các cạnh của cây khung tối thiểu 16/51