1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN CÁC ĐƯỜNG ĐI NGẮN NHẤT MỌI CẶP (ALL-PAIRS SHORTEST PATHS)

19 520 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ư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.. 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.. Output: Kết quả của bài toán là một ma trận

Trang 1

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)

Trang 2

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

Trang 3

I Giới thiệu bài toán

Giả sử cho đồ thị trọng số, có hướng G = (V, E)n đỉnh

V = {1, 2, …,n} , E = { (i,j) / i,j  V } và ma trận trọng số W nxn = ( ij ).

Ví dụ:

Trang 4

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

Lnxn = (lij) 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ố Wnxn = (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

Trang 5

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(V3+V.E)=O(V3)

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(V2.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(V2.E), mà trên một đồ thị trù mật là O(V4)

Trang 6

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.

Trang 7

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

j

p chứa tối đa m cạnh

i

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

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à

Trang 8

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

Trang 9

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 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

Trang 10

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)

Trang 11

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 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ế

Như vậy, nếu chúng ta thực hiện các thay đổi này đối với ENTEND-SHORTEST-PATHS chúng ta có được thủ tục không phức tạp 0(n 3 )

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

8 return C

Trang 13

Hình sau 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.

Trang 14

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

Trang 15

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.

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

các đường đi ngắn nhất mọi cặp và cải tiến đến 0(V3.lgV).

Trang 16

VIII Chương trình Pascal:

Program AllPairs;

Uses crt;

Const vocung=50;

Type Mang=array[1 10,1 10] of integer;

var

W,K:Mang;

L:array[1 10] of Mang;

n:integer;

Procedure Nhap;

var f:Text;

i,j:byte;

Begin

assign(f,'AllPairs.txt');

reset(f);

readln(f,n);

fillchar(W,sizeof(W),0);

for i:=1 to n do begin

for j:=1 to n do read(f,W[i,j]); readln(f);

end;

close(f);

End;

Trang 17

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<n-1 do

begin

SHORTESTPATHS(L[m],L[m],L[2*m]);

m:=2*m;

end;

End;

Trang 18

Procedure InKQ;

var i,j:byte;

Begin

Writeln('BAI TOAN TIM DUONG DI NGAN NHAT MOI CAP DINH CUA G=(V,E)'); writeln;

writeln('MA TRAN W CUA DO THI G LA:');

writeln('(Chu y: 50 duoc gan la gia tri vo cung lon)');

writeln;

for i:=1 to n do

begin

for j:=1 to n do write(W[i,j]:3);

writeln;

end;

writeln;

writeln('MA TRAN TRONG SO CUC TIEU');

writeln;

for i:=1 to n do

begin

for j:=1 to n do write(L[n-1][i,j]:3);

writeln;

end;

readln;

End;

BEGIN

clrscr;

Nhap;

FASTER(W); InKQ;

END.

Trang 19

Trân trọng cám ơn

  

Ngày đăng: 11/04/2015, 22:45

HÌNH ẢNH LIÊN QUAN

Đồ thị trên có chu trình trọng số âm là &lt;e,f,e&gt; nên các đường đi từ s  đến e có trọng số âm lớn tùy ý và (s,e)= - . - Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN CÁC ĐƯỜNG ĐI NGẮN NHẤT MỌI CẶP (ALL-PAIRS SHORTEST PATHS)
th ị trên có chu trình trọng số âm là &lt;e,f,e&gt; nên các đường đi từ s đến e có trọng số âm lớn tùy ý và (s,e)= -  (Trang 9)
Hình sau 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. - Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN CÁC ĐƯỜNG ĐI NGẮN NHẤT MỌI CẶP (ALL-PAIRS SHORTEST PATHS)
Hình sau 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 (Trang 13)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w