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

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 61 - 64)

Xét thuật toán tuần tự Prim được trình bày trong chương 2, để song song hóa chúng ta có thể thiết kế theo các phương án sau đây:

Phƣơng án 1: Xuất phát từ tư tưởng của thuật toán Prim là thuật toán lân cận

gần nhất tức là với một đỉnh bấy kỳ thì đỉnh gần nhất trong các đỉnh kề chắc chắn sẽ thuộc cây khung. Do đó ta có thể sử dụng n bộ xử lý, trong đó bộ xử lý thứ k sẽ xác

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 đỉnh kề gần nhất của đỉnh thứ k từ đó hợp nhất các cạnh thu được, ta sẽ được cây khung cần tìm. Các bộ xử lý trên sẽ hoạt động độc lập trong quá trình tìm kiếm.

Có 2 khả năng sau đây xảy ra:

+ Kết thúc giai đoạn 1, n bộ xử lý xác định được đủ n cạnh, khi đó ta sẽ thu được cây khung nhỏ nhất. Thuật toán được mô tả bằng chương trình song song sau đây:

Procedure Prim_Parall_1 ;

Begin

: ;

T = Æ

Forall k:=1 to n do {xác định đỉnh kề gần nhất đối với đỉnh thứ k } Begin

+ Xác định đỉnh A(j) kề gần nhất với A(k) + Truyền cạnh E(k,j) về cho bộ xử lý tổng ; End ;

+ T := T ÈE k j( , );{Bộ xử lý tổng hợp nhất các cạnh thu được để xây dựng cây khung nhỏ nhất}

End ;

+ Kết thúc giai đoạn 1, n bộ xử lý xác định được không đủ n cạnh, khi đó các cạnh sẽ lập nên 1 số thành phần liên thông rời nhau, ta sẽ thu được cây khung nhỏ nhất khi tiếp tục nối các thành phần liên thông bằng các cạnh ngắn nhất giữa chúng.

Procedure Prim_Parall_2 ;

Begin

: ;

T = Æ

Forall k:=1 to n do {xác định đỉnh kề gần nhất đối với đỉnh thứ k } Begin

+ Xác định đỉnh A(j) kề gần nhất với A(k) + Truyền cạnh E(k,j) về cho bộ xử lý tổng ; End ;

+ T := T ÈE k j( , );{Bộ xử lý tổng hợp nhất các cạnh thu được để xây dựng một số thành phần liên thông}

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

+ Bổ sung các cạnh ngắn nhất để hợp nhất các thành phần liên thông để tạo thành cây khung ngắn nhất.

End ;

Đánh giá độ phức tạp thuật toán

+ Mỗi bộ xử lý đều cần đọc từ kênh truyền vào thông tin của các đỉnh kề (tối đa là n-1 đỉnh và truyền đến bộ xử lý tổng cạnh tìm được. Do đó độ phức tạp truyền thông sẽ là

comp

t = ntstaup+ ntdata

+ Mỗi bộ xử lý đều cần xác định đỉnh kề gần nhất, do đó độ phức tạp khi so sánh là O n( ) (adsbygoogle = window.adsbygoogle || []).push({});

+ Trong quá trình hợp nhất được thực hiện tuần tự bằng 1 vòng lặp. Do đó độ phức tạp cũng là O n( ).

Kết luận: độ phức tạp của thuật toán Prim_Parall tương đương với O n( ).

Phƣơng án 2:

Khi thực hiện tính toán gán nhãn trong thuật toán tuần tự, ta có thể sử dụng n

bộ xử lý trong đó bộ xử lý thứ k sẽ xác định nhãn của đỉnh thứ k sau đó các thông tin thu được lại truyền về bộ xử lý tổng để xác định cạnh có nhãn nhỏ nhất để kết nạp. Mỗi lần số lượng bộ xử lý được giảm đi 1. Quá trình xử lý được thực hiện đúng n-1 lần. Thuật toán có thể mô tả như sau:

Procedure Prim_Parall_3 ; Begin { }1 : ; T = ÆA = u For i:=1 to n do Begin

Forall k:=1 to n-i do {xác định nhãn đối với đỉnh thứ k } Begin

+ Xác định lại nhãn của đỉnh A(k)

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

End ;

+ T := T ÈE k j( , );{Gán cạnh có nhãn nhỏ nhất vào cây khung} + A = A È{u*}{Bổ sung đỉnh mới kết nạp vào tập đỉnh}

End ;

Độ phức tạp của thuật toán được đánh giá tương đương với O n( log )n

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 61 - 64)