Bài giảng Lý thuyết đồ thị - Chương 3: Các thuật toán duyệt đồ thị
lượt xem 3
download
Bài giảng Lý thuyết đồ thị - Chương 3: Các thuật toán duyệt đồ thị, cung cấp cho người đọc những kiến thức như: Ý tưởng chung của các thuật toán duyệt; Tìm kiếm theo chiều rộng; Ứng dụng trực tiếp cuả BFS; 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: Các thuật toán duyệt đồ thị
- Chương 3 Các Thuật Toán Duyệt Đồ Thị (Graph Searching, Graph Traversal) 1
- Các thuật toán duyệt đồ thị • Duyệt đồ thị: Graph Searching hoặc Graph Traversal • Duyệt qua mỗi đỉnh và mỗi cạnh của đồ thị • Ứng dụng: • Cần để khảo sát các tính chất của đồ thị • Là thành phần cơ bản của nhiều thuật toán trên đồ thị • Hai thuật toán duyệt cơ bản: • Tìm kiếm theo chiều rộng (Breadth First Search – BFS) • Tìm kiếm theo chiều sâu (Depth First Search – DFS) 2
- Ý tưởng chung của các thuật toán duyệt Ý tưởng chung: • Trong quá trình thực hiện thuật toán, mỗi đỉnh ở một trong ba trạng thái: • Chưa thăm, thể hiện bởi màu trắng • Đã thăm (nhưng chưa duyệt xong), thể hiện bởi màu xám • Đã duyệt xong, thể hiện bởi màu đen • Trạng thái của đỉnh sẽ biến đổi theo qui tắc sau: • Thoạt đầu mỗi đỉnh đều có màu trắng (chưa thăm - not visited). • Đỉnh đã được thăm sẽ chuyển thành màu xám (trở thành đã thăm nhưng chưa duyệt xong - visited). • Khi tất cả các đỉnh kề của một đỉnh v là đã được thăm, đỉnh v sẽ có màu đen (đã duyệt xong – discovered). 3
- Tìm kiếm theo chiều rộng Breadth-first Search (BFS) 4
- Tìm kiếm theo chiều rộng Breadth-first Search • Input: Đồ thị G = (V, E), vô hướng hoặc có hướng. • Output: • d[v] = khoảng cách (độ dài của đường đi ngắn nhất) từ s (là đỉnh xuất phát tìm kiếm) đến v, với mọi v V. d[v] = nếu v không đạt tới được từ s. • [v] = u đỉnh đi trước v trong đường đi từ s (là đỉnh xuất phát tìm kiếm) đến v có độ dài d[v]. • Xây dựng cây BFS với gốc tại s chứa tất cả các đỉnh đạt tới được từ s. 5
- Procedure BFS(s); (* Tìm kiếm theo chiều rộng bắt đầu từ đỉnh s *) begin color[s] gray; d[s] 0; [s] nil; Q ; enqueue(Q,s); (* Nạp s vào Q *) Trắng: chưa thăm while Q do xám: đã thăm begin đen: đã duyệt xong u dequeue(Q); (* Lấy u từ Q *) for v Adj[u] do if color[v] = white then begin Q: hàng đợi các đỉnh được color[v] gray; thăm d[v] d[u] + 1; [v] u; color[v]: màu của đỉnh v enqueue(Q,v) (* Nạp v vào Q *) d[v]: khoảng cách từ s đến v end; color[u] black [u]: đỉnh đi trước v end; end; BEGIN (* Main Program*) Ví dụ: xem minh hoạ for v V do (* Khởi tạo *) begin color[v] white; d[v] ; [v] nil; end; for v V do if color[v]=white then BFS(v); END. 6
- Ví dụ (BFS) r s t u 0 v w x y Q: s 0 7
- Ví dụ (BFS) r s t u 1 0 1 v w x y Q: w r 1 1 8
- Ví dụ (BFS) r s t u 1 0 2 1 2 v w x y Q: r t x 1 2 2 9
- Ví dụ (BFS) r s t u 1 0 2 2 1 2 v w x y Q: t x v 2 2 2 10
- Ví dụ (BFS) r s t u 1 0 2 3 2 1 2 v w x y Q: x v u 2 2 3 11
- Ví dụ (BFS) r s t u 1 0 2 3 2 1 2 3 v w x y Q: v u y 2 3 3 12
- Ví dụ (BFS) r s t u 1 0 2 3 2 1 2 3 v w x y Q: u y 3 3 13
- Ví dụ (BFS) r s t u 1 0 2 3 2 1 2 3 v w x y Q: y 3 14
- Ví dụ (BFS) r s t u 1 0 2 3 2 1 2 3 v w x y Q: 15
- Ví dụ (BFS) r s t u 1 0 2 3 2 1 2 3 v w x y Cây BFS(s) 16
- Phân tích BFS • Việc khởi tạo đòi hỏi O(|V|). • Vòng lặp duyệt • Mỗi đỉnh được nạp vào và loại ra khỏi hàng đợi một lần, mỗi thao tác đòi hỏi thời gian O(1). Như vậy tổng thời gian làm việc với hàng đợi là O(V). • Danh sách kề của mỗi đỉnh được duyệt qua đúng một lần. Tổng độ dài của tất cả các danh sách kề là (|E|). • Tổng cộng ta có thời gian tính của BFS(s) là O(|V|+|E|),là tuyến tính theo kích thước của danh sách kề biểu diễn đồ thị. 17
- Cây BFS(s) • Đối với đồ thị G = (V, E) và đỉnh s. Thực hiện BFS(s), xét đồ thị con G = (V , E) trong đó • V ={vV : [v] NIL}{s} • E ={([v],v) E : v V \ {s}} • G = (V , E) là cây và được gọi là cây BFS(s) • Các cạnh trong E được gọi là cạnh của cây. |E | = |V | - 1. • BFS(s) cho phép đến thăm tất cả các đỉnh đạt tới được từ s. • Trình tự thăm các đỉnh khi thực hiện BFS(s): Đầu tiên đến thăm các đỉnh đạt được từ s bởi đường đi qua 1 cạnh, sau đó là thăm các đỉnh đạt được từ s bởi đường đi qua 2 cạnh, …Do đó nếu đỉnh t được thăm trong BFS(s) thì nó sẽ được thăm theo đường đi ngắn nhất theo số cạnh. 18
- BFS – Loang trên đồ thị • Thứ tự thăm đỉnh nhờ thực hiện BFS(A) A L0 A B C D L1 B C D E F L2 E F 19
- Ứng dụng trực tiếp cuả BFS • Sử dụng BFS để kiểm tra tính liên thông của đồ thị vô hướng: • Mỗi lần gọi đến BFS ở trong chương trình chính sẽ sinh ra một thành phần liên thông • Xét sự tồn tại đường đi từ đỉnh s đến đỉnh t: • Thực hiện BFS(s). • Nếu [t] = NIL thì không có đường đi, trái lại ta có đường đi t [t] [[ t]] . . . s • Chú ý: BFS tìm được đường đi ngắn nhất theo số cạnh. 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lý thuyết đồ thị: Chương 4 - Đồ thị phẳng – Bài toán tô màu đồ thị
21 p | 215 | 28
-
Bài giảng Lý thuyết đồ thị: Chương 1 - ThS. Nguyễn Khắc Quốc
56 p | 142 | 18
-
Bài giảng Lý thuyết đồ thị: Chương 3 - Đồ thị Euler và đồ thị Hamilton
19 p | 148 | 16
-
Bài giảng Lý thuyết đồ thị: Chương 2 - Biểu diễn đồ thị trên máy tính
32 p | 119 | 16
-
Bài giảng Lý thuyết đồ thị: Chương 4 - ThS. Nguyễn Khắc Quốc
36 p | 120 | 14
-
Bài giảng Lý thuyết đồ thị: Chương 3 - ThS. Nguyễn Khắc Quốc
67 p | 114 | 13
-
Bài giảng Lý thuyết đồ thị: Chương 5 - Cây và cây khung của đồ thị
37 p | 177 | 12
-
Bài giảng Lý thuyết đồ thị: Chương 2 - ThS. Nguyễn Khắc Quốc
37 p | 115 | 12
-
Bài giảng Lý thuyết đồ thị: Chương 5 - ThS. Nguyễn Khắc Quốc
55 p | 109 | 8
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Giới thiệu môn học
12 p | 102 | 7
-
Bài giảng Lý thuyết đồ thị: Chương 1 - Nguyễn Trần Phi Phượng
26 p | 186 | 7
-
Bài giảng Lý thuyết đồ thị: Bài toán ghép cặp
43 p | 140 | 6
-
Bài giảng Lý thuyết đồ thị - ĐH Hàng Hải
35 p | 96 | 6
-
Bài giảng Lý thuyết đồ thị - Bài 1: Đại cương về đồ thị
39 p | 39 | 5
-
Bài giảng Lý thuyết đồ thị - Bài 3: Đường đi, chu trình Hamilton
34 p | 75 | 5
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Nguyễn Trần Phi Phượng
6 p | 93 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 4 - Nguyễn Trần Phi Phượng
13 p | 120 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Tôn Quang Toại
6 p | 7 | 4
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