Minimum spanning tree Caây Khung Nhoû Nhaát Ch 9 Cay khung nho nhat Caây khung nhoû nhaát Cho moät ñoà thò lieân thoâng, voâ höôùng G = (V, E ) moät haøm troïng soá w E R Tìm moät taäp con khoâng ch[.]
Cây Khung Nhỏ Nhất Cây khung nhỏ ª ª Cho – đồ thị liên thông, vô hướng G = (V, E ) – hàm trọng số w:ER Tìm tập không chứa chu trình T E nối tất đỉnh cho tổng trọng số w(T) = (u, v) T w(u, v) • ª nhỏ – Tập T làø cây, gọi khung nhỏ Bài toán tìm khung nhỏ nhất: toán tìm T 13.11.2004 Ch 9: Cay khung nho nhat Caây khung nhỏ (tiếp) ª Giải toán tìm khung nhỏ – Giải thuật Kruskal – Giải thuật Prim 13.11.2004 Ch 9: Cay khung nho nhat Cây khung nhỏ nhất: ví dụ a 11 8 b h i c g d e 14 f 10 Tập cạnh xám khung nhỏ ° Trọng số tổng cộng 37 ° Cây không nhất: thay cạnh (b, c) cạnh (a, h) khung khác có trọng số 37 ° 13.11.2004 Ch 9: Cay khung nho nhat Cạnh an toàn ª ª ª Cho đồ thị liên thông, vô hướng G = (V, E ) hàm trọng số w : E R Tìm khung nhỏ cho G! Giải toán chiến lược greedy: nuôi khung lớn dần cách thêm vào cạnh Định nghóa cạnh an toàn Nếu A tập khung nhỏ đó, (u, v) cạnh G cho tập A {(u, v)} tập khung nhỏ đó, (u, v) cạnh an toàn cho A 13.11.2004 Ch 9: Cay khung nho nhat Một giải thuật tổng quát (generic) ª Một giải thuật tổng quát (generic) để tìm khung nhỏ – Input: đồ thị liên thông, vô hướng G hàm trọng số w cạnh G – Output: Một khung nhỏ cho G GENERIC-MST(G, w) A while A không khung nhỏ tìm cạnh (u, v) an toaøn cho A A A {(u, v)} return A 13.11.2004 Ch 9: Cay khung nho nhat Phép cắt ª ª Các khái niệm quan trọng Một phép cắt (S, V S) G = (V, E ) phân chia (partition) V Ví dụ: S = {a, b, d, e} đồ thị sau Một cạnh (u, v) E xuyên qua (cross) phép cắt (S, V S) đỉnh nằm S đỉnh nằm V S Ví dụ: cạnh (b, c) S VS 13.11.2004 a b 11 h c i d g 14 e 10 f Ch 9: Cay khung nho nhat Cạnh nhẹ (light edge) ª ª Các khái niệm quan trọng (tiếp) Một phép cắt bảo toàn tập cạnh A (respects A) cạnh A xuyên qua phép cắt Một cạnh cạnh nhẹ vượt qua phép cắt trọng số nhỏ trọng số cạnh xuyên qua phép cắt Ví dụ: cạnh (c, d) S VS 13.11.2004 a 11 8 b h i c g d 14 e 10 f Ch 9: Cay khung nho nhat Nhận cạnh an toàn Định lý 24.1 Cho ° G = (V, E) đồ thị liên thông, vô hướng ° w hàm trọng số E ° A tập khung nhỏ cho G ° (S, V S) phép cắt G bảo toàn A ° (u, v) cạnh nhẹ vượt qua (S, V S) cạnh (u, v) an toàn cho A Chứng minh 13.11.2004 Ch 9: Cay khung nho nhat Nhận cạnh an toàn (tiếp) ° S: tập đỉnh đen, V S: tập đỉnh trắng ° Các cạnh khung nhỏ T vẽ hình, cạnh G không ° A: tập cạnh xám ° Cạnh (u, v) cạnh nhẹ xuyên qua phép cắt (S, V S) ° p đường từ u đến v T x u p y v 13.11.2004 Ch 9: Cay khung nho nhat 10 Thực thi giải thuật Kruskal (tiếp) (c) a b 11 h 13.11.2004 c i 4 g 7 d f 10 11 14 (d) e 14 10 a 11 8 b h Ch 9: Cay khung nho nhat i c g d e 14 f 10 15 Thực thi giải thuật Kruskal (tiếp) (e) a 11 (g) a i g h 13.11.2004 i g d f d 10 a Ch 9: Cay khung nho nhat g i g d e 14 c b h i c h 11 8 b 11 (h) e f a 10 14 (f) e 14 c b c h 11 8 b f 10 d e 14 10 f 16 Thực thi giải thuật Kruskal (tieáp) (i) a 11 (k) a i g h 13.11.2004 i g d f d 10 a Ch 9: Cay khung nho nhat g i g d e 14 c b h i c h 11 8 b 11 (l) e f a 10 14 (j) e 14 c b c h 11 8 b f 10 d e 14 10 f 17 Thực thi giải thuật Kruskal (tieáp) (m) b a 11 4 h 13.11.2004 c i 6 g 7 d f 10 11 14 (n) e 14 10 a 11 8 b h Ch 9: Cay khung nho nhat i c g d e 14 10 f 18 Phân tích giải thuật Kruskal ª ª Dùng cấu trúc liệu tập rời (disjoint sets), chương 22, với heuristics – Hợp theo thứ hạng (union-by-rank) – Nén đường dẫn (path-compression) Nhận xét (cần đến đánh giá thời gian chạy) – Giải thuật gọi V lần MAKE-SET gọi tổng cộng O(E) lần thao tác MAKE-SET, UNION, FINDSET – Vì G liên thông nên E V 13.11.2004 Ch 9: Cay khung nho nhat 19 Phân tích giải thuật Kruskal (tieỏp) ê ã Thụứi gian chaùy cuỷa MST-KRUSKAL gom – Khởi động: O(V) – Sắp xếp dòng 4: O(E lg E) – Doøng 5-8: O(E (E, V)) (xem nhận xét), = O(E lg E) (E, V) = O(lg E) Vậy thời gian chạy MST-KRUSKAL O(E lg E) 13.11.2004 Ch 9: Cay khung nho nhat 20 ... v) ã ê laứ nhoỷ – Tập T làø cây, gọi khung nhỏ Bài toán tìm khung nhỏ nhất: toán tìm T 13.11.2004 Ch 9: Cay khung nho nhat Cây khung nhỏ (tiếp) ª Giải toán tìm khung nhỏ – Giải thuật Kruskal –... 13.11.2004 Ch 9: Cay khung nho nhat Cây khung nhỏ nhất: ví dụ a 11 8 b h i c g d e 14 f 10 Tập cạnh xám khung nhỏ ° Trọng số tổng cộng 37 ° Cây không nhất: thay cạnh (b, c) cạnh (a, h) khung khác có... tổng quát (generic) để tìm khung nhỏ – Input: đồ thị liên thông, vô hướng G hàm trọng số w cạnh G – Output: Một khung nhỏ cho G GENERIC-MST(G, w) A while A không khung nhỏ tìm cạnh (u, v) an toàn