CHƯƠNG 2 CÁC THUẬT TOÁN TRÊN ĐỒ THỊ
3.1. Thuật toán song song Prim tìm cây khung cực tiểu
3.1.1. Cách thực hiện thuật toán
Đầu vào: Đồ thị G=(V,E) với trọng số. Các đỉnh ký hiệu là 1,2,3,…,n
Trọng số của cạnh (i,j), (i,j)E, ký hiệu là cij, , đỉnh nguồn a, 1 bộ xử lý chính và m-1 bộ xử lý phụ.
Đầu ra: Cây phủ nhỏ nhất T, hoặc kết luận đồ thị không liên thông
Các bước thực hiện:
Bước 1: Chia số đỉnh n và ma trận trọng số tương ứng của đồ thị cho m BXL (mỗi BXL nhận n/m đỉnh). BXL 1 đặt tên P1 có tập cạnh là E1, BXL 2 là P2 có tập cạnh là E2, …, BXL m là Pm có tập cạnh là Em
Bước 2: Bộ xử lý P1 gửi một đỉnh ban đầu lên cho các BXL P1,P2,…,Pm
Bước 3: Trên mỗi BXL (P1,P2,…,Pm) thực hiện các bước sau đây: Khởi tạo T= (1 đỉnh mà P1 đã phát ra ở bước 2, không cạnh)
Bước 4: Kiểm tra điều kiện kết thúc:Nếu T có n-1 cạnh thì kết thúc, ngược lại sang bước 5
Bước 5: Thêm cạnh: Trên mỗi BXL Ký hiệu Mk là tập trên BXL k Mk={(i,j) Ek iT&jT(k=1,…,m)}
Trên mỗi BXL tìm cạnh (xk,yk) Mk(k=1,…,m)
sao cho c(xkyk) =min{cij|(i,j) Mk(k=1,…,m)}
Nếu tất cả các Mk trên tất cả m BXL là rổng thì kết thúc, kết luận đồ thị không liên thông, ngược lại sang bước 6
Bước 6: BXL P1 thực hiện tìm c(xy)nhỏ nhất trên tất cả m BXL . BXL P1 thêm cạnh (x,y) và đỉnh y vào T
BXL P1 chuyển số cạnh của T và đỉnh y lên tất cả các BXL để lặp lại
3.1.2.Ví dụ thực hiện thuật toán song song Prim
(1) P1 nhận 3 đỉnh a,b,c tương ứng với đồ thị
(2) P1 nhận đỉnh a mà chính P1 gửi (3) T:= ({a}, , d(T):=0
(4) kiểm tra: số cạnh của T=0 sang bước (5) (5) Thêm cạnh: tập M1={(a,b),(a,c)}
Ta có cac=2=min{cij|(i,j) 1}
(4) kiểm tra: số cạnh của T=1 sang bước (5) (5) Thêm cạnh: tập M1={(a,b)}
Ta có cab=4=min{cij|(i,j) 1}
(1) P2 nhận 3 đỉnh d,e,f tương ứng với đồ thị
(2) P2 nhận đỉnh a mà P1 gửi lên (3) T:= ({a}, , d(T):=0
(4) kiểm tra: số cạnh của T=0 sang bước (5) (5) Thêm cạnh: tập M2={(a,e)}
Ta có cae=3=min{cij|(i,j) 2}
(4) kiểm tra: số cạnh của T=1 sang bước (5)
(5)Thêmcạnh: tập M2={(a,e),(c,d),(c,e),(c,f)} Ta có ccd=1=min{cij|(i,j) 2} P 2 a b c a ∞ 4 2 b 4 ∞ ∞ c 2 ∞ ∞ d ∞ 5 1 e 3 ∞ 6 f ∞ ∞ 3 a b d c e f 4 3 3 2 5 6 1 d e f a ∞ 3 ∞ b 5 ∞ ∞ c 1 6 3 d ∞ ∞ 6 e ∞ ∞ 2 f 6 2 ∞ a b d c e f 3 3 5 2 6 1 6
(6) P1 Kiểm tra cac=2 ,cae=3 trên p1 và p2 ,có cac=2 là minThêm đỉnh c và cạnh (a,c) vào T, T:= ({a,c},{(a,c)}), d(T):=d(T)+ cac=2. P1 Chuyển đỉnh c và số cạnh của T=1
(6) P1 Kiểm tra cab=4 ,ccd=1 trên p1 và p2 có ccd=1 là minThêm đỉnh d và cạnh(c,d) vào T, T:= ({a,c,d},{(a,c),(c,d)}), d(T):=d(T)+ ccd=2+1=3. P1Chuyển đỉnh d và số cạnh của T=2 lên 2 BXL tiếp tục kiểm tra bước 4
a b d c e f 4 3 3 5 2 2 6 1 6
(5) Thêm cạnh: tập: M1={(a,b),(d,b)}
Ta có cab=4=min{cij|(i,j) 1}
(4) Kiểm tra: Số cạnh của T=3, sang bước (5) (5) Thêm cạnh: tập M1={(a,b),(d,b)}
Ta có cab=4=min{cij|(i,j) 1}
(4) Kiểm tra: Số cạnh của T=4, sang bước 5 (5) Thêm cạnh: tập M1={(a,b),(d,b)}
Ta có cab=4=min{cij|(i,j) 1}
(4) Kiểm tra: Số cạnh của T=5. Kết luận,
(5) Thêm cạnh: tập
M2={(a,e),(c,e),(c,f),(d,f)} Ta có cae=3=min{cij|(i,j) 2}
(4) Kiểm tra: Số cạnh của T=3, sang bước(3) (5) Thêm cạnh: tập M2={(e,f),(c,f),(d,f)} Ta có cef=2=min{cij|(i,j) 2}
(5) Kiểm tra: Số cạnh của T=4, sang bước 5 (5) Thêm cạnh: tập M2=
(5) Kiểm tra: Số cạnh của T=5. Kết luận (6) P1 Kiểm tra cab=4 ,cae=3 trên p1 và p2 có cae=3 là
minThêm đỉnh e và cạnh(a,e) vào T, T:= ({a,c,d,e},{(a,c),(c,d),(a,e)}), d(T):=d(T)+ cae=3+3=6. P1 Chuyển đỉnh e và số cạnh của T=3 lên 2 BXL để tiếp tục kiểm tra bước 4
(6) P1 Kiểm tra cab=4 ,cef=2 trên p1 và p2 có cef=2 là minThêm đỉnh f và cạnh(e,f) vào T,
T:=({a,c,d,e,f},{(a,c),(c,d),(a,e),(e,f)}),
d(T):=d(T)+ cab=6+2=8. P1 Chuyển đỉnh f và số cạnh của T=4 lên 2 BXL để tiếp tục kiểm tra bước 4
(6) P1 Kiểm tra cab=4 trên p1 và p2 có cab=4 là minThêm đỉnh b và cạnh (a,b) vào T,
T:=({a,c,d,e,f,b},{(a,c),(c,d),(a,e),(e,f),(a,b)}),
d(T):=d(T)+ cab=8+4=12. P1 Chuyển đỉnh b và số cạnh của T=5 lên 2 BXL để tiếp tục kiểm tra bước 4
T là cây khung nhỏ nhất qua các cạnh