Chương 4: Lý thuyết đồ thị
4.1 MỞ ĐẦU
4.2 CÁC KHÁI NIỆM CƠ BẢN
4.3 ĐỒ THỊ EULER
4.4 ĐỒ THỊ HAMILTO
4.5 BÀI TOÁN TÌM ĐƯỜNG ĐI
NGẮN NHẤT
4.6 CÂY
91 trang |
Chia sẻ: phuongt97 | Lượt xem: 454 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Toán rời rạc - 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ươngChương 4:4:
LÝLÝ THUYTHUYẾẾTT ĐĐỒỒ THTHỊỊ
ChChươươngng 44
4.1 MỞ ĐẦU
4.2 CÁC KHÁI NIỆM CƠ BẢN
4.3 ĐỒ THỊ EULER
4.4 ĐỒ THỊ HAMILTON
BÀI TOÁN TÌM ĐƯỜNG ĐI
4.5 NGẮN NHẤT
4.6 CÂY
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 w
e
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 w
e
Mỗi cạnh e được liên kết với một cặp đỉnh (v, w)
có thứ tự
Ví dụ:
4.2 CÁC KHÁI NIỆM CƠ BẢN
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
Đồ 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
4.2 CÁC KHÁI NIỆM CƠ BẢN
Đỉnh cô lập có bậc bằng 0
Đỉ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
MỘT SỐ TÍNH CHẤT
* Tính chất 1:
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|
* 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 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.
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.
Đườ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.
Chu trình có hướng là đường đi có hướng có đỉnh đầu
và đỉnh cuối trùng nhau.
Đườ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.
Ví dụ
e v2 e
v1 1 4 v3
e
e2 9
e e8
3 e7
v e e
4 5 v5 6 v6
b
a c
d e
Đồ 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.
v2
v1
Ví dụ:
v3
Có ma trận kề là:
v5 v4
v1 v2 v3 v4 v5 Tổng bậc
v1 0 1 0 1 0 của v1
v2 1 0 1 1 0
v3 0 1 2 1 0
v4 1 1 1 0 1
v5 0 0 n 0 n 1 0
d(vi ) aij a ji ,vi V
j1 j1
Đồ 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ụ:
v2 v6
e4 e6
e1
e8
v e3
1 v e
e 4 7
e2 5
v3 v5
v1 v2 v3 v4 v5 v6 tổng bậc ra
v1 0 1 1 0 0 0 của v1
v2 0 0 1 1 0 0
v3 0 0 0 1 0 0
v4 0 0 0 0 1 1
v5 0 0 0 0 0 1
v6 0 0 0 0 0 0
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 n
d (v ) a
v i ij và dr (vi ) a ji , vi V
j1 j1
số bậc vào của số bậc ra của đỉnh vi =
đỉnh vi = tổng tổng các số trên hàng vi
các số trên cột 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:
1 nếu đỉnh vi liên thuộc cạnh ej
aij
0
nếu đỉnh vi không liên thuộc cạnh ej
Ví dụ:
e1 v2
v1
e4
e e7
2 e3
v
e 3
e 5
v 6 v
Ma trận liên thuộc: 5 4
e1 e2 e3 e4 e5 e6 e7 Tổng bậc
v1 1 1 0 0 0 0 0 của v1
v2 1 0 1 1 0 0 0
v3 0 0 0 1 1 0 1
v4 0 1 1 0 1 1 0
v5 0 0 0 0 0 1 0
Mệnh đề:
Cho đồ thị đơn G = (V, E) với ma trận liên thuộc
(aij)nm. Khi đó:
n
d(vi ) aij, vi V
j1
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:
1 nếu đỉnh vi là đỉnh đầu của cung ej
aij 1 nếu đỉnh vi là đỉnh cuối của cung ej
0 nếu đỉnh vi không kề cung ej
Ví dụ:
v2 v6
e4 e6
e1
e e8
v1 3 v
4 e7
e2 e5
v3 v5
e1 e2 e3 e4 e5 e6 e7 e8
v1 1 1 0 0 0 0 0 0
v2 -1 0 1 1 0 0 0 0
V3 0 -1 -1 0 1 0 0 0
v4 0 0 0 -1 -1 1 1 0
v5 0 0 0 0 0 0 -1 -1
v6 0 0 0 0 0 -1 0 1
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
4.2.4 ĐỒ THỊ ĐẲNG CẤU
Đị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.
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
b 4
a c 1 3
5
e d 2
G H
Đẳng cấu
Đường đi: a, b, c, d, e Tương ứng:
Tương ứng với đường a-1, b-2, c-3, d-4, e-5
đi: 1, 2, 3, 4, 5
ĐỒ 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
3
1 2
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ị vô hướng:
Đồ 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ị G có đường đi Euler khi và chỉ khi G liên
thông và có đúng 2 đỉnh bậc lẻ.
Đồ thị có 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.
dv(v) = dr(v)
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.
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:
(1) Xuất phát: Đặt H G, k 1, C . Chọn đỉnh
vC bất kì.
(2) Xuất phát từ v, xây dựng chu trình bất kì Ck trong H.
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
(3) 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.
(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
(5) 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.
Ví dụ
Cho G là đồ thị Thanh mã tấu Mohammed
a j
e i
f
b h
g
c d k
Áp dụng thuật toán 1 để tìm chu trình Euler.
(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 j
e i
f
b h
g
c d 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
v
4 v5
v3
v
6 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ị.
Định nghĩa tương tự đối với đồ thị có hướng
Đồ thị chứa chu trình Hamintơn gọi là đồ thị Hamintơn
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 đủ
Định lí 1
Cho G là đơn đồ thị n đỉnh (n 3). Nếu:
n
d(v) , vG
2
thì G có chu trình Hamintơn
Định lí 2
Cho G là đơn đồ thị n đỉnh (n 3). Nếu:
n 1
d(v) , vG
2
thì G có chu trình Hamintơn
Định lí 3
Nếu G là đồ thị có hướng liên thông mạnh và:
n n
d (v) & d (v) ,vG
r 2 v 2
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:
b 2 c
4
2 2 3 1
4 z
a d e
3 7
1 6
f 5 g
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.
Ví dụ
Tìm đường đi ngắn nhất từ đỉnh a đến đỉnh z của
đồ thị sau:
b 4 f
1
1 10 2 5
c 4 g
10 2
a 1 5 z
6 4 8
d 3 h
3 5
2 6 3
e
8 k
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)
(đặc biệt nếu không có khuyên tại i thì d0 (i,i) = +).
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).
(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ụ
Xét đồ thị sau
1 7 2 4 3
2 4 2
1 1
2 3
4 5 6
Á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à ):
Đỉnh 1 2 3 4 5 6
1 7 2
D0 2 4 1
3 3
4 4
5 2 2
6 1
Đỉn
1 2 3 4 5 6
h
1 7 2
D =
1 2 4 1
3 3
4 4
5 2 9 2 4
6 1
Đỉn
1 2 3 4 5 6
h
1 7 11 2 8
D =
2 2 4 1
3 3
4 4 8 5
5 2 9 2 4 10
6 1 5 2
Đỉ
1 2 3 4 5 6
nh
1 7 11 2 8 14
D =
3 2 4 1 7
3 3
4 4 8 5 11
5 2 9 2 4 10 5
6 1 5 2 8
Đỉn
1 2 3 4 5 6
h
D =
4 1 6 10 2 7 13
2 4 1 7
3 3
4 4 8 5 11
5 2 8 2 4 9 5
Đỉn
1 2 3 4 5 6
h
1 9 6 9 2 7 12
D5 = D =
2 3 9 3 5 5 1 6
3 3
4 7 4 7 9 5 10
5 2 8 2 4 9 5
6 4 1 4 6 2 7
Đỉn
1 2 3 4 5 6
h
1 9 6 9 2 7 12
D = D =
6 2 3 7 3 5 1 6
3 7 4 7 9 5 3
4 7 4 7 9 5 10
5 2 6 2 4 7 5
Cuối cùng,6 D là ma4 trận kho1 ảng4cách ng6ắn nhấ2t giữa c7á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
4.6.1 Định nghĩa
Cây là đồ thị liên thông không chứa chu trình.
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
Gốc
v1
v2 v3 v2, v3: mức 1
v4 v5 v6 v7 v4, v5, v6, v7 mức 2
Độ 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 v4 là con của v2
v1, v2 là tiền bối của v4. 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
l 1 ml 1
b. i & n
m 1 m 1
n 1 (m 1)n 1
c. i & l
m m
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ụ
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:
a b
c d
e f
g h
G
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).
(4) Kiểm tra điều kiện kết thúc:
Nếu w = v1 , Kết thúc. Đồ thị không liên thông.
Nếu w v1 sang bước (5)
(5) Quay lui:
Giả sử x là cha của w (trong T) đặt w := x.
Quay lại bước (3)
Ví dụ
Dùng thuật toán duyệt cây theo chiều sâu tìm cây phủ
với gốc a:
a b
c d
e f
g h
G
Các file đính kèm theo tài liệu này:
- bai_giang_toan_roi_rac_chuong_4_ly_thuyet_do_thi.pdf