Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
480 KB
Nội dung
Giải thuật tìm kiếm đồ thị Biểu diễn đồ thị ª Hai cách biểu diễn đồ thị G = (V, E): – Biểu diễn danh sách kề (adjacency list) ° mảng Adj gồm V danh sách, danh sách cho đỉnh V u V, Adj[u] chứa tất đỉnh v (hoặc trỏ đến chúng) cho (u, v) E – Nhận xét ° Biểu diễn danh sách kề cần (V + E) memory (Để đơn giản, ký hiệu V E thay V E.) Ch 8: Elementary Graph Algorithms Biểu diễn đồ thị (tiếp) – Biểu diễn ma trận kề (adjacency matrix) ° Đánh số đỉnh 1, 2, , V ° Aa ma trậnV V ij aij = neáu (i, j) E trường hợp lại – Nhận xét ° Biểu diễn ma trận kề cần (V 2) memory ° Đồ thị thưa (sparse), E V2: nên dùng danh sách kề ° đồ thị đặc (dense), E V: nên dùng ma trận kề Ch 8: Elementary Graph Algorithms Biểu diễn đồ thị vô hướng Biểu diễn Một đồ thị vô hướng Biểu diễn danh sách kề ma trận kề Ch 8: Elementary Graph Algorithms Biểu diễn đồ thị có hướng Biểu diễn bằngBiểu diễn Một đồ thị có hướng danh sách kề ma trận kề Ch 8: Elementary Graph Algorithms Tìm kiếm theo chiều rộng ª ª ª Tìm kiếm theo chiều rộng (breadth-first-search, BFS) Một đồ thị G = (V, E) – đỉnh nguồn s – biểu diễn danh sách kề Mỗi đỉnh u V – color[u]: WHITE, GREY, BLACK – [u]: trỏ đến đỉnh cha mẹ (predecessor hay parent) u có – d[u]: khoảng cách từ s đến u mà giải thuật tính first-in first-out queue Q – head[Q] – thao tác ENQUEUE(Q, v) – thao taùc DEQUEUE(Q) Ch 8: Elementary Graph Algorithms Tìm kiếm theo chiều rộng (tiếp) BFS(G, s) for each vertex u V[G] {s} color[u] WHITE d[u] [u] NIL color[s] GRAY d[s] [s] NIL Ch 8: Elementary Graph Algorithms Tìm kiếm theo chiều rộng (tiếp) Q {s} while Q 10 u head[Q] 11 for each v Adj[u] 12 if color[v] = WHITE 13 then color[v] GRAY 14 d[v] d[u] + 15 [v] u 16 ENQUEUE(Q, v) 17 DEQUEUE(Q) 18 color[u] BLACK Ch 8: Elementary Graph Algorithms Thao tác BFS lên đồ thị vô hướng Ví dụ r s t u (a) v w x y r s t u (b) v w x y r s t u Q s Q w r 1 Q (c) v w x y Ch 8: Elementary Graph Algorithms r t x 2 Thao taùc BFS lên đồ thị vô hướng Ví dụ (tiếp) r s t u (d) v w x y r s t u (e) v w x y r s t u Q t x v 2 Q x v u 2 Q (fø) v w x y Ch 8: Elementary Graph Algorithms v u y 3 10 Thao tác DFS lên đồ thị Ví dụ (tiếp theo) u v 1/ 2/ w u v 1/ 2/ w B B 4/ 3/ x y z 4/5 3/ x y (f) (e) u v 1/ 2/ z w u v 1/ 2/7 B w B 4/5 3/6 x y z 4/5 3/6 x y (g) z (h) Ch 8: Elementary Graph Algorithms 28 Thao taùc DFS lên đồ thị Ví dụ (tiếp theo) u v 1/ 2/7 F w v u 1/8 4/5 3/6 x y z 2/7 B F B w 4/5 3/6 x y z (j) (i) u v w u v w 1/8 2/7 9/ 1/8 2/7 9/ B F B F 4/5 3/6 x y (k) z C 4/5 3/6 x y Ch 8: Elementary Graph Algorithms (l) z 29 Thao tác DFS lên đồ thị Ví dụ (tiếp theo) u v w u v w 1/8 2/7 9/ 1/8 2/7 9/ B F C B F C B 4/5 3/6 10/ 4/5 3/6 10/ x y z x y z (n) (m) u v w u v w 1/8 2/7 9/ 1/8 2/7 9/12 B F C B B F C B 4/5 3/6 10/11 4/5 3/6 10/11 x y z x y z (o) (p) Ch 8: Elementary Graph Algorithms 30 Phân tích DFS ª Thời gian chạy DFS (V + E) – Các vòng lặp DFS cần (V) thời gian, chưa kể thời gian thực thi lần gọi DFS-VISIT – DFS-VISIT gọi lần cho đỉnh v (vì màu đỉnh v xám) ° Thực thi DFS-VISIT(v): danh sách kề v duyệt Vậy thời gian để duyệt tất danh sách kề (E) Ch 8: Elementary Graph Algorithms 31 Đặc tính tìm kiếm theo chiều sâu Định lý 23.6 Định lý dấu ngoặc, Parenthesis theorem Trong tìm kiếm theo chiều sâu đồ thị hữu hướng hay vô hướng G = (V, E), cặp đỉnh u v, ba điều sau ° khoảng [d[u], f [u]] [d[v], f [v]] rời nhau, ° khoảng [d[u], f [u]] hoàn toàn nằm khoảng [d[v], f [v]], u hậu duệ v theo chiều sâu, ° khoảng [d[v], f [v]] hoàn toàn nằm khoảng [d[u], f [u]], v hậu duệ u theo chiều sâu • Chứng minh Trường hợp d[u] < d[v]: xét hai trường hợp ° d[v] < f [u] Đỉnh v tìm u xám, v hậu duệ u Hơn v tìm sau u, nên cạnh từ v thăm dò xong v hoàn tất, trước việc tìm Ch 8: Elementary Graph Algorithms 32 Đặc tính tìm kiếm theo chiều sâu Chứng minh (tiếp) kiếm quay u hoàn tất u, f [v] < f [u] Tổng kết: d[u] < d[v] < f [v] < f [u], tức khoảng [d[v], f [v]] hoàn toàn nằm khoảng [d[u], f [u]] ° f [u] < d[v] Hơn nữa, d[u] < f [u] d[v] < f [v] nên d[u] < f [u] < d[v] < f [v], tức khoảng [d[u], f [u]] [d[v], f [v]] rời Trường hợp d[v] < d[u] Tương tự Ch 8: Elementary Graph Algorithms 33 Đặc tính tìm kiếm theo chiều sâu Định lý 23.8 Định lý white-path Cho đồ thị vô hướng hay có hướng G = (V, E ) • Trong rừng theo chiều sâu G, đỉnh v hậu duệ đỉnh u vào thời điểm d[u] DFS tìm u, đỉnh v đến từ u theo đường gồm đỉnh màu trắng • Chứng minh : Giả sử v hậu duệ đỉnh u Gọi w đỉnh nằm đường từ u đến v theo chiều sâu, w hậu duệ u Vậy d[u] < d[w], w trắng vào lúc d[u] : (sketch) d[u] < d[v] < f [v] < f [u] Ch 8: Elementary Graph Algorithms 34 Đặc tính tìm kiếm theo chiều sâu ª Phân loại cạnh G = (V, E) – Các cạnh (tree edge): cạnh G – Các cạnh lùi (back edge): cạnh (u, v) nối u đến nút tổ tiên (ancestor) v depth-first tree – Các cạnh tiến (forward edge): cạnh, cạnh cây, (u, v) nối đỉnh u đến hậu duệ (descendant) v depth-first tree – Các cạnh xuyên (cross edge): tất cạnh lại Ch 8: Elementary Graph Algorithms 35 Đặc tính tìm kiếm theo chiều sâu Định lý 23.9 Trong tìm kiếm theo chiều sâu đồ thị vô hướng G, cạnh G cạnh back edge Chứng minh ° Xét cạnh (u,v) G Giả sử d[u] < d[v] ° v phải hoàn tất trước u v nằm danh sách đỉnh kề u ° Hai trường hợp: – Cạnh (u,v) thăm dò lần đầu theo hướng từ u đến v: (u,v) cạnh – Cạnh (u,v) thăm dò lần đầu theo hướng từ v đến u: (u,v) back edge đỉnh u xám (u hoàn tất sau v) Ch 8: Elementary Graph Algorithms 36 Các tính chất tìm kiếm theo chiều sâu y z s t 3/6 2/9 1/10 11/16 C B (a) B 4/5 F 7/8 C x C w 12/13 v C 14/15 u s t u w z (b) y w x 10 11 Ch 8: Elementary Graph Algorithms 12 13 14 15 37 16 Ứng dụng DFS: thứ tự tô pô ª ª Cho đồ thị có hướng chu trình (directed acyclic graph, hay dag) G = (V, E) Một thứ tự tôpô dag G xếp tuyến tính tất đỉnh G cho – G chứa cạnh (u, v) u xuất trước v xếp Nhận xét Nếu đồ thị có hướng có chu trình không thứ tự tô pô cho Ch 8: Elementary Graph Algorithms 38 Sắp thứ tự tô pô ª Cho dag G = (V, E) LOGICAL-SORT(G) ọi DFS(G) để tính thời điểm hoàn tất f [v] cho đỉnh v đỉnh hoàn tất, chèn vào phía trước danh s ên kết eturn danh sách liên kết đỉnh Thời gian chạy TOPOLOGICAL-SORT (V + E) Ch 8: Elementary Graph Algorithms 39 Sắp thứ tự tô pô Ví dụ 11/16quần lót vớ 17/18 (a) đồng hồ 9/10 giày 13/14 12/15quần dài áo sơ mi 1/8 6/7 dây lưng cà vạt 2/5 áo 3/4 (b) vớ quần lótquần dài giày đồng hồáo sơ mi dây lưng cà vạtáo 17/18 11/16 12/15 13/14 9/10 1/8 Ch 8: Elementary Graph Algorithms 6/7 2/5 3/4 40 Đặc tính thứ tự tô pô Lemma 23.10 Một đồ thị có hướng G chu trình (acyclic) tìm kiếm theo chiều sâu G không cho back edge Chứng minh : P v u Giả sử tìm kiếm theo chiều sâu G cho back edge (u, v), với v tổ tiên u Có đường P rừng theo chiều sâu từ v đến u Như P back edge (u, v) tạo chu trình : Bài tập! Ch 8: Elementary Graph Algorithms 41 Đặc tính thứ tự tô pô Định lý 23.11 TOPOLOGICAL-SORT(G) tìm thứ tự tôpô đồ thị có hướng không chứa chu trình G Chứng minh ° Chạy DFS lên dag G = (V, E) để xác định thời điểm hoàn tất đỉnh ° Cần chứng tỏ: với cặp u, v V khác nhau, có cạnh G từ u đến v f [v] < f [u] Xét cạnh (u, v) thăm dò DFS(G) Khi v không xám (vì v tổ tiên u, (u, v) back edge, mâu thuẩn! dùng Lemma 23.10) Vậy v trắng đen: – trắng: v trở thành cháu u, f [v] < f [u] – đen: dỉ nhiên f [v] < f [u] Ch 8: Elementary Graph Algorithms 42 ... 22 Tìm kiếm theo chiều sâu ª ª Tìm kiếm theo chiều sâu (depth-first-search, DFS) Cho đồ thị G = (V, E) Sau thực thi DFS lên G , dùng trường đỉnh để định nghóa “cây theo chiều sâu”: – Đồ thị. .. 2) memory ° Đồ thị thưa (sparse), E V2: nên dùng danh sách kề ° đồ thị đặc (dense), E V: nên dùng ma trận kề Ch 8: Elementary Graph Algorithms Biểu diễn đồ thị vô hướng... rộng ª ª ª Cho đồ thị G = (V, E) đỉnh nguồn s Sau thực thi BFS lên G , dùng trường đỉnh để định nghóa “cây theo chiều rộng”: – Đồ thị đỉnh cha mẹ (predecessor subgraph) G đồ thị G= (V ,