You are on page 1of 55

CHƢƠNG 5.

ĐỒ THỊ VÀ CÂY
5.1 Định nghĩa, các khái niệm về đồ thị
5.2 Biểu diễn đồ thị
5.3 Một số thuật ngữ, tính chất của đồ thị
5.4 Đường đi Euler, đường đi ngắn nhất
5.5 Cây - Định nghĩa và tính chất
5.6 Cây khung nhỏ nhất, một số thuật toán tìm kiếm 1
5.1 ĐỊNH NGHĨA VÀ CÁC THUẬT NGỮ VỀ ĐỒ THỊ
*Khái niệm
 X là một tập không rỗng và U  X  X; ở đó U={(a,b): a,b X}
Bộ G=<X,U> đƣợc gọi là một đồ thị với X là tập đỉnh, U là tập
các cung. Nếu (a,b) được sắp thứ tự, bộ G=<X,U> đƣợc gọi là đồ
thị có hƣớng (nếu a,b không sắp thứ tự thì G là đồ thị vô hƣớng).
*Các khái niệm khác
 G=<X,U> là đồ thị hữu hạn nếu tập đỉnh X hữu hạn.
 Hai đỉnh a,b X (ab) đƣợc gọi là hai đỉnh kề nhau nếu (a,b) là
một cạnh (cung) của đồ thị.
2
*Các khái niệm khác
 Hai cạnh (hai cung) đƣợc gọi là hai cạnh (hai cung) kề nhau nếu
chúng có một đỉnh chung.
 Nếu cạnh (cung) có bắt đầu và xuất phát tại cùng một đỉnh đƣợc
gọi là một nút hay khuyên.
 Nếu cung đi từ đỉnh a đến đỉnh b thì a gọi là đỉnh đầu còn b là đỉnh
cuối của cung.
 Nếu cặp đỉnh (a,b) có từ hai cạnh (hai cung cùng hƣớng) thì cặp
(a,b) gọi là cạnh (cung) bội. 3
5.2 BIỂU DIỄN ĐỒ THỊ
*Phương pháp hình học
 Biểu diễn G=<X,U> theo nguyên tắc:
 Với mỗi x X đặt tƣơng ứng với một điểm, dùng ngay ký hiệu x để
ghi nhãn cho điểm đó và gọi nó là đỉnh của đồ thị.
 Nếu u=(x,y)  U là một cạnh thì từ x đến y đƣợc nối bởi một đoạn
thẳng hoặc một đƣờng cong.
 Nếu u=(x,y)U là một cung có đỉnh đầu x, đỉnh cuối y thì từ x đến y
đƣợc nối bởi một đoạn thẳng (hoặc cong) có hƣớng từ x tới y.
 Nếu u=(x,x)U thì tại đỉnh x có một khuyên. Khi xX nhƣng
(x,x) U hoặc không có y  X nào để (x,y)  U thì x là đỉnh cô lập.
4
*Ví dụ:
 X={x1,x2,x3,x4} U={(x1,x2); (x2,x3); (x3,x4) ;(x1,x1)}
G=<X,U> có hướng

2
x2
x1
Khuyên
5
1
x4
3 x3
Mũi tên chỉ
Đỉnh Đồ thị vô hướng
cô lập hướng
5
5.2 BIỂU DIỄN ĐỒ THỊ
*Phương pháp ma trận kề
 Biểu diễn G=<X,U> vô hƣớng với X={x1,x2,..,xn}theo nguyên tắc:
 Dùng ma trận vuông cấp n để biểu diễn
 Phần tử ij ở hàng i, cột j là d nếu cặp đỉnh xi, xj có d cạnh nối chúng.
 Ngƣợc lại, nếu cặp xi, xj không có cạnh nào nối thì ij = 0.
x1 x2 x3 x4
x1 x2 0 1 1 0
x1
x2 1 0 1 2
x3 1 1 0 0
x3
x4
x4 0 2 0 0
6
5.2 BIỂU DIỄN ĐỒ THỊ
*Phương pháp ma trận kề
 Biểu diễn G=<X,U> có hƣớng với X={x1,x2,..,xn}theo nguyên tắc:
 Dùng ma trận vuông cấp n để biểu diễn
 Phần tử ij ở hàng i, cột j là d nếu cặp đỉnh (xi, xj) có d cung cùng
hướng nối chúng.
 Ngƣợc lại, thì ij = 0.
x1 x2 x1 x2 x3 x4
x1 0 0 2 0
x2 1 0 1 1
x3 x3 0 0 0 0
x4 7
x4 0 1 0 0
*Một số dạng đồ thị thường gặp
 Đồ thị đơn: đồ thị vô hướng G=<X,U> là đồ thị đơn nếu mỗi cặp
đỉnh khác nhau a, b X đƣợc nối với nhau bởi không quá 1 cạnh,
mọi đỉnh đều không có khuyên.
 Đa đồ thị : G=<X,U> vô hướng và tồn tại hai đỉnh khác nhau đƣợc
nối lại bởi hai cạnh trở lên, mỗi đỉnh đều không có khuyên
 Giả đồ thị: G=<X,U> là giả đồ thị nếu nó là đa đồ thị có khuyên.
2 2
x1 x2

5 5
x3
x4 Đơn đồ thị
Giả đồ thị
8
3 3
Đa đồ thị
*Một số dạng đồ thị thường gặp
 Đơn đồ thị có hƣớng: đồ thị G=<X,U> có hƣớng và với mỗi cặp
đỉnh a, b X khác nhau đƣợc nối với nhau bởi không quá 1 cung,
(đỉnh có thể có khuyên hoặc không).
 Đa đồ thị có hƣớng: G=<X,U> có hƣớng và tồn tại một cặp đỉnh
khác nhau đƣợc nối lại bởi hai cung (cùng hƣớng) trở lên, (mỗi đỉnh
có thể có khuyên hoặc không).
2
2
5
5
9
3
3 Đơn đồ thị có hướng Đa đồ thị có hướng
*Một số dạng đồ thị đặc biệt
 Đồ thị đầy đủ: đồ thị đầy đủ n đỉnh, ký hiệu là Kn là đơn đồ thị vô
hƣớng mà giữa hai đỉnh bất kỳ đều có cạnh nối. (đồ thị đầy đủ Kn
sẽ có tất cả n(n-1)/2 cạnh, là đơn đồ thị nhiều cạnh nhất)

 Đồ thị vòng: Đồ thị vòng Cn với n 3 gồm


n đỉnh v1, v2, …vn và (v1,v2), (v2,v3),
..(vn,v1) cạnh. 10
*Một số dạng đồ thị đặc biệt
 Đồ thị lập phƣơng: đồ thị lập phƣơng n, đỉnh Qn là đồ thị với các
đỉnh biểu diễn 2n xâu nhị phân độ dài n. Hai đỉnh của nó kề nhau
nếu nhƣ 2 xâu nhị phân chỉ khác nhau 1 bit.

n=0 n=1 n=2 n=3


11
*Phương pháp danh sách cạnh
 Trong trƣờng hợp đồ thị G có số cạnh thƣa (m<6n) thì ta có thể
biểu diễn theo phƣơng pháp danh sách cạnh.
 Lƣu trữ tất cả các cạnh của đồ thị, mỗi cạnh sẽ lƣu bằng việc ghi
điểm đầu và điểm cuối trên 2 cột  cần 2m đơn vị bộ nhớ lƣu trữ
 Ví dụ
1
2

Đầu Cuối Đầu Cuối


1
2 4
1 2 2 1
3 2 3
1 3
2 3 5 2 4
4
2 4 3 1
3
3 5 12
3 5
5 4 5 5 4
5.3 MỘT SỐ THUẬT NGỮ, TÍNH CHẤT CỦA ĐỒ THỊ
*Một số thuật ngữ
 Bậc của đồ thị: Giả sử G=<X,U> vô hƣớng, với mỗi x X đặt m(x)
là số các cạnh đi qua x. Khi đó m(x)= deg(v) gọi là bậc của x. (x có
khuyên thì bậc 2, m(x)=1  đỉnh treo còn m(x)=0  đỉnh cô lập.)

 Nếu G=<X,U> có hƣớng thì gọi m+(x) là số các cung vào đỉnh x,
m-(x) là số các cung ra khỏi x. Khi đó m+(x) là bậc vào của x, m-(x) là
bậc ra của x.
- Nếu m+(x) = m-(x)=0 thì đỉnh x cô lập;
- Nếu m+(x)=0 và m-(x)=1 hoặc m+(x)=1 và m-(x)=0  x là đỉnh treo
13
*Một số thuật ngữ
 Đường đi và chu trình trong đồ thị: Giả sử G=<X,U> (có hƣớng
hoặc vô hƣớng) thì một đƣờng đi trong đồ thị là một dãy xi1ui1xi2ui2…
xijuij… xikuikxik+1 trong đó xij là các đỉnh, uij là các cạnh sao cho  j 
{1,2,…,k} thì xij và xij+1 là hai đỉnh kề nhau của cạnh uij
 Độ dài của đƣờng đi bằng số các cạnh (cung) trong đƣờng đi đó.
 Chu trình là một đƣờng đi có đỉnh xuất phát và kết thúc trùng nhau
 Chu trình (đƣờng) đƣợc gọi là chu trình (đƣờng) đơn nếu nó đi qua
