Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
445 KB
Nội dung
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 : E →R Tìm tập không chứa chu trình T ⊆ E nối tất đỉnh cho toồng caực troùng soỏ 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 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 – Giải thuật Prim 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) ca khung khác có trọng số 37 ° 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 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 toàn cho A A ← A ∪ {(u, v)} return A 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) cuûa 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).8 S↑ V −S ↓ a b 11 h c i d 14 e 10 g f Ch 9: Cay khung nho nhat Caï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↑ V −S ↓ 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 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 Ch 9: Cay khung nho nhat 10 Thực thi giải thuật Kruskal (tiếp) (c) a h b 11 7 c i 4 g 7 d f (d) e 14 10 10 11 14 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 g i g d f d f a 10 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 14 (f) e 14 c b h i c h 11 8 b f 10 d e 14 10 f 16 Thực thi giải thuật Kruskal (tiếp) (i) a 11 (k) a g i g d f d f a 10 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 14 (j) e 14 c b h i c h 11 8 b f 10 d e 14 10 f 17 Thực thi giải thuật Kruskal (tiếp) (m) b a 11 h 4 7 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| − Ch 9: Cay khung nho nhat 19 Phân tích giaỷi thuaọt cuỷa Kruskal (tieỏp) ê ã Thụứi gian chaùy MST-KRUSKAL gồm – Khởi động: O(V) – Sắp xếp ôû doø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 laø O(E lg E) Ch 9: Cay khung nho nhat 20 Giải thuật Prim ª Giải thuật Prim – dựa giải thuật GENERIC-MST, A ° thực thi giải thuật A = {(v, π[v]) : v ∈ V − {r} − Q} ° giải thuật xong, Q = ∅, neân A = {(v, π[v]) : v ∈ V − {r}} Ch 9: Cay khung nho nhat 21 Giải thuật Prim (tiếp) MST-PRIM(G, w, r) r : gốc Q ← V[G] khung nhỏ for đỉnh u ∈ Q trả key[u] ← ∞ Q : priority queue maø khóa key[r] ← trường key π[r] ← NIL π[v] : đỉnh cha mẹ while Q ≠ ∅ u ← EXTRACT-MIN(Q) cuûa v for đỉnh v ∈ Adj[u] if v ∈ Q vaø w(u, v) < key[v] 10 then π[v] ← u 11 key[v] ← w(u, v) ª Tập V − Q chứa đỉnh nuôi lớn Ch 9: Cay khung nho nhat 22 Thực thi giải thuật Prim Sau khởi động: (các số bên đỉnh trị key đỉnh) ∞ a b 11 h ∞ ∞ ∞ c i g ∞ ∞ d Ch 9: Cay khung nho nhat ∞ e 14 f 10 ∞ 23 Thực thi giải thuật Prim (tiếp) Các đỉnh Q màu trắng, đỉnh đưa kh Sau lần lặp 1: (a) a b 11 ∞ h a h ∞ g 7 c g ∞ Ch 9: Cay khung nho nhat ∞ d f 10 ∞ ∞ d ∞ e 14 ∞ e 14 ∞ i b 11 i c Sau lần lặp 2: (b) ∞ f 10 ∞ 24 Thực thi giải thuật Prim (tiếp) Sau lần lặp 3: (c) a b 11 8 h (d) a h g 7 c g Ch 9: Cay khung nho nhat d f 10 d ∞ e 14 ∞ e 14 ∞ i b 11 i Sau lần lặp 4: c 2 f 10 25 Thực thi giải thuật Prim (tiếp) Sau lần lặp 5: (e) a 11 8 b h i c g Sau lần lặp 6: d (f) e 14 f a 10 11 Sau lần lặp 7: (g) a 11 8 b h i g h i c g d e 14 f 10 Sau laàn laëp 8: c b d e 14 (h) f 10 a 11 8 b h Ch 9: Cay khung nho nhat i c g d e 14 f 10 26 Thực thi giải thuật Prim (tiếp) Sau lần lặp (i) 9: a 11 8 b h i c g d e 14 Ch 9: Cay khung nho nhat f 10 27 Phân tích giải thuật Prim ª Thời gian chạy MST-PRIM tùy thuộc vào cách thực priority queue Q – Trường hợp thực Q binary heap ° Khởi tạo dòng 1-4 dùng BUILD-HEAP tốn O(V) thời gian ° Vòng while lặp V lần, EXTRACT-MIN tốn O(lg V) thời gian Như lần gọi EXTRACT-MIN tốn tất O(V lg V) thời gian — Vòng for lặp O(E) lần, vòng lặp dòng 11 (dùng HEAPIFY) tốn O(lg V) thời gian ° Vậy thời gian chạy tổng cộng MST-P RIM O(V lg V + E lg V) = O(E lg V) Ch 9: Cay khung nho nhat 28 Phân tích giải thuật Prim (tiếp) – Trường hợp thực Q Fibonacci heap ° Khởi tạo dòng 1- dùng MAKE-FIB-HEAP FIB-HEAP-INSERT tốn O(V) amortized time ° Mỗi FIB-HEAP-EXTRACT-MIN tốn O(lg V) amortized time ° Mỗi thao tác FIB-HEAP-DECREASE-KEY cần để thực dòng 11 tốn O(1) amortized time ° Vậy thời gian chạy tổng cộng MST-P RIM O(E + V lg V) Ch 9: Cay khung nho nhat 29 ... T làø cây, gọi khung nhỏ Bài toán tìm khung nhỏ nhất: toán tìm T 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 – Giải thuật Prim Ch 9: Cay khung. .. nhat Caâ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) ca khung khác có trọng số 37 ° Ch 9: Cay khung nho... → 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ỏ đó,