Tải bản đầy đủ (.pptx) (33 trang)

Xử lý song song tìm đường đi ngắn nhất GRAPH ALGORITHMS MINIMUM-COST SPANNING TREE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.71 MB, 33 trang )

GRAPH ALGORITHMS
MINIMUM-COST SPANNING TREE
Nhóm 8:


NỘI DUNG
• Đặt vấn đề.
• Một số khái niệm liên quan đến đồ thị.
• Ý tưởng của 3 thuật tốn:
o PRIM
o KRUSKAL
o SOLLIN

• Xử lí song song.
• Đánh giá, nhận xét


ĐẶT VẤN ĐỀ
• Bài tốn:


INPUT:
Đồ thị G=(V , E) vơ hướng, liên thơng
có trọng số, n đỉnh.



OUTPUT:
Cây khung nhỏ nhất.



MỘT SỐ KHÁI NIỆM
 Đồ thị.
 Liên thuộc:A và B liên thuộc nếu tồn tại (A,B).
 Liên thơng.
 Chu trình. (A-B-C-…-Z-A)
 Cây khung nhỏ nhất – có tổng trọng số nhỏ nhất.


THUẬT TOÁN
PRIM
KRUSKAL
SOLLIN


PRIM

Đồ thị G = (V, E) liên thơng, có n đỉnh.
 Chọn một cạnh bất kỳ có trọng số nhỏ nhất,
đặt nó vào cây khung.
 Lần lượt ghép vào cây các cạnh có trọng số
nhỏ nhất liên thuộc với một đỉnh của cây và
khơng tạo ra chu trình trong cây.
Thuật toán dừng lại khi n − 1 cạnh được ghép vào
cây.


PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4


A

3

C

6
E
2

G

C

1
3

D

6
F

B

2

5

2


4

A

B

1

E
2

3

D

F

Cây khung của G
Trọng số: 12


KRUSKAL
Đồ thị G = (V, E) liên thơng, có n đỉnh.


Chọn một cạnh bất kỳ có trọng số nhỏ nhất,
đặt nó vào cây khung.




Lần lượt ghép vào cây các cạnh có trọng số
nhỏ nhất mà khơng tạo ra chu trình trong cây.

Thuật toán dừng lại khi n − 1 cạnh được ghép
vào cây.


KRUSKAL
Ví dụ: Dùng thuật tốn Kruskal tìm cây khung nhỏ nhất của đồ thị
sau:
4
4
A
B
A
B
3

C

6
E
2

G

2

5


2

C

1
3

D

6
F

1

E
2

3

D

F

Cây khung của G
Trọng số: 12


SOLLIN
Đồ thị G = (V, E) liên thơng, có n đỉnh.



Bắt đầu với một rừng gồm n đỉnh – n cây tách
biệt nhau.



Trong mỗi vịng lặp, tìm ra một cạnh để nối hai
cây với nhau, sao cho hai cây được nối bằng một
cạnh, và khơng tạo thành các chu trình.

Tiến trình này tiếp tục cho đến khi chỉ cịn một cây
(tất cả các đỉnh đã được kết nối).


SOLLIN
Ví dụ: Dùng thuật tốn Sollin tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

6
E
2

G


C

1
3

D

6
F

B

2

5

2

4

A

B

1

E
2

3


D

F

Cây khung của G
Trọng số: 12


XỬ LÍ SONG SONG


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

E
2

G

2

5


2

6

A

B

C

1
3

D

6
F

1

E
2

3

F

D



THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

E
2

A

D

6
F

C

D

2

E

F


3

B

1
3

B
4

A

5

2

6

G

B

4

5

C

2


1

D
E

5

1

6
2

3
0

3

6

3

F
d[]

6

0

6


2

0

0

0

0


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

E
2

A

D

6

F

C

D

2

E

F

3

B

1
3

B
4

A

5

2

6


G

B

4

5

C

2

1

D
E

5

3

1

6

6

3

F

d[]

6

2

3
4

2

6

2
3


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

E
2


A

D

6
F

C

D

2

E

F

3

B

1
3

B
4

A

5


2

6

G

B

4

5

C

2

1

D
E

5

3

1

6


6

3

F
d[]

6

2

3
4

6

2

2

1

3

3


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4


A

3

C

E
2

A

D

6
F

C

D

2

E

F

3

B


1
3

B
4

A

5

2

6

G

B

4

5

C

2

1

D

E

5

3

1

6

6

3

F
d[]

6

2

3
4

6

2

2


1

3

3


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

E
2

A

D

6
F

C

D


2

E

F

3

B

1
3

B
4

A

5

2

6

G

B

4


5

C

2

1

D
E

5

3

1

6

6

3

F
d[]

6

2


3
4

6

2

2

1

3

2


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4

A

3

C

E
2


A

D

6
F

C

D

2

E

F

3

B

1
3

B
4

A

5


2

6

G

B

4

5

C

2

1

D
E

5

3

1

6


6

3

F
d[]

6

2

3
4

6

2

2

1

3

2


THUẬT TỐN PRIM
Ví dụ: Dùng thuật tốn Prim tìm cây khung nhỏ nhất của đồ thị sau:
4


A

B

A

B

C

4

D

2

2

A

C

3

B

4
2


1

F

5

C

E

1

E
2

D

D

F

Cây khung của G
Trọng số: 12

E

5

6


3

1

6

6

3

F
d[]

3

2

3
4

6

2

2

1

3


2


GIẢ THUẬT PRIM
Begin
VT :={r};
d[r]:=0;
for all v

//khởi tạo với đỉnh r được chỉ định.


(V - VT) do


if ( (r,v)) d[v]:= trọng số (r,v);
else d[v]:=

;

while VT



V do



begin
Tìm đỉnh u / d[u]:= min{ d[v] | v

VT:= VT
for all v

{u};

End.







(V - VT) do

d[v]:= min{d[v] , trọng số (u,v)};
endwhile

(V - VT) }

//Song song hóa


SONG SONG HĨA
THUẬT TỐN PRIM
• Có m bộ xử lí, n đỉnh.
• Mỗi BXL đảm nhiệm n/m đỉnh,
cập nhật một phần của d[] cho
BXL chính.
• BXL chính lựa chọn min d[], chèn

đỉnh đó vào MST, thơng báo cho
tất cả các BXL.
• Mỗi BXLcập nhật lại một phần
của d[] của chúng dựa trên thông
báo.


SONG SONG HĨA
THUẬT TỐN PRIM
4

A

3

B

C

E
2

A

D

6
F

B


C

P2
D

2

E

F

3

B

1
3

P1

4

A

5

2

6


G

P0

4

5

C

2

1

D
E

5

1

6
2

3
0

3


6

3

F
d[]

6

0

6

2

0

0

0

0


SONG SONG HĨA
THUẬT TỐN PRIM
4

A


3

B

C

E
2

A

D

6
F

B

C

P2
D

2

E

F

3


B

1
3

P1

4

A

5

2

6

G

P0

4

5

C

2


1

D
E

5
3

F
d[]

3

1

6

6

2

3
3

6

6

6


2
2


SONG SONG HĨA
THUẬT TỐN PRIM
4

A

3

B

C

E
2

A

D

6
F

B

C


P2
D

2

E

F

3

B

1
3

P1

4

A

5

2

6

G


P0

4

5

C

2

1

D
E

5
3

F
d[]

3

1

6

6

2


3
3

6

6

3

6

2
2


×