Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
1,2 MB
Nội dung
NỘI DUNG CHƯƠNG BÀI TOÁN VỀ ĐƯỜNG ĐI (PHẦN MỘT) Bùi Tiến Lên Đại học Khoa học Tự nhiên 01/01/2017 ĐƯỜNG ĐI TRÊN ĐỒ THỊ TỔNG QUÁT ĐƯỜNG ĐI TRÊN ĐỒ THỊ TỔNG QUÁT ĐƯỜNG ĐI TRÊN ĐỒ THỊ CÓ TRỌNG SỐ MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN ĐƯỜNG ĐI Đường Định nghĩa 5.1 Cho đồ thị G = (V , E ), đường (path) P G dãy luân phiên ”đỉnh - cạnh” P = v1 e1 v2 e2 v3 vm cho ei = (vi , vi+1 ) Spring 2017 P = v1 v2 v3 vm Graph Theory Đường (cont.) Các toán đường Phân loại đường I Đường sơ cấp đường khơng có đỉnh lặp lại I Đường đơn đường khơng có cạnh lặp lại I Đường tổng quát không ràng buộc Bài tốn 5.1 (Bài tốn tìm đường sơ cấp) Cho đồ thị G = (V , E ) hai đỉnh s t Hãy tìm đường sơ cấp từ s t Bài tốn 5.2 (Bài tốn tìm tất đường sơ cấp) Cho đồ thị G = (V , E ) hai đỉnh s t Hãy tìm tất đường sơ cấp từ s t Spring 2017 Graph Theory Các toán đường (cont.) Cho đồ thị G = (V , E ) hai đỉnh s t Hãy tìm đường đơn từ s t Bài toán 5.4 (Bài toán tìm đường có chiều dài cho trước) Bài tốn 5.5 (Bài tốn tìm chu trình sơ cấp) Cho đồ thị G = (V , E ) hai s Hãy tìm chu trình sơ cấp qua s Bài tốn 5.6 (Bài tốn tìm tất chu trình sơ cấp) Cho đồ thị G = (V , E ) hai đỉnh s t số dương k Hãy tìm đường có chiều dài k từ s t Graph Theory Graph Theory Các tốn chu trình Bài tốn 5.3 (Bài tốn tìm tất đường đơn) Spring 2017 Spring 2017 Cho đồ thị G = (V , E ) hai s Hãy tìm tất chu trình sơ cấp qua s Spring 2017 Graph Theory Cây đường sơ cấp Cây đường sơ cấp (cont.) A Định nghĩa 5.2 F Cho đồ thị G = (V , E ) đỉnh s, đường sơ cấp đỉnh s liệt kê tất đường sơ cấp từ s tới đỉnh đồ thị D B C K A E G C E I G B D G F K F C E K F K G G I (a) đồ thị K K (b) đường đỉnh A Hình 5.1: Đồ thị đường Spring 2017 Graph Theory Spring 2017 Cây đường sơ cấp (cont.) Graph Theory 10 Cây đường sơ cấp (cont.) A F D B C K A G A C E I F D F F C B C K A E E B G G K E K F K I G (a) đường đồ thị K E I G G D F K F C E K G (a) đường đồ thị Hình 5.2: Đường từ A đến G Graph Theory G C I K (b) đường đường B G G Spring 2017 D F K K (b) đường đường Hình 5.3: Đường từ A đến G 11 Spring 2017 Graph Theory 12 K Cây đường sơ cấp (cont.) Cây đường sơ cấp (cont.) A F D B C K A E A C G E I G B G F D F K F C E K F G (a) đường đồ thị K Graph Theory E I G B D G F K E K G I F C F K K (b) đường đường Hình 5.5: Đường từ A đến G 13 Spring 2017 Graph Theory 14 Bài tập minh họa (cont.) f g f g a a b c Hình 5.6: Hãy vẽ đường sơ cấp cho đồ thị có hướng đỉnh a Graph Theory e d e d Spring 2017 G (a) đường đồ thị Bài tập minh họa b C G Hình 5.4: Đường từ A đến G Spring 2017 A E K K (b) đường đường C K G I B D 15 c Hình 5.7: Hãy vẽ đường sơ cấp cho đồ thị vô hướng đỉnh a Spring 2017 Graph Theory 16 K DFS tìm đường sơ cấp DFS tìm đường sơ cấp (cont.) I Algorithm Tìm đường P từ đỉnh vs đến ve 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: function dfs_find_path(vs ,ve ) Duyệt vs if vs == ve then return true for đỉnh v kề với đỉnh vs if v chưa duyệt then pre [v] = vs if dfs_find_path(v,ve ) then return true return false Spring 2017 Graph Theory I Trong hàm sử dụng kỹ thuật lưu vết đường thông qua việc lưu lại đỉnh trước đỉnh v phép gán pre [v] = vs Để xác định đường ta sử dụng cách lần ngược từ đỉnh ve vs vs 17 Spring 2017 pre v1 pre pre vk pre Graph Theory DFS tìm tất đường sơ cấp BFS tìm đường sơ cấp Algorithm Tìm tất đường từ đỉnh vs đến ve Algorithm Tìm đường từ đỉnh vs đến ve 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: procedure dfs_find_all_paths(vs ,ve ) Duyệt vs if vs == ve then In đường for đỉnh v kề với đỉnh vs if v chưa duyệt then push(pre[v]) pre [v] = vs dfs_find_all_paths(v,ve ) pop(pre[v]) vs trở lại trạng thái chưa duyệt Spring 2017 Graph Theory 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 19 ve 18 procedure bfs_find_path(vs ,ve ) queue ← vs while queue 6= ∅ v ← queue Duyệt đỉnh v if v == ve then In đường kết thúc for đỉnh u kề với đỉnh v if đỉnh u chưa duyệt khơng có queue then pre [u] = v queue ← u Spring 2017 Graph Theory 20 Đồ thị đường tổng quát Đồ thị đường tổng quát nhằm mục đích biểu diễn đường sơ cấp hay đơn d a e c b Hình 5.8: Đồ thị e e e e e e d d d d d d c c c c c c b b b b b b a a a a a a ĐƯỜNG ĐI TRÊN ĐỒ THỊ CĨ TRỌNG SỐ Hình 5.9: Đồ thị đường a-b-c-a-d-e Spring 2017 Graph Theory 21 Bài tốn tìm đường Bài toán đường ngắn Đối với đồ thị có trọng số, thường xét đến Bài tốn 5.7 I Tìm đường ngắn I Tìm đường dài I Tìm đường thỏa mãn yêu cầu Cho đồ thị G = (V , E , L) đồ thị có trọng số, hai đỉnh s t, tập hợp P tất đường từ s đến t Bài tốn tìm đường ngắn (shortest path) từ s đến t phát biểu qua cơng thức sau Pmin = arg min(P) (5.1) P∈P Spring 2017 Graph Theory 23 Spring 2017 Graph Theory 24 Bài toán đường ngắn (cont.) Nguyên lý Bellman Một số lưu ý I I I Phát biểu Các thuật tốn tìm đường ngắn đồ thị thuật toán tối ưu rời rạc I I Các thuật tốn nói chung áp dụng cho đồ thị có hướng vơ hướng Khi giải tốn đường ngắn I Bỏ cạnh song song giữ lại cạnh có trọng số nhỏ I Bỏ cạnh khuyên giữ lại cạnh khuyên có trọng số âm bé Spring 2017 Graph Theory 25 P đường từ đỉnh s đến đỉnh t P1 P2 , đường P từ đỉnh s đến k từ k đến t với k đỉnh nằm đường P Nếu P đường ngắn P1 P2 đường ngắn s P1 k Spring 2017 Graph Theory Nguyên lý Bellman (cont.) Chứng minh Lưu ý I I Giả sử tồn đường P10 từ s đến k ngắn đường P1 Nghĩa L(P10 ) < L(P1 ) Suy t Hình 5.10: Nguyên lý Bellman Nguyên lý Bellman (cont.) I P2 I Ngun lý Bellman khơng có phát biểu ngược lại I Các đường P, P1 , P2 đường 26 L(P10 ⊕ P2 ) < L(P1 ⊕ P2 ) = L(P) Trái với giả thiết P đường ngắn để từ s t Spring 2017 Graph Theory 27 Spring 2017 Graph Theory 28 Các thuật toán tìm đường ngắn I Thuật tốn đường ngắn I Thuật toán Dijkstra I Thuật toán A* I Thuật toán Bellman I Thuật toán Floyd Thuật tốn đường ngắn Cho đồ thị có trọng số không âm G = (V , E , L) với n đỉnh Hãy xây dựng đường sơ cấp ngắn T = (V , E , D) đỉnh s đến đỉnh đồ thị I I Bước 1: Khởi tạo VT = {s}, ET = ∅, d(s) = Bước 2: Chọn đỉnh y, y ∈ VG − VT cho d(x) + l(x, y), x ∈ XT nhỏ VT = VT + {y} ET = ET + {(x, y)} d (y) = d (x) + l(x, y) I Spring 2017 Graph Theory 29 Minh họa thuật toán Bước 3: Nếu khơng tìm đỉnh y DỪNG ngược lại quay lại bước Spring 2017 b b e d 17 e d 17 a d=0 f 12 g f 12 g 30 Minh họa thuật toán (cont.) Áp dụng thuật tốn đường ngắn để tìm đường ngắn từ đỉnh a đến đỉnh lại a Graph Theory c Hình 5.12: Đỉnh a c Hình 5.11: Tìm đường ngắn từ đỉnh a đến đỉnh lại Spring 2017 Graph Theory 31 Spring 2017 Graph Theory 32 Minh họa thuật toán (cont.) f 12 g a d=0 Minh họa thuật toán (cont.) d d=3 a d=0 33 d d=3 b Spring 2017 17 d d=3 b d=7 f e 8 17 c d=4 Graph Theory 34 g d=6 12 e Hình 5.15: Thêm đỉnh g cạnh ag Spring 2017 Graph Theory a d=0 c d=4 f 8 Minh họa thuật toán (cont.) g d=6 12 Hình 5.14: Thêm đỉnh c cạnh dc Minh họa thuật toán (cont.) e b c Graph Theory a d=0 d d=3 17 Hình 5.13: Thêm đỉnh d cạnh ad Spring 2017 e b 17 f 12 g c d=4 Hình 5.16: Thêm đỉnh d cạnh db 35 Spring 2017 Graph Theory 36 Minh họa thuật toán (cont.) a d=0 f g d=6 12 d d=3 17 b d=7 Minh họa thuật toán (cont.) b d=7 c d=4 Graph Theory 37 Spring 2017 c d=4 Spring 2017 Graph Theory Cho đồ thị có trọng số không âm G = (V , E , L) với n đỉnh Hãy tìm đường sơ cấp ngắn từ đỉnh s đến đỉnh I Từ a đến d: a d với trọng số I Từ a đến c: a d c với trọng số I bước 1: d(s) = d(x) = ∞, ∀x 6= s I Từ a đến g: a g với trọng số I bước 2: T = ∅ I Từ a đến b: a d b với trọng số I I Từ a đến e: a d c e với trọng số I 38 Thuật toán Dijkstra Vậy đường ngắn Hình 5.19: Cây đường ngắn từ đỉnh a e d=9 Hình 5.18: Thêm đỉnh f cạnh ef Minh họa thuật toán (cont.) f d=26 12 g d=6 a d=0 17 e d=9 d d=38 b d=7 c d=4 d d=3 17 Hình 5.17: Thêm đỉnh e cạnh ce Spring 2017 e d=9 8 a d=0 f d=26 g d=6 12 Từ a đến f: a d c e f với trọng số 26 bước 3: Lặp đỉnh I Chọn đỉnh y, y ∈ / T cho d(y) nhỏ I Cập nhật T : T = T + {y} I Cập nhật giá trị d cho đỉnh lại ∀x ∈ / T , d(x) > d(y) + l(y, x) ⇒ d(x) = d(y) + l(y, x) Graph Theory 39 Spring 2017 Graph Theory 40 Minh họa thuật toán Dijkstra Minh họa thuật toán Dijkstra Áp dụng thuật tốn Dijkstra để tìm đường ngắn từ đỉnh a đến đỉnh lại a d(b) ∞ 7 e d d(a) 17 b f 12 g Bảng 5.1: Bảng tính trọng số đường từ đến đỉnh d(c) ∞ ∞ d(d) ∞ d(e) ∞ ∞ 11 9 c d(f) ∞ ∞ ∞ ∞ ∞ ∞ 26 d(g) ∞ 6 Hình 5.21: Đồ thị đỉnh chọn a b 4 17 e d f 12 g c Hình 5.20: Tìm đường ngắn từ đỉnh a đến đỉnh lại Spring 2017 Graph Theory 41 Thuật toán Dijkstra cập nhật bước 1: d(s) = 0, d(x) = ∞, ∀x 6= s prev(x) = ∞, ∀x I bước 2: T = ∅ I bước 3: Lặp đỉnh I Chọn đỉnh y, y ∈ / T cho d(y) nhỏ I Cập nhật T : T = T + {y} I Cập nhật giá trị d prev cho đỉnh lại d (x) = d (y) + l (y, x) ∀x ∈ / T , d (x) > d (y)+l (y, x) ⇒ prev (x) = y Spring 2017 Graph Theory Graph Theory 42 Minh họa thuật toán Dijkstra cập nhật Để xác định đường ta cần biến prev(x) để lưu lại thông tin đỉnh trước đỉnh x đường I Spring 2017 43 Bảng 5.2: Bảng xác định trọng số & đỉnh trước đường a (0;null) Spring 2017 b (∞;null) (9;a) (7;d) (7;d) (7;d) c (∞;null) (∞;null) (4;d) d (∞;null) (3;a) Graph Theory e (∞;null) (∞;null) (11;d) (9;c) (9;c) (9;c) f (∞;null) (∞;null) (∞;null) (∞;null) (∞;null) (∞;null) (26;e) g (∞;null) (6;a) (6;a) (6;a) 44 Cài đặt Dijkstra hàng đợi ưu tiên Cài đặt Dijkstra hàng đợi ưu tiên (cont.) Algorithm Tìm đường từ đỉnh vs đến ve Vấn đề I I 1: Trong thực tế, đồ thị có số đỉnh lớn Do thuật tốn Dijkstra nên cài đặt hàng đợi ưu tiên Hàng đợi ưu tiên (priority queue) hàng đợi phần tử gắn với số gọi độ ưu tiên I 3: 4: 5: Định nghĩa 5.3 I 2: Độ ưu tiên ứng dụng xác định Graph Theory 7: 8: 9: Việc lấy phần tử khỏi hàng đợi dựa độ ưu tiên quy tắc FIFO Nghĩa phần tử có độ ưu tiên cao lấy trước Trong trường hợp có nhiều phần tử có độ ưu tiên sử dụng quy tắc FIFO Spring 2017 6: 45 Minh họa 10: 11: 12: 13: 14: procedure dijkstra_find_path(vs ,ve ) priority_queue ← vs (với vs d = vs prev = null) while priority_queue 6= ∅ v ← priority_queue Duyệt đỉnh v if v == ve then In đường kết thúc for đỉnh u kề với đỉnh v if đỉnh u chưa duyệt then if u ∈ priority_queue then cập nhật u.d u.pre tốt else u.pre = v u.d = v.d + l(v, u) priority_queue ← u Spring 2017 Graph Theory 46 Thuật tốn Dijkstra đồ thị có trọng số âm Thuật toán Dijkstra áp dụng cho đồ thị có trọng số âm Hình 5.22: Tìm đường đỉnh a đến đỉnh lại a b Spring 2017 c 17 e d f 12 g Bảng 5.3: Bảng tính cho thuật tốn Dijkstra sử dụng hàng đợi ưu tiên Mỗi đỉnh có hai thuộc tính d độ dài tính từ đỉnh xuất phát (dùng làm độ ưu tiên) pre đỉnh trước đỉnh v a(0;null) d(3;a) c(4;d) g(6;a) b(7;d) e(9;c) f(26;e) Graph Theory priority_queue a(0;null) b(9;a) d(3;a) g(6;a) b(7;d) g(6;a) c(4;d) e(11;d) b(7;d) g(6;a) e(9;c) b(7;d) e(9;c) e(9;c) f(26;e) ∅ 47 a b a -2 c Hình 5.23: đồ thị có trọng số âm Spring 2017 b a -2 c Hình 5.24: đường ngắn từ a - c theo Dijkstra Graph Theory b -2 c Hình 5.25: đường ngắn từ a - c thật 48 Thuật toán A* Thuật toán A* (cont.) Vấn đề I Thuật toán Dijkstra thuật tốn vét cạn Do đó, gặp nhiều khó khăn tốn có độ phức tạp lớn Thuật toán A* I I I Được Peter Hart, Nils Nilsson, Bertram Raphael đề xuất vào năm 1968 Là cải tiến đột phá từ thuật toán Dijkstra cách đỉnh có thêm thơng tin ước lượng h cho đỉnh khoảng cách từ đến đỉnh kết thúc Độ ưu tiên hàng đợi tính dựa d h Thơng thường d +h (5.2) Hình 5.26: Bài tốn với đồ thị phức tạp Spring 2017 Graph Theory 49 Thuật toán A* (cont.) Spring 2017 Graph Theory 50 Minh họa thuật toán A* Ordea Neamt Zerind a a Iasis Arad Sibiu z z Fagaras Vaslui Rimnicu Vilcea Timisoara Lugoj Pitesti Mehadia Dobreta Craiova Urziceni Hirsova Bucharest Giurgiu Eforie Hình 5.27: Các thành phố Romania Spring 2017 Graph Theory 51 Spring 2017 Graph Theory 52 Minh họa thuật toán A* 75 A O 71 Z N 151 140 S 80 118 T Minh họa thuật toán A* 111 Bảng 5.4: Khoảng cách theo đường chim bay từ thành phố đến thành phố Bucharest 87 I thành phố Arad Bucharest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugo 92 99 F V R 97 L 70 146 M 138 75 D 120 C P 142 211 101 B 85 U 98 H 86 90 E G Hình 5.28: Bản đồ đường Spring 2017 Graph Theory 53 Minh họa thuật toán A* I 266 A 366 F 176 V 199 I I P 100 U 80 M 241 D 242 Spring 2017 I R 193 L 244 H 151 B C 160 h 241 234 380 100 193 253 329 80 199 374 Graph Theory 54 Thuật toán Bellman thuật toán qui hoạch động (dynamic algorithm) sử dụng nguyên lý Bellman để tìm đường ngắn Cho đồ thị có trọng số G = (V , E , L) với n đỉnh Ý tưởng thuật toán thể qua hàm đệ qui P N 234 Z 374 T 329 Spring 2017 thành phố Mehadia Neamt Oradea Pitesti Rimnicu Vilcea Sibiu Timisoara Urziceni Vaslui Zerind Thuật toán Bellman O 380 S 253 h 366 160 242 161 176 77 151 226 244 E 161 G 77 Graph Theory 55 Hàm Pk (t) hàm trả đường ngắn từ đỉnh s đến đỉnh t qua tối đa k đỉnh khơng tính đỉnh đầu Hàm Pk+1 (t) hàm trả đường ngắn từ đỉnh s đến đỉnh t qua tối đa k + đỉnh khơng tính đỉnh đầu Hàm Pk (t) định nghĩa đệ qui sau t=s P0 (t) = ∞ t 6= s Pk+1 (t) = (Pk (t) , (Pk (v) + l (v, t) , ∀v)) (5.3) Spring 2017 Graph Theory 56 Minh họa thuật toán Bellman Minh họa thuật tốn Bellman Ví dụ 5.1 Bảng 5.5: Đồ thị, ma trận trọng số bảng tính Áp dụng thuật tốn Bellman tìm đường ngắn cho đồ thị sau từ đỉnh a Lưu ý đồ thị có mạch âm a -3 a a b c a b −3 ∞ c ∞ ∞ b b Hình 5.29: Đồ thị có trọng số âm đỉnh Spring 2017 c -3 c 4 Graph Theory 57 Minh họa thuật toán Bellman P0 P1 P2 P3 P4 P5 a a -1 a -1 a -2 a -2 a ∞ b b b b b b ∞ c c c c c c Spring 2017 Graph Theory 58 Minh họa thuật tốn Bellman P0 P1 P2 P3 P4 P5 Ví dụ 5.2 a a -1 a -1 a -2 a -2 a Áp dụng thuật tốn Bellman tìm đường ngắn cho đồ thị sau từ đỉnh a Lưu ý đồ thị khơng có mạch âm ∞ b b b b b b ∞ c c c c c c a -1 Vậy đường ngắn từ a qua tối đa đỉnh I đến đỉnh b: a b a b a b có trọng số I đến đỉnh c: a b a b a c có trọng số I đến đỉnh a: a b a b a có trọng số -2 Spring 2017 Graph Theory c b Hình 5.30: Đồ thị có trọng số âm đỉnh 59 Spring 2017 Graph Theory 60 Minh họa thuật toán Bellman Nhận xét thuật toán Bellman Nhận xét Bảng 5.6: Đồ thị, ma trận trọng số bảng tính a c I a b c a b −1 ∞ c ∞ ∞ -1 b P0 P1 P2 a a a ∞ b b b ∞ c c c Spring 2017 Graph Theory I 61 Bài tập Nếu đồ thị tồn mạch âm trọng số đường lúc giảm Điều kiện để dừng thuật toán Bellman I Nếu P P k k+1 hoàn toàn giống I Nếu điều kiện không xảy nghĩa đồ thị tồn mạch âm việc dừng thuật toán bước lặp k với đường Pk hiểu lời giải cho đường ngắn qua tối đa k đỉnh không kể đỉnh bắt đầu Spring 2017 Graph Theory 62 Bài tập (cont.) Bài tập 5.2 Bài tập 5.1 Áp dụng thuật toán Bellman tìm đường ngắn cho đồ thị sau đỉnh a Áp dụng thuật tốn Bellman tìm đường ngắn cho đồ thị sau đỉnh a a e b d c -1 a -2 Hình 5.31: Đồ thị có trọng số khơng âm đỉnh b c f d Hình 5.32: Đồ thị có trọng số âm đỉnh Spring 2017 Graph Theory 63 Spring 2017 Graph Theory 64 Thuật toán Floyd Thuật toán Floyd (cont.) Thuật toán Floyd thuật tốn qui hoạch động dùng để tìm trọng số đường ngắn cho tất cặp đỉnh đồ thị có trọng số G = (V , E , L) có n đỉnh {1, , n} Ý tưởng thuật tốn trình bày qua hàm đệ qui D sau Sau cài đặt thuật toán Floyd với n l số đỉnh ma trận trọng số đồ thị I I Hàm Dk (i, j) hàm trả đường ngắn từ đỉnh i đến đỉnh j sử dụng đỉnh trung gian {1, , k} Hàm Dk+1 (i, j) hàm trả đường ngắn từ đỉnh i đến đỉnh j sử dụng đỉnh trung gian {1, , k, k + 1} Hàm Dk (i, j) định nghĩa đệ qui sau D0 (i, j) = l (i, j) Dk+1 (i, j) = (Dk (i, j) , Dk (i, k + 1) + Dk (k + 1, j)) (5.4) I Spring 2017 Graph Theory 65 Thuật toán Floyd (cont.) 15 16 17 } Listing 5.1: Floyd algorithm 10 11 12 13 14 for (i = 0; i < n; i++) for (j = 0; j < n; j++) { d[i][j] = l[i][j]; if (d[i][j] == INFINITY ) pre[i][j] = NO; else pre[i][j] = i; } for (k = 0; k < n; k++) for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (d[i][j] > d[i][k] + d[k][j]) { Spring 2017 Graph Theory 66 Minh họa thuật toán Floyd d[i][j] = d[i][k] + d[k][j]; pre[i][j] = pre[k][j]; Ví dụ 5.3 Hãy áp dụng thuật tốn Floyd cho đồ thị -2 3 -1 Hình 5.33: Đồ thị có trọng số âm Spring 2017 Graph Theory 67 Spring 2017 Graph Theory 68 Minh họa thuật toán Floyd (cont.) Minh họa thuật toán Floyd (cont.) Ma trận trọng số đồ thị ∞ −2 ∞ 2 ∞ L= ∞ ∞ ∞ −1 ∞ k=0 k=1 1 -2 I Khi k = đường khởi tạo: →3, →1, →3, →4, →2 I Khi k = cập nhật đường đi: →1 →3 I Khi k = cập nhật đường đi: →2 →1, →2 →1 →3 I Khi k = cập nhật đường đi: →3 →4, →1 →3 →4 I Khi k = cập nhật đường đi: →3 →4 →2, →4 →2 →1, →4 →2 Spring 2017 Graph Theory 71 -2 k=3 -2 1 k=4 1 -2 -2 -2 -2 2 4 -2 -2 -1 4 -2 4 2 2 2 2 3 4 -2 4 4 -2 3 3 3 -1 3 3 -1 4 -2 3 -2 4 -2 2 3 3 3 3 3 4 4 4 -1 -1 -1 2 4 -1 -1 -1 4 -1 -1 -1 4 4 4 4 4 Minh họa thuật toán Floyd (cont.) 1 -1 69 k=2 4 Graph Theory Spring 2017 Spring 2017 -1 4 1 -2 4 1 -2 Graph Theory MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN ĐƯỜNG ĐI 70 Ma trận khoảng cách Một số khái niệm Định nghĩa 5.4 Định nghĩa 5.5 Gọi G đồ thị có trọng số khơng âm có n đỉnh v1 , v2 , , , ma trận khoảng cách (distance matrix) d ma trận vuông cấp n với Cho đồ thị có trọng số G, độ lệch (eccentricity) đỉnh v d(vi , vj ) = trọng số đường ngắn từ vi đến vj (v) = max{d(v, u)|∀u ∈ V , u 6= v} Định nghĩa 5.6 Cho đồ thị có trọng số G, tâm (center) đồ thị Lưu ý center (G) = arg min((v)) Ma trận khoảng cách cho đồ thị vô hướng trận đối xứng Spring 2017 Graph Theory v∈V 73 Một số khái niệm (cont.) Spring 2017 Graph Theory 74 Ví dụ Định nghĩa 5.7 Cho đồ thị có trọng số G, bán kính (radius) đồ thị c rad(G) = min{(v))|∀v ∈ V } a 1 Định nghĩa 5.8 e Cho đồ thị có trọng số G, đường kính (diameter) đồ thị d diam(G) = max{(v))|∀v ∈ V } b 1 f g Hình 5.34: Xác định độ lệch, tâm, bán kính đường kính Spring 2017 Graph Theory 75 Spring 2017 Graph Theory 76 Tài liệu tham khảo Spring 2017 Graph Theory 77 .. .Đường (cont.) Các tốn đường Phân loại đường I Đường sơ cấp đường khơng có đỉnh lặp lại I Đường đơn đường khơng có cạnh lặp lại I Đường tổng qt khơng ràng buộc Bài tốn 5.1 (Bài tốn tìm đường. .. s t Hãy tìm đường sơ cấp từ s t Bài toán 5.2 (Bài toán tìm tất đường sơ cấp) Cho đồ thị G = (V , E ) hai đỉnh s t Hãy tìm tất đường sơ cấp từ s t Spring 2017 Graph Theory Các toán đường (cont.)... tìm đường đơn từ s t Bài tốn 5.4 (Bài tốn tìm đường có chiều dài cho trước) Bài tốn 5.5 (Bài tốn tìm chu trình sơ cấp) Cho đồ thị G = (V , E ) hai s Hãy tìm chu trình sơ cấp qua s Bài tốn 5.6 (Bài