Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 14: Đồ Thị (1/2) - Hoàng Thị Điệp
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 14: Đồ Thị (1/2) - Hoàng Thị Điệp", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_cau_truc_du_lieu_va_giai_thuat_bai_14_do_thi_12_ho.pdf
Nội dung text: Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 14: Đồ Thị (1/2) - Hoàng Thị Điệp
- Bài 14: Đồ thị (1/2) Giảng viên: Hoàng Thị Điệp Khoa Công nghệ Thông tin – Đại học Công Nghệ Cấu trúc dữ liệu và giải thuật HKI, 2013-2014
- Nội dung chính 1. Đồ thị và các khái niệm liên quan 2. Cài đặt đồ thị Tìm đường đi ngắn nhất Từ một đỉnh nguồn 3. Một số bài toán tiêu Giữa mọi cặp đỉnh biểu Tìm cây bao trùm ngắn Đi qua/duyệt đồ thị nhất BFS, DFS Prim Sắp xếp topo trên đồ thị Kruskal định hướng không có 4. Đồ thị và C++ chu trình 2 diepht@vnu
- 1. Đồ thị và các khái niệm liên quan
- Không phải là Định nghĩa: Đồ thị đồ thị hàm số! Đồ thị là một mô hình toán học được sử dụng để biểu diễn một tập đối tượng có quan hệ với nhau theo một cách nào đó. Định nghĩa hình thức Đồ thị G được xác định bởi một cặp (V, E), trong đó V là tập đỉnh E là tập các cạnh nối cặp đỉnh E {(u,v) | u, v V} Đồ thị vô hướng ⊆ ∈ quan hệ định nghĩa bởi mỗi cạnh là quan hệ đối xứng E {{u,v} | u, v V} Đồ thị định hướng ⊆ ∈ (u, v) ≠ (v, u) 4 diepht@vnu
- 5 diepht@vnu
- Ví dụ: đồ thị vô hướng – định hướng Cầu Giấy Cầu Giấy ĐHQG BX Kim Mã ĐHQG BX Kim Mã Ngã tư Sở Ngã tư Sở 6 diepht@vnu
- Ví dụ Mạng vận tải (transportation networks) Mạng liên lạc (communication networks) Mạng thông tin (information networks) Mạng xã hội (social networks) Mạng phụ thuộc (dependency networks) Định hướng hay vô hướng? 7 diepht@vnu
- PVD ORD SFO LGA HNL LAX DFW MIA
- 10 diepht@vnu
- 11 diepht@vnu
- Nguồn: 12 diepht@vnu
- Định nghĩa: Đường đi Trong đồ thị vô hướng G=(V,E) Đường đi là dãy P các đỉnh v1, v2, , vk có tính chất 2 đỉnh liên tiếp vi, vi+1 được nối bởi 1 cạnh trong G. P được gọi là đường đi từ v1 đến vk Chu trình là đường đi v1, v2, , vk với k > 2 trong đó k-1 đỉnh đầu tiên phân biệt và v1 = vk Với đồ thị có hướng, trong một đường đi hay chu trình, 2 đỉnh liên tiếp (vi, vi+1) phải là một cung thuộc E 13 diepht@vnu
- Ví dụ: đồ thị có chu trình – không có chu trình 14 diepht@vnu
- Định nghĩa: Tính liên thông Đồ thị vô hướng liên thông nếu tồn tại đường đi từ u đến v với mọi cặp đỉnh (u, v) Đồ thị có hướng . liên thông yếu nếu đồ thị vô hướng nền tảng của nó là đồ thị liên thông . liên thông mạnh nếu tồn tại một đường đi từ u đến v và một đường đi từ v đến u với mọi cặp đỉnh (u, v) 15 diepht@vnu
- Ví dụ: đồ thị vô hướng liên thông – không liên thông 16 diepht@vnu
- Ví dụ: đồ thị có hướng liên thông mạnh - yếu - không liên thông 17 diepht@vnu
- Các khái niệm khác Khoảng cách giữa 2 đỉnh u, v là số cạnh trên đường đi ngắn nhất từ u đến v Cây trong lý thuyết đồ thị: là đồ thị vô hướng liên thông không chứa chu trình Đồ thị có/không có trọng số Đồ thị có/không có nhãn 18 diepht@vnu
- Ví dụ: đồ thị có trọng số - không trọng số Cầu Giấy Cầu Giấy 5 7 ĐHQG BX Kim Mã ĐHQG BX Kim Mã 11 15 Ngã tư Sở Ngã tư Sở 19 diepht@vnu
- 2. Cài đặt đồ thị
- Hai cách cơ bản biểu diễn đồ thị 0 1 0 1 2 3 4 0 0 1 0 1 0 1 0 0 1 0 1 2 2 1 0 0 1 1 3 0 0 0 0 0 3 4 4 0 0 0 1 0 0 1 3 1 2 4 2 0 3 4 3 4 Với đồ thị vô hướng? 3 21 diepht@vnu
- Cài đặt: Biểu diễn bằng ma trận kề 0 1 0 1 2 3 4 0 0 1 0 1 0 1 0 0 1 0 1 2 2 1 0 0 1 1 3 0 0 0 0 0 3 4 4 0 0 0 1 0 const int N = 5; typedef bool Graph[N][N]; Graph g1; g1[0][0] = 0; g1[0][1] = 1; 22 diepht@vnu
- Cài đặt: Biểu diễn bằng danh sách kề 0 1 0 1 3 1 2 4 2 2 0 3 4 3 4 3 4 3 struct Cell{ int vertex; Cell * next; }; const int N = 5; typedef Cell * Graph[N]; Graph g2; addFirst(g2[0], 3); addFirst(g2[0], 1); 23 diepht@vnu
- So sánh 2 phương pháp biểu diễn Các yếu tố cần xét Độ phức tạp thời gian của phép truy cập tới thông tin 1 cặp đỉnh u, v Độ phức tạp không gian biểu diễn đồ thị Độ phức tạp thời gian của phép khảo sát tập đỉnh kề với đỉnh u cho trước 24 diepht@vnu
- 3. Một số bài toán tiêu biểu
- Đi qua đồ thị theo bề rộng Sử dụng kĩ thuật tìm kiếm theo bề rộng Breadth-First Search Ý tưởng của tìm kiếm theo bề rộng xuất phát từ đỉnh v Từ đỉnh v ta lần lượt đi thăm tất cả các đỉnh u kề đỉnh v mà u chưa được thăm. Sau đó, đỉnh nào được thăm trước thì các đỉnh kề nó cũng sẽ được thăm trước. Quá trình trên sẽ được tiếp tục cho tới khi ta không thể thăm đỉnh nào nữa. 26 diepht@vnu
- Ví dụ BFS(1) 27 diepht@vnu
- BFS(v) Algorithm BFS(v) // Tìm kiếm theo bề rộng xuất phát từ v. Input: Đỉnh v chưa được thăm Khởi tạo hàng đợi Q rỗng; Đánh dấu đỉnh v đã được thăm; Q.enqueue(v) while Q.empty() ≠ TRUE w Q.dequeue() for (mỗi đỉnh u kề w) if ( u chưa được thăm) Đánh dấu u đã được thăm; Q.enqueue(u) 28 diepht@vnu
- Thuật toán đi qua đồ thị G theo bề rộng Algorithm BFSTraversal(G) // Đi qua đồ thị G=(V, E) theo bề rộng for (mỗi v ∈V) Đánh dấu v chưa được thăm; for (mỗi v ∈V) if (v chưa được thăm) BFS(v); Phân tích Ứng dụng Vấn đề đạt tới: Giả sử v và w là hai đỉnh bất kỳ, ta muốn biết từ đỉnh v có đường đi tới đỉnh w hay không? Tính liên thông và thành phần liên thông của đồ thị vô hướng 29 diepht@vnu
- Đi qua đồ thị theo độ sâu Sử dụng kĩ thuật tìm kiếm theo độ sâu Depth-First Search Ý tưởng của tìm kiếm theo độ sâu xuất phát từ đỉnh u Từ đỉnh u ta đến thăm một đỉnh v kề đỉnh u. Rồi lại từ đỉnh v ta đến thăm đỉnh w kề v. Cứ thế tiếp tục chừng nào có thể được. Khi đạt tới đỉnh v mà tại v ta không đi thăm tiếp được thì quay lại đỉnh u và từ đỉnh u ta đi thăm đỉnh v’ khác kề u (nếu có), rồi từ v’ lại đi thăm tiếp đỉnh kề v’, Quá trình trên sẽ tiếp diễn cho tới khi ta không thể tới thăm đỉnh nào nữa. 30 diepht@vnu
- Ví dụ DFS(1) 31 diepht@vnu
- DFS(v) Algorithm DFS(v) // Tìm kiếm theo độ sâu xuất phát từ v. Input: Đỉnh v chưa được thăm for (mỗi đỉnh u kề v) if ( u chưa được thăm) Đánh dấu u đã được thăm; DFS(u) 32 diepht@vnu
- Thuật toán đi qua đồ thị G theo độ sâu Algorithm DFSTraversal(G) // Đi qua đồ thị G=(V, E) theo độ sâu for (mỗi v ∈V) Đánh dấu v chưa được thăm; for (mỗi v ∈V) if (v chưa được thăm) Thăm v và đánh dấu v đã được thăm; DFS(v); Phân tích Ứng dụng Phân lớp các cung Phát hiện chu trình trong đồ thị 33 diepht@vnu
- Lịch trình Tuần 14, 15 Thi cuối kỳ vào 10/01 1. Đồ thị và các khái niệm liên quan 2. Cài đặt đồ thị 3. Một số bài toán tiêu biểu Đi qua/duyệt đồ thị Sắp xếp topo trên đồ thị định hướng không có chu trình Tìm đường đi ngắn nhất Tìm cây bao trùm ngắn nhất 4. Đồ thị và C++ 34 diepht@vnu
- Chuẩn bị tuần tới Lý thuyết: Đọc tiếp chương 18 giáo trình Thực hành: Đồ thị 35 diepht@vnu