Xử lý song song tìm đường đi ngắn nhất GRAPH ALGORITHMS MINIMUM-COST SPANNING TREE
GRAPH ALGORITHMS MINIMUM-COST SPANNING TREE Nhóm 8: NỘI DUNG • Đặt vấn đề • Một số khái niệm liên quan đến đồ thị • Ý tưởng thuật tốn: o PRIM o KRUSKAL o SOLLIN • Xử lí song song • Đánh giá, nhận xét ĐẶT VẤN ĐỀ • Bài tốn: INPUT: Đồ thị G=(V , E) vơ hướng, liên thơng có trọng số, n đỉnh OUTPUT: Cây khung nhỏ MỘT SỐ KHÁI NIỆM Đồ thị Liên thuộc:A B liên thuộc tồn (A,B) Liên thơng Chu trình (A-B-C-…-Z-A) Cây khung nhỏ – có tổng trọng số nhỏ THUẬT TOÁN PRIM KRUSKAL SOLLIN PRIM Đồ thị G = (V, E) liên thơng, có n đỉnh Chọn cạnh có trọng số nhỏ nhất, đặt vào khung Lần lượt ghép vào cạnh có trọng số nhỏ liên thuộc với đỉnh không tạo chu trình Thuật tốn dừng lại n − cạnh ghép vào PRIM Ví dụ: Dùng thuật tốn Prim tìm khung nhỏ đồ thị sau: A C E G C D F B A B E D F Cây khung G Trọng số: 12 KRUSKAL Đồ thị G = (V, E) liên thơng, có n đỉnh Chọn cạnh có trọng số nhỏ nhất, đặt vào khung Lần lượt ghép vào cạnh có trọng số nhỏ mà khơng tạo chu trình Thuật tốn dừng lại n − cạnh ghép vào KRUSKAL Ví dụ: Dùng thuật tốn Kruskal tìm khung nhỏ đồ thị sau: 4 A B A B C E G C D F E D F Cây khung G Trọng số: 12 SOLLIN Đồ thị G = (V, E) liên thông, có n đỉnh Bắt đầu với rừng gồm n đỉnh – n tách biệt Trong vịng lặp, tìm cạnh để nối hai với nhau, cho hai nối cạnh, khơng tạo thành chu trình Tiến trình tiếp tục cịn (tất đỉnh kết nối) THUẬT TỐN PRIM Ví dụ: Dùng thuật tốn Prim tìm khung nhỏ đồ thị sau: A C E A D F C D E F B B A G B C D E 6 F d[] 6 2 THUẬT TỐN PRIM Ví dụ: Dùng thuật tốn Prim tìm khung nhỏ đồ thị sau: A B A B C D 2 A C B F C E E D D F Cây khung G Trọng số: 12 E 6 F d[] 3 2 GIẢ THUẬT PRIM Begin VT :={r}; d[r]:=0; for all v //khởi tạo với đỉnh r định ∈ (V - VT) ∃ if ( (r,v)) d[v]:= trọng số (r,v); else d[v]:= ; while VT ∞ V ≠ begin Tìm đỉnh u / d[u]:= min{ d[v] | v VT:= VT for all v {u}; End ∈ ∈ (V - VT) d[v]:= min{d[v] , trọng số (u,v)}; endwhile (V - VT) } //Song song hóa SONG SONG HĨA THUẬT TỐN PRIM • Có m xử lí, n đỉnh • Mỗi BXL đảm nhiệm n/m đỉnh, cập nhật phần d[] cho BXL • BXL lựa chọn d[], chèn đỉnh vào MST, thơng báo cho tất BXL • Mỗi BXLcập nhật lại phần d[] chúng dựa thơng báo SONG SONG HĨA THUẬT TỐN PRIM A B C E A D F B C P2 D E F B P1 A G P0 C D E 3 F d[] 6 0 0 SONG SONG HÓA THUẬT TOÁN PRIM A B C E A D F B C P2 D E F B P1 A G P0 C D E F d[] 6 3 6 2 SONG SONG HÓA THUẬT TOÁN PRIM A B C E A D F B C P2 D E F B P1 A G P0 C D E F d[] 6 3 6 2 GIẢ THUẬT KRUSKAL • A = ∅; • Với v V do: ∈ Make-Set(v); • Sắp xếp cạnh theo thứ tự khơng giảm trọng số • Với e = (u; v) xếp: • if Find-Set(u) ̸= Find-Set(v) then • A = A U e; • Union(u; v); • Với v V do: Make-Set (v);// cài đặt lại • return A; ∈ THUẬT TOÁN KRUSKAL A C E A B G 4 C D D E F F (C,D) (A,C) B (E,F) (A,E) (C,F) (A,B) (B,D) (F,D) (C,E) 3 6 SONG SONG HĨA THUẬT TỐN KRUSKAL • BXL kiểm tra • Các BXL Helper chạy đồng thời với BXL chính: Trong bước BXL chính: kiểm tra cạnh chúng xem có tạo chu trình với khung khơng? THUẬT TỐN KRUSKAL A C E A B G C D D E F F Helper (C,D) (A,C) Main Helper (E,F) (A,E) (C,F) (A,B) (B,D) (F,D) (C,E) 3 6 THUẬT TOÁN SOLLIN ĐÁNH GIÁ, NHẬN XÉT Độ phức tạp Tuần tự Song Song Prim O(n2) O(n2/p + n log p) Kruskal O(mlog2n) Sollin O(n 2log 2n) O(log(n(n2/p+n/p+n+p)) ... begin Tìm đỉnh u / d[u]:= min{ d[v] | v VT:= VT for all v {u}; End ∈ ∈ (V - VT) d[v]:= min{d[v] , trọng số (u,v)}; endwhile (V - VT) } / /Song song hóa SONG SONG HĨA THUẬT TỐN PRIM • Có m xử lí,... báo SONG SONG HĨA THUẬT TỐN PRIM A B C E A D F B C P2 D E F B P1 A G P0 C D E 3 F d[] 6 0 0 SONG SONG HĨA THUẬT TỐN PRIM A B C E A D F B C P2 D E F B P1 A G P0 C D E F d[] 6 3 6 2 SONG SONG... khung G Trọng số: 12 XỬ LÍ SONG SONG THUẬT TỐN PRIM Ví dụ: Dùng thuật tốn Prim tìm khung nhỏ đồ thị sau: A C E G A B C D F E F D THUẬT TỐN PRIM Ví dụ: Dùng thuật tốn Prim tìm khung nhỏ đồ thị