You are on page 1of 74

TS.

Nguyễn Thị Phương Trâm


Tài liệu tham khảo:
• Silde bài giảng ThS. Trần Quốc Việt
• Silde bài giảng ThS. Lê Phi Hùng
• Nguyễn Cam, Chu Đức Khánh, Lý thuyết Đồ thị, 1998.
• Kenneth H. Rosen, Discrete Mathematics and Its Applications
❑Định nghĩa: Cây (Tree), còn gọi là cây tự do
(free tree) là một đồ thị vô hướng liên thông, không
có chu trình và có ít nhất 2 đỉnh.
Ví dụ: T1 và T2 sau đây là 2 cây

T1
T2
❑Định lý 1: Giữa 2 đỉnh bất kỳ trong cây T luôn có
một và chỉ một đường đi trong T nối chúng

3
❖ Định nghĩa: Cây có gốc (rooted tree) là một cây
có hướng, trên đó đã chọn một đỉnh là gốc (root)
của cây và các cạnh định hướng sao cho với mọi
đỉnh luôn có một đường đi từ gốc đến đỉnh đó

Một cây tự do có thể chọn


root
Ví dụ: một đỉnh bất kỳ làm gốc để
trở thành cây có gốc
root

Cây có gốc
Xét cây có gốc T
- Mức của đỉnh: Khoảng cách từ gốc đến nút đó
- Chiều cao của cây: Mức lớn nhất của một đỉnh bất kỳ
root Mức 0

Chiều cao của cây


x
Mức 1
y Mức 2

Mức 3

- Nếu (xy) là cạnh của T: ta gọi x đỉnh cha (parent) của y, y là


đỉnh con (child) của x
- Lá (leaves): Những đỉnh không có cây con.
- Đỉnh trong (internal vertices): là những đỉnh có ít nhất 1 cây
con, nút góc cũng được xem như nút trong
Định nghĩa và các tính chất cơ bản (tt)

Định nghĩa: Tập hợp các cây đôi một không có


đỉnh chung gọi là một rừng (Forest)

• Một đồ thị vô hướng không chứa chu trình và có ít


nhất hai đỉnh gọi là một rừng
• Trong một rừng, mỗi thành phần liên thông là một
cây
Định nghĩa và các tính chất cơ bản (tt)

❑ Định lý 2: Nếu một cây có n đỉnh thì sẽ có


m = n - 1 cạnh
Ví dụ:

Cây có 11 đỉnh  có ????


Bao nhiêu cạnh

7
⦁ Cho cây có gốc T:
o Nếu số cây con tối đa của
một đỉnh trong T là m và
có ít nhất một đỉnh đúng
m cây con thì T gọi là cây
m-phân (m-arytree)
o Nếu mọi đỉnh trong của T Cây tam phân
đều có đúng m cây con thì
T gọi là cây m-phân đủ
(complete m-arytree)
o Cây m-phân với m=2 gọi
Cây nhị phân đủ
là cây nhị phân
8
❖ Định lý 3 (Định lý Daisy Chain): T là một đồ thị có
n đỉnh (n>=2), các mệnh đề sau là tương đương
1. T là cây
2. T liên thông và có n-1 cạnh
3. T không chứa chu trình và có n-1 cạnh
4. T Liên thông và mỗi cạnh là cầu
5. Giữa 2 đỉnh phân biệt bất kỳ của T luôn tồn có
duy nhất một đường đi đơn.
6. T không chứa chu trình nhưng khi thêm một
cạnh mới thì có được một chu trình duy nhất.

9
❖ Định lý 4: Một cây m-phân đầy đủ, có i đỉnh
trong thì có n= m*i+1 đỉnh (n số đỉnh, m số
cây con của mỗi đỉnh trong)
• Hệ luận: T là một cây m-phân đầy đủ
i. T có i đỉnh trong  T có l = (m-1)*i+1 nút lá
ii. T có l nút lá  T có i = (l-1)/(m-1) đỉnh
trong và n = (m*l-1)/(m-1) đỉnh
iii. T có n đỉnh  T có i = (n-1)/m đỉnh
trong và l = [(m-1)n+1]/m nút lá

