Năm 1736 Euler, cha đẻ của lý thuyết đồ thị, đã giải
được bài toán hóc búa nổi tiếng thời đó về những cây
cầu ở Konigberg.
Thành phố Konigberg có hai hòn đảo nối với nhau và
với 2 bờ sông bằng7 chiếc cầu như hình vẽ.
91 trang |
Chia sẻ: lylyngoc | Lượt xem: 1839 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Chương 4: Lý thuyết đồ thị, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 4:
LÝ THUYẾT ĐỒ THỊ
Chương 4
4.3 ĐỒ THỊ EULER
4.4 ĐỒ THỊ HAMILTON
CÂY4.6
BÀI TOÁN TÌM ĐƯỜNG ĐI
NGẮN NHẤT4.5
MỞ ĐẦU4.1
CÁC KHÁI NIỆM CƠ BẢN4.2
4.I MỞ ĐẦU
Bài toán về những cây cầu ở Konigsber
Năm 1736 Euler, cha đẻ của lý thuyết đồ thị, đã giải
được bài toán hóc búa nổi tiếng thời đó về những cây
cầu ở Konigberg.
Thành phố Konigberg có hai hòn đảo nối với nhau và
với 2 bờ sông bằng 7 chiếc cầu như hình vẽ.
Tìm đường đi qua tất cả 7 cây cầu, mỗi cây cầu chỉ
được đi qua một lần, sau đó quay về nơi xuất phát
4.2 CÁC KHÁI NIỆM CƠ BẢN
4.2.1 Đồ thị, đỉnh, cạnh, cung:
Đồ thị vô hướng G = (V, E) gồm tập V các đỉnh
và tập E các cạnh.
v
e
w
Ví dụ:
4.2 CÁC KHÁI NIỆM CƠ BẢN
Đồ thị có hướng G = (V, E) gồm tập V các đỉnh
và tập E các cạnh có hướng gọi là cung.
v
e
w
Mỗi cạnh e được liên kết với một cặp đỉnh (v, w)
có thứ tự
Ví dụ:
Cho đồ thị G = (V, E). Cạnh e E liên kết đỉnh v
và w, ta nói e liên thuộc đỉnh v, w; đỉnh v và w gọi
là kề nhau.
Cạnh song song:
Khuyên:
Đỉnh cô lập:
4.2 CÁC KHÁI NIỆM CƠ BẢN
4.2 CÁC KHÁI NIỆM CƠ BẢN
Đồ thị hữu hạn: là đồ thị có số cạnh (cung) hữu hạn.
Đồ thị đơn: là đồ thị không có khuyên và không có
cạnh song song.
Đồ thị đầy đủ: là đồ thị mà mọi cặp đỉnh đều kề nhau.
Bậc của đỉnh vV là tổng số cạnh liên thuộc với nó,
kí hiệu d(v). Mỗi khuyên được tính cho 2 bậc.
d(v) := Số cạnh + 2* Số khuyên
Đỉnh treo: là đỉnh có bậc bằng 1.
Nửa bậc: Cho đồ thị có hướng G = (V, E).
+ Nửa bậc ra của đỉnh vV, kí hiệu dr(v) là
số cung đi ra từ đỉnh v.
+ Nửa bậc vào của đỉnh vV, kí hiệu dv(v)
là số cung đi vào đỉnh v
4.2 CÁC KHÁI NIỆM CƠ BẢN
Đỉnh cô lập có bậc bằng 0
Cho đồ thị G = (V, E). Khi đó:
i. Tổng bậc các đỉnh của đồ thị là số chẵn và
d(v) = 2|E|
ii. Nếu G là đồ thị có hướng thì:
dv(v) = dr(v) = |E|
MỘT SỐ TÍNH CHẤT
* Tính chất 1:
* Tính chất 2:
Cho đồ thị G(V, E). Khi đó số đỉnh bậc lẻ là số chẵn
* Tính chất 3:
Cho đồ thị đơn G = (V, E) có n đỉnh (n 2) có
ít nhất hai đỉnh cùng bậc.
* Tính chất 4:
Cho đồ thị đơn G = (V, E) có n đỉnh (n > 2) có
đúng 2 đỉnh cùng bậc thì 2 đỉnh này không thể
đồng thời có bậc bằng 0 hoặc bằng n – 1.
4.2.2 Đường đi, chu trình, tính liên thông
Đường đi từ đỉnh v đến đỉnh w là dãy các cạnh nối
tiếp nhau bắt đầu từ đỉnh v và kết thúc tại đỉnh w.
Số cạnh trên đường đi là độ dài của đường đi .
Đường đi có độ dài n từ đỉnh v đến đỉnh w được biểu
diễn như sau:
= (v, e1, v1, e2, v2, …, vn-1, en, w)
Trong đó: vi (i = 1, …, n-1) là các đỉnh trên đường đi
và ei (i = 1, …, n) là các cạnh trên đường đi liên
thuộc các cạnh kề trước và sau nó.
Chu trình đơn là chu trình không đi qua một cạnh
quá một lần.
Đường đi sơ cấp là đường đi không đi qua một đỉnh
quá một lần.
Chu trình sơ cấp là chu trình không đi qua một đỉnh
quá một lần.
Chu trình là đường đi có đỉnh đầu và đỉnh cuối
trùng nhau.
Đường đi đơn là đường đi không đi qua một cạnh
quá một lần.
Đường đi có hướng trong đồ thị có hướng là dãy các
cung nối tiếp nhau (e1, e2, …, en) thỏa mãn đỉnh cuối của
cung ei là đỉnh đầu của cung ei+1, i = 1, …, n-1.
Đường đi đơn (chu trình đơn) có hướng là đường đi
(chu trình) có hướng không đi qua một cung quá một
lần.
Đường đi (chu trình) có hướng sơ cấp là đường đi
(chu trình) có hướng không đi qua một đỉnh quá một
lần.
Chu trình có hướng là đường đi có hướng có đỉnh đầu
và đỉnh cuối trùng nhau.
c
ba
d e
Ví dụ
v6v5
v4
v3
v2v1
e8 e7
e6e5
e4
e3
e2
e1
e9
Đồ thị liên thông là đồ thị mà mọi cặp đỉnh của
nó đều có đường đi nối chúng với nhau.
Đồ thị con:
Cho đồ thị G = (V, E). Đồ thị G’ = (G’, E’) là
đồ thị con của G nếu:
(i) V’ V và E’ E và
(ii) e = (v,w) E: e E’ v, w V’
Thành phần liên thông:
Là đồ thị con liên thông tối đại của G.
4.2.3 BIỂU DIỄN ĐỒ THỊ TRÊN MÁY
a. Ma trận kề
Đồ thị vô hướng
Cho đồ thị vô hướng G = (V, E) có n đỉnh theo thứ
tự v1, v2, …, vn.
Ma trận kề của đồ thị G là ma trận vuông A = (aij)n,
trong đó aij là số cạnh nối vi với vj.
Lưu ý mỗi khuyên được tính là 2 cạnh.
Ma trận kề của đồ thị vô hướng luôn đối xứng qua
đường chéo chính.
v4v5
v3
v2v1
Có ma trận kề là:
01000v5
10111v4
01210v3
01101v2
01010v1
v5v4v3v2v1
Vv,aa)v(d i
n
1j
ji
n
1j
iji
Ví dụ:
Tổng bậc
của v1
Đồ thị có hướng
Cho đồ thị có hướng G = (V, E) có n đỉnh theo thứ
tự v1, v2, …, vn.
Ma trận kề của đồ thị G là ma trận vuông A = (aij)n,
trong đó aij là số cung đi từ đỉnh vi đến vj.
Ví dụ:
v6
v5
v4
v3
v2
v1
e4
e3
e2
e1
e5
e8
e7
e6
000000v6
100000v5
110000v4
001000v3
001100v2
000110v1
v6v5v4v3v2v1 tổng bậc ra
của v1
tổng bậc
vào của v1
Mệnh đề:
Cho đồ thị có hướng G = (V, E) với ma trận kề (aij)n.
Khi đó:
n
1j
ijiv a)v(d và Vv,a)v(d i
n
1j
jiir
số bậc vào của
đỉnh vi = tổng
các số trên cột vi
số bậc ra của đỉnh vi =
tổng các số trên hàng vi
b. Ma trận liên thuộc
Đồ thị vô hướng
Cho đồ thị G = (V, E) có n đỉnh, V = {v1, v2, …, vn}
và m cạnh E = {e1, e2, …, em}.
Ma trận liên thuộc của đồ thị G là ma trận A = (aij)nm
thỏa mãn:
0
1
aij
nếu đỉnh vi liên thuộc cạnh ej
nếu đỉnh vi không liên thuộc cạnh ej
Ví dụ:
v4v5
v3
v2v1
e5
e4
e3e2
e1
e6
e7
0100000v5
0110110v4
1011000v3
0001101v2
0000011v1
e7e6e5e4e3e2e1
Ma trận liên thuộc:
Tổng bậc
của v1
Vv,a)v(d i
n
1j
iji
Mệnh đề:
Cho đồ thị đơn G = (V, E) với ma trận liên thuộc
(aij)nm. Khi đó:
Số bậc của đỉnh vi = tổng
các số trên hàng vi
Đồ thị có hướng
Cho đồ thị có hướng G = (V, E) có n đỉnh, V = {v1,
v2, …, vn}, m cạnh E = {e1, e2, …, em} và không có
khuyên.
Ma trận liên thuộc của đồ thị G là ma trận
A = (aij)nm thỏa mãn:
0
1
1
aij
nếu đỉnh vi là đỉnh đầu của cung ej
nếu đỉnh vi không kề cung ej
nếu đỉnh vi là đỉnh cuối của cung ej
Ví dụ: v6
v5
v4
v3
v2
v1
e4
e3
e2
e1
e5
e8
e7
e6
-1-1000000v5
0
1
0
0
0
e7
1-100000v6
01-1-1000v4
0010-1-10V3
000110-1v2
0000011v1
e8e6e5e4e3e2e1
Chú ý
Cho đồ thị có hướng G = (V, E) có ma trận liên
thuộc (aij)n. Khi đó:
Số bậc ra của đỉnh vi = tổng các số dương trên
hàng chứa vi
Số bậc vào của đỉnh vi = trị tuyệt đối của tổng
các số âm trên hàng chứa vi
Định nghĩa
Hai đồ thị gọi là đẳng cấu nhau nếu có sự tương ứng
1 – 1 giữa các đỉnh và các cạnh (cung) với nhau.
Định lý
Cho G1 = (V1, E1), G2(V2, G2) là 2 đồ thị đẳng cấu.
Khi đó:
(i) G1, G2 có số cạnh và số đỉnh bằng nhau.
(ii) Số đỉnh bậc k của G1 và G2 bằng nhau.
(iii) Số chu trình đơn, sơ cấp có chiều dài k của G1
và G2 bằng nhau.
4.2.4 ĐỒ THỊ ĐẲNG CẤU
Chú ý:
Nếu các bất biến về đỉnh, cạnh, bậc, chu trình đều
phù hợp thì G1 có thể đẳng cấu với G2.
Để tìm phép đẳng cấu ta tìm đường đi qua tất cả
các đỉnh sao cho các đỉnh tương ứng trong 2 đồ thị
cùng bậc.
Ví dụ
Không đẳng cấu
ab
c
de
1
2
3
4
5
Đẳng cấu
Đường đi: a, b, c, d, e
Tương ứng với đường
đi: 1, 2, 3, 4, 5
Tương ứng:
a-1, b-2, c-3, d-4, e-5
G H
ĐỒ THỊ LƯỠNG PHÂN
Đồ thị lưỡng phân G = (V, E) là đồ thị mà tập các
đỉnh được phân làm 2 tập rời nhau V1, V2 sao cho
mỗi cạnh của đồ thị liên kết với 1 đỉnh thuộc V1
và 1 đỉnh thuộc V2.
Kí hiệu:
G = ({V1, V2}, E)
Ví dụ
a b c
x y z
4.3 ĐỒ THỊ EULER
4.3.1 Định nghĩa
Cho đồ thị vô hướng G = (V, E)
Đường đi Euler là đường đi đơn qua mọi cạnh và
mọi đỉnh đồ thị.
Chu trình Euler là chu trình đơn qua mọi cạnh và
mọi đỉnh đồ thị.
Cho đồ thị có hướng G = (V, E)
Đường đi có hướng Euler là đường đi đơn có
hướng qua mọi cung và mọi đỉnh đồ thị.
Chu trình có hướng Euler là chu trình đơn có
hướng qua mọi cung và mọi đỉnh đồ thị.
Đồ thị chứa chu trình Euler gọi là đồ thị Euler
Ví dụ
a
b c
d
e f
Đồ thị Euler
Chu trình Euler: a, b, c, f, e, b, d, c, a
Ví dụ
Đồ thị về 7 cây cầu của thành phố Konigsberg
1 2
3
4
Không có chu trình và đường đi Euler
4.3.1 Điều kiện cần và đủ để đồ thị có chu
trình và đường đi Euler
Đồ thị G có đường đi Euler khi và chỉ khi G liên
thông và có đúng 2 đỉnh bậc lẻ.
Đồ thị G có chu trình Euler khi và chỉ khi G liên
thông và mọi đỉnh đều có bậc chẵn khác 0.
Đồ thị vô hướng:
Đồ thị có hướng G có chu trình có hướng Euler
khi và chỉ khi G liên thông mạnh và mọi đỉnh đều
có nửa bậc ra bằng nửa bậc vào.
Chú thích:
Đồ thị liên thông mạnh là đồ thị có hướng mà
mọi cặp đỉnh của nó đều có đường đi có hướng nối
chúng với nhau.
Đồ thị có hướng:
dv(v) = dr(v)
Các thuật toán tìm chu trình Euler
Đầu vào: Đồ thị G , không có đỉnh cô lập
Đầu ra: Chu trình Euler C của G, hoặc kết luận G
không có chu trình Euler.
Phương pháp:
Xuất phát: Đặt H G, k 1, C . Chọn đỉnh
vC bất kì.
Xuất phát từ v, xây dựng chu trình bất kì Ck trong H.
(1)
(2)
Nếu tồn tại Ck nối Ck vào C, C CCk
sang bước 3.
Nếu không tồn tại Ck thì kết luận không có chu
trình Euler Kết thúc
Loại khỏi H chu trình Ck. Nếu H chứa các đỉnh cô
lập thì loại chúng ra khỏi H sang bước 4.
Nếu H = thì kết luận C là chu trình Euler Kết
thúc, ngược lại sang bước 5
(3)
(4)
Nếu H và C không có đỉnh chung thì kết luận không
có chu trình Euler
H và C có đỉnh chung. Chọn v là đỉnh chung của H
và C. Đặt k:= k+1. Quay lại bước 2.
(5)
Cho G là đồ thị Thanh mã tấu Mohammed
a
b
c d
e
f
g
h
i
j
k
Áp dụng thuật toán 1 để tìm chu trình Euler.
Ví dụ
(1) Đặt H := G, k := 1, C := , v := f.
(2) Ta xây dựng chu trình C1 trong H:
C1 := (f,g,k,h,i,e,b,c,d,f)
Đặt C := C C1 = (f,g,k,h,i,e,b,c,d,f)
(3) Loại C1 ra khỏi H, ta được đồ thị H như sau
a
b
c d
e
f
g
h
i
j
k
Các đỉnh c và k là các đỉnh cô lập, vì thế ta loại
chúng ra khỏi H.
(5) Chọn đỉnh chung của H và C là v := f.
Đặt k := k+1 = 2. Quay lại bước (2)
(2) Ta xây dựng chu trình C2 trong H:
C2 := (f,i,j,h,g,d,b,a,e,f)
Nối C2 vào C ta được chu trình C sau
C := C C2 = (f,g,k,h,i,e,b,c,d,f) (f,i,j,h,g,d,b,a,e,f)
= (f,g,k,h,i,e,b,c,d,f,i,j,h,g,d,b,a,e,f)
(3) Loại C2 ra khỏi H, ta được đồ thị H gồm toàn các
đỉnh cô lập. Loại các đỉnh cô lập ta có H = .
(4) Vì H = , ta kết luận C là chu trình Euler, kết thúc.
Thuật toán 2 (Fleury)
+ Đầu vào. Đồ thị G , không có đỉnh cô lập.
+ Đầu ra. Chu trình Euler C của G, hoặc kết luận G
không có chu trình Euler.
+ Phương pháp.
(1) Chọn đỉnh xuất phát bất kỳ vo.
Đặt v1 := vo, C := (vo). H := G.
(2) Nếu H = , thì kết luận C là chu trình Euler,
kết thúc. Ngược lại sang bước (3).
(3) Chọn cạnh đi tiếp:
- Trường hợp đỉnh v1 là đỉnh treo: Tồn tại duy nhất
đỉnh v2 kề v1 .Chọn cạnh (v1, v2). Sang bước (4).
- Trường hợp đỉnh v1 không là đỉnh treo:
Nếu mọi cạnh liên thuộc v1 là cầu, thì không có chu
trình Euler, kết thúc
Ngược lại, chọn cạnh (v1, v2) bất kỳ không phải là
cầu trong H. Thêm vào đường đi C đỉnh v2. Sang
bước (4).
(4) Xoá cạnh vừa đi qua, và xoá đỉnh cô lập:
Loại khỏi H cạnh (v1, v2). Nếu H có đỉnh cô lập, thì
loại chúng khỏi H.
Đặt v1 := v2. Quay lại bước (2)
Chú thích:
Cạnh v gọi là cầu nếu bỏ cạnh đó thì đồ thị
không liên thông.
Ví dụ
v1
v2
v3
v4 v5
v6 v7
Đồ thị liên thông và có các đỉnh bậc chẵn. Ta có chu
trình Euler sau
(v6, v4, v7, v5, v1, v3, v4, v2, v1, v4, v5, v2, v3, v6)
4.4 ĐỒ THỊ HAMINTON
4.4.1 Định nghĩa
Cho đồ thị G = (V, E)
Đường đi Haminton là đường đi sơ cấp đi qua mọi
đỉnh đồ thị.
Chu trình Hamintơn là chu trình sơ cấp đi qua mọi
đỉnh đồ thị.
Đồ thị chứa chu trình Hamintơn gọi là đồ thị Hamintơn
Định nghĩa tương tự đối với đồ thị có hướng
4.4.2 Điều kiện cần
Giả sử đồ thị G có chu trình Hamintơn C. Khi đó:
i. G liên thông.
ii. Mọi đỉnh của G đều có bậc 2 và có đúng 2 cạnh
kề thuộc chu trình C.
iii. Nếu xóa đi k đỉnh bất kì cùng các cạnh liên thuộc
chúng thì đồ thị còn lại sẽ có tối đa k thành phần liên
thông.
4.4.3 Điều kiện đủ
Cho G là đơn đồ thị n đỉnh (n 3). Nếu:
Gv,
2
n
)v(d
thì G có chu trình Hamintơn
Cho G là đơn đồ thị n đỉnh (n 3). Nếu:
Gv,
2
1n
)v(d
thì G có chu trình Hamintơn
Định lí 1
Định lí 2
Định lí 3
Nếu G là đồ thị có hướng liên thông mạnh và:
Gv,
2
n
)v(d&
2
n
)v(d vr
thì G có chu trình có hướng Hamintơn
4.5 TÌM ĐƯỜNG ĐI NGẮN NHẤT
4.5.1 Đồ thị có trọng số:
Là đồ thị mà mỗi cạnh của nó được gán 1 số.
Trong đồ thị có trọng số, độ dài trọng số của
đường đi là tổng các trọng số trên đường đi đó.
4.5.2 Phát biểu bài toán:
Cho đồ thị có trọng số G = (V, E). Tìm đường đi
ngắn nhất từ đỉnh a đến đỉnh z của đồ thị
4.5.3 Thuật toán Dijkstra:
Tìm đường đi ngắn nhất từ đỉnh a đến đỉnh z trong
đồ thị có trọng số. Trọng số của cạnh (i,j) là w(i,j) > 0
và đỉnh x sẽ mang nhãn L(x). Khi kết thúc thuật giải
L(z) chính là chiều dài đường đi ngắn nhất từ a đến z.
Đầu vào: Đồ thị liên thông G = (V, E) có trọng số
w(i, j) > 0 với mọi cạnh (i, j), đỉnh a và đỉnh z.
Đầu ra: Chiều dài đường đi ngắn nhất và đường đi
ngắn nhất.
Phương pháp:
(1) Gán L(a) 0. Với mọi đỉnh x a gán L(x) = .
Kí hiệu T V
(2) Chọn v T sao cho L(v) có giá trị nhỏ nhất. Đặt:
T T – {v}
(3) Nếu z T Kết thúc.
L(z) là đường đi ngắn nhất từ a đến z. Từ z lần ngược
theo các đỉnh được ghi nhớ ta có đường đi ngắn nhất.
Ngược lại sang bước 4.
(4) Với mỗi x T kề với v gán:
L(x) min{L(x), L(v) + w(v, x)}
Nếu L(x) này thay đổi thì ghi nhớ đỉnh v cạnh x
để sau này xây dựng đường đi ngắn nhất.
Quay về bước 2.
Ví dụ:
Tìm đường đi ngắn nhất từ đỉnh a đến z trong đồ
thị sau:
a
f
ed
cb
g
z
2
1
2
14 3
4
2
67
5
3
Phương pháp lập bảng ghi nhãn:
Ta lập bảng tính toán các nhãn gồm các cột ứng
với các đỉnh, và các hàng ứng với các các lần tính
nhãn ở bước 4. Các nhãn gạch dưới ứng với nhãn
nhỏ nhất ở bước 2 và đỉnh bị loại ghi bên phải.
Sau khi đỉnh z bị loại, từ z ta lần ngược về đỉnh a
theo nhãn ghi trên bảng ta có đường đi ngắn nhất.
hg
f
e
d
c
b
a
k
z
3
6 4
10
10 5
4
1
2
1
4
2
2
8
8
3
5
5
3
1
6
Ví dụ
Tìm đường đi ngắn nhất từ đỉnh a đến đỉnh z của
đồ thị sau:
4.5.4 Thuật toán Floyd:
Thuật giải tìm độ dài đường đi ngắn nhất giữa mọi cặp
đỉnh trong đồ thị có hướng liên thông có trọng số.
+ Đầu vào: Đồ thị liên thông G = (V,E), V= {1, 2, ... , n},
có trọng số w(i,j) >0 với mọi cung (i,j).
+ Đầu ra: Ma trận D=[d(i,j)], trong đó d(i,j) là chiều dài
đường đi ngắn nhất từ i đến j với mọi cặp (i,j).
+ Phương pháp:
(1) Bước khởi tạo: Ký hiệu D0 là ma trận xuất phát
D0 = [d0(i,j)]
trong đó:
d0(i,j) = w(i,j) nếu tồn tại cung (i,j)
d0 (i,j) = + nếu không tồn tại cung (i,j)
Gán k:=0
(2) Kiểm tra kết thúc: Nếu k = n, kết thúc. D = Dn là ma
trận độ dài đường đi ngắn nhất. Ngược lại: k:=k+1
sang (3).
(đặc biệt nếu không có khuyên tại i thì d0 (i,i) = +).
(3) Tính ma trận Dk theo Dk-1
Với mọi cặp (i,j), i=1..n, j=1..n thực hiện:
Nếu dk-1(i,j) > dk-1(i,k) + dk-1(k,j) thì đặt
dk (i,j) := dk-1(i,k) + dk-1(k,j)
ngược lại đặt
dk(i,j) := dk-1 (i,j)
Quay lại bước (2).
Định lý: Thuật toán Floyd là đúng.
Hệ quả
(i) Nếu ma trận kết quả của thuật toán Floyd có phần tử
hữu hạn trên đường chéo chính thì đồ thị chứa chu trình.
(ii) Nếu ma trận kết quả chứa phần tử + ngoài đường
chéo chính thì đồ thị không liên thông mạnh.
Ví dụ
1 2 3
4 5 6
7 4
2
1
3
2 4 1 2
Xét đồ thị sau
16
225
44
33
142
271
654321Đỉnh
Áp dụng thuật toán Floyd:
Ma trận khoảng cách xuất phát D0 là (các ô trống là ):
D0
D1 =
16
42925
44
33
142
271
654321
Đỉn
h
D2 =
2516
1042925
5844
33
142
821171
654321
Đỉn
h
D3 =
82516
51042925
115844
33
7142
14821171
654321
Đỉ
nh
5942825
115844
33
7142
13721061
654321
Đỉn
h
D4 =
D5 = D5 =
7264146
5942825
10597474
33
6153932
12729691
654321
Đỉn
h
D = D6 =
7264146
5742625
10597474
3597473
6153732
12729691
654321
Đỉn
h
Cuối cùng, D là ma trận khoảng cách ngắn nhất giữa các
đỉnh. Theo hệ quả ta thấy đồ thị liên thông mạnh và chứa
chu trình.
4.6 CÂY
Cây là đồ thị liên thông không chứa chu trình.
v1
v2 v3
v4 v5 v6 v7
Gốc
v2, v3: mức 1
v4, v5, v6, v7 mức 2
4.6.1 Định nghĩa
Gốc thường là đỉnh trên cùng. Mức của đỉnh là độ dài
đường đi từ gốc đến đỉnh đó. Độ cao của cây là mức
lớn nhất của cây
Độ cao là 2
Một số thuật ngữ:
Cho T là cây có gốc vo. Giả sử x, y, z là các đỉnh của T
và (vo, v1,..., vn) là đường đi trong T. Khi đó ta gọi:
vn-1 là cha của vn
vo,...,vn-1 là tiền bối của vn
vn là con của vn-1
y là hậu thế của x, nếu x là tiền bối của y
y và z là anh em nếu chúng đều là con của đỉnh x
x là đỉnh lá nếu nó không có con
x là đỉnh trong của cây nếu nó có con.
v1
v2 v3
v4 v5 v6 v7
v2 là cha của v4&v5
v1, v2 là tiền bối của v4.
v4 là con của v2
v4&v5 là anh em
v4, v5, v6, v7: đỉnh lá v1, v2, v3: đỉnh trong
Rừng là đồ thị mà mỗi thành phần liên thông là cây
Rừng gồm 3 cây
Định lí
Cho T là đồ thị n đỉnh. Các mệnh đề sau tương đương
(i) T là cây
(ii) T không chứa chu trình và có n-1 cạnh
(iii) T liên thông và có n-1 cạnh
(iv) T liên thông và mỗi cạnh là cầu
(v) Hai đỉnh bất kỳ được nối với nhau bởi một đường đi
duy nhất
(vi) T không chứa chu trình và nếu thêm một cạnh nối
hai đỉnh thì ta thu được đúng 1 chu trình
Ví dụ
Cho đồ thị G là rừng có t cây và n đỉnh. Tìm số
cạnh của G.
Đs: (n – t) cạnh
4.6.2 Cây m-phân
Cây m-phân là cây mà mọi đỉnh có tối đa m con và có
ít nhất một đỉnh có m con.
Cây m-phân đầy đủ là cây mà mọi đỉnh trong có đúng
m con.
Cây cân bằng là cây mà mọi đỉnh lá có mức là h hay h-
1, trong đó h là chiều cao của cây.
Định lí
Nếu cây m-phân đầy đủ có i đỉnh trong thì nó có
n = m.i + 1 đỉnh
Hệ quả
Cho T là cây m-phân đầy đủ có i đỉnh trong, l đỉnh
lá và n đỉnh (n = i + l). Khi đó:
a. l = (m – 1)i + 1
m
1)n1(m
l&
m
1n
ic.
1m
1ml
n&
1m
1l
ib.
Ví dụ
1. Cây ngũ phân đầy đủ với 100 đỉnh trong có bao
nhiêu đỉnh tất cả?
2. Cây nhị phân đầy đủ với 1000 đỉnh trong có bao
nhiêu cạnh tất cả?
3. Cây tam phân đầy đủ với 100 đỉnh trong có bao
nhiêu lá tất cả?
Định lí
Cho T là cây m-phân có l lá và chiều cao h. Khi đó:
l mh
Nếu T là cây m-phân cân bằng đầy đủ thì:
h = ]logml[
Trong đó: ]x[ kí hiệu số nguyên nhỏ nhất lớn hơn
hoặc bằng x
4.6.3 Cây phủ
Cho đồ thị G=(V,E). Cây T gọi là cây phủ của G,
nếu T là đồ thị con chứa tất cả các đỉnh của G.
a b
c d
e f
g h
G T1 T2
Các cây T1, T2 là cây phủ của G
Định lí
Đồ thị G = (V, E) có cây phủ G liên thông
Các thuật toán tìm cây phủ
Duyệt cây theo chiều rộng
Trong thuật giải này ta ký hiệu S là dãy các đỉnh.
+ Đầu vào. Đồ thị G=(V,E) với các đỉnh: v1, v2,…, vn
+ Đầu ra. Cây phủ T hoặc kết luận đồ thị không liên
thông.
+ Các bước.
(1) Khởi tạo:
Đặt S := {v1}. T là đồ thị gồm 1 đỉnh v1 và không
có cạnh, v1 là gốc.
(2) Thêm cạnh:
Với mỗi xS theo thứ tự, thêm cạnh (x,y) và đỉnh
y vào T sao cho không tạo thành chu trình.
Nếu thêm được thì sang bước (3).
Nếu không thêm cạnh được nữa thì kết thúc. Khi đó
nếu T chứa hết các đỉnh của đồ thị T là cây phủ,
ngược lại đồ thị không liên thông.
(3) Cập nhật S:
Thay S bởi các con (trong T) của các đỉnh trong
S theo thứ tự. Quay lại bước (2)
Ví dụ
a b
c d
e f
g h
G
Dùng thuật toán duyệt cây theo chiều rộng tìm cây phủ
với gốc a:
Duyệt cây theo chiều sâu
+ Đầu vào. Đồ thị G=(V,E) với các đỉnh v1, v2,…, vn
+ Đầu ra. Cây phủ T hoặc kết luận đồ thị không liên thông.
+ Các bước.
(1) Khởi tạo:
Đặt w := v1. T là đồ thị cây gồm 1 đỉnh v1 và không
có cạnh, v1 là gốc của T.
Ký hiệu e là số cạnh của T. Đặt e:=0. Sang bước (2)
(2) Kiểm tra số cạnh:
Nếu e = n-1, kết thúc: T là cây phủ.
Nếu e < n-1, sang bước 3.
(3) Thêm cạnh:
Chọn cạnh (w,vk) với chỉ số k nhỏ nhất sao cho thêm
cạnh (w,vk) và đỉnh vk vào T không tạo thành chu trình.
- Nếu không tồn tại cạnh như vậy thì đến bước (4);
- Ngược lại thêm cạnh (w,vk) và đỉnh vk vào T, số
cạnh e tăng lên 1, e:=e+1, đặt w:=vk và quay lại
bước (2).
Nếu w = v1 , Kết thúc. Đồ thị không liên thông.
Nếu w