Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
265,5 KB
Nội dung
Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 1 Đỗ Bích Diệp - Khoa CNTT Cấutrúcdữ liệuvàGiảithuật Chương VIII: CấutrúcĐồ thị ORD DFW SFO LAX 8 0 2 1 7 4 1 8 4 3 12 33 3 3 7 Đỗ Bích Diệp - Khoa CNTT Chương VIII: Đồ thị z Nội dung 1. Các khái niệmcơ bản 2. Biểudiễn đồ thị 1. Ma trậnlâncận 2. Danh sách lân cận 3. Duyệt đồ thị 4. Bàitoánápdụng 1. Tìm cây khung cựctiểu 2. Tìm đường đingắnnhất 3. Bài toán bao đóng truyền ứng 4. Bài toán sắpxếptôpô Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 2 Đỗ Bích Diệp - Khoa CNTT Đồ thị – Một đồ thị G = (V, E) trong đó z V: tậpcácđỉnh (vertices) z E: tập các cung (edges) nốicácđỉnh trong V – Một cung e = (u,v) là mộtcặp đỉnh – Ví dụ: a b d c e V= {a,b,c,d,e} E= {(a,b),(a,c),(a,d), (b,e),(c,d),(c,e), (d,e)} Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan – Đồ thị có hướng và Đồ thị vô hướng 12 34 12 3 4 5 Trong một cung, thứ tự của các đỉnh là quan trọng Cung (u,v) khác với cung (v,u) Trong một cung, thứ tự của các đỉnh là không quan trọng Cung (u,v) cũng giống như cung (v,u ) Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 3 Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Bậccủamột đỉnh (Degree): Là số cung kề với đỉnh – Trong một đồ thị có hướng, một đỉnh có thể có z Bậc trong (in-degree) z Bậc ngoài (out-degree) – Ví dụ: z Đỉnh 1 có bậc3 z Đỉnh 1 có bậc trong là 1 và bậc ngoài là 2 12 34 Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đỉnh lân cận (Adjacent vertices) – Trong đồ thị z 1, 2 là lân cậncủanhau z 1,3 là lân cậncủanhau z …. z Cung kề (Incident edges) – Nếu có cung (u,v) thì cung này là cung kề của hai đỉnh u và v 12 34 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 4 Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đường đi – Dãy các đỉnh v 1 ,v 2 ,. . .v k mà tồntại cung (v i , v i+1 ) trong đồ thị ( i = 1 k-1) z Đường đi đơn – Đường đivớicácđỉnh không lặplại z Chu trình – Đường đi đơnvới đỉnh đầuvàcuối trùng nhau z Độ dài đường đi – Số cung trên đường đi z Đồ thị con 12 34 Path : 1, 2, 4, 3, 1, 4 Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đồ thị liên thông (Connected Graph) 12 3 4 5 12 34 Đồ thị liên thông 12 3 12 3 4 5 Đồ thị không liên thông Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 5 Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đồ thị trọng số (Weight Graph) 12 34 5 60 100100 110 140 Đỗ Bích Diệp - Khoa CNTT Kiểudữ liệutrừutượng Đồ thị z Dữ liệu: Mộttập không rỗng các đỉnh chứacácphầntử có kiểunhất định, mộttập không rỗng các cung có thể biểudiễncácphầntử có kiểunhất định z Các thao tác cơ bản – Graph create() – insertVertex( o) – insertEdge(u, v, o) – removeVertex(v) – removeEdge(e ) – endVertices(e) – opposite(v, e) – areAdjacent(v, w) – adjacentVertices(v) – incidentEdges(v) – vertices() – edges() – numVertices() – numEdges() Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 6 Đỗ Bích Diệp - Khoa CNTT Mộtsố tính chấtcủa đồ thị 1. Nếumột đồ thị G có m cung thì tổng bậccủa các đỉnh trong G sẽ là 2m 2. Nếumột đồ thị có hướng có m cung thì tổng bậc trong củacácđỉnh , tổng bậc ngoài củacácđỉnh đềulàm 3. Nếu đồ thị G là đồ thịđơngiản, G có n đỉnh và m cung thì 1. NếuG làđồ thị vô hướng m ≤ n(n-1)/2 2. NếuG làđồ thị có hướng thì m ≤ n(n-1) Đỗ Bích Diệp - Khoa CNTT Biểudiễn đồ thị – Biểudiễnbằng ma trậnlâncận z Đánh số các đỉnh trong tậpV từ 1 đếnn z Ma trậnbiểudiễn đồ thị A (n x n) – A ij = 1 nếu trong G tồntại cung (i,j) – A ịj = 0 nếu trong G không tồntại cung đó z Với đồ thị vô hướng thì nếuA ij = 1 thì A ji = 1 z A đượcgọilàma trậnlâncậncủaG Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 7 Đỗ Bích Diệp - Khoa CNTT Biểudiễn đồ thị bằng ma trậnlâncận z Ví dụ 12 34 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 0110 0011 1000 1010 12 3 4 5 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 01001 10100 01011 00101 10110 Đỗ Bích Diệp - Khoa CNTT Biểudiễn đồ thị bằng danh sách lân cận – Biểudiễnbằng danh sách lân cận z Mỗi đỉnh trong đồ thị sẽứng vớimột danh sách móc nốichứa các đỉnh lân cậncủanó z Mỗi nút trong danh sách có quy cách – VERTEX chứagiátrị tương ứng vớisố thứ tự của đỉnh lân cận – LINK chứa con trỏ trỏ tới nút tiếp theo trong danh sách z Mỗidanhsáchnhư vậycómộtnútđầudanhsách z Các nút đầunàylàcácphầntử củamột vector V có kích thướcn. Phầntử V[i] ứng với danh sách lân cậncủanútthứ i LINKVERTEX Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 8 Đỗ Bích Diệp - Khoa CNTT Biểudiễn đồ thị bằng danh sách lân cận z Ví dụ z 1: (2,4) 2: (4) 3: (1, 2) 4: (2, 3) 12 34 V[1] V[2] V[3] V[4] 24 4 12 2 3 Đỗ Bích Diệp - Khoa CNTT Biểudiễn đồ thị bằng danh sách lân cận z 1: (2,3,5) 2: (1,3) 3: (1,2,4) 4: (3,5) 5: (1,4) 12 3 4 5 2 3 5 1 1 3 1 2 3 5 4 4 V[1] V[2] V[3] V[4] V[5] Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 9 Đỗ Bích Diệp - Khoa CNTT Phép duyệt đồ thị z Cho một đồ thị G(V,E) và một đỉnh v thuộcV. Duyệt đồ thị là thămmọi đỉnh liên thông vớiv – Có 2 phương pháp z Phương pháp duyệttheochiều sâu (Depth First Search) z Phương pháp duyệttheochiềurộng ( Breadth First Search) Đỗ Bích Diệp - Khoa CNTT Duyệt theo chiều sâu Algorithm DFS(G, v) Input đồ thị G và đỉnh bắt đầu duyệt v trong G Output đánh dấu các cung trong G trong phần đồ thị liênthôngvới đỉnh v thành hai loại cung khám phá (discovery edges) và cung quay lui (back edges) setLabel(v, VISITED) // đỉnh v đã đượcthăm for all e ∈ G.incidentEdges(v) if getLabel(e) = UNEXPLORED w ← opposite(v,e) if getLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) DFS(G, w) else setLabel(e, BACK) Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 10 Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều sâu DB A C E D B A C E D B A C E Cung khám phá Cung quay lui A Đỉnh đãthăm A Đỉnh chưathăm Cung chưathăm Bắt đầuxuấtpháttừ A Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều sâu DB A C E DB A C E DB A C E D B A C E Tấtcả các cung kề củaD đãduyệt Xét tiếpcáccung kề của đỉnh C [...]... L2 D C E D F Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 12 Cấu trúc dữ liệu và Giải thuật Duyệt đồ thị theo chiều rộng L0 L1 L0 L1 A B L2 C E L1 D A B C L2 F E D F A B L2 L0 C E D F Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều sâu Duyệt đồ thị theo chiều rộng trên đồ thị có hướng D E B C A Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 13 ... Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 11 Cấu trúc dữ liệu và Giải thuật Duyệt đồ thị theo chiều rộng Đỉnh chưa thăm Đỉnh đã thăm Cung chưa thăm Cung khám phá Cung quay lui A A L0 L1 L0 L1 B L0 C E D C E A B A L1 F A B F D C E D F Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều rộng L0 L1 L0 A B C E L0 L1 B L2 F L0 A B L2 D L1 C E D F L1 A C E F A B L2 D C E D F Đỗ Bích Diệp -. . .Cấu trúc dữ liệu và Giải thuật Duyệt đồ thị theo chiều sâu Duyệt theo chiều sâu trên đồ thị có hướng – Đi theo chiều của các cung trên đồ thị D E B C A Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều rộng Algorithm BFS(G, s) Q = một queue rỗng Q.enqueue(s) setLabel(s, VISITED) while not Q.isEmpty() . Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 1 Đỗ Bích Diệp - Khoa CNTT Cấutrúcdữ liệuvàGiảithuật Chương VIII: CấutrúcĐồ thị ORD DFW SFO LAX 8 0 2 1 7 4 1 8 4 3 12 33 3 3 7 Đỗ. đingắnnhất 3. Bài toán bao đóng truyền ứng 4. Bài toán sắpxếptôpô Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 2 Đỗ Bích Diệp - Khoa CNTT Đồ thị – Một đồ thị G = (V, E). Graph) 12 3 4 5 12 34 Đồ thị liên thông 12 3 12 3 4 5 Đồ thị không liên thông Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 5 Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đồ thị trọng