10
• Hệ luận: T là một cây m-phân đầy đủ
iv. Một cây m-phân có chiều cao h thì có
nhiều nhất là mh n ú t lá
v. Một cây m-phân có l nút lá thì có chiều cao
h ≥[logml]
vi. Một cây m-phân đầy đủ, cân bằng có l nút
lá thì có chiều cao h=[logml]

11
⦁ Hãy xác định hệ số m của cây m-phân bên dưới

T4 is not a full m-ary tree for any m because


some of its internal vertices have two
children and others have three children.

12
Xét cây có gốc T, gọi Tr1, Tr2,…,Trk lần lượt là các cây
con của nút r theo thứ tự từ trái qua phải

T1 T2 … Tk

13
2.1. Duyệt cây theo thứ tự trước (preoder : Root -
Left Subtree – right Subtree)
• Thăm gốc r của T
• Đệ quy: duyệt từng cây con lần lượt từ T1 đến
Trk theo thứ tự trước
Ví dụ: Kết quả duyệt theo
Preorder?

14
ABEJKNOPFCDGLMHI
15
2.2. Duyệt cây theo thứ tự giữa (inoder) (left subtree
– root – right subtree)
- Duyệt Tr1 theo thứ tự giữa
- Thăm r
- Duyệt Tr2theo thứ tự giữa,…, duyệt Trk theo thứ
tự giữa
Ví dụ: Kết quả duyệt theo
Inorder?

16
JENKOPBFACLGMDHI
17
2.3. Duyệt cây theo thứ tự sau (postorder : left
subtree – right subtree - root)
• Duyệt Tr1 theo postorder, duyệt Tr2 theo
postorder,…, duyệt Trk theo postorder
• Thăm r
Ví dụ: Kết quả duyệt theo postorder?

18
JNOPKEFBCLMGHIDA
19
BÀI TẬP
Cho cây nhị phân như hình vẽ:

Hãy ghi kết quả thứ tự duyệt:


1. preoder : Root -Left Subtree – right Subtree
2. Inoder: left subtree– root – right subtree
3. postorder : left subtree – right subtree - root
❖ Cho đồ thị vô hướng G. Cây T gọi là một cây
bao trùm của G nếu T≤G (T là cây khung
của G) và T chứa mọi đỉnh của G
Ví dụ: 4 4
3 3
2 2

1 5 1 5

8 8

6 6
7 7

G Một cây bao trùm của G 21


❖ Định lý: Đồ thị G có cây bao trùm  G liên
thông
D
4 B
3
2 A

1 5 D
C B
A
8

6
C
7
H liên thông  H có
G không liên thông  G không có cây bao trùm
cây bao trùm 24
Tìm cây khung là việc xây dựng một cây chứa
tất cả các đỉnh của đồ thị
Hai phương pháp
❖ Tìm theo chiều sâu (DFS: Depth First Search)
❖ Tìm theo chiều rộng (BFS: Breadth First Search)
Bước 1: Chọn một đỉnh bất kỳ v của G làm điểm
xuất phát (gốc) của T.
Bước 2:Xác định một đường đi sơ cấp xuất
phát từ v qua các đỉnh  G nhưng  T, cho
đến khi không thể đi tiếp. Gọi k là đỉnh kết
thúc đường đi. Đặt đường đi này vào T rồi
quay trở về đặt đỉnh liền trước k làm điểm
xuất phát. Lập lại thủ tục này cho đến khi
mọi đỉnh của G đều nằm trong T.

24
25
DFS(G: Liên thông với các đỉnh v1,v2,…,vn){
T=Cây chỉ gồm 1 đỉnh v1 visit(v1)
}
Visit(v: đỉnh của G){
- For (mỗi đỉnh w kề với v nhưng chưa
có trong T)
- Thêm đỉnh w và cạnh (v,w) vào T
visit(w);
}

