Bài giảng Lý thuyết đồ thị: Chương 3 - Tôn Quang Toại
lượt xem 2
download
Bài giảng Lý thuyết đồ thị: Chương 3 Tìm kiếm trên đồ thị, cung cấp cho người đọc những kiến thức như: Một số khái niệm; Thuật toán tìm kiếm theo chiều rộng; Thuật toán tìm kiếm theo chiều sâu. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lý thuyết đồ thị: Chương 3 - Tôn Quang Toại
- CHƯƠNG 3 TÌM KIẾM TRÊN ĐỒ THỊ Tôn Quang Toại Khoa CNTT, Đại học Ngoại ngữ ‐ Tin học TP.HCM
- Nội dung Một số khái niệm Thuật toán tìm kiếm theo chiều rộng Thuật toán tìm kiếm theo chiều sâu Ứng dụng
- Một số khái niệm Đường đi, chu trình Tính liên thông 2 đỉnh liên thông Đồ thị vô hướng liên thông Đồ thị có hướng Liên thông mạnh Miền liên thông Đỉnh khớp, cạnh cầu
- Một số khái niệm Đường đi (Path): Đường đi từ đỉnh x đến đỉnh y trong đồ thị G=(V, E) là một dãy các đỉnh liên tiếp nối đỉnh x đến đỉnh y: trong đó: Độ dài đường đi: Là số cạnh của đường đi Đường đi đơn (simple): Là đường đi qua mỗi cạnh tối đa 1 lần.
- Một số khái niệm Chu trình (Cycle): Là đường đi có đỉnh đầu trùng với đỉnh cuối Chu trình đơn: Mỗi cạnh xuất hiện tối đa 1 lần trong chu trình
- Một số khái niệm Hai đỉnh liên thông: Hai đỉnh x, y được gọi là liên thông với nhau nếu có đường đi từ x đến y. Đồ thị liên thông: Đồ thị vô hướng G=(V, E) được gọi là đồ thị liên thông nếu thì x liên thông với y.
- Một số khái niệm Đồ thị liên thông mạnh: Đồ thị có hướng G=(V, A) được gọi là đồ thị liên thông mạnh nếu thì x liên thông với y. Thành phần liên thông: Là tập đỉnh liên thông với nhau và nếu bổ sung thêm 1 đỉnh khác thì không liên thông
- Một số khái niệm Cạnh cầu: Cho đồ thị G=(V, E). Cạnh gọi là cầu nếu xóa cạnh e thì số thành phần liên thông tăng lên Đỉnh khớp: Cho đồ thị G=(V, E). Đỉnh gọi là khớp nếu xóa các cạnh liên thuộc với v thì số thành phần liên thông tăng lên ít nhất là 2.
- Tìm kiếm trên đồ thị Tìm kiếm trên đồ thị: Cho đồ thị G=(V, E) và 1 đỉnh . Tìm kiếm trên đồ thị là phương pháp xuất phát từ đỉnh s, và theo các cạnh liên thuộc để viếng thăm (duyệt) các đỉnh của đồ thị sao cho mỗi đỉnh được viếng thăm 1 lần, nhằm tìm nghiệm của bài toán Ví dụ: Kiểm tra xem có đường đi từ đỉnh u đến đỉnh v không? Kiểm tra đồ thị có liên thông hay không
- Tìm kiếm trên đồ thị Trong chương này chúng ta sẽ tìm hiểu hai thuật toán tìm kiếm cơ bản trên đồ thị: Thuật toán tìm kiếm theo chiều rộng (Breadth First Search ‐ BFS) Thuật toán tìm kiếm theo chiều sâu (Depth First Search ‐ DFS)
- Tìm kiếm trên đồ thị theo chiều sâu Thuật toán tìm kiếm theo chiều sâu (DFS): Input: G(V, E) và đỉnh Output: Dãy đỉnh được viếng thăm Bước 1: Viếng thăm đỉnh s Bước 2: Tìm đỉnh u: u kề với s và u chưa được viếng thăm • Nếu có đỉnh u thì đặt s=u và quay về Bước 1 • Nếu không có đỉnh u thì quay về đỉnh trước đỉnh s, và tìm hướng đi khác. • Thuật toán dừng khi không thể quay về đỉnh trước.
- Tìm kiếm trên đồ thị theo chiều sâu Cài đặt: Cấu trúc dữ liệu Đồ thị: Giả sử đồ thị lưu trong danh sách kề LinkedList[] v; Dùng mảng bool[] visited để đánh dấu đỉnh đã viếng thăm hay chưa: • visited[i] = true: đỉnh i đã viếng thăm • visited[i] = false: đỉnh i chưa viếng thăm bool[] visited;
- Tìm kiếm trên đồ thị theo chiều sâu Cài đặt bằng Đệ quy void DFS(int s) { if (visited[s] == true) return; // Bước 1 visited[s] = true; // process node s:… // Bước 2 foreach (int u in v[s]) DFS(u); }
- Tìm kiếm trên đồ thị theo chiều sâu Cài đặt bằng Stack // Dùng stack void DFS(int s) { 1. Đánh dấu s đã viếng thăm 2. Đưa s vào stack 3. while stack chưa rỗng { { Đánh dấu v đã viếng thăm Đẩy u vào lại stack Đẩy v vào stack } } }
- Tìm kiếm trên đồ thị theo chiều rộng Thuật toán tìm kiếm theo chiều rộng (BFS): Input: G(V, E) và đỉnh Output: Dãy đỉnh được viếng thăm Bước 1: Gọi S1={s}, viếng thăm các đỉnh trong S1 Bước 2: Tìm các đỉnh (gọi là S2) kề với một trong những đỉnh S1, và chưa được viếng thăm, rồi viếng thăm các đỉnh trong S2 Bước 3: Tìm các đỉnh (gọi là S3) kề với một trong những đỉnh S2 và chưa được viếng thăm, rồi viếng thăm các đỉnh trong S3 … Cho đến khi không thể tìm thêm các đỉnh để viếng thăm
- Tìm kiếm trên đồ thị theo chiều rộng 0 4 5 6 Ví dụ: 3 5 6 1 2 0 4 3 0 4 5 6 1 2 3 1 2 0 4 5 6 0 4 5 6 3 1 2 3 1 2
- Tìm kiếm trên đồ thị theo chiều rộng Nhận xét Những đỉnh gần với s nhất sẽ được viếng thăm trước Các đỉnh chỉ được viếng thăm duy nhất 1 lần
- Tìm kiếm trên đồ thị theo chiều rộng Cài đặt: Cấu trúc dữ liệu Đồ thị: Giả sử đồ thị lưu trong danh sách kề LinkedList[] v; Dùng mảng bool[] visited để đánh dấu đỉnh đã viếng thăm hay chưa: • visited[i] = true: đỉnh i đã viếng thăm • visited[i] = false: đỉnh i chưa viếng thăm bool[] visited;
- Tìm kiếm trên đồ thị theo chiều rộng Cài đặt: Cấu trúc dữ liệu Dùng queue để lưu trật tự các đỉnh được xử lý • Đỉnh mới sẽ được thêm vào cuối queue • Đỉnh ở đầu queue sẽ là đỉnh kế tiếp được xử lý Queue q;
- Tìm kiếm trên đồ thị theo chiều rộng Cài đặt bằng hàng đợi void BFS(int s) { visited[s]=true; q.Enqueue(s); // Process node s while(q.Count!=0) { s = q.Dequeue(); foreach (int u in v[s]) { if (visited[u]) continue; visited[u]=true; q.Enqueue(u); // Process node u } } }
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lý thuyết đồ thị: Chương 6 - Bài toán đường đi ngắn nhất
20 p | 304 | 49
-
Bài giảng Lý thuyết đồ thị: Chương 3 - Các thuật toán tìm kiếm trên đồ thị
18 p | 222 | 28
-
Bài giảng Lý thuyết đồ thị: Chương 7 - Bài toán luồng cực đại trong mạng
15 p | 171 | 22
-
Bài giảng Lý thuyết đồ thị: Chương 5 - Nguyễn Trần Phi Phượng
20 p | 137 | 20
-
Bài giảng Lý thuyết đồ thị: Chương 3 - Đồ thị Euler và đồ thị Hamilton
19 p | 149 | 16
-
Bài giảng Lý thuyết đồ thị: Chương 2 - Nguyễn Trần Phi Phượng
14 p | 209 | 16
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Giới thiệu môn học
12 p | 105 | 7
-
Bài giảng Lý thuyết đồ thị: Chương 3 - Nguyễn Trần Phi Phượng
14 p | 100 | 5
-
Bài giảng Lý thuyết đồ thị - Bài 7+8: Bài toán đường đi ngắn nhất
20 p | 46 | 5
-
Bài giảng Lý thuyết đồ thị - Bài 5: Cây khung của đồ thị
17 p | 61 | 5
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Nguyễn Trần Phi Phượng
6 p | 94 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 4 - Nguyễn Trần Phi Phượng
13 p | 122 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Tôn Quang Toại
6 p | 11 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 1 - Tôn Quang Toại
37 p | 19 | 4
-
Bài giảng Lý thuyết đồ thị - Bài 2+3: Các thuật toán tìm kiếm trên đồ thị (tt)
17 p | 47 | 3
-
Bài giảng Lý thuyết đồ thị: Chương 2 - Ngô Hữu Phúc
10 p | 46 | 3
-
Bài giảng Lý thuyết đồ thị: Chương 3 - Ngô Hữu Phúc
18 p | 47 | 3
-
Bài giảng Lý thuyết đồ thị: Chương 4 - Ngô Hữu Phúc
13 p | 44 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn