You are on page 1of 27

CÂY BAO TRÙM NHỎ NHẤT

(Minimal Spanning Tree-MST)

GV: Lê Mậu Long

1
Nội dung
 Cây bao trùm nhỏ nhất.
 Thuật toán PRIM
 Thuật toán KRUSKAL

2
Định nghĩa
Cho đồ thị , giả sử mỗi cạnh e của được gán 1 số
gọi là trọng số (weight) của e, ký hiệu là w(e) thì được gọi
là đồ thị có trọng số (weighted Graph).
Tổng trọng số của các cạnh của đường (chu trình, cây,
đồ thị con) được gọi là trọng số của đường (chu trình, cây,
đồ thị con).
Bài toán đặt ra: Tìm cây bao trùm có tổng trọng số nhỏ nhất
của đồ thị liên thông có trọng số.

3
Định nghĩa
 Ma trận trọng số:
là đồ thị có trọng số có n đỉnh, ma trận trọng số của là
ma trận
= ; , = 1, 2, … ,
trong đó

( ) ế Î
=
∞ ế Ï

4
Ví dụ

Đồ thị Ma trận trong sốĐồ thị


A   3  3    
A 3 B 2 C B  3  2 6 2    
3 6 4 C  2   4   8 
2  
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
H G    2 3 5  4 
F 5 G 4  
H   8  9  4  

5
Định lý
là cây bao trùm của liên thông có trọng số
à ↔ ∀ Î \ ,∀ Î , , ≤ ( )
CM
→) là MST, lấy tùy ý Î \ , đưa vào ta được , , bỏ
tùy ý một cạnh u trên , ta được cây bao trùm ′, mà
là MST nên ≤ ( ′) suy ra ≤ ( ).
←) Giả sử 1 ≠ , xét Î 1\ , lấy Î( , )\ 1 , ta có
≤ ( ) thay bằng e trong 1 ta được cây bao trùm
2 và ( 2) ≤ ( 1), vậy là MST.

6
Định lý
Từ CM định lý ta có thuật toán tìm MST sau:
 B1: Xuất phát từ cây bao trùm bất kỳ của
 B2: Nếu ∀ Î \ , ∀ Î , , ≤ ( ) → dừng thuật
toán
 B3: Ngược lại ∃ Î \ , ∃ Î , , > ( ), tìm trên
, cạnh có trọng số lớn nhất trên , , thay
trong bằng → quay về B2.

7
Ví dụ
Xét đồ thị G và cây bao trùm : = 32
A 3 B 2 C A 3 B 2 C

3 6 2 4 3 6 2 4

4 4
D E 8 D E 8

8 2 3 9 8 2 3 9

F 5 G 4 H F 5 G 4 H

8
Ví dụ
A 3 B 2 C A 3 B 2 C
 Xét cạnh AD, thay cho cạnh BD (-3)
3 6 2 4 3 6 2 4
= 29
4 4
D E 8D E 8
 Xét canh CE, DE, EG không thay đổi
8 2 3 9 8 2 3 9

F 5 G 4 H F 5B G2 4 H
A 3 B 2 C A 3 C

3 6 2 4 3 6 2 4
4 4
 Xét cạnh FG, thay cho DF (-3) D E 8 D E 8

= 26 8 2 3 9 8 2 3 9

F 5 G 4 H F 5 G 4 H
9
Ví dụ
A 3 B 2 C
 Xét cạnh GH, thay cho cạnh EH (-5)
3 6 2 4
= 21 4
8
D E

8 2 3 9

B FC 5 G 4 H
A 3 2

3 6 2 4
 Xét cạnh CH, không thay đổi 4
8
D E
là MST có = 21 8 2 3 9

F 5 G 4 H
10
Thuật toán PRIM
Cho G là đồ thị liên thông có trọng số, thuật toán PRIM
xây dựng đồ thị con của G như sau:
 B1: Chọn 1 đỉnh tùy ý của G khởi đầu cho T.
 B2: Nếu mọi đỉnh của G đều thuộc T → dừng thuật
toán.
 B3: Tìm 1 cạnh có trọng số nhỏ nhất nối đỉnh trong T
với đỉnh ngoài T, đưa cạnh và đỉnh này vào T → quay
về B2

11
Ví dụ
A 3 B 2 C A 3 B 2 C

Khởi đầu tại A, Có các cạnh:


3 6 2 4 3 6 2 4
Có các cạnh: AB, AD BD, BE, BC
4 8 4 8 Chọn BC
D E AD D E
Chọn AB
8 2 3 9 8 2 3 9

F 5 G 4 H F 5 G 4 H

A 3 B 2 C A 3 B 2 C
Có các cạnh: AD, Có các cạnh:
3 6 2 4 3 6 2 4
BD, BE, CE, CH AD, BD, DE,
4 8 Chọn BE 4 8 EG, EH, CH
D E D E
Chọn AD
8 2 3 9 8 2 3 9

F 5 G 4 H F 5 G 4 H

12
Ví dụ
A 3 B 2 C A 3 B 2 C

3 6 2 4 3 6 2 4
Có các cạnh: Có các cạnh:
4 4 8
D E 8 DF, DG, EG, EH, D E DF, EH, CH, FG,
CH GH
8 2 3 9 Chọn DG 8 2 3 9 Chọn GH

F 5 G 4 H F 5 G 4 H

A 3 B 2 C

3 6 2 4 Có các cạnh:
4 DF, FG
D E 8
Chọn FG
8 2 3 9

F 5 G 4 H
13
Ví dụ
A   3  3    
A 3 B 2 C B  3  2 6 2    
C  2   4   8 
3 6 2 4  
D  3 6   4 8 2 
4 W
D E 8
E  2 4 4   3 9 
 
