Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
422 KB
Nội dung
ĐẠI HỌC HUẾ TRƯỜNG ĐẠI HỌC KHOA HỌC KHOA CÔNG NGHỆ THÔNG TIN TIỂU LUẬN Môn học: Thiết kế và phân tích thuật toán Đề tài: CÁC ĐƯỜNG ĐI NGẮN NHẤT MỌI CẶP (ALL-PAIRS SHORTEST PATHS) Giáo viên hướng dẫn: TS. Hoàng Quang Học viên thực hiện (Nhóm 7): Lê Thị Minh Hương Lê Văn Thái Khương Nguyễn Thanh Vinh Lớp: Khoa học máy tính (2014) Huế, 03 – 2014 MỤC LỤC Lời nói đầu 2 Khái quát 3 1. Các đường đi ngắn nhất và phép nhân ma trận 4 1.1. Cấu trúc của một đường đi ngắn nhất 4 1.2. Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp 5 1.3. Tính toán các trọng số đường đi ngắn nhất dưới lên 5 1.4. Cải thiện thời gian thực hiện 8 1.5. Bài tập 9 2. Thuật toán Floyd-Warshall 10 2.1. Cấu trúc của một đường đi ngắn nhất 10 2.2. Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp 11 2.3. Tính toán các trọng số đường đi ngắn nhất dưới lên 12 2.4. Thiết lập một đường đi ngắn nhất 13 2.5. Bao đóng bắc cầu của một đồ thị có hướng 14 2.6. Bài Tập 16 3. Thuật toán Johnson cho đồ thị thưa 17 3.1. Duy trì các đường đi ngắn nhất bằng cách tái trọng số 18 3.2. Sinh các trọng số không âm bằng cách tái trọng số 19 3.3. Tính toán các đường đi ngắn nhất mọi cặp 20 3.4. Bài tập 21 4. Các bài toán 22 4.1 Bao đóng bắc cầu của một đồ thị động 22 4.2 Các đường đi ngắn nhất trong đồ thị trù mật ε 23 2 Lời nói đầu Trong phần này, chúng ta xét bài toán tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh trong một đồ thị. Bài toán này phát sinh trong khi lập một bảng các khoảng cách giữa tất cả các cặp thành phố cho một bản đồ đường. Chúng ta đưa ra một đồ thị có hướng trọng số G=(V,E) với một hàm trọng số ω: E→R ánh xạ các cung theo trọng số giá trị thực. Chúng ta muốn tìm, với mọi cặp đỉnh u,v∈V, một đường đi ngắn nhất (trọng số ít nhất) từ u đến v, ở đó trọng số của đường đi là tổng các trọng số của các cung cấu thành nó. Chúng ta muốn đưa ra một dạng bảng biểu: tại hàng u và cột v sẽ là trọng số của một đường đi ngắn nhất từ u đến v. Chúng ta có thể giải quyết bài toán các đường đi ngắn nhất mọi cặp bằng cách chạy một thuật toán các đường đi ngắn nhất nguồn đơn V lần, mỗi lần cho một đỉnh làm nguồn. Nếu tất cả các trọng số là không âm, chúng ta có thể sử dụng thuật toán Dijkstra. Nếu chúng ta dùng cách thực thi mảng tuyến tính của hàng đợi ưu tiên, thời gian thực hiện là O(V 3 +VE)=O(V 3 ). Cách thực thi đống nhị phân của hàng đợi ưu tiên có thời gian thực hiện là O(VElgV), là một cải thiện nếu đồ thị thưa. Một cách khác, chúng ta có thể thực thi hàng đợi ưu tiên với đống Fibonacci, mang lại thời gian thực hiện là O(V 2 lgV+VE). Nếu các trọng số cung âm được phép, thuật toán Dijkstra có thể không còn được sử dụng. Thay vào đó, chúng ta phải chạy thuật toán Bellman-Ford chậm hơn mỗi lần từ một đỉnh. Kết quả thời gian thực hiện là O(V 2 E), mà trên một đồ thị trù mật là O(V 4 ). Trong phần này, chúng ta sẽ giải thích cách thực hiện tốt hơn. Chúng ta cũng nghiên cứu quan hệ của bài toán các đường đi ngắn nhất mọi cặp với phép nhân ma trận và nghiên cứu cấu trúc đại số của nó. Khác với các thuật toán nguồn đơn, giả sử một phép biểu diễn danh sách kề của đồ thị, hầu hết các thuật toán trong phần này đều sử dụng phép biểu diễn ma trận kề. (Thuật toán Johnson cho đồ thị thưa sử dụng các danh sách kề.) Để thuận tiện, chúng ta giả sử rằng các đỉnh là các số 1, 2, …, V , vì vậy đầu vào là một ma trận n x n W biểu thị các trọng số cạnh của một đồ thị có hướng n đỉnh G=(V,E). Nghĩa là, W=(ω ij ), trong đó 0 nếu i = j, ω ij = trọng số của cạnh có hướng (i,j) nếu i ≠ j và (i,j) ∈ E, (1) ∞ nếu i ≠ j và (i,j) ∉ E. Các trọng số cung âm được phép, nhưng chúng ta giả sử rằng đồ thị không chứa các chu trình trọng số âm. 3 Bảng kết quả của thuật toán đường đi ngắn nhất mọi cặp được trình bày trong phần này là một ma trận n x n D=(d ij ), trong đó d ij chứa trọng số của đường đi ngắn nhất từ đỉnh i đến đỉnh j. Nghĩa là, nếu ta cho δ(i,j) thể hiện trọng số đường đi ngắn nhất từ đỉnh i đến đỉnh j thì d ij = δ(i,j) vào lúc kết thúc. Để giải quyết bài toán các đường đi ngắn nhất mọi cặp đỉnh trên một ma trận kề cho trước, chúng ta cần tính toán không chỉ các trọng số đường đi ngắn nhất mà còn một ma trận đã được xét trước đây (predecessor matrix) Π=(π ij ), trong đó π ij là NIL nếu i = j hoặc không có đường đi từ i đến j, và ngược lại bằng π ij là phần tử trước (predecessor) nào đó của j trên một đường đi ngắn nhất từ i. Cũng như đồ thị con đã được xét trước đây (predecessor subgraph) G π trong chương 24 là một cây các đường đi ngắn nhất đối với một đỉnh nguồn đã cho, đồ thị con được tạo bởi hàng thứ i của ma trận Π phải là một các cây đường đi ngắn nhất có gốc i. Với mỗi đỉnh i ∈ V, chúng ta định nghĩa đồ thị con đã được xét trước đây (predecessor subgraph) của G với i là G π ,i =(V π ,i ,E π ,i ), trong đó V π ,i = { j ∈ V: π ij ≠ NIL } ∪ { i } và E π ,i = { (π ij , j ): j ∈ V π ,i – { i }} Nếu G π ,i là một cây các đường đi ngắn nhất, thì thủ tục dưới đây, là một phiên bản đã thay đổi của thủ tục PRINT-PATH trong chương 22, in một đường đi ngắn nhất từ đỉnh i đến đỉnh j. PRINT-ALL-PAIRS-SHORTEST-PATH(Π, i, j) 1 if i=j 2 then print i 3 else if π ij = NiL 4 then print “không tồn tại đường đi từ đỉnh i đến đỉnh j” 5 else PRINT-ALL-PAIRS-SHORTEST-PATH(Π, i, π ij ) 6 print j Để nêu bật các tính năng chủ yếu của các thuật toán mọi cặp trong phần này, chúng ta sẽ không đề cập cách tạo và các tính chất của các ma trận đã được xét trước đây (predecessor matrix) nhiều như trường hợp các đồ thị con đã được xét trước đây (predecessor subgraph) trong chương 24. Những điểm cơ bản được đề cập bởi một số bài tập. Khái quát Đoạn 1 trình bày một thuật toán quy hoạch động dựa trên phép nhân ma trận để giải quyết bài toán các đường đi ngắn nhất mọi cặp. Sử dụng kỹ thuật “bình phương lặp lại”, thuật toán này có thể chạy trong Θ(V 3 lgV) thời gian. Một thuật toán quy hoạch động khác, thuật toán Floyd-Warshall, được đưa ra trong đoạn 2. Thuật toán Floyd-Warshall chạy trong thời gian Θ(V 3 ). Đoạn 2 cũng đề cập bài toán tìm bao đóng bắc cầu của một đồ thị có hướng, liên quan đến bài toán các 4 đường đi ngắn nhất mọi cặp. Cuối cùng, đoạn 3 trình bày thuật toán Jonhson. Không như các thuật toán khác trong phần này, thuật toán Jonhson sử dụng biểu diễn danh sách kề của một đồ thị. Nó giải quyết bài toán các đường đi ngắn nhất mọi cặp trong O(V 2 lgV+VE) thời gian, khiến nó trở thành thuật toán tốt cho đồ thị thưa, lớn. Trước khi tiến hành, chúng ta cần thiết lập một số quy ước cho các phép biểu diễn ma trận kề. Thứ nhất, chúng ta sẽ giả sử chung rằng cho trước đồ thị G=(V,E) có n đỉnh, sao cho n = V . Thứ hai, chúng ta sẽ dùng quy ước biểu thị các ma trận bằng các chữ cái hoa, như W, L hoặc D, và các phần tử riêng lẻ của chúng bằng các chữ cái thường chỉ số dưới, như ω ij , l ij , hoặc d ij . Một số ma trận sẽ có các chỉ số trên đóng ngoặc đơn, như L (m) = (l ij (m) ) hoặc D (m) = (d ij (m) ), để chỉ các lần lặp lại. Cuối cùng, với một ma trận đã cho n x n A, chúng ta sẽ giả sử rằng giá trị của n được lưu trữ trong thuộc tính rows[A]. 1. Các đường đi ngắn nhất và phép nhân ma trận (Shortest paths and matrix multiplication) Đoạn này trình bày một thuật toán quy hoạch động cho bài toán các đường đi ngắn nhất mọi cặp trên một đồ thị có hướng G=(V,E). Mỗi vòng lặp chính của chương trình động sẽ thực hiện một phép toán tương tự như phép nhân ma trận, vì vậy thuật toán trông giống như phép nhân ma trận lặp lại. Chúng ta sẽ bắt đầu bằng việc phát triển một thuật toán Θ(V 4 ) thời gian cho bài toán các đường đi ngắn nhất mọi cặp và sau đó cải tiến thời gian thực hiện của nó đến Θ(V 3 lgV). Trước khi tiến hành, chúng ta hãy tóm tắt ngắn gọn lại các bước đã nêu trong chương 15 cho việc phát triển một thuật toán quy hoạch động. 1. Đặc điểm cấu trúc của một giải pháp tối ưu. 2. Định nghĩa đệ quy giá trị của một giải pháp tối ưu. 3. Tính toán giá trị của một giải pháp tối ưu theo dạng dưới lên. (Bước thứ tư, kiến tạo một giải pháp tối ưu từ thông tin đã tính toán, sẽ dành cho các bài tập.) 1.1. Cấu trúc của một đường đi ngắn nhất (The structure of a shortest path) Chúng ta bắt đầu bằng việc chỉ ra đặc điểm cấu trúc của một giải pháp tối ưu. Với bài toán các đường đi ngắn nhất mọi cặp trên một đồ thị G=(V,E), chúng ta đã chứng minh (Bổ đề 24.1) rằng tất cả các đường đi con của một đường đi ngắn nhất là các đường đi ngắn nhất. Giả sử rằng đồ thị được biểu thị bởi một ma trận kề W=(ω ij ). Xét một đường đi ngắn nhất p từ đỉnh i đến đỉnh j, và giả sử rằng p chứa tối đa m cạnh. Giả sử không có các chu trình trọng số âm, m hữu hạn. Nếu 5 i = j thì p có trọng số 0 và không có các cạnh. Nếu đỉnh i và đỉnh j phân biệt, chúng ta phân tích đường đi p thành i p’ k → j, ở đó đường đi p’ giờ đây chứa tối đa m – 1 cạnh. Theo bổ đề 24.1, p’ là một đường đi ngắn nhất từ i đến k, và vì vậy δ(i,j) = δ(i,k) + ω kj . 1.2. Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp (A recursive solution to the all-pairs shortest-paths problem) Bây giờ, cho l ij (m) là trọng số cực tiểu của đường đi nào đó từ đỉnh i đến đỉnh j chứa tối đa m cạnh. Khi m=0, đó là một đường đi ngắn nhất từ i đến j mà không có cạnh nào nếu và chỉ nếu i = j. Như vậy, 0 nếu i = j. ∞ nếu i ≠ j. Với m ≥ 1, chúng ta tính toán l ij (m) dưới dạng cực tiểu của l ij (m – 1) (trọng số của đường đi ngắn nhất từ i đến j bao gồm tối đa m–1 cạnh) và trọng số cực tiểu của đường đi bất kỳ từ i đến j bao gồm tối đa m cạnh, có được bằng cách xem xét tất cả các phần tử trước có thể (possible predecessor) k của j. Như vậy, chúng ta định nghĩa theo đệ quy l ij (m) = min (l ij (m – 1) , min{l ik (m – 1) + ω kj }) = min{l ik (m – 1) + ω kj } (2) Đẳng thức sau là đúng do ω jj = 0 với mọi j. Trọng số đường đi ngắn nhất thực tế δ(i,j) là gì?. Nếu đồ thị không chứa các chu trình trọng số âm thì với mỗi cặp đỉnh i và j sao cho δ(i,j) < ∞, có một đường đi ngắn nhất từ i đến j là đơn giản và như vậy chứa tối đa n–1 cạnh. Một đường đi từ đỉnh i đến đỉnh j với hơn n–1 cạnh không thể có ít trọng số hơn một đường đi ngắn nhất từ i đến j. Do đó, các trọng số đường đi ngắn nhất thực tế được đưa ra bởi δ(i,j) = l ij (n – 1) = l ij (n ) = l ij (n + 1) = … (3) 1.3. Tính toán các trọng số đường đi ngắn nhất dưới lên (Computing the shortest-path weights bottom up) Cho trước ma trận W=(ω ij ), bây giờ chúng ta tính toán một chuỗi các ma trận L (1) , L (2) , …, L (n – 1) , trong đó m = 1, 2, …, n – 1, chúng ta có L (m) =(l ij (m) ). Ma trận cuối cùng L (n – 1) chứa các trọng số đường đi ngắn nhất thực tế. Nhận thấy rằng như l ij (1) = ω ij với mọi đỉnh i, j ∈ V, nên ta có L (1) = W. Trọng tâm của thuật toán là thủ tục dưới đây, được đưa ra các ma trận L (m – 1) và W, trả về ma trận L (m) . Nghĩa là, nó mở rộng tính toán đường đi ngắn nhất hơn một cạnh. ENTEND-SHORTEST-PATHS(L, W) 6 l ij (0) = 1 ≤ k ≤ n 1 ≤ k ≤ n 1 n ← rows[L] 2 Cho L’ = (l’ ij ) là một ma trận n x n 3 for i ← 1 to n 4 do for j ← 1 to n 5 do l’ ij ← ∞ 6 for k ← 1 to n 7 do l’ ij ← min(l’ ij , l ik + ω kj ) 8 return L’ Thủ tục tính toán ma trận L’ = (l’ ij ), mà nó trả về vào cuối. Để thực hiện, nó tính toán phương trình cho tất cả i và j, sử dụng L với L (m – 1) và L’ với L (m) (Nó được viết mà không có các chỉ số trên để các ma trận đầu vào và đầu ra của nó độc lập với m). Thời gian thực hiện là Θ(n 3 ) do ba vòng lặp for lồng vào nhau. Bây giờ, chúng ta có thể thấy quan hệ với phép nhân ma trận. Giả sử chúng ta muốn tính tích ma trận C = A.B của hai ma trận n x n A và B. Như vậy, với i,j=1, 2, …, n, chúng ta tính toán c ij = ∑ = n k 1 a ik .b kj (4) Nhận thấy nếu chúng ta thực hiện phép thay thế l (m – 1) → a, ω → b, l (m ) → c, min → +, + → . trong phương trình (2), chúng ta được phương trình (4). Như vậy, nếu chúng ta thực hiện các thay đổi này đối với ENTEND-SHORTEST-PATHS và cũng thay ∞ (đồng nhất thức của min) bằng 0 (đồng nhất thức của +), chúng ta có được thủ tục không phức tạp Θ(n 3 ) - thời gian cho phép nhân ma trận: MATRIX-MULTIPLY(A, B) 1 n ← rows[A] 2 Cho C là một ma trận n x n 3 for i ← 1 to n 4 do for j ← 1 to n 5 do c ij ← 0 6 for k ← 1 to n 7 do c ij ← c ij + a ik .b kj 8 return C Trở lại bài toán các đường đi ngắn nhất mọi cặp, chúng ta tính toán các trọng số đường đi ngắn nhất bằng cách mở rộng các đường đi ngắn nhất theo từng cạnh. Việc cho A.B thể hiện “tích” ma trận do ENTEND-SHORTEST-PATHS(A, B) trả về, chúng ta tính toán dãy n–1 ma trận 7 L (1) = L (0) . W = W, L (2) = L (1) . W = W 2 , L (3) = L (2) . W = W 3 , . . . L (n – 1) = L (n – 2) . W = W n – 1 . Như chúng ta đã chứng tỏ ở trên, ma trận L (n – 1) = W n – 1 chứa các trọng số đường đi ngắn nhất. Thủ tục sau tính toán dãy này trong Θ(n 4 ) thời gian. SHOW-ALL-PAIRS-SHORTEST-PATHS(W) 1 n ← rows[W] 2 L (1) ← W 3 for m ← 2 to n – 1 4 do L (m) ← ENTEND-SHORTEST-PATHS(L (m – 1) , W) 5 return L (n – 1 ) Hình 1 trình bày một đồ thị và ma trận L (m) được tính toán bởi thủ tục SHOW- ALL-PAIRS-SHORTEST-PATHS. L (1) = 06 052 04 710 4830 ∞∞∞ ∞−∞ ∞∞∞ ∞∞ −∞ L (2) = 0618 20512 11504 71403 42830 ∞ −−− ∞ − − L (3) = 06158 20512 115047 11403 42330 −−− −− −− L (4) = 06158 20512 35047 11403 42330 −−− −− −− Hình 1 Một đồ thị có hướng và dãy các ma trận L (m) được tính toán bởi SHOW–ALL–PAIRS–SHORTEST–PATHS. Độc giả có thể kiểm tra rằng L (5) =L (4) .W bằng với L (4) và như vậy L (m) = L (4) với mọi m ≥ 4. 8 1 2 3 4 5 5 – 4 3 – 5 4 2 8 6 7 1 1.4. Cải thiện thời gian thực hiện (Improving the running time) Tuy nhiên, mục tiêu của chúng ta là không tính toán tất cả các ma trận L (m) : chúng ta chỉ quan tâm đến ma trận L (n – 1) . Hãy nhớ lại rằng trong trường hợp không có các chu trình trọng số âm, phương trình (3) hàm ý L (m) = L (n – 1) với tất cả các số nguyên m ≥ n – 1. Với sự kết hợp của phép nhân ma trận truyền thống, vì vậy phép nhân ma trận được xác định bởi thủ tục ENTEND-SHORTEST - PATHS (xem bài tập 1-4). Do đó, chúng ta có thể tính toán L (n–1) với chỉ lg(n – 1) tích ma trận bằng cách tính toán dãy L (1) = W, L (2) = W 2 = W.W , L (4) = W 4 = W 2 .W 2 , L (8) = W 8 = W 4 .W 4 , . . . L (2 ) = W 2 = W 2 .W 2 Do 2 ≥ n – 1, nên tích cuối cùng L (2 ) bằng L (n – 1) . Thủ tục dưới đây tính toán dãy ma trận ở trên bằng cách dùng kỹ thuật bình phương lặp lại. FASTER-ALL-PAIRS-SHORTEST-PATHS(W) 1 n ← rows[W] 2 L (1) ← W 3 m ← 1 4 while m < n – 1 5 do L (2m) ← ENTEND-SHORTEST-PATHS(L (m) , L (m) ) 6 m ← 2m 7 return L (m) Trong mỗi lần lặp lại của vòng lặp while của các dòng 4 – 6, chúng ta tính toán L (2m) = (L (m) ) 2 , bắt đầu với m=1. Vào cuối mỗi lần lặp lại, chúng ta nhân đôi giá trị của m. Lần lặp cuối tính toán L (n – 1) bằng cách thực tế tính toán L (2m) cho mỗi n – 1 ≤ 2m ≤ 2n – 2. Theo phương trình (3), L (2m) = L (n – 1) . Việc kiểm tra lần kế tiếp ở dòng 4 được thực hiện, m đã được nhân đôi, vì vậy bây giờ m ≥ n – 1, kiểm tra thất bại, và thủ tục trả về ma trận cuối mà nó đã tính toán. Thời gian thực hiện của FASTER–ALL–PAIRS–SHORTEST–PATHS là Θ(n 3 lgn) bởi mỗi số lg(n – 1) tích ma trận mất Θ(n 3 ) thời gian. Nhận thấy rằng, mã là chặt, không chứa các cấu trúc dữ liệu phức tạp, và do đó hằng ẩn trong ký hiệu Θ là nhỏ. 9 lg(n – 1) lg(n – 1) lg(n – 1) - 1 lg(n – 1) - 1 lg(n – 1) lg(n – 1) Hình 2 Một đồ thị có hướng, trọng số dùng trong các bài tập 1-1, 2-1, và 3-1. 1.5. Bài tập 1-1 Chạy SHOW-ALL-PAIRS-SHORTEST-PATHS trên đồ thị có hướng, trọng số của Hình 2, trình bày các ma trận kết quả cho mỗi lần lặp lại của vòng lặp. Sau đó, thực hiện tương tự với FASTER-ALL-PAIRS-SHORTEST-PATHS. 1-2 Tại sao chúng ta yêu cầu ω ii = 0 với mọi 1 ≤ i ≤ n ? 1-3 Ma trận L (0) = 0 0 0 0 ∞∞∞∞ ∞∞∞ ∞∞∞ ∞∞∞ dùng trong các thuật toán đường đi ngắn nhất tương ứng với phép nhân ma trận bình thường nào? 1-4 Trình bày phép nhân ma trận nào được kết hợp trong định nghĩa bởi ENTEND- SHORTEST-PATHS. 1-5 Trình bày cách biểu diễn bài toán các đường đi ngắn nhất nguồn đơn dưới dạng một tích các ma trận và một vectơ. Mô tả cách đánh giá tích này tương ứng với một thuật toán Bellman-Ford (xem đoạn 24.1). 1-6 Giả sử chúng ta muốn tính toán các đỉnh trên đường đi ngắn nhất trong các thuật toán của đoạn này. Trình bày cách tính toán ma trận đã được xét trước đây Π từ ma trận hoàn thành L của các trọng số đường đi ngắn nhất trong O(n 3 ) thời gian. 10 – 4 1 – 8 3 2 2 5 1 2 3 4 5 5 6 –1 7 10 [...]... thị có hướng 2.1 Cấu trúc của một đường đi ngắn nhất (The structure of a shortest path) Trong thuật toán Floyd-Warshall, chúng ta dùng một mô tả đặc đi m khác về cấu trúc của một đường đi ngắn nhất hơn cách dùng thuật toán mọi cặp trong nền tảng phép nhân ma trận Thuật toán xét các đỉnh “trung gian” của một đường đi ngắn nhất, trong đó một đỉnh trung gian của một đường đi đơn giản p= là bất... mối quan hệ giữa đường đi p và các đường đi ngắn nhất từ i đến j với tất cả các đỉnh trung gian trong tập hợp {1,2,…, k-1} Mối quan hệ tùy thuộc vào việc k có là một đỉnh trung gian của đường đi p không • Nếu k không phải đỉnh trung gian của đường đi p, thì tất cả các đỉnh trung gian của đường đi p nằm trong tập {1,2,…,k-1} Như vậy, một đường đi ngắn nhất từ đỉnh i đến đỉnh j với tất các đỉnh trung gian... cao nhất của p Đường đi p1, một phần của đường đi p từ đỉnh i đến đỉnh k, có tất cả các đỉnh trung gian trong tập hợp {1,2,…,k-1} Tương tự đường đi p2 từ đỉnh k đến đỉnh j 2.2 Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp (A recursive solution to the all-pairs shortest- path problem) Dựa vào các nhận xét ở trên, chúng ta định nghĩa một một công thức đệ quy ước (k) lượng đường đi ngắn. .. màu đen, và những cạnh được tô bóng là cây đường đi ˆ ngắn nhất được tính toán bởi thuật toán Trong mỗi đỉnh v là giá trị δ (u,v) và δ(u,v) được ˆ tách ra bằng một vạch xiên Giá trị duv = δ(u,v) bằng với δ (u,v) + h(v) – h(u) 3.3 Tính toán các đường đi ngắn nhất mọi cặp (Computing all-pairs shortest paths) Thuật toán Johnson để tính các đường đi ngắn nhất mọi cặp sử dụng thuật toán Bellman-Ford (đoạn... (Preserving shortest paths by reweighting) Như các bổ đề sau trình bày, nó thật dễ dàng để đi đến một tái trọng số của các cạnh thỏa mãn tính chất đầu tiên ở trên Chúng ta dùng δ để biểu thị các trọng số đường đi ngắn nhất xuất phát từ hàm có trọng số w và δˆ để biểu thị các trọng số ˆ đường đi ngắn nhất xuất phát từ hàm có trọng số ω Bổ đề 1 (Tái trọng số không làm thay đổi các đường đi ngắn nhất) Cho... Với mọi cặp đỉnh u,v ∈V, một đường đi p là đường đi ngắn nhất từ u đến v sử dụng hàm trọng số w khi và chỉ khi p là đường đi ngắn nhất từ u đến v sử ˆ dùng hàm có trọng số ω ˆ 2 Với tất cả các cạnh (u,v), trọng số mới ω (u,v) là không âm ˆ Như chúng ta sẽ thấy, việc xử lý lại của G để xác định hàm trọng số mới ω có thể được thực hiện trong O(VE) thời gian 3.1 Duy trì các đường đi ngắn nhất bằng cách... này với các mức hao phí khấu trừ của các phép toán này đối với một đống Fibonacci b Nêu cách tính các đường đi ngắn nhất từ một nguồn đơn trên một đồ thị trù mật ε có hướng G=(V,E) không có các trọng số cạnh âm trong O(E) thời gian c Nêu cách giải quyết bài toán các đường đi ngắn nhất mọi cặp trên một đồ thị trù mật ε có hướng G=(V,E) không có các trọng số cạnh âm trong O(V,E) thời gian d Nêu cách giải... rằng p1 là một đường đi ngắn nhất từ i đến k với các đỉnh trung gian trong tập {1,2, ,k-1} Tương tự, p2 là một đường đi ngắn nhất từ đỉnh k đến đỉnh j với các đỉnh trung gian trong tập {1,2,…,k-1} tất cả các đỉnh trung gian trong {1,2,…,k-1} tất cả các đỉnh trung gian trong {1,2,…,k-1} k p1 p2 i j p: tất cả các đỉnh trung gian trong tập {1,2,…,k} Hình 3 Đường đi p là một đường đi ngắn nhất từ đỉnh i đến...1-7 Các đỉnh trên các đường đi ngắn nhất cũng có thể được tính toán cùng thời gian như các trọng số đường đi ngắn nhất Chúng ta hãy định nghĩa πij(m) là phần tử trước của đỉnh j trên bất kỳ đường đi trọng số cực tiểu từ i đến j chứa tối đa m cạnh Thay đổi ENTEND -SHORTEST- PATHS và SHOW-ALL-PAIRSSHORTEST-PATHS để tính toán các ma trận Π(1), Π(2), …, Π(n – 1) khi các ma trận L(1), L(2),... các cấu trúc dữ liệu không phức tạp và do đó hằng số ẩn trong ký hiệu Θ là nhỏ Như vậy, thuật toán Floyd-Warshall là thực thi hầu hết ngay cả các đồ thị đầu vào có kích cỡ vừa 2.4 Thiết lập một đường đi ngắn nhất (Constructing a shortest path) Có một số phương pháp khác nhau để thiết lập các đường đi ngắn nhất trong thuật toán Floyd-Warshall Có một cách là tính ma trận D của các trọng số đường đi ngắn . toán các đường đi ngắn nhất mọi cặp, chúng ta tính toán các trọng số đường đi ngắn nhất bằng cách mở rộng các đường đi ngắn nhất theo từng cạnh. Việc cho A.B thể hiện “tích” ma trận do ENTEND -SHORTEST- PATHS(A,. 3 1. Các đường đi ngắn nhất và phép nhân ma trận 4 1.1. Cấu trúc của một đường đi ngắn nhất 4 1.2. Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp 5 1.3. Tính toán các trọng số đường. toán các đường đi ngắn nhất mọi cặp trên một đồ thị G=(V,E), chúng ta đã chứng minh (Bổ đề 24.1) rằng tất cả các đường đi con của một đường đi ngắn nhất là các đường đi ngắn nhất. Giả sử rằng