Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
1,16 MB
Nội dung
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 (2007) I. Giới thiệu bài toán II. Hạn chế của các thuật toán trước đây III. Ưu điểm của thuật toán Các đường đi ngắn nhất và phép nhân ma trận IV. Cấu trúc của một đường đi ngắn nhất V. Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp VI. Tính toán các trọng số đường đi ngắn nhất dưới lên VII. Cải thiện thời gian thực hiện VIII. Chương trình Pascal NỘI DUNG TRÌNH BÀY I. Giới thiệu bài toán Giả sử cho đồ thị trọng số, có hướng G = (V, E) có n đỉnh V = {1, 2, …,n}, E = { (i,j) / i,j ∈ V } và ma trận trọng số W nxn = (ω ij ). Ví dụ: Vấn đề đặt ra: tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh trong một đồ thị G=(V, E). Output: Kết quả của bài toán là một ma trận L nxn = (l ij ) chứa trọng số của các đường đi ngắn nhất từ đỉnh i đến đỉnh j. Input: Ma trận trọng số W nxn = (ω ij ) và số đỉnh n chứa trong File như sau, (chú ý: vocung( ∞ ):=50) 5 0 3 8 50 -4 50 0 50 1 7 50 4 0 50 50 2 50 -5 0 50 50 50 50 6 0 I. Giới thiệu bài toán II. Hạn chế của các thuật toán trước đây 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 n 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. 1. Nếu dùng cách thực thi mảng tuyến tính của hàng đợi ưu tiên thì độ phức tạp là O(V 3 +V.E)=O(V 3 ). 2. Cách thực thi đống nhị phân của hàng đợi ưu tiên, O(V.E.lgV), là một cải thiện nếu đồ thị thưa. 3. Một cách khác, chúng ta có thể thực thi hàng đợi ưu tiên với đống Fibonacci, là O(V 2 .lgV+V.E). * 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 với độ phức tạp là O(V 2 .E), mà trên một đồ thị trù mật là O(V 4 ). III. Ưu điểm của thuật toán trình bày Các đường đi ngắn nhất và phép nhân ma trận (Shortest paths and matrix multiplication) Phầ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 0(V 4 ) cho bài toán các đường đi ngắn nhất mọi cặp và sau đó cải tiến đến 0(V 3 .lgV). Các bước phát triển một thuật toán quy hoạch động của bài toán: 1. 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. IV. Cấu trúc của một đường đi ngắn nhất (The structure of a shortest path) 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 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. ji p p chứa tối đa m cạnh k j i p’ ω kj p’ chứa tối đa m-1 cạnh 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 i = j thì p có trọng số 0 và không có các cạnh. Nếu đỉnh i ≠ j, chúng ta phân tích đường đi p thành: Do vậy, p’ là một đường đi ngắn nhất từ i đến k, và Gọi 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. V. Một giải pháp đệ quy cho bài toán các đường đi ngắn nhất mọi cặp Với m=0: Với m ≥ 1: Đẳng thức (2) là đúng do ω jj = 0 với mọi j . Vấn đề: Trọng số đường đi ngắn nhất thực tế δ(i,j) là gì? Vì vậy, 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 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. Chú ý: khái niệm chu trình trọng số âm, ví dụ đồ thị sau: Đồ thị trên có chu trình trọng số âm là <e,f,e> nên các đường đi từ s đến e có trọng số âm lớn tùy ý và δ(s,e)= - ∞. Do đó, các trọng số đường đi ngắn nhất thực tế được đưa ra bởi VI. Tính toán các trọng số đường đi ngắn nhất dưới lên Cho trước ma trận W=(ω ij ). Chúng ta có: trong đó m = 1, 2, …, n–1 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) ,, 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ế. 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. Thời gian thực hiện là 0(n 3 ) do ba vòng lặp for lồng vào nhau ENTEND-SHORTEST-PATHS(L, W) 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ị và ma trận L(m) được tính toán bởi thủ tục SHOW-ALL-PAIRS -SHORTEST- PATHS VII Cải thiện thời gian thực hiệ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) Chú ý: các trọng số đường đi ngắn nhất thực tế được đưa ra bởi và L(m) = L(n-1) với tất cả các số nguyên m ≥ 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. .. 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 Thời gian thực hiện của FASTER–ALL–PAIRS SHORTEST PATHS là 0(n3.lgn) bởi mỗi số lg(n – 1) tích ma trận mất 0(n3) thời gian Kết luận: Chúng ta đã phát triển một thuật toán 0(V4) cho bài toán các đường đi ngắn nhất mọi cặp và cải tiến đến 0(V3.lgV) VIII Chương trình Pascal: Program AllPairs; Uses crt; Const vocung=50; Type Mang=array[1... ta muốn tính tích ma trận C = A.B của hai ma trận nxn A và B Như vậy, với i,j=1, 2, …, n, chúng ta tính toán Nhận thấy nếu chúng ta thực hiện phép thay thế 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 cij ← 0 6 for k ← 1 to n 7 do cij ← cij + aik bkj 8 return C Như vậy, nếu chúng ta thực hiện các thay đổi này đối với ENTENDSHORTEST-PATHS... n do read(f,W[i,j]); readln(f); end; close(f); End; Procedure SHORTESTPATHS(L,W:Mang;var K:Mang); var i,j,h:byte; Begin for i:=1 to n do for j:=1 to n do begin K[i,j]:=vocung; for h:=1 to n do if K[i,j] > (L[i,h]+W[h,j]) then K[i,j]:=L[i,h]+W[h,j]; end; End; Procedure FASTER(W:Mang); var m:byte; Begin L[1]:=W; m:=1; while m . Giới thiệu bài toán II. Hạn chế của các thuật toán trước đây 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. toán II. Hạn chế của các thuật toán trước đây III. Ưu đi m của thuật toán Các đường đi ngắn nhất và phép nhân ma trận IV. Cấu trúc của một đường đi ngắn nhất V. Một giải pháp đệ quy cho bài toán các. đi m của thuật toán trình bày Các đường đi ngắn nhất và phép nhân ma trận (Shortest paths and matrix multiplication) Phầ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