8 2 3 9 F    8   5  
G    2 3 5  4 
F 5 G 4 H  
H   8  9  4  
 Sử dụng mảng A ghi nhận các đỉnh trên T
 Chọn A khởi đầu cho T, tìm cạnh nhỏ nhất nối A với đỉnh ngoài T: Cạnh AB, đưa
AB vào T

14
Ví dụ
A B C D E F G H
T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối A, B với đỉnh ngoài T: Cạnh BC, đưa BC vào T

15
Ví dụ
A B C D E F G H
T T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối đỉnh trong T với đỉnh ngoài T: Cạnh BE, đưa BE
vào T

16
Ví dụ
A B C D E F G H
T T T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối đỉnh trong T với đỉnh ngoài T: Cạnh AD, đưa AD vào T

17
Ví dụ
A B C D E F G H
T T T T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối đỉnh trong T với đỉnh ngoài T: Cạnh DG, đưa DG
vào T

18
Ví dụ
A B C D E F G H
T T T T T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối đỉnh trong T với đỉnh ngoài T: Cạnh
GH, đưa GH vào T
19
Ví dụ A B C D E F G H
T T T T T T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối đỉnh trong T với đỉnh ngoài T: Cạnh GF, đưa GF vào T
20
Ví dụ A B C D E F G H
T T T T T T T T

A   3  3    
A 3 B 2 C
B  3  2 6 2    
3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9  
F    8   5  
5 G 4 H
G    2 3 5  4 
F  
H   8  9  4  

Tìm cạnh nhỏ nhất nối đỉnh trong T với đỉnh ngoài T: Cạnh GF, đưa GF vào T
21
Thuật toán KRUSKAL
Cho G có trọng số liên thông. Thuật toán Kruskal được xây
dựng như sau:
B1: Cho T = (V, Ø).
B2: Nếu T liên thông → dừng thuật toán
B3: Chọn một cạnh có trọng số nhỏ nhất sao cho đưa vào T
không tạo ra chu trình, đưa cạnh này vào T → B2.

Để dễ dàng thực hiện thuật toán Kruskal, các cạnh của G được
sắp thứ tự tăng dần theo trọng số, lần lượt xét các cạnh được
đưa vào T khi 2 đỉnh đầu và cuối không cùng thành phần,
22
Ví dụ A B C D E F G H
1 2 3 4 5 6 7 8
A   3  3    
B  3  2 6 2    
A 3 B 2 C

3 6 2 4 C  2   4   8 
 
4 D  3 6   4 8 2 
D E 8 W
E  2 4 4   3 9 
8 2 3 9
 
F    8   5  
F
G    2 3 5  4 
5 G 4 H  
H   8  9  4  
 Sử dụng mảng A ghi nhận thành phần của đỉnh trong T
 Các cạnh được sắp thứ tự:
BC(2), BE(2), DG(2), AB(3), AD(3), GE(3), CE(4), DE(4), GH(4), FG(5), BD(6), CH(8),
DF(8), EG(9)

23
Ví dụ
BC(2), BE(2), DG(2), AB(3), AD(3), GE(3), CE(4), DE(4), GH(4), FG(5), BD(6), CH(8),
DF(8), EG(9)
A 3 B 2 C
A B C D E F G H
3 6 2 4 1 2 2 4 5 6 7 8
4 8 Đưa cạnh BC vào T, sửa nhãn của C thành 2
D E
8 2 3 9

F 5 G 4 H
A 3 B 2 C A B C D E F G H
1 2 2 4 2 6 7 8
3 6 2 4
4 8 Đưa cạnh BE vào T, sửa nhãn của E thành 2
D E
8 2 3 9

F 5 G 4 H
24
Ví dụ
BC(2), BE(2), DG(2), AB(3), AD(3), GE(3), CE(4), DE(4), GH(4), FG(5), BD(6), CH(8), DF(8), EG(9)

A 3 B 2 C A B C D E F G H
1 2 2 4 2 6 4 8
3 6 2 4
4 8
D E Đưa cạnh DG vào T, sửa nhãn của G thành 4
8 2 3 9

F 5 G 4 H
A 3 B 2 C A B C D E F G H
1 1 1 4 1 6 4 8
3 6 2 4
4 8
D E Đưa cạnh AB vào T, sửa nhãn của B, C, E thành 1
8 2 3 9

F 5 G 4 H
25
Ví dụ
BC(2), BE(2), DG(2), AB(3), AD(3), GE(3), CE(4), DE(4), GH(4), FG(5), BD(6), CH(8), DF(8), EG(9)
A 3 B 2 C
A B C D E F G H
3 6 2 4 1 1 1 1 1 6 1 8
4 8
D E
Đưa cạnh AD vào T, sửa nhãn của D, G thành 1
8 2 3 9

F 5 G 4 H A B C D E F G H
1 1 1 1 1 6 1 1
A 3 B 2 C
Xét cạnh GE không đưa vào T vì G, E cùng nhãn 1
3 6 2 4 Xét cạnh CE không đưa vào T vì C, E cùng nhãn 1
4 8 Xét cạnh DE không đưa vào T vì D, E cùng nhãn 1
D E
Đưa cạnh GH vào T, sửa nhãn của H thành 1
8 2 3 9 Đưa cạnh FG vào T, sửa nhãn của F thành 1

F 5 G 4 H
26
Tóm tắt
 Cây bao trùm nhỏ nhất.
 Thuật toán PRIM
 Thuật toán KRUSKAL

27

You might also like