Nhằm giúp các bạn có thêm tài liệu phục vụ nhu cầu học tập và nghiên cứu về Công nghệ thông tin, mời các bạn cùng tham khảo nội dung Bài giảng Cấu trúc dữ liệu - Chương 6: Đồ thị dưới đây. Nội dung bài giảng cung cấp cho các bạn những kiến thức về đồ thị, khái niệm về đồ thị, biểu diễn đồ thị, phép duyệt đồ thị và tìm đường đi ngắn nhất. Hy vọng đây là tài liệu tham khảo hữu ích cho các bạn.
CHƯƠNG ĐỒ THỊ Chương 6: Đồ thị 6.1 Định nghĩa khái niệm 6.2 Biểu diễn đồ thị 6.3 Phép duyệt đồ thị 6.4 Tìm đường ngắn 6.1-Định nghĩa khái niệm Đồ thị cấu trúc rời rạc gồm đỉnh cạnh (vơ hướng có hướng) nối đỉnh Nhiều tốn thuộc lĩnh vực khác giải mơ hình đồ thị: biểu diễn cạnh tranh loài mơi trường sinh thái, hai máy tính có nối với đường truyền thơng hay khơng tìm đường ngắn hai thành phố, lập lịch thi, phân chia kênh cho đài truyền hình … 6.1-Định nghĩa khái niệm Khi mơ hình hố đồ thị: đỉnh biểu thị đối tượng xem xét (người, tổ chức, địa danh, ), cạnh đồ thị đoạn thẳng (hoặc cong) hay mũi tên nối số điểm với nhau, tượng trưng cho quan hệ đối tượng Các loại đồ thị : Một đơn đồ thị G = (V, E) gồm tập khác rỗng V mà phần tử gọi đỉnh tập E cạnh gồm cặp khơng có thứ tự đỉnh phân biệt 6.1-Định nghĩa khái niệm Một đơn đồ thị có hướng G = (V, E) gồm tập khác rỗng V mà phần tử gọi đỉnh tập E cặp có thứ tự gồm phần tử khác V gọi cung Một đa đồ thị G = (V, E) giống đơn đồ thị, có cạnh bội (có nhiều hai cạnh tương ứng với cặp đỉnh) khun (cạnh nối đỉnh với nó) 6.1-Định nghĩa khái niệm v1 v2 v3 v4 v5 v6 6.1-Định nghĩa khái niệm Các thuật ngữ đồ thị : Hai đỉnh u v đồ thị (vô hướng) G=(V,E) gọi liền kề (u,v)∈E Nếu e = (u,v) e gọi cạnh liên thuộc với đỉnh u v Cạnh e gọi cạnh nối đỉnh u v Các đỉnh u v gọi điểm đầu mút cạnh e Bậc đỉnh v đồ thị G=(V,E), ký hiệu deg(v), số cạnh liên thuộc với Khun đỉnh tính hai lần cho bậc Đỉnh v gọi đỉnh treo deg(v)=1 gọi đỉnh cô lập deg(v)=0 6.1-Định nghĩa khái niệm v1 v2 v3 v4 v5 v6 v7 6.1-Định nghĩa khái niệm Bậc vào (t.ư bậc ra) đỉnh v đồ thị có hướng G, ký hiệu degt(v) (t.ư dego(v)), số cung có đỉnh cuối (đỉnh đầu) v Đỉnh có bậc vào bậc gọi đỉnh lập Đỉnh có bậc vào bậc gọi đỉnh treo, cung có đỉnh cuối đỉnh treo gọi cung treo Cho G =(V, E) đồ thị có hướng Khi ∑ deg (v) = ∑ deg v∈V t v∈V o (v) =| E | 6.2- Biểu diễn đồ thị 621 Ma trận kề: Cho đồ thị vô hướng G=(V,E), v1, v2, , đỉnh e1, e2, , em cạnh G Ma trận kề G ma trận A = {( aij ) : i, j = 1,2, , n } aij cạnh (i,j)∈ E ngược lại Rõ ràng ma trận kề đồ thị vơ hướng đối xứng Ngồi ra, aij gán số gọi trọng số Lúc đó, ta có ma trận trọng số Nhược điểm phải dùng n2 đơn vị nhớ để lưu trữ ma trận kề 10 6.2- Biểu diễn đồ thị v1 e6 v2 e3 e1 e4 v3 e5 e2 0 0 0 1 0 0 1 0 1 1 1 0 v4 v5 Ví dụ: Ma trận kề đồ thị 11 6.2- Biểu diễn đồ thị 622 Danh sách kề: Mỗi đỉnh v đồ thị có danh sách lưu trữ đỉnh kề với nó, ký hiệu Ke(v): Ke(v)={ u∈V: (v,u)∈E} Người ta dùng mảng danh sách liên kết cho Ke(v) Chúng ta phải dùng m+n đơn vị nhớ để lưu trữ danh sách kề v1 e6 v2 e3 e1 e4 v3 e5 e2 v4 v5 12 6.3- Duyệt đồ thị Tìm kiếm theo chiều sâu: void main() { for v ∈ V chuaxet[v]:=true; for v ∈ V if (chuaxet[v]) then DFS(v); } void DFS(v) { thamdinh(v); chuaxet[v]:=false; for u ∈ Ke(v) if (chuaxet[u]) DFS(u); } 13 6.3- Duyệt đồ thị 10 11 12 13 Kết tìm kiếm theo chiều sâu: 1, 2, 10, 4, 3, 5, 8, 6, 7, 9, 12, 11, 13 14 6.3- Duyệt đồ thị Đặc điểm: - Mỗi đỉnh thăm lần - Mỗi lần quay chương trình chính, thuật tốn se tạo thành phần liên thơng - Độ phức tạp thuật tốn O(n+m) 15 6.3- Duyệt đồ thị Tim kiem theo chieu rong: void main() { for (v ∈ V) chuaxet[v]:=true; for (v ∈ V) if (chuaxet[v]) BFS(v); } 16 6.3- Duyệt đồ thị void BFS(v) { Queue:=∅; Queue v; (*nap v vao Queue *) chuaxet[v]:=false; while (Queue ≠ ∅) { p Queue; thamdinh(p); for (u ∈ Ke(p)) if (chuaxet[u]) {Queue u; chuaxet(u):=false;} } } 17 6.4- Đường ngắn Đường độ dài n từ đỉnh u đến đỉnh v, với n số nguyên dương đồ thị G=(V,E) dãy cạnh (hoặc cung) e1, e2, , en đồ thị cho e1=(x0,x1),e2=(x1,x2), ,en=(xn-1,xn), với x0=u xn=v Trong đồ thị đơn, ta ký hiệu đường dãy đỉnh x0, x1, , xn Nếu cung đặt tương ứng số thực a(xi,xj) gọi trọng số, lúc độ dài đường là: Σa(xi-1,xj) với i=1 đến n 18 6.4- Đường ngắn Thuật toán Dijkstra: -Đầu vào: Đồ thị G=(V,E) biểu diễn ma trận trọng số a[u,v] với u,v ∈ V -Điều kiện: a[u,v] >= -Đầu ra: Khoảng cách từ đỉnh s (đỉnh bắt đầu cho trước) đến tất đỉnh lại ký hiệu d[v] truoc[v] ghi nhận đỉnh trước v đường ngắn từ s đến v -Ký hiệu: T tập hợp chứa đỉnh có nhãn tạm thời 19 6.4- Đường ngắn void dijkstra() {for (v ∈ V) {d[v]=a[s,v]; truoc[v]=s;} d[s]=0; T= V \ {s}; while (T≠∅) {tìm đỉnh u ∈ T thỏa mãn d[u]=min{d[z]: z ∈ T} T= T \ {u}; //cố định nhãn đỉnh u 20 6.4- Đường ngắn for (v ∈ T ) //gán nhãn lại cho đỉnh T if (d[v]>d[u]+a[u,v]) { d[v]=d[u]+a[u,v]; truoc[v]=u; } } } 21 6.4- Đường ngắn 1 1 4 22 6.4- Đường ngắn Bước lặp đỉnh đỉnh đỉnh đỉnh đỉnh đỉnh khởi tạo 0,1 1,1* ∞,1 ∞,1 ∞,1 ∞,1 - - 6,2 3,2* ∞,1 8,2 - - 4,4* - 7,4 8,2 - - - - 7,4 5,3* - - - - 6,6* - -viết d[v], truoc[v] -đỉnh có * chọn để cố dịnh nhãn bước lặp xét, nhãn khơng bị biến đổi bước Độ phức tạp thuật toán O(mlogn) 23 Bài tập Bài 1: Viết chương trình nhập đồ thị từ bàn phím lưu trữ dạng ma trận kề Bài 2: Viết chương trình chuyển CTDL biểu diễn đồ thị từ ma trận kề sang danh sách kề ngược lại Bài 3: Viết chương trình liệt kê tất đỉnh đồ thị thuật toán duyệt theo chiều sâu, duyệt theo chiều rộng Bài 4: Viết chương trình nhập đồ thị đỉnh đường ngắn đỉnh 24 ... đỉnh đỉnh đỉnh khởi tạo 0,1 1,1* ∞,1 ∞,1 ∞,1 ∞,1 - - 6,2 3,2* ∞,1 8,2 - - 4,4* - 7,4 8,2 - - - - 7,4 5,3* - - - - 6,6* - -viết d[v], truoc[v] -? ?ỉnh có * chọn để cố dịnh nhãn bước lặp xét, nhãn.. .Chương 6: Đồ thị 6.1 Định nghĩa khái niệm 6.2 Biểu diễn đồ thị 6.3 Phép duyệt đồ thị 6.4 Tìm đường ngắn 6. 1-? ?ịnh nghĩa khái niệm Đồ thị cấu trúc rời rạc gồm đỉnh cạnh... 23 Bài tập Bài 1: Viết chương trình nhập đồ thị từ bàn phím lưu trữ dạng ma trận kề Bài 2: Viết chương trình chuyển CTDL biểu diễn đồ thị từ ma trận kề sang danh sách kề ngược lại Bài 3: Viết chương