Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
1,48 MB
Nội dung
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