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,78 MB
Nội dung
Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 1 Cấutrúcdữ liệuvàGiảithuật Chương V: Đồ thị (phần2) Cây và Rừng trong lý thuyết đồ thị – Cây z Một đồ thị vô hướng liên thông z Không có chu trình – Rừng z Mộttậpcáccâyphân biệt Cây Rừng Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 2 Cây khung – Cho một đồ thị vô hướng, liên thông G z Cây khung trên G là cây có chứatấtcả các đỉnh trong G 1 2 3 6 5 4 1 2 3 6 5 4 1 2 3 6 5 4 Đồ thị Cây khung Cây khung Bài toán tìm cây khung cựctiểu z Cho một đồ thị vô hướng, liên thông có trọng số z Giá trị củamột cây khung là tổng trọng số củacáccung trong cây z Tìm một cây khung vớigiátrị nhỏ nhấttrênđồ thị 5 10 6 2 4 8 9 5 6 2 4 Đồ thịđầuvào Cây khung cựctiểu Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 3 Giảithuật Kruskal - MST z Ý tưởng – Lầnlượt thêm vào cây khung cần tìm các cung có trọng số nhỏ nhấtcóđượctạimộtthời điểmnếu cung đó không tạothànhchutrìnhtrênphầncây khung đang tạmcó Giảithuật Kruskal-MST 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Đồ thị ban đầu 1 2 3 6 5 4 7 Bước1 1 2 3 6 5 4 7 3 Bước2 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 4 Giảithuật Kruskal – MST 1 2 3 6 5 4 7 3 7 1 2 3 6 5 4 7 3 7 7 Bước4Bước3 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Đồ thị ban đầu Giảithuật Kruskal - MST 1 2 3 6 5 4 7 3 7 7 8 10 Bước6 1 2 3 6 5 4 7 3 7 7 8 Bước5 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Đồ thị ban đầu Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 5 Giảithuật Kruskal - MST 1 2 3 6 5 4 7 3 7 7 8 10 10 Bước7- Cây khung cựctiểu 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Đồ thị ban đầu Giảithuật Kruskal-MST Algorithm KRUSKAL(G) {đồ thị G có n đỉnh} 1. {Khởi tạo các cụm ban đầu, mỗi cụm chứa 1 đỉnh của đồ thị } for each vertex v in G do C(v) ← {v}. 2. Khởi tạo một Queue Q chứa các cung trong G, sắp xếp theo chiều tăng dần của trọng số. 3. {Khởi tạo cây khung ban đầu rỗng} T ←∅ 4. {Lần lượt xét các cung đưa vào trong cây khung cần tìm} while T chứa ít hơn n-1 cung do begin Lấy ra từ Q cung (u,v) có trọng số nhỏ nhất C(v) là cụm chứa v, C(u) là 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 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 6 GiảithuậtPrim -MST z Ý tưởng z Xây dựng một cây khung bắt đầutừ một đỉnh xuấtphát z Thời điểm ban đầu, đỉnh xuấtphátlàđỉnh duy nhất trong mộtcụmC z Từng bướcthêmvàocụmC một đỉnh w đang ở ngoài C mà w có nốivới1 đỉnh u trong C thông qua mộtcung (u,w) có giá trị nhỏ nhấttạithời điểm đó. GiảithuậtPrim -MST 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Đỉnh xuấtphátđượcchọn Là đỉnh số 2 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Bước1: Từ 2 có cung (2, 4) , (2,6) đềucótrọng số 10. Chọn (2,4) cho thêm vào cây khung Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 7 GiảithuậtPrim -MST 10 1 2 3 6 5 4 7 7 14 3 7 8 12 10 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Bước2: Từ 2, 4 có các cung (2,6) , (4,7), (4,3) Chọn (2,6) có đưa vào cây khung Bước3: Chọn (6,1) GiảithuậtPrim -MST 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 Bước4: Chọn (1, 3) Bước5: Chọn (1, 7) Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 8 GiảithuậtPrim -MST 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 Bước6: Chọn (7,5). Tấtcả các đỉnh trong đồ thịđều đã có trong cây khung GiảithuậtPrim -MST Algorithm PRIM_MST(G, v) 1. {Khởi tạo cây khung ban đầu , chứa đỉnh v} T ← {v} 2. Q = V – {v} ; {Q là tập các đỉnh chưa ở trong cây khung} 3. { Thiết lập một mảng d chứa các giá trị trọng số của các cung để tiến hành chọn cung có giá trị nhỏ nhất nối một đỉnh trong cây với một đỉnh ngoài cây tại từng bước} d[v] = 0; for all w ∈ Q do begin if (tồn tại cung (v,w) ) then d[w] = weight(v,w); else d[w] = ∞; end Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 9 GiảithuậtPrim -MST 4. {Lần lượt lựa chọn đỉnh đưa vào trong cây khung} While ( Q ≠ rỗng) do begin 4.1 Xác định đỉnh u trong Q mà d[u] = min{d[w] | w ∈ Q} ; 4.2 Xác định cung (r,u) với r trong T và weight(r,u) = d[u]; 4.3 T ← {(r,u)} ; Q = Q – {u}; {cập nhật lại các giá trị được lưu trong mảng d sau khi đã thêm u vào trong cây khung, mảng d mới sẽ tiếp tục sử dụng trong bước lựa chọn tiếp theo} 4.4 for all w ∈ Q do d[w] = min (d[w], weight(u,w) ); End; Bài toán tìm đường đingắnnhất – Tìm đường đingắnnhấtgiữa1 cặp đỉnh (i,j) – Tìm đường đingắnnhấttừ 1 đỉnh nguồntớitất cả các đỉnh còn lại – Tìm đường đingắnnhấtgiữamọicặp đỉnh Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 10 Giảithuật Dijkstra – Đặctrưng z Giảiquyết bài toán tìm đường đingắnnhấtgiữa1 cặp đỉnh và bài toán tìm đường đingắnnhấttừ mộtnguồn tớimọi đích z Chỉ áp dụng trên đồ thị có trọng số dương – Ý tưởng: z Vớimỗi đỉnh v sẽ duytrìcácthôngsố sau – D[v] : Khoảng cách ngắnnhấtbiết đượctạithời điểmhiện tạitừđỉnh nguồns tới đỉnh v. – P[v] : Đỉnh trướccủa đỉnh v trên đường đitừđỉnh nguồns tớiv Giảithuật Dijkstra – Thựchiện z Duy trì mộtcụmC chứacácđỉnh, cụmnàylúcđầuchứa đỉnh xuấtphátđã cho. Dầndầnthêmcácđỉnh vào trong cụm z Tạimỗibướccủagiáithuật – xác định đỉnh u chưa ở trong C có giá trị d[u] nhỏ nhất đưa vào trong C. – Cậpnhậtlạigiátrị d củacácđỉnh lân cậncủau. [...]... Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 15 Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 0 1 32 2 9 18 14 14 6 2 6 30 15 3 24 45 34 11 5 5 4 6 16 20 7 19 8 50 44 15 Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 8 có độ dài 50, đi qua 1,6,3,5 Giải thuật Dijkstra 9 0 1 32 2 9 18 14 14 30 45 34 11 5 5 16 20 7 15 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 6 2 6 15 3 24 44 4 19 6 8 50 16 Cấu trúc dữ liệu và Giải thuật. . .Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh khác 2 9 3 24 1 18 14 6 30 15 6 2 11 5 5 4 6 16 20 7 19 8 44 Giải thuật Dijkstra ∞ 0 1 ∞ 2 9 18 ∞ 14 30 15 ∞ ∞ 11 5 5 16 20 7 6 2 6 ∞ 3 24 4 19 6 44 8 ∞ Khởi tạo các giá trị d cho tất cả các đỉnh Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 11 Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra ∞ 0 1 ∞ 2 9 18... Dijkstra ∞ 0 1 ∞ 2 9 18 ∞ 14 6 2 6 30 Khởi tạo C 15 3 24 ∞ ∞ 11 5 5 4 6 16 20 7 19 8 44 ∞ ∞ Giải thuật Dijkstra 9 0 1 ∞ 2 9 18 14 14 30 ∞ ∞ 11 5 5 16 20 7 15 6 2 6 15 3 24 44 4 19 6 8 ∞ Cập nhật các giá trị d [2] = 9, d[6] = 14, d[7] = 15 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 12 Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 0 1 33 2 9 18 14 14 6 2 6 30 15 3 24 ∞ ∞ 11 5 5 4 6 16 20 7 19 8 44 ∞ 15 Mở rộng... từ 1 đến 2 có độ dài 9 Cập nhật giá trị d của các đỉnh lân cận của 2 Giải thuật Dijkstra 9 0 1 32 2 9 18 14 14 30 ∞ 44 11 5 5 16 20 7 15 6 2 6 15 3 24 44 4 19 6 8 ∞ Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 6 có độ dài 14 Cập nhật giá trị d của các đỉnh lân cận với 6 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 13 Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 0 1 32 2 9 18 14 14 6 2 6 30 15 3 24 ∞ 35 11... trữ trong một vector và mỗi nút có 2 trường Trường LINK Trường COUNT: lưu trữ số cung đi tới đỉnh đó Bài toán sắp xếp Topo 1 0 1 3 V[3] 1 1 6 V[5] 1 6 V[6] 6 6 V[4] 5 2 V [2] 3 4 V[1] 2 3 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 5 4 22 Cấu trúc dữ liệu và Giải thuật Bài toán sắp xếp Topo Procedure TOPO-ORDER(V,n) Giải if COUNT(V[i]) = 0 then nạp i vào trong Q; thuật 1 for i:=1 to n do 2 Repeat Đưa đỉnh j ở... 16 20 7 19 8 59 44 15 Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 7 có độ dài 15 Cập nhật giá trị d của các đỉnh lân cận với 7 Giải thuật Dijkstra 9 0 1 32 2 9 18 14 14 30 ∞ 34 11 5 5 16 20 7 15 6 2 6 15 3 24 44 4 19 6 8 51 Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 3 có độ dài 32, đi qua 6 Cập nhật giá trị d của các đỉnh lân cận với 3 Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 14 Cấu trúc dữ liệu và Giải thuật. .. P[i,j] OR (P[i,k] AND P[k,j]); 3 return Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 18 Cấu trúc dữ liệu và Giải thuật Bài toán bao đóng truyền ứng Ví dụ: Cho đồ thị G và ma trận lân cận A 1 3 A ( 2) ⎡0 1 0 1 ⎤ ⎢0 1 1 0 ⎥ ⎥ A=⎢ ⎢1 0 0 0 ⎥ ⎢ ⎥ ⎣0 1 1 0 ⎦ 2 4 ⎡0 ⎢1 ⎢ = A∧ A = ⎢0 ⎢ ⎣1 1 1 0⎤ ⎥ 1 1 0⎥ 1 0 1⎥ ⎥ 1 1 0⎦ A ( 3) = A∧ A ( 2) ⎡1 ⎢1 =⎢ ⎢0 ⎢ ⎣1 1 1 0⎤ ⎥ 1 1 1⎥ 1 1 0⎥ ⎥ 1 1 1⎦ Bài toán bao đóng truyền ứng A ( 4)... là Tập có thứ tự bộ phận Bài toán sắp xếp Topo Sắp xếp tô pô là bài toán đặt ra trên một tập có thứ tự bộ phận – Mục đích: Sắp xếp các phần tử trong tập đã cho theo một thứ tự tuyến tính sao cho thứ tự bộ phận vẫn đảm bảo Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 20 Cấu trúc dữ liệu và Giải thuật Bài toán sắp xếp Topo Biểu diễn tập có thứ tự bộ phận bằng 1 đồ thị có hướng – – – Mỗi phần tử của tập S là một... đỉnh trong đồ thị G(V,E) cho trước hay không Hướng giải quyết: – – Sử dụng ma trận lân cận Xác định ma trận đường đi Giải thuật: Floyd-Washall Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 17 Cấu trúc dữ liệu và Giải thuật Bài toán bao đóng truyền ứng Ma trận đường đi của một đồ thị – Ma trận đường đi P có kích thước nxn, được xác định sử dụng công thức P = A∨ A – – (2) ∨ A (3) ∨ ∨ A (n) Nếu Pij = 1 thì tồn tại một... bộ các cung xuất phát từ nó Với đồ thị còn lại, lặp lại 2 bước trên Công việc kết thúc khi tất cả các đỉnh được đưa ra sắp xếp Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 21 Cấu trúc dữ liệu và Giải thuật Bài toán sắp xếp Topo Để cài đặt việc sắp xếp trên, ta cần biết – – – Số các cung đi đến một đỉnh Đỉnh được chọn có giá trị này là 0 Các đỉnh lân cận của một đỉnh Lưu trữ đồ thị bằng danh sách lân cận với một . Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 1 Cấutrúcdữ liệuvàGiảithuật Chương V: Đồ thị (phần2 ) Cây và Rừng trong lý thuyết đồ thị – Cây z Một đồ thị vô hướng. nhấttrênđồ thị 5 10 6 2 4 8 9 5 6 2 4 Đồ thị ầuvào Cây khung cựctiểu Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 3 Giảithuật Kruskal - MST z Ý tưởng – Lầnlượt thêm vào cây. tạothànhchutrìnhtrênphầncây khung đang tạmcó Giảithuật Kruskal-MST 1 2 3 6 5 4 7 7 14 3 7 10 8 12 10 16 Đồ thị ban đầu 1 2 3 6 5 4 7 Bước1 1 2 3 6 5 4 7 3 Bước2 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa