Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 6 Graph Tài Liệu Bao Gồm 6 Chapter Mong các bạn theo dõi đầy đủ để đạt kết quả cao . Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI
Chương Đồ thị Nội dung Định nghĩa Các khái niệm Biểu diễn đồ thị máy tính Các thuật tốn tìm kiếm đồ thị Bài tốn tìm đường ngắnnhất đồ thị Duyệt đồ thị Định nghĩa G=< V, E> V tập đỉnh ( vertices) E tập cạnh ( Edges) - tập cặp (u,v) mà u,v hai đỉnh thuộc V Biểu diễn đồ thị Biểu diễn đồ thị Danh sách kề Ma trận kề Ma trận trọng số Ma trận liên thuộc Biểu diễn đồ thị 1.1 Danh sách liền kề - Danh sách liền kề mợt cách biểu diễn đồ thị khơng có cạnh bội cách liệt kê tất đỉnh nối với đỉnh đồ thị Biểu diễn đồ thị 1.1 Danh sách liền kề Ví dụ: Danh sách liền kề đồ thị vô hướng G Đỉnh Đỉnh liền kề 3,2 1,3,5 1,2,4 3,5,6 2,4,6 4,5 Biểu diễn đồ thị 1.1 Danh sách liền kề Ví dụ: Danh sách liền kề đồ thị có hướng G1 Đỉnh đầu Đỉnh cuối 2,3 4,6 Biểu diễn đồ thị 1.2 Ma trận liền kề Xét đơn đồ thị vô hướng G=(V,E), với tập đỉnh V={v1, v2, ,vn } tập cạnh E = {e1, e2, , em } Ma trận liền kề AG đồ thị G ma trận 0-1 vuông cấp nxn AG = (aij), đó: aij = 1, (vi,vj) mợt cạnh G 0,nếu khơng có cạnh nối đỉnh vi với vj Biểu diễn đồ thị 1.2 Ma trận liền kề Ví dụ: Ma trận liền kề đơn đồ thị vô hướng G 4 1 1 1 0 1 0 0 1 1 1 0 1 1- Dòng, cợt đối xứng qua đường chéo 2- Tổng giá trị mợt dòng (cợt) số bậc đỉnh i Bài toán đường ngắn 2.2 Thuật tốn Dijkstra Ví dụ 4: Cho đồ thị có trọng số G = (V, E), tìm đường ngắn A H B E 4 A b C H 2 4 D K G Bài toán đường ngắn 2.2 Thuật tốn Dijkstra Ví dụ 5: Tìm đường ngắn từ v1 đến đỉnh khác đồ thị có trọng số biểu diễn ma trận M hình bên v1 v2 v3 v4 v5 v6 v7 30 27 40 v7 50 26 70 22 40 v6 25 16 20 12 38 20 12 v1 v2 v3 v4 v5 73 22 10 Bài toán đường ngắn 2.3 Thuật tốn Floyd Giới thiệu Để tìm đường ngắn tất cặp đỉnh đồ thị G=(V,E), sử dụng thuật toán Floyd cơng bố năm 1962 Việc tìm đường ngắn dựa nguyên tắc sau: " Nếu k đỉnh nằm đường ngắn từ i đến j đoạn đường từ i đến k từ k đến j ngắn nhất" Ak[i,j]=min(Ak-1[i,j], Ak-1[i,k]+Ak-1[k,j]) Bài toán đường ngắn 2.3 Thuật toán Floyd BEGIN for i := to n for j := to n begin D[i,j] := C[i,j] ; P[i,j] := end ; for k := to n for i := to n for j := to n if D[i,k] + D[k,j] < D[i,j] then begin D[i,j] := D[i,k] + D[k,j] ; P[i,j] := k end END Bài toán đường ngắn 2.3 Thuật tốn Floyd Ví dụ: W= 2 D0 = 2 3 0 0 0 3 P= Bài toán đường ngắn 2 D1 = 3 2 3 2 3 0 P= D0 = 0 0 k=1 D1[2,3] = min( D0[2,3], D0[2,1]+D0[1,3] ) = (, 7) =7 P[2,3]=1 D1[3,2] = min( D0[3,2], D0[3,1]+D0[1,2] ) = (3,) =3 Bài toán đường ngắn D2 = P= 2 D1 = 3 1 2 3 0 0 0 k=2 D2[1,3] = min( D1[1,3], D1[1,2]+D1[2,3] ) = (5, 4+7) =5 D2[3,1] = min( D1[3,1], D1[3,2]+D1[2,1] ) = (, 3+2) =5 P[3,1] = 2 Bài toán đường ngắn 3 D3 = P= 1 2 D2 = 1 2 3 0 0 0 k=3 D3[1,2] = min(D2[1,2], D2[1,3]+D2[3,2] ) = (4, 5+3)) =4 D3[2,1] = min(D2[2,1], D2[2,3]+D2[3,1] ) = (2, 7+ 5) =2 Duyệt đồ thị 3.1 Giới thiệu Với mợt đồ thị có nhiều nút, việc kiểm tra tính liên thơng đồ thị tốn lớn, cần có cách thức để thực nhanh, xác Hai cách duyệt đồ thị phổ biến áp dụng: Duyệt đồ thị theo chiều sâu (Depth First Search - DFS) Duyệt đồ thị theo chiều rộng (Breadth First Search - BFS) DFS BFS Duyệt đồ thị 3.2 Duyệt đồ thị theo chiều sâu Xuất từ một đỉnh v đồ thị G, thực sau: Bước 1: đánh dấu v duyệt Bước 2: thực đánh dấu duyệt với đỉnh w chưa duyệt kề với v, Bước 3: làm lại bước tất đỉnh duyệt DFS Duyệt đồ thị 3.2 Duyệt đồ thị theo chiều sâu Ví dụ: Thực duyệt đồ thị theo chiều sâu đồ thị G đây: v1 v2 v3 v4 v5 v6 v7 v8 Bảng duyệt Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 v1 v2 v6 v3 v4 v8 v7 v5 Duyệt đồ thị 3.3 Duyệt đồ thị theo chiều rộng Xuất từ một đỉnh v đồ thị G, thực sau: Bước 1: đánh dấu duyệt cho một đỉnh v Bước 2: chọn đỉnh v duyệt có đỉnh kề chưa duyệt Việc chọn đỉnh v xét ưu tiên cho đỉnh đánh dấu duyệt sớm Bước 3: thực đánh dấu duyệt với tất đỉnh w kề với v, Bước 4: làm lại bước tất đỉnh duyệt BFS Duyệt đồ thị 3.3 Duyệt đồ thị theo chiều rộng Duyệt đồ thị 3.3 Duyệt đồ thị theo chiều rợng Ví dụ: Thực duyệt đồ thị theo chiều rộng đồ thị G đây: v1 v2 v3 v4 v5 v6 v7 v8 Bảng duyệt Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 v1 v2 v5 v6 v3 v7 v4 v8 Duyệt đồ thị 3.3 Duyệt đồ thị theo chiều rợng Ví dụ: Thực duyệt đồ thị theo chiều rộng đồ thị G đây: Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 ... (1,a)* B (0,-)* D A (1,a)* (6, b)* (12,d) Z 2 C E 10 (8,d) (2,a)* B (0,-)* d(E) =12 > d(D)+w(D,E) =6+ 2=8 d(Z) =∞ = d(D)+w(D,Z) =6+ 6=12 D (12,d) (11,e) Z 2 C (12,c) A (6, b)* (2,a)* 10 E (8,d)* d(Z)... Vẽ ma trận trọng số biểu diễn đồ thị vô hướng G v2 v1 v2 v3 v4 v5 v6 v4 v1 v6 v3 v5 v1 v2 6 v3 v4 v5 v6 Biểu diễn đồ thị 1.2 Ma trận trọng số Ví dụ: Lập ma trận trọng... toán đường ngắn 2.2 Thuật tốn Dijkstra Ví dụ 1: (1,a)* B (0,-)* D A (6, b)* (11,e)* Z 2 C (2,a)* 10 E (8,d)* Bài toán đường ngắn 2.2 Thuật toán Dijkstra Ví dụ 1: Lập bảng để giải tốn tìm đường