Thông tin tài liệu
Cấu trúc liệu Giải thuật Cấu trúc liệu Giải thuật Chương V: Đồ thị (phần 2) Cây Rừng lý thuyết đồ thị – Cây z z – Một đồ thị vô hướng liên thông Khơng có chu trình Cây Rừng z Một tập phân biệt Rừng Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Cây khung Cho đồ thị vô hướng, liên thông G – z Cây khung G có chứa tất đỉnh G 1 6 4 5 Cây khung Đồ thị Cây khung Bài tốn tìm khung cực tiểu z z z Cho đồ thị vô hướng, liên thơng có trọng số Giá trị khung tổng trọng số cung Tìm khung với giá trị nhỏ đồ thị 6 5 10 Đồ thị đầu vào Cây khung cực tiểu Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Kruskal - MST z Ý tưởng – Lần lượt thêm vào khung cần tìm cung có trọng số nhỏ có thời điểm cung khơng tạo thành chu trình phần khung tạm có Giải thuật Kruskal-MST 1 10 10 3 14 3 12 16 5 Bước Đồ thị ban đầu Bước Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Kruskal – MST 10 2 3 1 10 3 3 14 12 4 16 7 Đồ thị ban đầu 7 Bước Bước Giải thuật Kruskal - MST 1 7 10 10 12 3 14 3 10 16 7 Bước Đồ thị ban đầu 7 Bước Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Kruskal - MST 1 7 10 2 3 10 14 10 10 12 3 16 7 Đồ thị ban đầu Bước 7Cây khung cực tiểu Giải thuật Kruskal-MST Algorithm KRUSKAL(G) {đồ thị G có n đỉnh} {Khởi tạo cụm ban đầu, cụm chứa đỉnh đồ thị } for each vertex v in G C(v) ← {v} Khởi tạo Queue Q chứa cung G, xếp theo chiều tăng dần trọng số {Khởi tạo khung ban đầu rỗng} T ← ∅ {Lần lượt xét cung đưa vào khung cần tìm} while T chứa n-1 cung begin Lấy từ Q cung (u,v) có trọng số nhỏ C(v) cụm chứa v, C(u) cụm chứa u if C(v) ≠ C(u) then begin T = T U {(u,v)} Nhập C(u) với C(v) end end return T Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Prim - MST z Ý tưởng z z z Xây dựng khung đỉnh xuất phát Thời điểm ban đầu, đỉnh xuất phát đỉnh cụm C Từng bước thêm vào cụm C đỉnh w ngồi C mà w có nối với đỉnh u C thơng qua cung (u,w) có giá trị nhỏ thời điểm Giải thuật Prim - MST 1 7 10 10 3 10 12 16 7 Đỉnh xuất phát chọn Là đỉnh số 10 14 14 12 16 Bước 1: Từ có cung (2, 4) , (2,6) có trọng số 10 Chọn (2,4) cho thêm vào khung Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Prim - MST 1 7 10 8 3 10 10 14 12 10 14 12 7 5 Bước 2: Từ 2, có cung (2,6) , (4,7), (4,3) Chọn (2,6) có đưa vào khung 16 Bước 3: Chọn (6,1) Giải thuật Prim - MST 1 7 10 10 3 10 10 14 12 16 14 12 Bước 5: Chọn (1, 7) Bước 4: Chọn (1, 3) Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Prim - MST 10 3 10 14 12 Bước 6: Chọn (7,5) Tất đỉnh đồ thị có khung Giải thuật Prim - MST Algorithm PRIM_MST(G, v) {Khởi tạo khung ban đầu , chứa đỉnh v} T ← {v} Q = V – {v} ; {Q tập đỉnh chưa khung} { Thiết lập mảng d chứa giá trị trọng số cung để tiến hành chọn cung có giá trị nhỏ nối đỉnh với đỉnh bước} d[v] = 0; for all w ∈ Q begin if (tồn cung (v,w) ) then d[w] = weight(v,w); else d[w] = ∞; end Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Prim - MST {Lần lượt lựa chọn đỉnh đưa vào khung} While ( Q ≠ rỗng) begin 4.1 Xác định đỉnh u Q mà d[u] = min{d[w] | w ∈ Q} ; 4.2 Xác định cung (r,u) với r T weight(r,u) = d[u]; 4.3 T ← {(r,u)} ; Q = Q – {u}; {cập nhật lại giá trị lưu mảng d sau thêm u vào khung, mảng d tiếp tục sử dụng bước lựa chọn tiếp theo} 4.4 for all w ∈ Q d[w] = (d[w], weight(u,w) ); End; Bài tốn tìm đường ngắn – – – Tìm đường ngắn cặp đỉnh (i,j) Tìm đường ngắn từ đỉnh nguồn tới tất đỉnh lại Tìm đường ngắn cặp đỉnh Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra – Đặc trưng z z – Giải toán tìm đường ngắn cặp đỉnh tốn tìm đường ngắn từ nguồn tới đích Chỉ áp dụng đồ thị có trọng số dương Ý tưởng: z Với đỉnh v trì thơng số sau – – D[v] : Khoảng cách ngắn biết thời điểm từ đỉnh nguồn s tới đỉnh v P[v] : Đỉnh trước đỉnh v đường từ đỉnh nguồn s tới v Giải thuật Dijkstra – Thực z z Duy trì cụm C chứa đỉnh, cụm lúc đầu chứa đỉnh xuất phát cho Dần dần thêm đỉnh vào cụm Tại bước giái thuật – – xác định đỉnh u chưa C có giá trị d[u] nhỏ đưa vào C Cập nhật lại giá trị d đỉnh lân cận u Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 10 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra z Tìm đường ngắn từ đỉnh đến đỉnh khác 24 18 14 30 15 11 5 16 20 19 44 Giải thuật Dijkstra ∞ ∞ 18 ∞ 14 30 15 ∞ ∞ 11 5 16 20 6 ∞ 24 19 44 ∞ Khởi tạo giá trị d cho tất đỉnh Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 11 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra ∞ ∞ 24 18 ∞ 14 30 Khởi tạo C 15 ∞ ∞ 11 5 16 20 19 44 ∞ ∞ Giải thuật Dijkstra ∞ 24 18 14 14 30 15 ∞ ∞ 11 5 16 20 44 15 19 ∞ Cập nhật giá trị d[2] = 9, d[6] = 14, d[7] = 15 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 12 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra 33 24 18 14 14 30 15 ∞ ∞ 11 5 16 20 19 44 ∞ 15 Mở rộng cụm C, đường ngắn từ đến có độ dài Cập nhật giá trị d đỉnh lân cận Giải thuật Dijkstra 32 24 18 14 14 30 15 ∞ 44 11 5 16 20 44 15 19 ∞ Mở rộng cụm C, đường ngắn từ đến có độ dài 14 Cập nhật giá trị d đỉnh lân cận với Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 13 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra 32 24 18 14 14 30 15 ∞ 35 11 5 16 20 19 59 44 15 Mở rộng cụm C, đường ngắn từ đến có độ dài 15 Cập nhật giá trị d đỉnh lân cận với Giải thuật Dijkstra 32 24 18 14 14 30 15 ∞ 34 11 5 16 20 44 15 19 51 Mở rộng cụm C, đường ngắn từ đến có độ dài 32, qua Cập nhật giá trị d đỉnh lân cận với Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 14 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra 32 24 18 14 14 30 15 45 34 11 5 16 20 19 50 44 15 Mở rộng cụm C, đường ngắn từ đến có độ dài 34, qua 6,3 Cập nhật giá trị d đỉnh lân cận với Giải thuật Dijkstra 32 24 18 14 14 30 15 45 34 11 5 16 20 44 15 19 50 Mở rộng cụm C, đường ngắn từ đến có độ dài 45, qua 6,3,5 Cập nhật giá trị d đỉnh lân cận với Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 15 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra 32 24 18 14 14 30 15 45 34 11 5 16 20 19 50 44 15 Mở rộng cụm C, đường ngắn từ đến có độ dài 50, qua 1,6,3,5 Giải thuật Dijkstra 32 24 18 14 14 30 15 45 34 11 5 16 20 44 15 19 50 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 16 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Giải thuật Dijkstra Algorithm Dijkstra(G, s) {Sử dụng hai mảng trung gian D P gồm n phần tử Với n số đỉnh đồ thị D[i] chứa khoảng cách từ đỉnh s đến đỉnh i, P[i] chứa đỉnh trước i đường ngắn từ s đến i thời điểm Kết thúc giải thuật, thông tin đường ngắn từ đỉnh s đến đỉnh khác nằm P, độ dài đường nằm D} {Khởi tạo D P} for each đỉnh v G begin D[v] = ∞; P[v] = Null; end D[s] = 0; Q = V ; While (Q ≠ rỗng) begin Xác định đỉnh u Q mà D[u] có giá trị nhỏ ; Q= Q – {u}; Với đỉnh w lân cận u mà w nằm Q temp= D[u] + weight(u,w) ; If (temp < D[w] ) then begin D[w] = temp; P[w] = u; end; end Bài tốn bao đóng truyền ứng z Mục tiêu: – z Hướng giải quyết: – – z Xác định xem có đường cặp đỉnh đồ thị G(V,E) cho trước hay không Sử dụng ma trận lân cận Xác định ma trận đường Giải thuật: Floyd-Washall Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 17 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Bài tốn bao đóng truyền ứng z Ma trận đường đồ thị – Ma trận đường P có kích thước nxn, xác định sử dụng công thức P = A∨ A (2) ∨ A (3) ∨ ∨ A (n) Nếu Pij = tồn đường từ đỉnh i đến đỉnh j z Nếu Pij = khơng tồn đường từ i đến j đồ thị G(V,E) Ma trận đường P ma trận lân cận đồ thị G’ cung G’ có mối quan hệ liên thông đỉnh G’ gọi bao đóng truyền ứng G z – – Bài tốn bao đóng truyền ứng z Giải thuật xác định ma trận đường đồ thị Procedure FLOYD-WARSHALL(A,P,n) P:= A; for k:= to n for i:=1 to n for j:=1 to n P[i,j] := P[i,j] OR (P[i,k] AND P[k,j]); return Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 18 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Bài toán bao đóng truyền ứng z A ( 2) Ví dụ: Cho đồ thị G ma trận lân cận A ⎡0 ⎢1 ⎢ = A∧ A = ⎢0 ⎢ ⎣1 ⎡0 1 ⎤ ⎢0 1 ⎥ ⎥ A=⎢ ⎢1 0 ⎥ ⎢ ⎥ ⎣0 1 ⎦ 1 0⎤ ⎥ 1 0⎥ 1⎥ ⎥ 1 0⎦ A ( 3) = A∧ A ( 2) ⎡1 ⎢1 =⎢ ⎢0 ⎢ ⎣1 1 0⎤ ⎥ 1 1⎥ 1 0⎥ ⎥ 1 1⎦ Bài tốn bao đóng truyền ứng A ( 4) = A∧ A ( 3) ⎡1 ⎢1 ⎢ = ⎢1 ⎢ ⎣1 1 1 1 1 1⎤ ⎥ 1⎥ 0⎥ ⎥ 1⎦ ⎡1 ⎢1 P=⎢ ⎢1 ⎢ ⎣1 1 1⎤ ⎥ 1 1⎥ 1 1⎥ ⎥ 1 1⎦ Ma trận đường P chứa giá trị 1, chứng tỏ ma trận cho, đỉnh tồn đường Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 19 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Bài toán xếp Topo z Thứ tự phận (Partial Order) quan hệ có tính chất sau – – – z Tính bắc cầu: x
Ngày đăng: 30/01/2020, 21:08
Xem thêm: cấu trúc dữ liệu va giải thuật đỗ bích diệp ch8 p2 đô thị (phan 2) sinhvienzone com