1. Trang chủ
  2. » Giáo án - Bài giảng

WM cấu trúc dữ liệu va giải thuật đỗ bích diệp ch8 p2 đô thị (phan 2) sinhvienzone com

23 41 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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 Si nh Vi en Zo ne C om 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 3 6 4 5 Cây khung Cây khung Si nh Vi en Zo ne C om Đồ thị 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ó Si nh Vi en Zo ne C om – 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 Si nh Vi en Zo ne C om 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 Bước 7Cây khung cực tiểu Si nh Vi en Zo ne C om Đồ thị ban đầ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 Si nh Vi en Zo ne C om 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 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 3: Chọn (6,1) Si nh Vi en Zo ne C om Bước 2: Từ 2, có cung (2,6) , (4,7), (4,3) Chọn (2,6) có đưa vào khung 16 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 7 Si nh Vi en Zo ne C om 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) ); Si nh Vi en Zo ne C om 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 cịn 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 tố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 – Si nh Vi en Zo ne C om – 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 Si nh Vi en Zo ne C om 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 ∞ Si nh Vi en Zo ne C om ∞ 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 Si nh Vi en Zo ne C om 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 Si nh Vi en Zo ne C om 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 Si nh Vi en Zo ne C om 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 Si nh Vi en Zo ne C om 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; Si nh Vi en Zo ne C om end Bài toá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 – Si nh Vi en Zo ne C om – 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 tốn bao đóng truyền ứng z ⎡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⎦ Si nh Vi en Zo ne C om A ( 2) Ví dụ: Cho đồ thị G ma trận lân cận A 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 – – – Một tập S có phần tử mà phần tử có thứ tự phận S gọi Tập có thứ tự phận Si nh Vi en Zo ne C om z Tính bắc cầu: x

Ngày đăng: 30/01/2020, 21:08

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN