Moät ñoà thò khoâng ñònh höôùng ñöôïc goïi laø LIEÂN THOÂNG (CONNEXE) neáu vôùi moïi caëp ñænh ñeàu coù ñöôøng noái.. THAØNH PHAÀN LIEÂN THOÂNG laø moät ñoà thò con lieân thoâng toái ña[r]
(1)ĐẠI SỐ
(2)CHƯƠNG
CÁC KHÁI NIỆM CƠ BẢN VỀ ĐỒ THỊ
1.1 ĐỊNH NGHĨA & THÍ DỤ 1.1.1 ĐỊNH NGHĨA
1.1.1.1 Đồ thị có định hướng
Một đồ thị G = G(X,U) xác định
§ Tập hữu hạn X = {x1,x2,…, xn} tập đỉnh hay nút
§ Tập U = {u1,u2,…,un} ⊂ X x X tập cung (caïnh)
Đối với cung u = (xi, xj), xi đỉnh đi, xj đỉnh đến (hay cịn gọi gốc
đích) Cung u từ xi đến xj
Cung u dược biểu diễn cách hình học sau :
xi xj FIG.1.1 Cung u=(xi, xj)
Một cung (xi, xi) gọi vòng (khuyên)
Một p-đồ thị đồ thị khơng có q p cung dạng (i,j) hai đỉnh
Thí dụ
x1 u4 x4 u8
u7
u1
u3 u5 x5
u6
x2 u2 x3
FIG 1.2 Đồ thị xác định (X,U),
(3)1.1.1.2 Đồ thị không định hướng
Khi khảo sát vài tính chất, định hướng cung khơng đóng vai trị Ta quan tâm đến diện cung hai đỉnh mà (không cần định rõ thứ tự) Một cung không định hướng gọi cạnh. Đối với cạnh u = (xi,xj), u gọi CẠNH TỚI hai đỉnh xi xj
Thí dụ
x1 u6 x4
u7
u1 u2 u3 u4 x5
u8
x2 u5 x3
FIG 1.3 Đồ thị xác định (X,U),
X = {x1, x2, x3, x4, x5} ; U = {u1, u2, u3, u4, u5, u6, u7, u8}
Một đồ thị gọi đa đồ thị nếu có nhiều cạnh hai đỉnh Một đồ thị gọi đơn nếu:
1 Không phải đa đồ thị ; Không tồn vòng
Hai cạnh u v gọi song song chúng cạnh tới hai đỉnh phân biệt Ký hiệu u ¦ v
(4)1.1.1.3 Một số định nghóa § ÁNH XẠ ĐA TRỊ
v xj gọi ĐỈNH SAU (SUCCESSEUR) xi (xi,xj) ∈ U;
Tập đỉnh sau xi ký hiệu Γ(xi)
v xj gọi ĐỈNH TRƯỚC (PREDECESSEUR) xi
(xj,xi) ∈ U; Tập đỉnh trước xi ký hiệu Γ-1(xi)
v Aùnh xạ Γ định nghĩa :với phần tử X, tương ứng với tập X gọi ÁNH XẠ ĐA TRỊ
v Đối với 1-đồ thị, G hồn tồn xác định (X,Γ), ký hiệu sở thường dùng cấu trúc liệu : DANH SÁCH KỀ THÍ DỤ. Trong đồ thị định nghĩa hình vẽ sau X = {x1,x2,x3,x4,x5};
Γ(x1) = x2 ; Γ(x2) = {x3,x4} ; Γ(x3)={x4,x5} ; Γ(x4)={x1} ; Γ(x5)={x4}
x1 x4
x5
x2 x3
FIG 1.4 Đồ thị xác định (X,Γ) § KỀ
v Hai đỉnh gọi kề chúng nối cung (cạnh) v Hai cung (cạnh) gọi kề chúng có đỉnh chung § BẬC CỦA ĐỈNH
v Nửa bậc ngoài đỉnh xi , ký hiệu d+(xi) số cung khởi đầu từ
(hay từ) xi Ta có d+(xi) = card (Γ(xi)) (ký hiệu card(A) số
phần tử tập A)
v Nửa bậc trong đỉnh xi , ký hiệu d-(xi) số cung kết thúc
(hay vào từ) xi Ta có d-(xi)=card(Γ-1(xi))
v Bậc đỉnh xi , d(xi) = d+(xi) + d-(xi) Bậc đỉnh
đồ thị khơng định hướng tổng số cạnh tới Bậc đỉnh có vịng cộng thêm cho vịng THÍ DỤ [xem FIG 1.4]
(5)d+(x
4)= ; d-(x4)= ; d(x4)=6 (Vì đỉnh x4 có vòng)
v Đỉnh có bậc = gọi đỉnh cô lập
v Đỉnh có bậc = gọi đỉnh treo cung (cạnh) tới gọi cạnh treo
v ĐỊNH LÝ (công thức liên hệ bậc số cạnh) Tổng bậc đỉnh = x số cạnh
2 Xét đồ thị có định hướng G = (X, U) Ta có ∑ d+(x) = ∑ d-(x) = card(U) (số cung) CHỨNG MINH Truy chứng theo đỉnh
v HỆ QUẢ Số đỉnh bậc lẻ số chẳn CHỨNG MINH
∑ d(đỉnh bậc lẻ) + ∑ d(đỉnh bậc chẳn) = x số cạnh § ĐỒ THỊ BÙ
G = (X, U) vaø G = (X,U) (xi,xj) ∈ U ⇒ (xi,xj) ∉U et (xi,xj) ∉U ⇒ (xi,xj) ∈U
G gọi đồ thị bù G § ĐỒ THỊ RIÊNG PHẦN (BỘ PHẬN)
G=(X,U) Up ⊂ U Gp=(X,Up) đồ thị riêng phần G ;
§ ĐỒ THỊ CON
G=(X,U) Xs ⊂ X Gs=(Xs,V) đồ thị G;
V thu hẹp hàm đặc trưng U Xs
V={(x,y)/(x,y) ∈ U∩Xs x Xs} ∀xi∈ Xs, Γs(xi)=Γ(xi)∩Xs
§ ĐỒ THỊ CON RIÊNG PHẦN Tổng hợp hai định nghĩa THÍ DỤ Mạng giao thơng đường nước
v Mạng xe bus : đồ thị riêng phần
(6)§ ĐỒ THỊ đối xứng : (xi,xj) ∈ U ⇒ (xi,xi) ∈ U
§ ĐỒ THỊ phản đối xứng : (xi,xj) ∈ U ⇒ (xj,xi) ∉ U
§ ĐỒ THỊ phản chiếu : (xi,xi) ∈ U, ∀ xi∈ U
§ ĐỒ THỊ bắc cầu : (xi,xj) ∈ U, (xj,xk) ∈ U ⇒ (xi,xk) ∈ U
§ ĐỒ THỊ đầy đủ : (xi,xj) ∉ U ⇒ (xj,xi) ∈ U (có cạnh
giữa hai đỉnh) Một đồ thị đủ có n đỉnh có n(n-1)/2 cạnh Ký hiệu Kn
§ CLIQUE :Tập đỉnh đồ thị đầy đủ § ĐỒ THỊ HAI PHẦN (LƯỠNG PHÂN) G=(X,U) :
1 X phân hoạch thành X1 X2
2 ∀ (x1,x2) ∈ U x1 ∈ X1, x2∈ X2
Nếu Card(X1) = n, Card(X2) = m, ký hiệu Kn,m
Thí dụ : Đồ thị sau lưỡng phân, không đầy đủ
K2,2 K3,2
§ ĐỀU Là đồ thị mà đỉnh có bậc THÍ DỤ.
x2
x1 x4
x3
(7)
1.1.2 THÍ DỤ
§ THÍ DỤ 1 Đường ngắn
Bài toán Cho đồ thị có định hướng, G = (X,U), định giá v : U → R s, t hai đỉnh phân biệt X
Bài toán đặt ra Tìm đường ngắn s t ? Lời giải Thuật giải Dijkstra, Bellman-Ford (xem Chương 3) `
§ THÍ DỤ 2. Cây phủ tối thiểu
Xét toán mạng, chẳng hạn mạng cung cấp điện, nước từ nguồn
Bài tốn Một đồ thị khơng định hướng G = (X,U), hàm định giá trọng lượng v : U → R+ hai đỉnh phân biệt s, t X
(8)1.2 BIỂU DIỄN ĐỒ THỊ
Có nhiều cách để biểu diễn đồ thị Tuy nhiên, cách biểu diễn không tương đương với theo quan điểm thuật toán Người ta, phân biệt vài cách biểu diễn chính, chẳng hạn biểu diễn ma trận kề, ma trận tới đỉnh – cung (hay đỉnh – cạnh trường hợp không định hướng) danh sách kề
1.2.1 Biểu diễn cách sử dụng Bảng 1.2.1.1 Ma trận kề
Xét - đồ thị có n đỉnh Ma trận kề ma trận (n x n) có n hàng tương ứng với đỉnh khởi đầu n cột tương ứng với đỉnh kết thúc, định nghĩa sau :
xij = (True) có cung (cạnh) nối xi xj = (False) ngược lại
THÍ DỤ x2
u2 u1 u4
x1 u3 x3
FIG.1.6 Đồ thị Ma trận kề đồ thị sau :
x1 x2 x3 ← kết thúc
x1 1
x2 1
x3 0
↑
(9)1.2.1.2 Ma trận tới đỉnh – cung (đỉnh – cạnh) v Dịng ↔ đỉnh
v Cột ↔ cung (caïnh)
Cho đồ thị G = (X, U) Một ma trận tới A = [aij]] định nghĩa sau :
Nếu cạnh u = (xi, xj) ∈ U cột u, aiu = 1, aju = -1, ngược lại có giá trị
THÍ DỤ Đối với Đồ thị hình FIG 1.6 ta có :
U1 u2 u3 u4
x1 -1
x2 -1 1
x3 0 -1 -1
CHÚ Ý : Tổng dịng khơng (một cung có đỉnh gốc đỉnh kết thúc) Tất ma trận vng có định thức 1, -1 hay
Có cách khác cho ma trận tới sau :
Cho đồ thị G = (X, U) Một ma trận tới A = [aij]] định nghĩa sau :
aiu = neáu u = (xi,xj) ∈ U
= ngược lại
THÍ DỤ Đối với Đồ th ị hình FIG 1.6 ta có :
u1 u2 u3 u4
x1 1
x2 1
x3 0 0
CHÚ Ý : Tổng dòng số cung tới 1.2.2 Biểu diễn cách sử dụng trỏ
Lợi ích cách biểu diễn trỏ hay Danh sách kề (nhờ vào ánh xạ đa trị Γ) giảm thiểu chổ nhớ
THÍ DỤ Đối với 1.đồ thị hình FIG.1.6 ta có :
x1 x2 x3
x2 x1 x3
(10)1.3 PHÉP DUYỆT ĐỒ THỊ (Parcours de graphes)
Nhiều toán đồ thị cần khảo sát vét kiệt đỉnh cung (cạnh) đồ thị Có cách duyệt đồ thị : phép duyệt theo chiều sâu (Parcours en profondeur) phép duyệt theo chiều rộng (Parcours en largeur)
1.3.1 DUYỆT THEO CHIỀU SÂU NGUYÊN LÝ :
Khởi từ đỉnh, theo cung (ca ïnh) xa Trở lại đỉnh sau cạnh xa nhất, tiếp tục duyệt trước, đỉnh cuối
Thí dụ Ta có đồ thị theo hình vẽ sau :
s7 s1 s5 s8
s6 s3 s2 s4
s9
FIG 1.7
Phép duyệt theo chiều sâu thực đồ thị hình FIG.1.7 sau : § Khởi từ đỉnh s1 Đỉnh duyệt s3
§ Khởi từ đỉnh s3 Đỉnh duyệt s2 Đỉnh sau s3 s6
§ Khởi từ đỉnh s6 Đỉnh sau s1 s5
§ Khởi từ đỉnh s5 Đỉnh sau s1 s7
§ Khởi từ đỉnh s7
§ Khởi từ đỉnh s4 Đỉnh duyệt s9
§ Khởi từ đỉnh s8
(11)Ký hiệu :
s[k], k : n tập đỉnh có n phần tử, đánh số thứ tự từ đến n Mark[k], k : n hàm nguyên :
= đỉnh duyệt (có nghĩa đánh dấu), = ngược lại
Ma trận kề a, định nghĩa sau :
a[i,j] = 1, (i,j) cung (cạnh ) đồ thị G = ngược lại
Dạng đệ qui
Chương trình :
For (int i =1; i ≤ n ;i++) Mark[i] = ;
For (int i =1; i ≤ n ;i++) if( Mark[i] == 0) then DFS(i) ; Thủ tục đệ qui : Duyệt theo chiều sâu đỉnh k Thủ tục DFS(int k) ;
{
Mark[k] =
// Duyệt đỉnh ma trận kề đỉnh k For (int j =1; j ≤ n ;j++)
if (Mark[j] == && a[k][j]==1) DFS(j) ; } End DFS
Độ phức tạp giải thuật :Đồ thị có n đỉnh m cung(cạnh) § Trường hợp lưu trữ đồ thị dạng ma trận kề : O(n2)
(12)1.6.2 DUYỆT THEO CHIỀU RỘNG. NGUYÊN LÝ :
§ Khởi từ đỉnh s bất kỳ, ta duyệt tất đỉnh sau S,tập
Γ+(s) trường hợp đồ thị có định hướng (tập Γ(s) :tập tất đỉnh
kề s trường hợp đồ thị khơng định hướng)
§ Sau xét v ∈Γ+(s) (hay Γ(s) ) áp dụng lại cách duyệt giống s
Thí du ï1 Ta có đồ thị theo hình vẽ FIG 1.7 Duyệt theo chiều rộng sau : s1 s8
s3 s5 s6 s7 s4
s2 s9
Thí dụ Ta có đồ thị theo hình vẽ sau :
Duyệt theo chiều rộng sau :
1
3
(13)
1.4 TÍNH LIÊN THƠNG CỦA ĐỒ THỊ 1.4.1 Dây chuyền - Chu trình
Một dây chuyền đồ thị khơng có định hướng dãy liên tiếp cạnh, cho cạnh có đỉnh chung với cạnh Một chu trình dây chuyền mà có cạnh có đỉnh khởi đầu đỉnh kết thúc trùng
Thí dụ
x1 u6 x4
u7
u1 u2 u3 u4 x5
u8
x2 u5 x3
FIG.1.8 <u5,u2,u6,u7> laø dây chuyền, <u4,u7,u8> chu trình
1.4.2 Đường – Mạch
Đường mạch khái niệm dây chuyền chu trình trường hợp đồ thị có định hướng
THÍ DỤ
x1 u3 x5
u4
u1 u2 u6 x4
u7
x2 u5 x3
FIG.1.9 <u5,u2,u3,u4> đường, <u4,u7,u6> mạch
(14)Thuật ngữ HÀNH TRÌNH (PARCOURS) để nhóm lại đường, dây chuyền, mạch chu trình Một hành trình gọi :
v SƠ CẤP : Nếu Tất đỉnh hợp thành phân biệt v ĐƠN : Nếu tất cạnh phân biệt
v HAMILTON : Đi qua lần đỉnh đồ thị v EULER : Đi qua lần cạnh đồ thị v TIỀN HAMILTON: Đi qua it lần đỉnh đồ thị v TIỀN EULER (CHINOIS) : Đi qua lần cạnh đồ thị
1.4.3 Tính liên thông
Một đồ thị không định hướng gọi LIÊN THÔNG (CONNEXE) với cặp đỉnh có đường nối
THÀNH PHẦN LIÊN THƠNG đồ thị liên thơng tối đại THÍ DỤ :
x1 x2
x3 x4 x5
FIG.1.10 Đồ thị có hai thành phần liên thơng ĐỊNH LÝ
Một đồ thị liên thông có thành phần liên thơng Chứng minh. Hiễn nhiên
ĐỊNH LÝ
(15)Chứng minh. Chứng minh phản chứng 1.4.4 Liên thơng mạnh
Một đồ thị có định hường gọi liên thông mạnh với cặp đỉnh phân b iệt có đường nối chúng
Một thành phần liên thông mạnh (CFC) đồ thị tối đại liên thông mạnh ĐỊNH LÝ
Một đồ thị liên thông có thành phần liên thơng mạnh Chứng minh. Hiễn nhiên
1.5 ĐỒ THỊ EULER 1.5.1 Bài toán cầu
Đây tình có thật Konigsberg (nước Đức), có hai vùng bị ngăn cách dịng sơng có hai cù lao giũa sông, cầu nối vùng với minh họa hình vẽ Người dân vùng thách đố thử tìm cách xuất phát từ vùng dạo qua cầu lần trở nơi xuất phát Năm 1736, nhà tốn học Euler mơ hình hóa tốn nàybằng đồ thị vơ hướng với đỉnh ứng với vùng, cạnh ứng với cầu Bài tóan phát biểu lại cho đồ thị hình vẽ bên dưới, tìm đường đồ thị qua lần tất cạnh sau trở đỉnh xuất phát Việc giải toán đưa đến định lý EULER
A
C D
B
(16)1.5.2 Định nghóa
Đồ thị khơng định hướng (có định hướng) EULER đồ thị khơng định hướng (có định hướng) có chứa mạch (chu trình) EULER
Thí dụ A
B F
C E D
FIG 1.12 <ABEDCEFCBFA.> mạch EULER Đồ thị sau khơng có mạch EULER, có đường EULER
A
B F
C E
FIG 1.13 <EBACBDCED> đường EULER 1.5.3 Định lý EULER
§ Định lý Một đồ thị không định hướng, liên thông đồ thị EULER đỉnh G có bậc chẳn
§ Định lý Cho G= (X,U) đồ thị có định hướng, liên thơng mạnh Khi G đồ thị Euler ta có :
(17)§ Định lý Cho G=(X,U) đồ thị không định hướng, liên thơng Khi G có đường Euler G có đỉnh có bậc lẻ
Thí dụ A
B F
C E D
FIG.1.14 Đồ thị khơng định hướng có đỉnh có bậc chẳn nên đồ thị EULER
A
B F
C E
(18)1.6 ĐỒ THỊ HAMILTON
Khái niệm đường Hamilton xuất phát từ tốn « Xuất phát từ đỉnh khối thập nhị diện đều, dọc theo cạnh khối cho qua lần tất đỉnh đồ thị » Bài toán nhà Toán học Hamilton đưa vào năm 1859
1.6.1 Định nghóa
Đồ thị HAMILTON đồ thị có chứa chu trình HAMILTON 1.6.2 Tính chất
§ Định lý Đồ thị đầy đủ đồ thị Hamilton Với n lẻ ≥ Kn có (n –1)/2 chu
trình Hamilton đơi khơng có cạnh chung Chứng minh. Hiễn nhiên
§ Định lý Giả sử G đồ thị đơn khơng có định hướng có n đỉnh, với n ≥ Nếu với cặp đỉnh x, z cho z khơng đỉnh kề x , ta có :
d(x) + d(z) ≥ n Thì G đồ thị Hamilton Chứng minh Bài tập
§ Định lý Giả sử G đồ thị đơn khơng có định hướng có n đỉnh, với n ≥ Nếu với đỉnh có bậc ≥ n/2 G đồ thị Hamilton
Chứng minh Suy từ định lý
§ Định lý Gi ả sử G đồ thị đơn khơng có định hướng có n đỉnh m cạnh Nếu m ≥ (n – 3n + 6) /2 G đồ thị Hamilton.
(19)CHƯƠNG CẤU TRÚC CÂY
2.1 ĐỊNH NGHĨA & THÍ DỤ
2.1.1 CÂY
Cây đồ thị không định hướng, liên thông chu trình THÍ DỤ
FIG 2.1 Caây
Chiều dài đường nối hai đỉnh lại với gọi khoảûng cách hai đỉnh TÍNH CHẤT
Giữa hai đỉnh có dây chuyền nối chúng lại với
nhau
Một n đỉnh có n –1 cạnh Cộng thêm vào cạnh hai đỉnh tạo nên chu trình
2.1.2 RỪNG
(20)2.1.3 CẤU TRÚC CÂY (CÂY CÓ GỐC)
Là đồ thị có định hướng cho đỉnh có đỉnh trước trừ phần tử khơng có , gọi GỐC Với đỉnh x có đường từ gốc đến x
Xét đỉnh x T có gốc r :
Một đỉnh y nằm đường hướng từ gốc đến x, đươc gọi ĐỈNH
TRƯỚC (ANCETRE ) x, x ĐỈNH SAU (DESCENDANT) y
Nếu (x,y) cạnh T, ta gọi x CHA y y CON x Hai đỉnh
cùng cha gọi ANH EM Một đỉnh khơng có gọi LÁ Những đỉnh không LÁ gọi ĐỈNH TRONG
Chiều dài đường từ gốc đến đỉnh gọi độ sâu đỉnh Mức (Niveau) đỉnh T khoảng cách từ gốc đến x
Mức nút gốc =
Mức nút khác gốc = Mức nhỏ chứa +
Chiều cao hay độ sâu (Hauteur, profondeur) giá trị lớn mức
các đỉnh
Nếu đỉnh có tối đa hai con, ta gọi nhị phân Bậc nút & bậc (Degrée)
Bậc nút số nút
Bậc bậc lớn nút Nếu có bậc n, ta gọi n-cành
THÍ DỤ Cây – cành có gốc,với đỉnh có độ cao
- d(1) = -Mức - d(4)=2 - - d(3)=0 -Mức
d( 2)=0
-d(5)=2 - -Mức d(9)=0
d(6)=0 - d(7) =1 - Mức -d(8)=0 -Mức FIG.2.2 Cây có gốc
2.1.4. THÍ DỤ
2
3
4
5
6
(21) Đơi ta biểu diễn quan hệ bao hàm thức nhiều tập hợp cấu trúc
Thí dụ Bao hàm tập hợp sau biểu diễn thành cấu trúc sau : B, C, D ⊂ A A
E, F, G, H ⊂ B
M, N ⊂ D D C B I ⊂ E
J,K ⊂ F M N E F G H L ⊂ H I J K L
Một Biến có cấu trúc biểu diễn dạng
SINH VIEÂN
TRƯỜNG CMNN
CAO ĐẲNG ĐẠI HỌC HỌ TÊN SINH
NGAØY NOI N T N TP Q
Biểu thức số học Biểu thức +
X = (x – (2* y) +((x+(y+z)) *z) - *
có thể biểu diễn thành hình x * + z
nhö sau : y x +
y z
Vòng loại thi đấu bóng bàn
Vòng J đấu với T, F đấu với M, L đấu với P J
Vòng J đấu với M, L đấu với Ph J Ph Vòng J đấu Ph J M L Ph
Cuối J thaéng
J T F M P L
Câu ngôn ngữ tự nhiên (hay ngôn ngữ lập trình)
Ferme
Đối với câu « Le Pilote ferme la porte » Pilote porte Có thể biểu diễn dạng Le la
Tự điễn tổ chức theo hình
Chẳng hạn tự điễn gồm từ ART, ART COU ARTICLE, ASTISTE, COU, COUR,
COUTEAU, COUVE, COUVENT, * I * R TEAU VE COUVER biểu diễn theo
hình vẽ sau Ký tự «*» chấm dứt CLE STE * * * NT R từ Chú ý, thứ tự ALPHABET
(22)2.2 TÍNH CHẤT CƠ BẢN
2.2.1 ĐỊNH LÝ
Cho G bậc n > Các tính chất sau tương đương với : G liên thơng khơng có chu trình
2 G liên thông có n –1 cạnh
3 G chu trình có n – cạnh
4 G khơng có chu trình thêm vào cạnh hai đỉnh không kề tạo chu trình chúng
5 G liên thơng tối thiểu(có nghĩa xóa cạnh G khơng cịn liên thơng nữa)
6 Mọi cặp đỉnh có dây chuyền nối chúng CHỨNG MINH Bài tập
2.2.2 ĐỊNH LÝù
Một đồ thị G = (X,U) đồ thị có chứa đồ thị riêng phần G liên thơng
CHỨNG MINH Bài tập
2.2.3 ĐỊNH LÝ
(23)2.3 CÂY NHỊ PHAÂN
2.3.1. ĐỊNH NGHĨA (THEO ĐỆ QUI) Một nhị phân B hoăc ∅ có dạng :
B = < O, B1, B2 > : O : gốc,
B1 : trái B2 : phải
2.3.2. BIỂU DIỄN CÂY NHỊ PHÂN
THÍ DỤ
SỬ DỤNG BẢNG Có thể định nghĩa kiểu liệu sau : Type Arbtab = Array [1 n] of Record v : t ;
G : integer ; D : integer ; End ;
Với thí dụ trên, ta có :
Trái Phải
1
2 d
3 a
4 e
5 b
6 c
7
8 f 0
9 g 0
10
SỬ DỤNG CON TRỎ Có thể định nghĩa kiểu liệu sau :
Type Pt = ^nut ; nut = Record G : Pt ;
Val : t ;
(24)2.3.3. DUYỆT MỘT CÂY NHỊ PHÂN Có cách duyệt nhị phân (phụ thuộc theo gốc)
1. THỨ TỰ TRƯỚC (PREFIXÉ)
Xử lý gốc
Duyệt trái
Duyệt phải 2. THỨ TỰ GIỮA (INFIXÉ)
Duyệt trái
Xử lý gốc
Duyệt phải
3. THỨ TỰ SAU (POSTFIXÉ)
Duyệt trái
Duyệt phải Xử lý gốc
THÍ DỤ Theo thí dụ , ta có :
Trước : a b d f c e g
Giửa : d f b a e g c Sau : f d b g e c a
2.4 CÂY PHỦ
2.4.1. ĐỊNH NGHĨA
Cho đồ thị vô hướng G Một H gọi phủ G H riêng phần G chứa đỉnh G
2.4.2. ĐỊNH LÝ
(25)2.4.3. GIẢI THUẬT TÌM CÂY PHỦ Xét đồ thị G
GIẢI THUẬT
Bước Chọn tùy ý đỉnh G đặt vào H Bước Nếu đỉnh G nằm H dừng
Bưức Nếu khơng, tìm đỉnh G khơng nằm H mà nối với đỉnh H cạnh Thêm đỉnh cạnh vào H Quay bước
THÍ DỤ Cho đồ thị G theo hình vẽ sau :
x3 x2
x1
x6
x4 x5 FIG 2.3
Khởi từ x1 T= ∅
Bước Chọn x2, T = {(x1,x2)}
Bước Chọn x3, T = {(x1,x2), (x2,x3)}
Bước Chọn x4, T = {(x1,x2), (x2,x3), (x3,x4)}
Bước Chọn x5, T = {(x1,x2), (x2,x3), (x3,x4), (x4,x5)}
Bước Chọn x6, T = {(x1,x2), (x2,x3), (x3,x4), (x4,x5), (x5,x6)} Kết : T phủ G
2.4.4. ĐỊNH LÝ
Coi phủ H G
(26)2.4.5. GIẢI THUẬT KIỂM TRA TÍNH LIÊN THƠNG Xét đồ thị không định hướng G
Aùp dụng giải thuật vào G Khi giải thuật dừng
Nếu H chứa đỉnh G G liên thông H phủ G
Nếu H không chứa đỉnh G G khơng liên thơng H phủ thành phần liên thông G
THÍ DỤ Trường hợp đồ thị G hình FIG 2.3 ta có G liên thơng THÍ DỤ Cho đồ thị G theo hình vẽ sau :
x3 x2
x1
x6
x4 x5
Khởi từ x1 T= ∅
Bước Chọn x3, T = {(x1,x3)}
Bước Chọn x4, T = {(x1,x3), (x3,x4)}
Thuật toán dừng T phủ thành phần liên thông G mà
2.4.6. GIẢI THUẬT TÌM THÀNH PHẦN LIÊN THÔNG THEO CÁCH
DUYỆ T THEO CHIỀU SÂU
Do thủ tục duyệt theo chiều sâu PROF(s) cho phép thăm tất đỉnh thuộc thành phần liên thông với đỉnh s, nên số thành phần liên thông đồ thị số lần gọi đến thủ tục Vấn đề lại cách ghi nhận đỉnh thành phần liên thông cách cải tiến thủ tục chiều theo chiều sâu PROF(s) sau :
THỦ TỤC DFS(int k) ;
//Duyệt theo chiều sâu đỉnh k {
Mark[k] = socomp; For (int i = 1;i ≤ n ;i++)
(27)THỦ TỤC CONNEXE ; {
// Khởi tạo số liệu ban đầu cho Mark (các đỉnh duyệt rồi) socomp (số thành phần liên thông
For (int j= ;j≤ n ;j++) { Mark[j] =0 ; Socomp =0 ;} //Gọi thủ tục để xác định thành phần liên thông
For (int i= ;i≤n ;i++) If Mark [i] = =0 {
Socomp = Socomp +1 ; DFS(i) ;
}
//In kết }
THÍ DỤ
s8 s1 s2 s3
s7 s6 s4 s5
Khởi từ s1 Gọi DFS(1) , ta có Tập đánh dấu {s1, s2, s6, s7, s8}
i= Gọi DFS(3) , ta có Tập đánh dấu {s3, s4, s5}
Kết Có thành phần liên thông C1 = {s1, s2, s6, s7, s8}
(28)2.5 CÂY PHỦ TỐI THIỂU
BÀI TỐN Cho đồ thị liên thơng G = (X,U), và,với cạnh u liên kết với sô l(u) mà ta gọi chiều dài (trong lượng) Vấn đề đặt tìm riêng phần H=(X,V) G cho tổng chiều dài ∑
u
u
l( ) nhỏ
THÍ DỤ Bài tốn thường gặp viễn thông nhiều trường hợp khác Chẳng hạn, tốn đặt cho Tìm đường dây cáp ngắn để nối n thành phố lại với ? Các thành phố biểu diễn đỉnh đồ thị l( (x,y) khoảng cách thành phố x y Mạng dây cáp nối bắt buộc phải liên thông Ở đây, vấn đề tìm riêng phần có tổng chiều dài nhỏ nối tất đỉnh ?
BỔ ĐỀ Nếu G = (X,U) đồ thị đầy đủ tất chiều dài l(u) tương ứng cạnh phân biệt ấy, Bài tốn có lời giải (X, V) Tập V={v1,v2,…,vn-1} nhận theo cách sau :
Chọn v1 cạnh có chiều dài nhỏ
v2 cạnh có chiền dài nhỏ cho v2 ≠ v1 V2 = {v1,v2} khơng chứa chu trình
v3 cạnh nhỏ cho v3 ≠ v2 ≠ v1 V3 = {v1,v2,v3} khơng chứa chu trình
(29)2.5.1. THUẬT TOÁN PRIM
Ký hiệu :
♦ A = Ma trận kề biểu diễn đồ thị, có trọng lượng, định nghĩa sau : A= [ ai,j] = l(i,j) = chiều dài cạnh cung ứng u=(i,j) ∈ U
∝ u=(i,j) ∉ U
0 , i=j
♦ M = Tập đỉnh chưa đánh dấu (có số phần tử n0)
♦ Pr(p) = Đỉnh trước đỉnh p
♦ d = Tập chiều dài Cây phủ có chịê&u dài ngắn
♦ Mark = Tập đỉnh đánh dấu (đã xét rồi), định nghĩa sau : Mark[i]= 1, đỉnh xét rồi,
0, ngược lại
NGUYÊN LÝ THUẬT TOÁN
1 Khởi tạo : Xuất phát từ đỉnh T = ∅, M = {2, n}
Pr = [1,1,…1]
d = a[1,j], j=1 n (Dòng đầu ma trận kề A) Mark = [1,0…0]
2 Ở bước lặp, chọn đỉnh đánh dấu đỉnh có độ dài ngắn
k = Argminx ∈ M d[x]
Mark[k]=1
Cập nhật lại d[i], Pr[i] với i∈ M \{k} theo cơng thức:
• d[i] = a[k,i] d[i] > a[k,i]
• Pr[i] = k
Thay M := M\{k}
Nếu M = ∅ Dừng Nếu không , quay lại
(30)THÍ DỤ Ta có Ma trận kề A, biểu diễn Đồ thị FIG 2.3., sau :
1
1 11
2 10 ∞
A = 3 12 ∞
4 11 10 ∞
5 ∞ 12
∞ ∞
Các bước thuật toán thực sau :
Gán ban đầu cho : M, d, Pr : M = { 2, 3, 4, 5, 6} d = [0, 2, 3, 11, 5, 8]
Pr = [1, 1, 1, 1, 1, 1]
Bước Chọn đỉnh s2 Cập nhật M, d, Pr :
M = { , 3, 4, 5, 6} d = [0, 2, 1, 10, 5, 8] Pr = [1, 1, 2, 1, 1]
Bước Chọn đỉnh s3 Cập nhật M, d, Pr :
M = { , , 4, 5, 6} d = [0, 2, 1, 6, 5, 8] Pr = [1, 1, 2, 3, 1, 1]
Bước Chọn đỉnh s5 Cập nhật M, d, Pr :
M = { , , 4, , 6} d = [0, 2, 1, 4,5, 7] Pr = [1, 1, 2, 5, 1, 5]
Bước Chọn đỉnh s4 Cập nhật M, d, Pr :
M = { , , , , 6} d = [0, 2, 1, 4, 5, 7] Pr = [1, 1, 2, 5, 1, 5] Ta có Kết sau :
Cây Phủ có độ dài ngắn theo Bước lặp :
T= (x1, x2), (x2,x3), ), (x1,x5) , ), (x5,x4), (x5,x6)} có độ dài l(T) = 19
Cây Phủ có độ dài ngắn đọc kết theo d Pr :
(31)10 x3 x2 x2 x1 x6 x1
11 x1 12 Cây khởi đầu
x4 x5 Cạnh thêm vào thứ Cây ban đầu
x3 x2 x3 x2
x1 x1 x5 Cạnh thêm vào thứ
Cạnh thêm vào thứ
x3 x2 x3 x2
x6 x1 x1
(32)
2.5.2. THUẬT TOÁN KRUSKAL (1956)
Cho đồ thị G = (X, U) đồ thị liên thông không định hướng, có trọng lượng Giả Sử xếp cạnh đồ thị theo thứ tự không giảm theo chiều dài
Ý tưởng thuật toán KRUSKAL bước lặp, ta bổ sung vào tập cạnh phủ H =(X, T) cho không tạo thành chu trình
Thuật tốn dừng tất đỉnh đồ thị nối, nghĩa số cạnh H n – Đây thuật tốn « háu ăn », theo nghĩa bước, ta chọn lời giãi tối ưu địa phương mong muốn lời giải tối ưu địa phương tối ưu toàn cục
Cây nhận tất cạnh có chiều dài khác Độ phức tạp : O(m log m)
THỦ TỤC KRUSKAL ; Begin
T := {∅} ;
While Card(T) < (n-1) and (U ≠∅) Do Begin Chon u cạnh có độ dài nhỏ U ; U := U\{u} ;
If (T ∪ {u}) khơng chứa chu trình) then T := T∪ {u} ; End ;
If (Card(T) < n-1 ) Then Đồ thị không liên thông End ;
THÍ DỤ Xem hình FIG 2.3 Ta coù :
U={(x2, x3),(x1,x2),(x1,x3),(x4,x5),(x1,x5),(x3,x4), (x5,x6),(x1,x6),(x2,x6),(x2,x4),(x1,x4),(x3,x5)} L(U) = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} Các bước thuật toán thực sau :
Bước T= {(x2, x3)},
L(T) = { 1}
Bước T= {(x2, x3),(x1,x2)},
L(T) = { 1, }
Bước T= {(x2, x3),(x1,x2), ),(x4,x5)}, L(T) = { 1, , }
Bước T= {(x2, x3),(x1,x2), ),(x4,x5) ,(x1,x5)},
L(T) = { 1, , 4, }
Bước T= {(x2, x3), (x1,x2), ),(x4,x5) ,(x1,x5) , (x5,x6)}
Keát thúc Card(T) = = (đỉnh) –1 Tổng chiều dài nhỏ = 19
(33)
10 x3 x2 x2 , x3
x1 x1
x6 x6 11 12
11 12
x4 x5 x4 x5 x1, x2, x3
x6
x4 x5
x1, x2, x3 x1,x2, x3, x4, x5 x6
x4, x5 x6
(34)CHƯƠNG
BÀI TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT
Những tốn tìm đường đồ thị (đặc biệt tìm đường ngắn nhất) kể toán kinh điễn, cổ lý thuyết đồ thị có nhiều ứng dụng
3.1 ĐỊNH NGHĨA
Cho G = (X, U) đồ thị có định giá; tương ứng với cung u=(i, j), có chiều dài (hay trọng lượng) l(u) hay lij
Bài tốn tìm đường ngắn i j tìm đường µ(i, j) từ i đến j cho :
l(µ) = ∑
u
l(u) ngắn
Diễn giải l(µ) : Chi chí vận chuyễn, Chi phí xây dựng, thời gian cần thiết để khắp,…
CHÚ Ý. Bài tốn tìm đường ngắn tương tự với tốn tìm đường dài Những thuật toán khác theo tính chất sau :
♦ l(u) ≥ 0, ∀ u ∈ U
♦ l(u) ⇔ l(u) = 1, ∀ u ∈ U.(Bài toán đường ngắn theo số cung)
(35)Và loại tốn sau xét :
♦ Tìm đường ngắn từ đỉnh đến đỉnh cịn lại, ♦ Tìm đường ngắn cặp đỉnh
3.2 NGUYÊN LÝ TỐI ƯU
Nguyên lý tối ưu phát biểu theo kiện tập đường tập đường ngắn đường ngắn
BỔ ĐỀ
Xét đồ thị G = (X,U) hàm trọng lượng l : X x X → R, Cho C = « x1, x2,…,xk » đường ngắn từ x1 đến xk với (i, j)
cho 1≤i≤j≤k, Cho Cij = « xi, xi+1,…,xj » đường C từ xi đến xj
Khi Cij đường ngắn từ xi đến xj
Nguyên lý thuật tốn tìm đường ngắn : ♦ Một khoảng cách d(i) tương ứng với đỉnh xi
♦ Ở cuối thuật toán, khoảng cách biểu diễn chiều dài ngắn từ gốc đến đỉnh xét
3.3 CÁC DẠNG CỦA BÀI TỐN: TỪ MỘT ĐỈNH ĐẾN CÁC ĐỈNH CÒN LẠI
Bài tốn cịn gọi tốn tìm đường ngắn từ gốc Nhiều toán khác dùng thuật tốn để giải :
♦ Đường ngắn đến đích ♦ Đường ngắn từ cặp đỉnh cho trước
(36)3.3.1 THUẬT TOÁN DIJKSTRA-MOORE (1959)
Giả thiết cạnh (cung) (l(u) ≥ 0) Giả sử G có n đỉnh đánh số thứ tự từ tới n Bài toán đặt tìm đường ngắn từ đỉnh đến đỉnh cịn lại đồ thị
Ký hieäu :
♦ n0 = số phần tử chưa chọn;
♦ A = Ma trận kề biểu diễn đồ thị, có trọng lượng, định nghĩa sau : A = [ ai,j] = l(i,j) = chiều dài cạnh cung ứng u=(i,j) ∈ U
∝ u=(i,j) ∉ U , i=j
♦ Pr(p) = đỉnh trước đỉnh p theo đường ngắn từ gốc đến đỉnh p
♦ d = khoảng cách ngắn từ gốc đến đỉnh lại đồ thị Qui ước ∞ cho đỉnh khơng có đường từ gốc đến
♦ Mark = Tập đỉnh đánh dấu (đã xét rồi), định nghĩa sau : Mark[i] = 1, đỉnh xét rồi,
0, ngược lại
NGUYÊN LÝ THUẬT TOÁN
1 Khởi tạo : Xuất phát từ đỉnh ; n0 = n – :
Pr = [1,1,…1]
d = a[1,j], j=1 n (Dòng đầu ma trận kề A) Mark = [1,0…0]
2 Ở bước lặp, chọn đỉnh đánh dấu đỉnh có độ dài ngắn đỉnh chưa đánh dấu, nghĩa chọn đỉnh k cho :
d[k] = Min {d[i] : Mark[i]= } ; Mark[k]=1
Cập nhật lại d[j], Pr[j] với đỉnh j chưa đánh dấu (Mark[j]=0) theo cơng thức:
• d[j] = d[k] + a[k,j] d[j] > d[k] +a[k,j] • Pr[j] = k
Nếu tất đỉnh chọn, nghĩa n0 = Dừng Nếu không , quay lại THỦ TỤC DIJKSTRA – MOORE ;
//Giả sử nhập ma trận chiều dài l theo dạng ma trận kề A //Gán ban đầu cho d, Pr, Mark, n0
For (int j= 1; j≤ n ; j++) { d[j] = a(1,j) ; pr[j]=1 ; Mark[j] = 0;} Mark[1] =1 ; n0 = n-1 ;
WHILE (n0 > 0)
{d[k] = Min {d[j] : Mark[j]= } ; // Cập nhật lại n0 , d Pr, Mark
Mark[k] =1 ; n0 = n0 - ;
For (int j= 1; j≤ n ; j++) if (Mark [j] = 0) && (d[k]+ a[k,j] < d[j]) { d[j] = d[k] +a[k,j] ; pr[j]=k}
}
(37)THÍ DỤ Ma trận kề A :
1
1 10 ∝ ∝
0 ∝ ∝ ∝ ∝ ∝
1 10 A = ∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ 2
1
5
FIG.3.1 Đồ thị có định hướng, có trọng lượng
Gán Ban đầu Cho Mark, d, Pr : Mark = [1, 0,0, 0, 0, 0] d = [0, 10,3, ∝, 6, ∝] Pr = [1, 1, 1, 1, 1, 1]
Bước Chọn đỉnh s3 Cập nhật Mark, d, Pr :
Mark = [1, 0, 1, 0, 0, 0] d = [0, 7, 3, ∝, 5, ∝] Pr = [1, 3, 1, 1, 3, 1]
Bước2 Đỉnh thời s3 Chọn đỉnh s5 Cập nhật Mark, d, Pr : Mark = [1, 0, 1, 0, 1, 0]
d = [0, 5, 3, ∝, 5, 6]
Pr = [1, 5, 1, 1, 3,5]
Bước3 Đỉnh thời s5 Chọn đỉnh s2 Cập nhật Mark, d, Pr : Mark = [1, 1, 1, 0, 1, 0]
d = [0, 5, 3, ∝, 5, 6]
Pr = [1, 5, 1, 1, 3,5]
Bước4 Đỉnh thời s2 Chọn đỉnh s6 Cập nhật Mark, d, Pr : Mark = [1, 1, 1, 0, 1, 1]
d = [0, 5, 3, ∝, 5, 6]
Pr = [1, 5, 1, 1, 3,5]
Thuật tốn kết thúc đỉnh s4, ta có d[s4] = Min {d[j] : Mark[j]= 0}= d[s4] = ∝
Từ thuật tốn , ta có kết sau : d = [0, 5, 3, ∝, 5, 6] Pr = [1, 5, 1, 1, 3, 5]
Đường ngắn từ s1 đến s2 : s1→ s3 → s5 → s2 độ dài
Đường ngắn từ s1 đến s3 : s1 → s3 độ dài
Đường ngắn từ s1 đến s5 : s1→ s3 → s5 độ dài
Đường ngắn từ s1 đến s6 : s1→ s5 → s6 độ dài
Không có đường ngắn từ đỉnh s1 đến s4 (d[s4] = ∝) , khơng có đường nối
(38)GHI CHÚ
Giả thiết « Hàm trọng lượng không âm » bắt buộc Chẳng hạn, sử dụng thuật toán Dijktra-Moore cho đồ thị hình FIG.3.2, dẫn đến kết sai ta chọn gốc đỉnh s1 Thật vậy, đầu tiên, ta chọn đỉnh s2, (s1→ s2) đó, đường ngắn
nhất đường từ đỉnh s1 đến s2 qua s3
3 -
(39)
3.3.2 THUẬT TOÁN BELLMAN-FORD (1958-1962)
Sự diện dấu trọng lượng (hay chiều dài ) cho phép, chẳng hạn, cải tiến chi phí hay lợi nhuận Thuật tốn DIJKSTRA-MOORE khơng cho phép xét tới cạnh (cung) có trọng lượng khơng âm, trường hợp cạnh đánh dấu, ta khơng thể thay đổi cho bước lặp Thuật tốn DIJKSTRA-MOORE gọi gán nhãn cố định
Để giải cho trường hợp đồ thị có trọng lượng bất kỳ, ta xét thuật toán cho phép đánh dấu xác định hoàn toàn thuật toán kết thúc Một kiểu thuật toán gọi điều chỉnh nhãn
Thuật tốn BELLMAN-FORD chỉ có giá trị cho đồ thị khơng có chu trình, có trọng lượng
Ký hiệu :
♦ Tập đỉnh đánh số thứ tự từ n
♦ Pr(p) = đỉnh trước đỉnh p theo đường ngắn từ gốc đến đỉnh p ♦ d = khoảng cách ngắn từ gốc đến đỉnh lại đồ thị ♦ Mark = Tập đỉnh đánh dấu (đã xét rồi), định nghĩa sau :
Mark[i] = 1, đỉnh xét rồi, 0, ngược lại
Khoảng cách ngắn từ gốc đến đỉnh v tính tất phần tử trước v (Γ-(v)) đánh dấu Một đỉnh bất kỳ, chưa đánh dấu, khoảng cách từ gốc đến đỉnh chưa biết (chưa tính)
NGUN LÝ THUẬT TỐN 1 Gán giá trị ban đầu
Chọn đỉnh s1 làm gốc
Mark = [1,0…0] ; d[1] = ; Pr[1] =
2 Ở bước lặp :
Chọn đỉnh k chưa đánh dấu cho tất đỉnh trước k đánh dấu , nghĩa : Mark[k] = ∀ j ∈ Γ-(k) : Mark[j]=
Caäp nhaät Mark : Mark[k] =1 ;
(40)THÍ DỤ
Gán ban đầu : Mark, d, Pr :
2 -2 Mark = [1, 0, 0, 0, 0, 0},
d[1] = ;
-5 Pr [1] =
1 Γ - (2) ={1,3};Γ- (3)={1};Γ- (4)={2,3,6} -2 Γ - (5) ={3} ; Γ- (6) ={2,5}
-1
FIG.3.1 Đồ thị có định hướng, có trọng lượng bất kỳ, khơng có chu trình, gốc đỉnh Bước Chọn đỉnh 3 vì Γ- (3)={1} Cập nhật Mark[3], Tính d[3] Pr[3] :
Mark[3] = ; d[3] = -2 ; Pr[3] = 1;
Bước2 Ở bước lặp này, ta chọn đỉnh (hay đỉnh 2) Cập nhật Mark[5], Tính d[5] Pr[5] :
Mark[5] = ; d[5] = ; Pr[5] = 3;
Bước Chọn đỉnh 2 Cập nhật Mark[2], Tính d[2] Pr[2] : Mark[2] = ; d[2] = -1 ; Pr[2] = 3;
Bước Chọn đỉnh 6 Cập nhật Mark[6], Tính d[6] Pr[6] : Mark[6] = ; d[6] = 1; Pr[6] =
Bước Chọn đỉnh 4 Cập nhật Mark[4], Tính d[4] Pr[4] : Mark[4] = ; d[4] = - ; Pr[4] =
Thuật tốn kết thúc tất đỉnh chọn Từ thuật toán , ta có kết sau :
d = [0, -1, -2, -4, 2, 1] Pr = [1, 3, 1, 6, 3, 5]
Đường ngắn từ s1 đến s2 : s1→ s3 → s2 độ dài -1
Đường ngắn từ s1 đến s3 : s1 → s3 độ dài -2
Đường ngắn từ s1 đến s4 : s1→ s3 → s5 → s6→ s4 độ dài -
Đường ngắn từ s1 đến s5 : s1→ s3 → s5 độ dài
(41)3.4 GIỮA TẤT CẢ CÁC CẶP ĐỈNH: THUẬT TỐN FLOYD (1962)
Ta tính ma trận khoảng cách n x n Nếu tất chiều dài khơng âm (l(u)≥0) ta áp dụng n lần thuật toán Dijktra-Moore cho đỉnh i Nếu đồ thị có chứa chiều dài âm (l(u) < 0) ta áp dụng n lần thuật tốn Bellman-Ford cho mỗiđỉnh i Thuật tốn Floyd có cách tiếp cận khác có lợi cho trường hợp ma trận dầy
Ký hiệu :
A : ma trận trọng lượng, gán giá trị ban đầu sau : i = j
A[i,j] = l(i, j) (i, j) ∈ U ∞ nguợc lại
P : ma trận đỉnh trước, gán giá trị ban đầu sau :
P[i,j] = i, P[i,j] đỉnh trước đỉnh j đường từ gốc i đến j
Khi kết thúc thuật tốn, ta có :
P[i,j] = đỉnh trước j đường ngắn từ gốc i đến đỉnh j, với chiều dài tương ứng A[i,j]
THỦ TỤC FLOYD(L, P)
For (k =1; k≤ n ; k++) For (i =1 ;i≤ n ; i++) For (j =1 ;j≤ n ; j++)
If (a[i,k] + a[k,j] < a[i,j])
{ a[i,j] := a[i,k] + a[k,j] ; p[i,j] :=p[k,j] ;}
Độ phức tạp : O(n3
(42)THÍ DỤ
-1
-2
-4 5
Gán ban đầu : cho ma trận A, P
1 ∝ 1
A0 = ∝ -2 ∝ P0 = 2
∝ 5 3 -4 -1 ∝ 4
Các bước lặp : k =1
1 ∝ 1 A1 = ∝ -2 ∝ P1 = 2
∝ 5 3 -4 -2 ∝ 4
k =
1 1
A2 = ∝ -2 ∝ P2 = 2
∝ 5 3 -4 -2 -4
k =3
1 1
A3 = ∝ -2 P3 = 2
∝ 5 3 -4 -2 -4
k =
1 1
A4 = -1 -2 P4 = 2
(43)Cách nhận biết đường ngắn
Để nhận đường ngắn từ s1 đến sj , ta sử dụng dòng thứ i ma trận
P Chẳng hạn, ta muốn nhận đường ngắn µ : s4 → s3, ta tham khảo
ma trận P sau : P[4,3]=2 :s2 đỉnh trước s3 ; P[4,2]=1 : s1 đỉnh trước
của s2 ; P[4,1]=4 :s4 đỉnh trước s1
Cuối cùng, kết µ = s4→ s1 → s2→ s3
Một ứng dụng Thuật toán FLOYD tìm đường giũa hai đỉnh Thuật tốn WARSHALL phát triễn năm (1962), thuật tốn thường mang tên FLOYD-WARSHALL »
Ký hiệu :
A = ma trận kề đồ thị, gán giá trị ban đầu sau : l (i, j) ∈ U
A[i,j] = nguợc lại
P = ma trận đỉnh trước, gán giá trị ban đầu sau : a[i,j] = 0,
P[i,j] = nguợc lại Khi kết thúc thuật toán :
P[i,j] = đỉnh trước j đường từ đỉnh i đến đỉnh j (nghĩa a[i,j]=1)
THỦ TỤC FLOYD-WARSHAL(A, P)
For (k =1 ;k≤ n ; k++) For (i =1 ;i≤ n ; i++) For (j =1 ;j≤ n ; j++)
If (a[i,j] = = 0)
{ a[i,j] = a[i,k] *a[k,j] ; p[i,j] =p[k,j] }
(44)THÍ DỤ
Gán ban đầu : cho ma trận A, P
1 1 1 A0 = 0 P0 = 0
1 1 0 4
Các bước lặp : k =1
1 1 1 A1 = 0 P1 = 0
1 1 4
k =
1 1 1
A2 = 0 P2 = 0
1 1 1 4
k =3
1 1 1
A3 = 1 P3 =
1 1 1 4
k =
1 1 1
A4 = 1 1 P4 =
(45)CHƯƠNG
ĐỒ THỊ PHẲNG & BÀI TỐN TƠ MÀU
4.1 ĐINH NGHĨA VỀ ĐỒ THỊ PHẲNG
Đồ thị phẳng đồ thị biểu diễn mặt phẳng (hay hình cầu) cho hai cung (hay hai cạnh) không cắt
Ghi chú. Hai cạnh có chung đỉnh gọi khơng cắt
Cắt Không cắt
Thí dụ. Đồ thị G1 đồ thị phẳng G2 , G3 biểu diễn phẳng G1
(46)Cho G đồ thị phẳng Một mặt (FACE) G miền, giới hạn cạnh, khơng có đỉnh lẫn cạnh bên Trong mặt ln ln có mặt vô hạn Đường biên (CONTOUR) mặt r chu trình hợp thành từ cạnh biên r Hai mặt r s gọi KỀ (ADJACENTES) đường biên chúng có chung cạnh Hai mặt khơng có chung đỉnh khơng kề
THÍ DỤ
Một đồ địa dư đồ thị phẳng (với điều kiện khơng có đảo) Đồ thị đặc biệt đỉnh có bậc ≥ Mặt h mặt vơ hạn, mặt cịn lại a, b, c, d, e, f, g mặt hữu hạn
h A a
c a b
d e f
FIG 4.1 ĐỒ THỊ PHẲNG
Bài toán ba làng ba nhà máy Ta có làng a, b, c, mà ta muốn đặt đường nối với nhà máy : nhà máy cung cấp nước d, nhà máy cung cấp ga e, nhà máy cung cấp điện f Vấn đề đặt , ta đặt mặt phẳng cho đường dẫn không giao đỉnh cực biên ? Đồ thị biểu diễn làng nhà máy cho phép định nghĩa lớp đồ thị không phẳng
a b c
d e f
(47)4.2 CÔNG THỨC EULER , HỆ QUẢ & THÍ DỤ 4.2 CÔNG THỨC EULER
Cho đồ thị phẳng liên thơng có n đỉnh, m cạnh f mặt, ta có n - m + f =
Chứng minh. Truy chứng số cạnh :
m = Ta có n= đỉnh f=1 mặt Ta có n – m + f = – + = Vậy công thức EULER cho trường hợp m =
Giả sử công thức EULER cho trường hợp đồ thị Gi-1 có mi – cạnh
Ta chứng minh công thức EULER cho trường hợp đồ thị có mi
cạnh
Gọi cạnh u = (x,y) cạnh vẽ thêm vào Gi-1 để có Gi
Hiễn nhiên có it đỉnh thuộc Gi-1 u=(x,y) thuộc mặt K
của Gi-1 Giả sử x ∈ Gi-1 Có trường hợp xãy :
1 y ∈ K Do ta có : x fi = fi-1 +
ni = ni-1 K
mi = mi-1 +
Ta coù : y
ni - mi + fi = ni – (mi-1 + 1) + (fi-1 + 1)
= ni – mi-1 + fi-1 =
Vậy cơng thức EULER y ∉ K Ta có :
fi = fi-1
ni = ni-1 +
mi = mi-1 +
Ta coù :
ni - mi + fi = (ni + 1) – (mi-1 + 1) + fi-1
= ni – mi-1 + fi-1 =
(48)4.2.2 Heä quaû
Trong đồ thị đơn giản phẳng, liên thơng có n đỉnh, m cạnh (m > 2) f mặt Khi ấy, ta có :
3f/2 ≤ m ≤ 3n - (1)
Chứng minh.
Mỗi mặt bị bao cạnh, cạnh thuộc mặt Ba cạnh xác định tối đa mặt Vậy số mặt tối đa 2m/3
Ta có f ≤ 2m/3 Dùng công thức EULER suy bất đẳng thức (1)
4.2.3 Hệ
Trong tất đồ thị phẳng đơn giản, có đỉnh có bậc ≤
Chứng minh
Giả sử đỉnh có bậc > Khi 2m > 6n ⇒ m > 3n > 3n – Mâu thuẩn
4.2.4 THÍ DỤ
Dùng cơng thức EULER, ta chứng minh tất đồ thị đầy đủ đỉnh K5
không phẳng
FIG 4.3 ĐỒ THỊ KHÔNG PHẲNG LOẠI : K5 Chứng minh
Ta có số đỉnh n = 5, Số cạnh m = n(n-1)/2 = 10 Nếu K5 phẳng, áp dụng hệ 3.2.2 ta có :
(49)Nhận xét
Đồ thị làng nhà máy (Loại : K3,3) đồ thị đầy đủ
đỉnh (loại :K5) cho phép định nghĩa tất đồ thị mà không phẳng
K5, K3,3 đồ thị
Đồ thị K5 không phẳng với số đỉnh nhỏ nhất, đồ thị K3,3 đồ thị khơng phẳng
có số cạnh nhỏ nhất, hai đồ thị không phẳng đơn giản
4.3 BẤT ĐẲNG THỨC CẠNH- ĐỈNH 4.3.1 THÍ DỤ
Ta xét toán xác định xem đồ thị G cho trước có phẳng khơng ?
THÍ DỤ 1 Cho đồ thị K4 K4 phẳng THÍ DỤ 2. Cho đồ thị G sau :
a b c d
h g f e
G phẳng ta vẽ lại sau : g b f
a c h d e
THÍ DỤ 3. Đồ thị sau không phẳng
(50)
4.3.2 BẤT ĐẲNG THỨC CẠNH – ĐỈNH
Cho G đồ thị phẳng liên thơng có n đỉnh, m cạnh đường biên mặt có số cạnh g ≥ Khi ấy, ta có :
m ≤ (n-2) g/ (g-2)
Chứng minh.
Giả sử ma trận kề cạnh- mặt có dạng : f1 f2 fj fF
m1
m2
A =
mI mij
mf
trong :
mij = mI cạnh biên fj,
0 ngược lại Xét hàng thứ i, ta có :
Σ mij ≤ ( mij cạnh biên nhiều mặt)
Suy Σ Σ mij ≤ 2m (1)
Xét cột thứ j, ta có :
Σ mij ≥ g (vì mặt fj có it g cạnh biên)
Suy Σ Σ mij ≥gf (2)
Theo cơng thức EULER, ta có :
n - m + f = (3) Theo (2), (1), ta coù :
gf = g(2 + m - n) ≤ 2m (2 + m - n) ≤ 2m/g
⇔ m(1-2/g) ≤ n –
(51)THÍ DỤ
Nhờ Bất đẳng thức trên, ta chứng minh đồ thị làng nhà máy K3,3 , xem hình FIG 4.2 khơng phẳng
Thật vậy, nhận xét chu trình K3,3 có số cạnh Vậy
nếu K3,3 phẳng mặt phải có số cạnh
Theo Bất đẳng thức trên, ta có : = m ≤ (6-2) 4/(4-2) = Mâu thuẩn Vậy K3,3 không phẳng
4.4 PHÉP ĐỒNG DẠNG 4.4.1 ĐỊNH NGHĨA
Hai đồ thị gọi đồng dạng với đồ thị có cách biến đổi đồ thị theo cách thêm đỉnh bậc bỏ đỉnh bậc
THÍ DỤ a b → a c b → a b Thêm Bớt
Đỉnh c bậc vào ab Đỉnh c bậc khỏi acb
4.4.2 BỔ ĐỀ
Giả sử H đồ thị G Khi : Nếu G phẳng H phẳng
Nếu H không phẳng G không phẳng
4.4.3 BỔ ĐỀ
Mọi đồ thị phẳng đồng dạng phẳng
4.5 ĐỊNH LÝ KURATOWSKI
(52)4.6 BÀI TỐN TƠ MAØU ĐỒ THỊ 4.6.1 ĐỊNH NGHĨA
Phép tô màu đồ thị phép gán màu cho đỉnh đồ thị cho hai đỉnh kề có màu khác
Một cách hình thức định nghĩa phép tơ màu sau :
Phép tô màu ánh xạ γ : X → N cho ∀ (x, y) ∈ X, γ(x) ≠ γ (y)
THÍ DỤ
FIG 4.4
Số màu (phân biệt) cần thiết để tô màu đỉnh đồ thị G gọi Sắc tố (CHROMATIQUE) ký hiệu γ (G)
Một đồ thị G γ (G) ≤ k gọi k-sắc tố
Chận sắc tố cho d + với d bậc lớn đỉnh γ (G) ≤ d +
4.6.2 CÁC ỨNG DỤNG XẾP LỊCH THI
Giả sử ta khảo sát việc thi vấn đáp kỳ thi Có ràng buộc sau :
♦ Một thầy , lúc hỏi thi em
♦ Một thí sinh thi với thầy vào thời gian định trước
Sự phân bố thí sinh thi với thầy ấn định trươc (Thầy Pi thí sinh
Ej) :
THÍ DỤ (P1, E1), (P1, E2), (P1, E3), (P2, E1), (P2, E2), BẢN ĐỒ ĐỊA DƯ
(53)4.6.3 THUẬT TỐN TƠ MÀU DỮ LIỆU : Đồ thị G = (X, U)
KẾT QUẢ : Một phép tô màu γ : X → N
BEGIN
Cho τ = x1, x2, …,xn phép đánh số thứ tự đỉnh G
Cho C = {1 , 2, …, k} tập maøu FOR i=1 To n Do
γ(xi) = Min{k ∈ C :∀ đỉnh y kề x,, γ(y) ≠ k} END
4.6.4 ĐỊNH LÝ
Nếu G có chứa đồ thị đẳng hình với Km γ (G) ≥ m CHỨNG MINH Hiễn nhiên
4.6.5 ĐỊNH LÝ MÀU (KEMPE-HEAWOOD)
(54)4.6.6 BÀI TỐN MÀU
GIẢ THIẾT BÀI TỐN MÀU
Trên đồ bất kỳ, ta nói tơ màu miền đồ tô màu xác định cho miền kề (chung phần biên) phải tô hai màu khác Vấn đề đặt cần dùng tối thiểu màu để tô đồ Vấn đề đặt từ năm 1852 giáo sư De Morgan đặt : « Mọi đồ tơ màu cho hai nước nằm kề phải tô hai màu khác » Sau có nhiều cố gắng nhà toán học để giải toán không đến kết cuối Cho đến năm 1976, nhóm nhà tốn học (K Appel, W Haken, J.Koch) xây dựng lời giải dựa kết máy tính IBM cung cấp khẳng định giả thiết màu
LIÊN QUAN GIỮA BÀI TỐN MÀU & SẮC TỐ ĐỒ THỊ PHẲNG
Cho đồ thị phẳng G liên thơng, khơng có đỉnh lập Ta xây dựng đồ thị đối ngẫu gọi G sau :
Mỗi đỉnh x* G tương ứng với mặt s G
Mỡi cạnh u* G nối đỉnh G tương ứng với vùng kề
và cắt cạnh chung hai vùng
G xây dựng đồ thị phẳng, khơng có đỉnh lập
Chú ý : Đối ngẫu G G
HỆ QUẢ
Trong tất đồ địa dư, có mặt có đường biên có số cạnh ≤
Chứng minh
Chuyển đồ địa dư thành đồ thị đối ngẫu Giả thiết trở thành « có it đỉnh có bậc ≤ » áp dụng Hệ 4.2.3 suy kết luận hệ
ĐỊNH LÝ MÀU