Song song hóa thuật toán Floyd

Một phần của tài liệu Xử lý song song áp dụng đối với một số bài toán trong lý thuyết đồ thị (Trang 64 - 66)

Phƣơng án 1: Xuất phát từ thuật toán tuần tự, ta có thể sử dụng n bộ xử lý để cùng đồng thời thực hiện thuật toán Floyd một cách song song như sau:

Procedure Floyd_Parall_1; Var i, j, k: integer;

Begin

Forall i:=1 to n do {Tiến hành thực hiện song song gán nhãn cho các đỉnh} For j:=1 to n do Begin A[i,j]:= C[i,j]; P[i,j]:= 0; End; For k:= 1 to n do Forall i:=1 to n do For j:=1 to n do

If A[i,k] + A[k,j] < A[i,j] then Begin

A[i,j]:= A[i,k] + A[k,j]; P[i,j]:= k;

End; End;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Đánh giá độ phức tạp: Hiển nhiên trong trường hợp sử dụng n bộ nhớ thì ta cần sử dụng 2 vòng lặp lồng nhau để thực hiện toàn bộ thuật toán. Do đó độ phức tạp của thuật toán là 2

( )

O n .

Phƣơng án 2: Ta cũng có thể sử dụng 2

n bộ xử lý để cùng đồng thời thực hiện thuật toán Floyd một cách song song. Thuật toán được mô tả như sau:

Procedure Floyd_Parall_2; Var i, j, k: integer;

Begin

Forall i:=1 to n do {Tiến hành thực hiện song song gán nhãn cho các đỉnh} Forall j:=1 to n do Begin A[i,j]:= C[i,j]; P[i,j]:= 0; End; For k:= 1 to n do Forall i:=1 to n do Forall j:=1 to n do

If A[i,k] + A[k,j] < A[i,j] then Begin

A[i,j]:= A[i,k] + A[k,j]; P[i,j]:= k;

End; End;

Cần chú ý rằng mỗi một lần lặp, ta cần cập nhật lại thông tin cho tất cả các bộ xử lý về giá trị mới của mảng A. Do đó trong trường hợp này giá trả cho truyền thông của thuật toán là lớn và đồng thời số lượng sử dụng bộ xử lý cũng rất nhiều.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Một phần của tài liệu Xử lý song song áp dụng đối với một số bài toán trong lý thuyết đồ thị (Trang 64 - 66)

Tải bản đầy đủ (PDF)

(69 trang)