mỗi cạnh đúng một lần.
 Chu trình (đƣờng) đƣợc gọi là chu trình (đƣờng) sơ cấp nếu nó đi qua
14

mỗi đỉnh đúng một lần.


*Một số thuật ngữ
 Đồ thị con: Trong G=<X,U> ta bỏ đi một số đỉnh và cạnh liên quan
đến đỉnh đó thì phần còn lại đƣợc gọi là đồ thị con của G đã cho.
 Đồ thị bộ phận: Trong G=<X,U> ta bỏ đi một số cạnh, giữ nguyên
các đỉnh thì phần còn lại đƣợc gọi là đồ thị bộ phận của G đã cho.
 Đồ thị liên thông:
- Hai đỉnh phân biệt x, y thuộc đồ thị vô hƣớng G=<X,U> đƣợc gọi là
liên thông nếu tồn tại một đƣờng đi nối x và y.
- Đồ thị vô hƣớng G=<X,U> gọi là liên thông nếu với hai điểm phân
biệt bất kỳ thuộc đồ thị đều liên thông. (Với G=<X,U> có hƣớng, nếu
với x,y bất kỳ mà có đƣờng đi từ x đến y và từ y đến x thì G liên thông
15

mạnh; còn nếu có đƣờng đi (không xét hƣớng) thì liên thông yếu.)
*Một số tính chất
 Trong G=<X,U> ta luôn có số bậc của G gấp đôi số cạnh.
 Nếu G=<X,U> vô hƣớng thì m(G)=2|U| với |U| là số cạnh
 Nếu G=<X,U> có hƣớng thì m+(x)=m-(x)=|U|
 Nếu G=<X,U> là một đa đồ thị có n đỉnh thì số đỉnh bậc lẻ luôn là
một số chẵn.
 Nếu G=<X,U> có đúng hai đỉnh bậc lẻ thì hai đỉnh này phải liên
thông.
 Giả sử G=<X,U> là một đồ thị vô hướng với số đỉnh n>=3; nếu
mỗi đỉnh đều có số bậc từ 2 trở lên thì G có một chu trình sơ cấp.
16
*Một số tính chất
 Đồ thị G=<X,U> là liên thông khi và chỉ khi nó có một thành phần
liên thông.
 Đồ thị vô hướng G=<X,U> có số đỉnh  4, với mọi đỉnh mà bậc  3
trở lên thì trong G có chu trình sơ cấp độ dài chẵn.

 Mọi cặp đỉnh phân biệt của một đồ thị hữu hạn, vô hướng, liên
thông luôn luôn có đường đi đơn .

 Đồ thị đơn G=<X,U> với số đỉnh |X|=n  2 mà tổng bậc của hai
đỉnh khác nhau tuỳ ý đều không nhỏ hơn n là đồ thị liên thông.
17
5.4 ĐƢỜNG ĐI NGẮN NHẤT
5.4.1 Một số chu trình đặc biệt *Chu trình Euler
 Một chu trình trong đồ thị G=<X,U> đƣợc gọi là chu trình Euler
nếu nó đi qua tất cả các cạnh của G và qua mỗi cạnh đúng một lần.
 Đồ thị vô hƣớng G=<X,U> có chu trình Euler khi và chỉ khi G liên
thông và bậc của tất cả các đỉnh đều chẵn.
 Đồ thị có hƣớng G=<X,U> có chu trình Euler khi và chỉ khi G liên
thống yếu, bậc vào và bậc ra của mỗi đỉnh đều bằng nhau.
x1 x2
u1 u2 u4 u5
u3 Chu trình Euler:
x3 x4 x5 x6
u9 u6
u8 u7
x7 x3u1x1u2x4u3x5u4x2u5x6u6x5u7x7u8x4u9x3
*Thuật toán tìm chu trình Euler
 Bước 1: Kiểm tra xem G=<X,U> có liên thông hay không?
 Nếu G liên thông thì chuyển sang bƣớc 2
 Nếu G không liên thông thì kết luận không có chu trình và dừng.
 Bước 2: Kiểm tra xem tất cả các đỉnh của G có bậc chẵn hay không?
 Nếu đúng thì chuyển bƣớc 3
 Ngƣợc lại kết luận không có chu trình và dừng.
 Bước 3: Xây dựng các chu trình đơn trong G sao cho tất cả các cạnh
đều có chu trình đơn đi qua và mỗi cạnh chỉ qua 1 lần.Ghép các chu
trình đơn ở trên tại các đỉnh chung nhau, ta có chu trình Euler.
19
* Đường đi Euler
 Đƣờng đi Euler trong đồ thị G=<X,U> là đƣờng đi qua tất cả các
cạnh của G và qua mỗi cạnh đúng một lần.
 Nhận thấy chu trình Euler là đƣờng đi Euler đóng.
 Điều kiện cần và đủ để đồ thị vô hƣớng G=<X,U> có đƣờng đi Euler
nhƣng không có chu trình Euler là G liên thông và số đỉnh bậc lẻ
trong đồ thị là 2.
 Điều kiện cần và đủ để đồ thị có hƣớng G=<X,U> có đƣờng đi Euler
nhƣng không có chu trình là G liên thông yếu, bậc vào và bậc ra của
mỗi đỉnh đều bằng nhau; trừ 2 đỉnh đặc biệt (một đỉnh bậc vào lớn
hơn bậc ra 1 đơn vị, một đỉnh bậc ra lớn hơn bậc vào 1 đơn vị)
*Thuật toán tìm đường đi Euler
 Bước 1: Kiểm tra xem G=<X,U> có liên thông hay không?
 Nếu G liên thông thì chuyển sang bƣớc 2
 Nếu không liên thông thì kết luận không có đƣờng đi Euler và dừng.
 Bước 2: Kiểm tra xem mọi đỉnh của G có bậc chẵn hay không?
 Nếu đúng thì chuyển bƣớc 4
 Ngƣợc lại chuyển bƣớc 3.
 Bước 3: Kiểm tra xem số đỉnh bậc lẻ có bằng 2 hay không? Nếu có
thì chuyển bƣớc 4, nếu không thì dừng và kết luận không có đƣờng đi
 Bước 4: Xây dựng đƣờng đi Euler trong G
21
CHU TRÌNH HAMILTON, ĐƢỜNG ĐI HAMILTON
*Chu trình Hamilton
 Một chu trình trong đồ thị G=<X,U> đƣợc gọi là chu trình
Hamilton nếu nó đi qua tất cả các đỉnh của G và qua mỗi đỉnh đúng
một lần.
 Đơn đồ thị liên thông G=<X,U> có bậc ở mỗi đỉnh không nhỏ hơn
nửa số đỉnh của đồ thị thì tồn tại chu trình Hamilton. (số đỉnh 3)
 xX luôn có m(x)  |X|/2 với |X| là số đỉnh của đồ thị G
x1 u3
u1 u2 x7
Chu trình Hamilton:
u4 u3x1u1x3u5x4u4x7u3
x3 x4
u5
* Đường đi Hamilton
 Đƣờng đi Hamilton trong đồ thị G=<X,U> là đƣờng đi qua tất cả các
đỉnh của G và qua mỗi đỉnh đúng một lần.
 Định lý: Đồ thị G=<X,U> có hƣớng và đầy đủ thì luôn luôn tồn tại
đƣờng đi Hamilton.
 Nếu thay cung bởi cạnh ta có đồ thị vô hƣớng đầy đủ nên có hệ quả:
Giả sử G=<X,U> là đồ thị đầy đủ với |X|  3 khi đó luôn tồn tại chu
trình Hamilton. Đồ thị đầy đủ x1 x4
x1 x2 và có chu trình
Hamilton

Đồ thị không đầy x2 x3


x3 x4 đủ nhƣng có chu
trình Hamilton
* Mở rộng kiến thức
 Đồ thị hai phía: Nếu tập đỉnh có thể phân hoạch đƣợc thành hai tập
X, Y và mỗi x  X nối với mỗi y  Y chỉ bởi 1 cạnh
 Đồ thị phẳng: Đồ thị có thể vẽ đƣợc trên mặt phẳng sao cho các cạnh
không cắt nhau ở ngoài đỉnh.
 Đồ thị đồng cấu: Hai đồ thị gọi là đồng cấu nếu nó có thể thu về 1 đồ
thị nhờ phép chia cạnh. (phép chia cạnh là phép bỏ bớt 1 cạnh (u, v)
và thay vào đó là đỉnh w cùng cặp cạnh (u,w) (w,v)
x1 x2 x1 x2
Dạng biểu
diễn phẳng
x3
của Đồ thị đầy
x4
x3 x4 đủ K4
5.4.2 Đường đi ngắn nhất với đồ thị không trọng số

 Đồ thị không trọng số: Đồ thị G=<X,U> mà trên cạnh không gắn
giá trị là đồ thị không trọng số.
 Đường đi ngắn nhất: Cho G=<X,U> không trọng số và a, b X là
hai đỉnh bất kỳ, đƣờng đi ngắn nhất từ a đến b là đƣờng đi mà đi qua
số cạnh ít nhất.
x1 x4 x7 x9

a x3 x6 b

x2 x5 x8 x10
* Cách tìm đường đi ngắn nhất
 Ghi chỉ số cho các đỉnh: theo quy nạp
 Đỉnh xuất phát a có nhãn 0. Tập các đỉnh nhãn 0 là A(0)={a}
 Các đỉnh có cạnh đi từ a đến thì nhãn 1  tập A(1)={x1, x2, x3}
 Cứ thế cho đến khi đỉnh b bị gán nhãn thì dừng.  có A(2)={x4, x5,
x6} và A(3)= {x7, x8, b}
 Xác định đƣờng đi ngắn nhất: dò ngƣợc từ b cũng theo quy nạp
 Giả sử lúc đó b có nhãn là m thì ta tìm tất cả các đỉnh nhãn (m-1) tức
là tìm đỉnh trong tập A(m-1).  ở đây b nhãn 3 nên dò A(2)=, A(1)
 Cứ nhƣ vậy đến khi thấy đỉnh có nhãn 0 (đỉnh a) thì dừng  có
đƣờng đi ngắn nhất.
*Ví dụ đường đi ngắn nhất với đồ thị không trọng số
 Đỉnh xuất phát nhãn 0 nên A(0)={a}  tập A(1)={x1, x2, x3}
 Có tập A(2)={x4, x5, x6} và A(3)= {x7, x8, b}dừng bƣớc 1
1 3
2
x1 x4 x7 x9
0 1 2 3
a x3 x6 b
3
x2 x5 x8 x10
1 2

 Xác định đƣờng ngắn nhất: từ b là đỉnh có nhãn 3 thì tìm các đỉnh
nhãn 2 mà có hƣớng đến b  Xét A(2) tìm đƣợc x6  xét tiếp tập
A(1) mà có đỉnh hƣớng đến x6 thì tìm đƣợc x3  đƣờng ngắn nhất
5.5.2 Đường đi ngắn nhất với đồ thị có trọng số
 Đồ thị có trọng số: Đồ thị G=<X,U> . Với mỗi cạnh u U ta đặt
tƣơng ứng một số thực l(u) và gọi nó là trọng số của u. Khi đó đồ thị
có các cạnh mang trọng số nhƣ vậy đƣợc gọi là đồ thị có trọng số.
 Đường đi ngắn nhất: Cho G=<X,U> là đồ thị đơn liên thông có
trọng số và a, b X là hai đỉnh bất kỳ, đƣờng đi ngắn nhất từ a đến b
là đƣờng đi mà có trọng số bé nhất.
5 6
x3 x4 b
4
1 2
x5
a 9
2 3
x2 9 x6
* Thuật toán Dijkstra tìm đường đi ngắn nhất (trọng số >0)
 Bƣớc 1: đánh trọng số các đỉnh
Đỉnh xuất phát a có trọng số 0. Các đỉnh khác ta đặt cho nó trọng số đủ lớn
(thoả mãn lớn hơn trọng số các đỉnh từ a tới nó).
 Bƣớc 2: Giảm trọng số các đỉnh
Giả sử tại x có (x). Nếu y (ở đây y nối sang x) mà có (x)> (y) + l(y,x)
thì thay (x) bởi ’(x)= (y)+l(y,x) ngƣợc lại thì giữ nguyên (x). Cứ nhƣ
vậy đến khi tất cả các đỉnh có trọng số cực tiểu.
Bƣớc 3: xác định đƣờng đi ngắn nhất:
Xuất phát từ b, ta đi về đỉnh kề với b là xi thoả mãn : (b)= (xi) + l(xi,b).
Nếu không có xi nhƣ vậy thì về đỉnh kề với b mà trọng số từ đỉnh đó tới b
là bé nhất.  về đến a có trọng số 0
* Ví dụ:
 Bƣớc 1: đánh trọng số các đỉnh

 x3 5 x4
6
b
4 2

1
x5
0 a  9
3
2
x2 x6
 9

 Bƣớc 2: 5 6
x3 x4 b
4
Giảm trọng số các đỉnh 1 2
x5
a 9
3
2
x2 x6
9
* Ví dụ:
 Bƣớc 2: Giảm trọng số các đỉnh
4 5
 6
x3 x4 b

4 1 2
0 a x5
 9
3
2
x2 x6
2 9
 9 
4 5 6
x3 x4 b
4 1 2
a x5
0 9
5
3
2 x2 x6 11
2 9
* Ví dụ:
 Bƣớc 2: Giảm trọng số các đỉnh
4 5 9 6
x3 x4 b
4 2

1
0 x5
a 5 9
3
2
x2 x6
2 9 11
9 15
5 6
4 x3 x4 b
4 1 2
x5 7 20
0 a 9
5
3
2
x2 x6
2 9 11
* Ví dụ:
 Bƣớc 2: Giảm trọng số các đỉnh
* 7 * *13
5 6
4 x3 x5 b
*
4 1 * 2
x4
0 a 9
3 5
2
x2 x3 11
2 9

 Bƣớc 3: Xác định đƣờng đi ngắn nhất là : ax3x4x5b.


Tuy nhiên khi ta dò ngƣợc từ đến x4, chọn tiếp x3 vì trọng số của l(x3,x4)=
1 (nhƣng thực chất ở bƣớc 2 có 2 lần xét đều cho trọng số mới của x4 =5
nên có thể có 2 đƣờng đi ngắn nhất.)
* Bài tập
 Bài1: Tìm đƣờng đi ngắn nhất từ a đến e

 Bài 2:
Tìm đƣờng đi ngắn nhất từ a
đến d
5.5 CÂY –TÍNH CHẤT
*Cây
 Một đồ thị đơn, liên thông và không có chu trình đƣợc
gọi là một cây.
 Đồ thị vô hƣớng gồm k thành phần liên thông mà mỗi
thành phần này là một cây đƣợc gọi là rừng (cây)
x1 Cây x1
y1

x3 x4 x3 x4
x2 x2 y2

Rừng y4
x5 x6 x5 x6 y3
*Cây có gốc:
 Một đồ thị có hướng với gốc là đỉnh không có bậc vào,
còn lá là đỉnh không có bậc ra.
 Với các đỉnh khác trong cây mà không phải là đỉnh gốc,
cũng không phải là đỉnh lá thì gọi là đỉnh trong.
 Lấy một đỉnh trong làm gốc thì ta đƣợc một cây con.
x1
*Chiều cao của cây: Gốc: x1
 Chiều cao của cây là mức lớn
nhất hay độ dài đƣờng đi lớn x2 x3 x4 Đỉnh trong: x4
nhất từ gốc đến lá.
Chiều cao: 2 x5 x6
Lá: x2, x3, x5, x6
*Cây m phân:
 Cây có gốc đƣợc gọi là cây m phân nếu tất cả các đỉnh
đều có không quá m con.
 Cây m phân đầy đủ là cây m phân mà mỗi đỉnh trong
(kể cả gốc) đều có đúng m con.
 Cây m phân đƣợc gọi là cân đối nếu tất cả các lá đều ở
mức h hoặc h-1 (với h là chiều cao của cây). x1
x1 Cây 3 – phân đầy đủ
Cây 3 - phân

x2 x3 x4
x2 x3 x4
x8 x5 x6 x7
x13 x12 x11 x10
x5 x6 x9
Chiều cao h=2
*Cây nhị phân: Mức 1 x1
 Là cây m phân với m =2. Mức 2

x2 x3 x4

x1 Cây cân đối


x8 x5 x6 x7
x10
x9
x1
x2 x4
Cây nhị phân

x2 x4
x3 x5 x5 x6

Cây nhị phân đầy đủ x5 x5 x6


* TÍNH CHẤT
*Định lý 1
 Giả sử G=<X,U> là một cây, các mệnh đề sau là tƣơng đƣơng:
 G là đồ thị liên thông và không có chu trình
 G có n-1 cạnh và không có chu trình
 G liên thông và có n-1 cạnh
 G không có chu trình, nhƣng nếu thêm một cạnh nối 2 đỉnh không
kề nhau thì xuất hiện duy nhất 1 chu trình
 G liên thông, nếu bỏ đi một cạnh tuỳ ý thì đồ thị nhận đƣợc không
còn liên thông.
 Hai đỉnh bất kỳ của G đƣợc nối với nhau bởi một đƣờng đi đơn.
*Định lý 2
 Một cây có ít nhất hai đỉnh treo.(ít nhất gốc và lá)
*Định lý 3
 Một cây m – phân đầy đủ với i đỉnh trong thì có tất cả n=m*i + 1
đỉnh và l=(m-1)i+1 đỉnh lá
𝑛−1
 Cây m phân đầy đủ với n đỉnh sẽ có i= đỉnh trong và
𝑚
𝑚−1 𝑛+1
l= đỉnh lá
𝑚
𝑚𝑙−1 𝑙−1
 Cây m phân đầy đủ có l lá sẽ có n= đỉnh và i= đỉnh trong
𝑚−1 𝑚−1
*Lưu ý:
 Để gần gũi hơn với khái niệm cây thƣ mục trong tin học, đỉnh gốc
đƣợc coi là có mức 0, sau đó là các mức 1,2,…
Mức 0 x1
 Vậy cây có chiều cao là mức
cao nhất của đỉnh  h=2
Mức 1

x2 x4  Có nhiều nhất h lá trong cây


m phân độ cao h.; và số đỉnh
x3 x5 x5 x6 ở mức i của cây nhị phân đầy
đủ là 2i
Mức 2
5.6 CÂY KHUNG - THUẬT TOÁN TÌM KIẾM
 Có rất nhiều thuật toán đƣợc xây dựng dựa trên cơ sở duyệt các
đỉnh của đồ thị. Trong khuôn khổ cho phép, ta nghiên cứu 2 thuật
toán tìm kiếm cơ bản nhất: Tìm kiếm theo chiều sâu (DFS) và tìm
kiếm theo chiều rộng (BFS)
*Tìm kiếm theo chiều sâu (Depth First Search)
 Ý tƣởng : bắt đầu từ một đỉnh v0 tùy ý và đi đến đỉnh u nào đó kề
với v0; tiếp tục lặp lại quá trình với đỉnh u cho đến khi đỉnh nào
cũng đƣợc duyệt.
 Cụ thể nhƣ sau..
* THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
*Tìm kiếm theo chiều sâu (Depth First Search)
- Xuất phát từ một đỉnh v0 tùy ý, đánh dấu đỉnh
A v0 là đã đến rồi tìm và đi đến đỉnh u nào đó kề
với v0;
D - Tại mỗi đỉnh u đƣợc xét thì:
B
C + đánh dấu là u đã đến
I + tìm xem có đỉnh nào kề với u mà chƣa xét
E
G H thì chuẩn bị đi đến.
(nếu không tìm thấy đỉnh nào chƣa xét thì gán
đỉnh u là đã duyệt và quay về đỉnh v0) để lặp lại
K L M
quá trình đến - xét – duyệt
* THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
*Tìm kiếm theo chiều sâu (Depth First Search)
 Đỉnh đƣợc chọn đến thăm là đỉnh sinh ra sau cùng trong số các
trạng thái (đỉnh) chờ đƣợc đến. vào sau ra trƣớc  hoạt động kiểu
ngăn xếp Stack

- Ví dụ: Xác định đƣờng đi từ A đến M và tập đỉnh sẽ xét với thuật
DFS. Ta đƣợc tập đỉnh xét lần lƣợt hiển thị ở cột 2.
- Qúa trình xác định đường đi từ A đến M ta làm ngược lên, để liên
thông cần có cạnh nối nên sẽ có đường đi là A  C H  M
* THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
*Tìm kiếm theo chiều sâu (Depth First Search)
Lần Đỉnh Open (kề với đỉnh đang xét) Close (đỉnh đã duyệt)
A*
0 A 

1 A (*) B, C, D [A]
D 2 B E, C, D A, B
B
C 3 E C, D A, B, E

I 4 C (*) G,H, D A, B, E, C
E
5 G K, L, H, D A, B, E, C, G
G H
6 K L, H, D A, B, E, C, G, K

7 L H, D A, B, E, C, G, K, L
K L M* 8 H (*) M, D A, B,E, C, G, K, L, H

9 M (*) D A, B, E, C, G, K, L, H, M
* THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
*Tìm kiếm theo chiều rộng (Breadth First Search)

- Xuất phát từ một đỉnh v0 tùy ý, một đỉnh đƣợc coi là duyệt xong
ngay sau khi tất cả các đỉnh kề với nó đã đƣợc xét.
- Đỉnh nào đƣợc thăm trƣớc thì các đỉnh kề với nó cũng đƣợc
duyệt trƣớc.  Nhƣ vậy lƣu trữ các đỉnh nằm chờ ở DFS là
ngăn xếp Stack thì ở BFS là hàng đợi Queue
- Qúa trình xác định đường đi từ A đến K ta đi ngược lên (khi có
cạnh nối liên thông với đỉnh đang xét) sẽ có đường đi là A 
C G  K
* THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
*Tìm kiếm theo chiều rộng (Breadth First Search)
Lần Đỉnh Open (kề với đỉnh đang xét) Close (đỉnh đã duyệt)
A*
0 A 

1 A (*) B, C, D [A]
D 2 B C, D, E A, B
B
C 3 C D, E, G, H A, B, C

I 4 D E, G,H, I A, B, C, D
E
5 E G,H, I A, B, C, D, E
G H
6 G H, I, K, L A, B, C, D, E, G

7 H I, K, L, M A, B, C, D, E, G, H
K L M 8 I K, L, M A, B, C, D, E, G, H, I

9 K (*) L, M A, B, C, D, E, G, H, I, K
* Khái niệm về cây khung
Giả sử G=(X,U) là một đồ thị vô hƣớng, liên thông, khi đó ta có cây
T=(X, F) đƣợc gọi là một cây khung của G nếu F  U.
Điều này có nghĩa là cây này chứa tất cả các đỉnh của đồ thị ban đầu,
còn số cạnh thì đã lược bớt sao cho đảm bảo tính chất của một cây.

*ví dụ
*Định lý
Số cây khung của đồ thị đầy đủ Kn là nn-2
*Bài toán cây khung nhỏ nhất
Cho G=(X,U) là một đồ thị vô hƣớng liên thông với tập gồm n đỉnh
X (x1, x2, …, xn), tập cạnh U gồm m cạnh. Với mỗi cạnh u, ta gán
cho nó một giá trị số thực là c(u), coi nhƣ đây là độ dài cạnh u. Giả
sử T=(X,F) là một cây khung của G, độ dài c(T) của cây khung T
chính là tổng độ dài tất cả các cạnh của cây khung.
C(T)= 𝑢𝜖𝑇 𝑐(𝑢)
Cây khung nhỏ nhất là cây khung có độ dài nhỏ nhất trong tất cả
các cây khung T của đồ thị G.
* Thuật toán tìm cây khung nhỏ nhất
Thuật toán Kruskal Thuật toán Prim
 Sắp xếp các cạnh của G theo  - Bắt đầu từ đỉnh s tùy ý, nối s
thứ tự độ dài c(u) giảm dần với y gần nhất (tức là cạnh có độ
 Khởi tạo T=  dài bé nhất mà xuất phát từ s)
 Bổ sung các cạnh vào T, nhỏ  Lặp quá trình: Trong số các cạnh
ƣu tiên trƣớc nhƣng phải thỏa kề với s và y, tìm cạnh min để đi
mãn không đƣợc tạo ra chu tới đỉnh z nhƣng cũng không tạo
trình chu trình.
 Kết thúc khi T có (n-1) cạnh  Tiếp tục quá trình lặp và dừng
khi có đủ (n-1) cạnh.
*Ví dụ Tìm cây khung nhỏ nhất của đồ thị Cạnh Độ dài
(c,d) 1
sau theo Kruskal: (e,i) 1
(m,n) 1
 Số đỉnh của đồ thị n=12  kết thúc (f,k) 1

khi có 11 cạnh (a,b) 2


(b,f) 2

2 3 1 (c,g) 2
a b c d (f,g) 2
(g,h) 2
3 2 2 5 (b,c) 3
4 2 2
e f g h (a,e) 3
(i,k) 3
1 1 4 3 (k,m) 3
3 3 1 (h,n) 3
i k m n
(e,f) 4
(g,m) 4
(d,h) 5
*Ví dụ Cạnh Độ dài
(c,d) 1

Tìm cây khung nhỏ nhất của đồ thị (e,i)


(m,n)
1
1
sau theo Kruskal: Tạo chu trình
(f,k) 1
(a,b) 2
(b,f) 2

2 3 1 (c,g) 2
a b c d (f,g) 2
(g,h) 2
3 2 2 5 (b,c) 3
4 2 2
e f g h (a,e) 3
(i,k) 3
1 1 4 3 (k,m) 3
3 3 1 (h,n) 3
i k m n
(e,f) 4
(g,m) 4
(d,h) 5
*Ví dụ Tìm cây khung nhỏ nhất của đồ thị Cạnh Độ dài
(c,d) 1
sau theo Prim: (c,g) 2
(g,h) 2
 Số đỉnh của đồ thị n=12  kết thúc (g,f) 2

khi có 11 cạnh (f,k) 1


(f,b) 2

2 3 1 (a,b) 2
a b c d (a,e) 3
(e,i) 1
3 2 2 5 (f,k) 1
4 2 2
e f g h (k,m) 3
(m,n) 1
1 1 4 3 3
3 3 1 3
i k m n
4
4
5
BÀI TẬP
* Trò chơi viết thư dây chuyền. Ban đầu có một người nhận được một
bức thư và giả sử rằng khi nhận được một bức thư hoặc sẽ viết thư cho
bốn người khác hoặc không viết cho ai. Hỏi có bao nhiêu người nhận
được thư kể cả người đầu tiên nếu không có ai nhận được nhiều hơn một
bức và trò chơi kết thúc khi có 100 người nhận thư mà ko viết cho ai?

 Trò chơi biểu diễn bằng cây tứ phân.


• Có 100 không viết thư nên số lá của cây là l = 100
• Số người nhận thư là n = (4.100 -1 )/(4-1) = 133
• Số các đỉnh trong là i = (100-1)/(4-1) = 33 đỉnh, tức 33 người
viết thư 54
55

You might also like