26
4 4
3 3
2 2

1 5 1 5

8 8

6 6
7 7

9 9

27
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3
3 1 1 0 1 0 0 1 6
1 4
4 0 1 1 0 0 1 1
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0 5
7
7 1 0 1 1 1 0 0

v=1; T=<VT,ET> với VT={1}, ET= 

28
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
1 4
4 0 1 1 0 0 1 1
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=1,w=2, a120  2VT,VT={1,2},ET={(1,2)}

29
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
1 4
4 0 1 1 0 0 1 1
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=2,w=3, a230  3VT, VT={1,2,3},


ET={(1,2), (2,3)}

30
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
4 0 1 1 0 0 1 1 1 4
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=3,w=4, a340  4VT,VT={1,2,3,4},


ET={(1,2),(2,3),(3,4)}

31
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
1 4
4 0 1 1 0 0 1 1
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=4, w=6, a460  6VT, VT={1,2,3,4,6},


ET={(1,2),(2,3),(3,4),(4,6)}

32
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
1 4
4 0 1 1 0 0 1 1
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=4, W=7, a470  7VT, VT={1,2,3,4,6,7},


ET={(1,2),(2,3),(3,4),(4,6),(4,7)}

33
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
4 0 1 1 0 0 1 1 1 4
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=4, W=7, a470  7VT, VT={1,2,3,4,6,7},


ET={(1,2),(2,3),(3,4),(4,6),(4,7)}

34
1 2 3 4 5 6 7 2
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0
3 1 1 0 1 0 0 1 3
6
1 4
4 0 1 1 0 0 1 1
5 0 0 0 0 0 0 1
6 0 1 0 1 0 0 0
7 1 0 1 1 1 0 0 7 5

V=7, W=5, a750  5VT, VT={1,2,3,4,6,7,5},


ET={(1,2),(2,3),(3,4),(4,6),(4,7),(7,5)}
Mọi cạnh của G đều có trong T, dừng

35
Cây bao trùm tìm được
2
1 2 3 4 5 6 7
1 0 1 1 0 0 0 1
2 1 0 1 1 0 1 0 3 6

3
1 1 0 1 0 0 1 1 4
0 1 1 0 0 1 1
4
0 0 0 0 0 0 1
5
6
0 1 0 1 0 0 0
7 5
7 1 0 1 1 1 0 0

36
Bài tập: Tìm cây bao trùm theo phương pháp
DFS cho đồ thị bên dưới, bắt đầu từ đỉnh 1,
ghi cụ thể từng bước

37
Tìm cây bao trùm theo phương pháp
– BFS (Breadth First Search)
1) Chọn 1 đỉnh bất kỳ của G làm đỉnh xuất phát
(gốc) của T.
2) Đặt mọi cạnh nối gốc với 1 đỉnh  T vào T.
Lần lượt xét từng đỉnh con trực tiếp của gốc.
Xem đỉnh này là gốc mới, lặp lại thủ tục này
cho đến khi mọi đỉnh của G đều2 nằm trong T.

3
6
1 4

7 5
38
Tìm cây bao trùm theo phương pháp
– BFS (Breadth First Search)

39
Tìm cây bao trùm theo phương pháp
– BFS (Breadth First Search)
BFS(G: liên thông với tập đỉnh v1,v2,...,vn) {
T:= Cây chỉ gồm 1 đỉnh v1;
Q={v}//Queue: các đỉnh chưa xử lý
while (Q≠){
v = Q.Remove();
for (mỗi đỉnh w kề với v)
if w  Q and wT{
Q.Add(w)
Thêm cạnh (v,w) vào T
}
}
} 40
Tìm cây bao trùm theo phương
pháp
2 –BFS (Breadth First
2 Search)
3 3
6 6
1 4 1 4

7 5 7 5

2
2

3
6 3
1 4 6
1 4

7 5
7 5
Tìm cây bao trùm theo phương pháp
– BFS (Breadth First Search)

3 3

2 6 2 6
1 4 1 4

5 5

42
Tìm cây bao trùm theo phương pháp
– BFS (Breadth First Search)
Bài tập: Tìm cây bao trùm theo phương pháp
BFS cho đồ thị bên dưới, bắt đầu từ đỉnh A,
ghi cụ thể từng bước

43
Tìm cây bao trùm theo phương pháp – BFS
(Breadth First Search)

44
❖ Đồ thị có trọng số: Là đồ thị trong đó mỗi
cạnh (cung) được gán thêm một số thực
gọi là trọng số (weight) của cạnh (cung)
Kí hiệu:
c(e): Trọng số của cạnh e
c(G): Trọng số của đồ thị G B
D
9
8
A
4 3
5

C
45
❖ Ma trận kề của đồ thị có trọng số: Cho
G=<V,E> có trọng số, ma trận kề trọng số
của G là ma trận A có kích cỡ |V||V| trong
đó mỗi phần tử aij có giá trị như sau:
 Trọng số của cạnh/cung i(vj ,v ) nếui (v
j ,v )E
aij = 
 Nếu (vi,vj)E
A B C D
D
B 9 A  8 5 
8  
A B 8  4 9
4 3 5 4  3
5 C
 
  
D  9 3 
C 44
❖ Bài toán: Cho G là đồ thị liên thông, có
trọng số. Hãy tìm một cây bao trùm của G
có trọng số nhỏ nhất

D D
B 9 B
8 A
A
4 4 3
3 5
5

C C

47
❖ Định lý: Cho T là một cây bao trùm của đồ thị
có trọng số G liên thông. T là một cây bao
trùm tối thiểu nếu và chỉ nếu mỗi cạnh eT
đều có trọng số lớn nhất trên chu trình tạo bởi
e và các cạnh của T
D D
B
8
B 9 9
A A

4 4 3
3 5
5

C C

48
Thuật toán tìm cây khung có trọng
số nhỏ nhất

1. Thuật toán Kruskal (Joseph Kruskal – 1965)


2. Thuật toán Prim (Robert Prim - 1957)
Kruskal(G: đồ thi liên thông có trọng số)
begin
T := ;
E=EG // gán;// EG là tập cạnh của G
While |ET|<n-1 and (E≠)
begin
Chọn e là cạnh độ dài nhỏ nhất trong E, E
:=E\{e}
If (T{e} không chứa chu trình) then
// Kết nạp cạnh e vào cây khung nhỏ nhất
T := T{e}
end
return T;
end 50
❖ Các bước của thuật toán KRUSKAL
• Bước 1: Chọn một cạnh bất kỳ có
trọng số nhỏ nhất, đặt nó vào cây
khung.
• Bước 2: 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.
• Bước 3: Thuật toán dừng lại khi (n - 1)
cạnh được ghép vào cây.

51
Ví dụ: Tìm cây bao trùm nhỏ
nhất của đồ thị bên dưới bằng
thuật toán Kruskal, ghi ra kết
quả từng bước chạy.
•G gồm có 9 đỉnh
•Đồ thị G có n phần tử. Thuật
toán Kruskal sẽ dừng khi có n-
1 trong tập hợp T
• n=9
• Vậy số cạnh trong tập
hợp T: n – 1 = 9 – 1 = 8(*)
• Bước 1: Liệt
Đỉnh đầu Đỉnh cuối Trọng số
kê tất cả cạnh 1 2 8
với trọng số 1 6 3
của cạnh đó: 2 3 9
- Dựa vào đồ 2 5 12

thị ta liệt kê ra 2 6 7

các cạnh gồm 3 4 4

đỉnh đầu, đỉnh 3 5 18


4 5 6
cuối và trọng
5 7 5
số: 6 7 10
7 8 11
7 9 1
• Bước 2: Sắp xếp Đỉnh đầu Đỉnh cuối Trọng số
các cạnh theo trọng 7 9 1
số tăng dần 1 6 3
3 4 4
5 7 5
4 5 6
2 6 7
1 2 8
2 3 9
6 7 10
7 8 11
2 5 12
3 5 18
• Bước 3: Dựa vào kết quả Đỉnh đầu Đỉnh cuối Trọng số
7 9 1
ở bước 2. Ta tiến hành tìm 1 6 3
cây khung bằng thuật 3 4 4
toán Kruskal. Dựa vào thứ 5 7 5
4 5 6
tự bảng trên để đánh giá 2 6 7
cạnh đó có thuộc cây 1 2 8
khung tối tiểu hay không. 2 3 9
6 7 10
Một cạnh thõa điều kiện 7 8 11
khi nó không góp phần tạo 2 5 12
thành một chu trình với tất 3 5 18

cả các cạnh đã tìm được.


KẾT QUẢ CÁC BƯỚC LẶP
T := ; wT=0, socanh = 0 <=8
T ∪ ET={(7,9)} -> T={(7,9)}
wT= 0+ w(7,9)=1

T={(7,9)}, wT=1 , socanh=1 <=8


T ∪ ET={(1,6)} -> T={(7,9)(1,6)}
wT= 1 + w(1,6) = 1 + 3=4
KẾT QUẢ CÁC BƯỚC LẶP
T={(7,9)(1,6)}, wT=4, socanh=2<=8
T ∪ ET={(3,4)} -> T={(7,9)(1,6)(3,4)}
wT= 4 + w(3,4) = 4 + 4=8

T={(7,9)(1,6)(3,4)}, wT=8, socanh=3<=8


T ∪ ET={(5,7)} -> T={(7,9)(1,6)(3,4)(5,7)}
wT= 8 + w(5,7) = 8 + 5=13
KẾT QUẢ CÁC BƯỚC LẶP
T={(7,9)(1,6)(3,4)(5,7)}, wT=13, socanh=4<=8
T ∪ ET={(4,5)} -> T={(7,9)(1,6)(3,4)(5,7),(4,5)}
wT= 13+ w(4,5) = 13 + 6=19

T={(7,9)(1,6)(3,4)(5,7)(4,5)}, wT=19,
socanh=5<=8
T ∪ ET={(2,6)} ->
T={(7,9)(1,6)(3,4)(5,7),(4,5)(2,6)}
wT= 19+ w(2,6) = 19 + 7= 26
KẾT QUẢ CÁC BƯỚC LẶP
T={(7,9)(1,6)(3,4)(5,7)(4,5)(2,6)}, wT=26,
socanh=6<=8
T ∪ ET={(2,3)} -
>T={(7,9)(1,6)(3,4)(5,7),(4,5)(2,6)(2,3)}
wT= 26+ w(2,3) = 26 + 9= 35

T={(7,9)(1,6)(3,4)(5,7)(4,5)(2,6)(2,3)},
wT=35, socanh=7<=8
T ∪ ET={(7,8)} ->
T={(7,9)(1,6)(3,4)(5,7),(4,5)(2,6)(2,3)(7,8)}
wT= 35+ w(7,8) = 35 + 11= 46
socanh=8<9
•Đến đây, ta đã tìm được 8 cạnh. Vậy kết thúc thuật
toán. (Thỏa (*))
•Kết quả: Ta được đồ thị sau
Với tổng chi phí là: Ta
cộng tất cả các trọng số
giữa các đỉnh lại với
nhau
•Vậy tổng chi phí: 3 + 7 +
9 + 4 + 6 + 5 + 1 + 11 = 46
Sử dụng thuật toán Kruskal tìm một cây bao trùm
nhỏ nhất của G, H? ghi ra kết quả từng bước chạy.
C

10
6 5 8
B 15 F
A D 6
6
8 8
12
4

G H

57
Prim(G: liên thông, có trọng số, v0; đỉnh bắt đầu)
begin ET := ;VT={v0};// VT là tập đỉnh của T, ET: tập
cạnh của T
while (|ET|<n-1)
begin
Tính T(VT) = {(i,j)E/ i VT  j  V – VT}
Chọn cạnh e=(u,v) trong T(VT) có trọng số bé nhất,
bổ sung e vào T (Nghĩa là:ET=ET  {e}; VT = VT  {v})
end
return T=<VT, ET>;
end
58
Khởi tạo
 s là đỉnh được chọn trước
 VT ={s} , ET =  , wT = 0

 Giải thuật
 while VT V do {
 M= { j kề của VT}
 for jM {
◼ Tìm i VT sao cho i gần j nhất
◼ Gán nhãn cho đỉnh j : ((i,j) , w(i,j))
 }endfor
 Chọn đỉnh có nhãn (trọng số) nhỏ nhất có thể trong các đỉnh
được gán nhãn v, khi thêm vào VT không tạo ra chu trình: ((u,
v), w(u, v))
 Khi đó cập nhật
◼ VT = VT +{v}
◼ ET = ET +{(u,v)}
◼ wT = wT + w(u,v)
 }endwhile 58
❖ Các bước của thuật toán Prim(G: liên
thông, có trọng số, v0; đỉnh băt đầu)
• Bước 1: Chọn một cạnh bất kỳ có trọng số
nhỏ nhất từ đỉnh V0, đặt nó vào cây khung.
• Bước 2: 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.
• Bước 3: Thuật toán dừng lại khi (n - 1)
cạnh được ghép vào cây
58
Ví dụ: Tìm cây bao trùm
nhỏ nhất của đồ thị bên
dưới bằng thuật toán Prim
bắt đầu tại đỉnh 1, ghi ra
kết quả từng bước chạy.
• Bước 1. Khởi tạo
o Ta tạo ra 2 tập hợp VT và ET, VT là tập hợp
các đỉnh và ET là tập hợp các cạnh tạo ra cây
khung nhỏ nhất.
o Ban đầu VT ={Ø} ET ={Ø}, wT = 0.
o Điều kiện dừng: VT = V
• Bước 2. Chọn 1 đỉnh bắt đầu từ cây
khung trên, ví dụ chúng ta chọn đỉnh theo
yêu cầu bài toán là đỉnh 1. Sau bước này,
ta có VT ={1}, VT V và ET ={Ø}, wT = 0.
KẾT QUẢ CÁC BƯỚC LẶP
VT ={1}, VT V và ET ={Ø}, wT = 0.
Xác định M = {2, 6}. Gán nhãn cho các
đỉnh trong M
2: ((1,2),8)
6: ((1,6),3) nhãn nhỏ nhất
Cập nhật:
VT = VT +{6} = {1,6}
ET = ET + {(1,6)}={(1,6)}
wT= 3
VT= {1,6}, VT V, ET ={(1,6)}, wT= 3
Xác định M = {2, 7}. Gán nhãn cho các
đỉnh trong M
2: ((1,2),8)
2: ((6,2),7) nhãn nhỏ nhất
7: ((6,7),10)
Cập nhật:
VT = VT +{2} = {1,6,2}
ET = ET + {(6,2)}={(1,6),(6,2)}
wT= 3+7=10
KẾT QUẢ CÁC BƯỚC LẶP
VT ={1,6,2}, VT V, ET ={(1,6),(6,2)}, wT=10
Xác định M = {3,5,7}. Gán nhãn cho các
đỉnh trong M
3: ((2,3),9) nhãn nhỏ nhất
5: ((2,5),12)
7: ((6,7),10)
Cập nhật:
VT = VT +{3} = {1,6,2,3}
ET = ET + {(2,3)}={(1,6),(6,2),(2,3)}
wT= 10 + 9 =19
VT = {1,6,2,3}, VT V,ET = {(1,6),(6,2),(2,3)}, wT= 19
Xác định M = {4,5,7}. Gán nhãn cho các
đỉnh trong M
4: ((3,4),4) nhãn nhỏ nhất
5: ((2,5),12) / 5: ((3,5),18)
7: ((6,7),10)
Cập nhật:
VT = VT +{4} = {1,6,2,3,4}
ET = ET + {(3,4)}={(1,6),(6,2),(2,3),(3,4)}
wT= 19+4=23
KẾT QUẢ CÁC BƯỚC LẶP
VT ={1,6,2,3,4}, VT V, ET={(1,6),(6,2),(2,3),(3,4)},
wT= 23
Xác định M = {5,7}. Gán nhãn cho các đỉnh trong M
5: ((3,5),18) // 5: ((2,5),12)
5: ((4,5),6) nhãn nhỏ nhất
7: ((6,7),10)
Cập nhật:
VT = VT +{5} = {1,6,2,3,4,5}
ET = ET + {(4,5)}={(1,6),(6,2),(2,3),(3,4),(4,5)}
wT= 23 +6=29
VT = {1,6,2,3,4,5}, VT V, ET =
{(1,6),(6,2),(2,3),(3,4),(4,5)}, wT= 29
Xác định M = {5,7}. Gán nhãn cho các đỉnh trong M
5: ((5,7),5) nhãn nhỏ nhất
7: ((6,7),10)
Cập nhật:
VT = VT +{7} = {1,6,2,3,4,5,7}
ET = ET + {(5,7)}={(1,6),(6,2),(2,3),(3,4),(4,5),(5,7)}
wT= 29 + 5 =34
KẾT QUẢ CÁC BƯỚC LẶP
VT ={1,6,2,3,4,5,7}, VT V, ET =
{(1,6),(6,2),(2,3),(3,4),(4,5),(5,7)}, wT=34
Xác định M = {8,9}. Gán nhãn cho các đỉnh trong M
8: ((7,8),11)
9: ((7,9),1) nhãn nhỏ nhất
Cập nhật:
VT = VT +{9} = {1,6,2,3,4,5,7,9}
ET = ET +{(7,9)}={(1,6),(6,2),(2,3),(3,4),(4,5),(5,7),(7,9)}
wT= 34 + 1=35
VT ={1,6,2,3,4,5,7,9}, VT V, ET =
{(1,6),(6,2),(2,3),(3,4),(4,5),(5,7),(7,9)}, wT=35
Xác định M = {9}. Gán nhãn cho các đỉnh trong M
8: ((7,8),11) nhãn nhỏ nhất
Cập nhật:
VT = VT +{8} = {1,6,2,3,4,5,7,9,8}
ET = ET
+{(7,8)}={(1,6),(6,2),(2,3),(3,4),(4,5),(5,7),(7,9),(7,8)}
wT= 35 + 11= 46
•Đến đây, ta đã tìm được VT ={1,6,2,3,4,5,7,9,8}, VT = V.
Vậy kết thúc thuật toán.
•Kết quả: Ta được đồ thị sau
Với tổng chi phí là: Ta
cộng tất cả các trọng
số giữa các đỉnh lại với
nhau
•Vậy tổng chi phí: 3 + 7 +
9 + 4 + 6 + 5 +1+ 11 = 46
Sử dụng thuật toán Prim tìm một cây bao trùm
nhỏ nhất của G, H bắt đầu từ đỉnh A? ghi ra kết
quả từng bước chạy.
C

10
6 5 8
B 15 F
A D 6
6
8 8
12
4

G H

57
Cây khung có trọng lượng nhỏ nhất
Cho đồ thị như hình vẽ chạy minh họa từng bước tìm
cây khung có trọng số nhỏ nhất của 2 thuật toán sau:
1. Thuật toán Kruskal
2. Thuật toán Prim tại đỉnh 1.
Cây khung có trọng lượng nhỏ nhất
Cho đồ thị như ma trận có trọng số bên dưới, chạy
minh họa từng bước tìm cây khung có trọng số nhỏ
nhất của 2 thuật toán sau:
1. Thuật toán Kruskal
2. Thuật toán Prim tại đỉnh A.

You might also like