3 Các thu t toán duy t đ th
Thu t toán tìm ki m theo chi u sâu, Thu t toán tìm ki m theo chi u r ng
4 M t s ng d ng c a tìm ki m trên đ th
Bài toán đ ng đi, Bài toán liên thông,
th không ch a chu trình và bài toán s p x p tôpô, Bài toán tô màu đ nh đ th
5 Bài toán cây khung nh nh t
Thu t toán Kruscal, C u trúc d li u bi u di n phân ho ch,
6 Bài toán đ ng đi ng n nh t
Thu t toán Dijkstra, Cài đ t thu t toán v i các c u trúc d li u
Trang 2 Các c nh th hi n đ ng bay n i hai sân bay
Các s trên c nh có th là chi phí (th i gian, kho ng cách)
VINNHT
HAP
BKK
HCMHAN
Trang 6 nh n s c nh / get number of edges
nh n s đ nh / get number of vertices
cho bi t đ th là có h ng hay vô h ng / tell whether graph
Trang 7Vi c l a ch n cách bi u di n ph thu c vào t ng bài toán c
th c n xét, t ng thu t toán c th c n cài đ t
Có hai v n đ chính c n quan tâm khi l a ch n cách bi u
Trang 8 Dòng toàn không ~đ nh cô l p.
M[i, i] = 1 khuyên (self-loop)
Trang 9trong đó là giá trị đặc biệt để chỉ ra một cặp (i,j) không là
cạnh, tuỳ từng trường hợp cụ thể, có thể được đặt bằng mộttrong các giá trị sau: 0, +, -
( , ), nếu ( ) [ , ]
4
3
5 8
6
8
6 7
2 3
5 3 68
6
2 78
Trang 10w w v y u
v w x y z t
b e b
b f
c a
b c d e f
Trang 11 Th i gian tr l i các truy v n:
Li t kê các đ nh k c a v: O(<s đ nh k >) (t t h n ma tr n k )
Hai đ nh i, j có k nhau? Tìm ki m trên danh sách:
(degree(u)) ánh giá trong tình hu ng t i nh t là O(|V |) => không
Trang 123
5 8
6
8
6 7
2 3
Adjacency Matrix
Trang 13 Xây d ng các thu t toán kh o sát các tính ch t c a đ th ;
Là thành ph n c b n c a nhi u thu t toán.
C n xây d ng thu t toán hi u qu đ th c hi n vi c duy t đ
th Ta xét hai thu t toán duy t c b n:
Tìm ki m theo chi u r ng (Breadth First Search – BFS)
Tìm ki m theo chi u sâu (Depth First Search – DFS)
Trang 14Ý t ng chung
Trong quá trình th c hi n thu t toán, m i đ nh m t trong
ba tr ng thái:
Ch a th m (th hi n b i màu tr ng),
ã th m nh ng ch a duy t xong (th hi n b i màu xám)
ã duy t xong (th hi n b i màu đen).
Quá trình duy t đ c b t đ u t m t đ nh v nào đó Ta s
Thu t toán tìm ki m theo chi u r ng
(BFS algorithm)
Trang 15 Xám (Gray) – đã th m nh ng ch a duy t xong.
en (Black) – đã duy t xong
Trang 16Thu t toán tìm ki m theo chi u r ng trên đ th G
C F
Ví d : Th c hi n BFS(A)
32 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 17J H
C F
Q = {A}
33 Nguy n c Ngh a - B môn KHMT HBKHN
I
J H
C F
Q = {B,F}
34 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 18J H
C F
Q = {F,C,J}
35 Nguy n c Ngh a - B môn KHMT HBKHN
I
J H
C F
Q = {C,J,E,I}
36 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 19J H
C F
Q = {J,E,I,H}
37 Nguy n c Ngh a - B môn KHMT HBKHN
I
J
H
C F
Q = {E,I,H}
38 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 20J
H
C F
Q = {I,H}
39 Nguy n c Ngh a - B môn KHMT HBKHN
I
J
H
C F
Q = {H}
40 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 21J
H
C F
Q = {} K t thúc BFS(A)
41 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 22Cây tìm ki m theo chi u r ng (Breadth-first Tree)
E
Trang 24Tìm ki m theo chi u sâu
Input: G = (V, E) - đ th vô h ng ho c có h ng
Output: V i m i v V
d[v] = th i đi m b t đ u th m (v chuy n t màu tr ng sang xám)
f [v] = th i đi m k t thúc th m (v chuy n t màu xám sang đen)
f[u] time time + 1
Trang 25Thu t toán tìm ki m theo chi u sâu trên đ th G
Trang 284/5 3/6
Trang 314/5 3/6
Trang 32Các kho ng th i gian th m [d[v], f[v]] c a các đ nh có c u
trúcl ng nhau (parenthesis structure).
Trang 33C u trúc l ng nhau (parenthesis structure)
nh lý V i m i u, v, ch có th x y ra m t trong các tình
hu ng sau:
1 d[u] < f [u] < d[v] < f [v] ho c d[v] < f [v] < d[u] < f [u] (ngh a là hai kho ng th i gian th m c a u và v là d i nhau)
và khi đó u và v là không có quan h t tiên – h u du
2 d[u] < d[v] < f [v] < f [u] (ngh a là kho ng th i gian th m
c a v là l ng trong kho ng th i gian th m c a u) và khi đó v
là h u du c a u.
3 d[v] < d[u] < f [u] < f [v] (ngh a là kho ng th i gian th m
c a u là l ng trong kho ng th i gian th m c a v) và khi đó u
là h u du c a v.
Ví d
Trang 34 C nh t i (Forward edge): đi t t tiên đ n h u du
C nh vòng (Cross edge): c nh n i hai đ nh không có
quan h h hàng
Trang 35Nh n bi t các lo i c nh
nh n bi t c nh (u, v) thu c lo i c nh nào, ta d a vào màu
c a đ nh v khi l n đ u tiên c nh (u, v) đ c kh o sát C th ,
n u màu c a đ nh v là
Tr ng, thì (u,v) là c nh c a cây;
Xám, thì (u,v) là c nh ng c;
en, thì (u,v) là c nh t i ho c vòng Trong tr ng h p này đ phân
bi t c nh t i và c nh vòng ta c n xét xem hai đ nh u và v có quan h
h hàng hay không nh s d ng k t qu c a đ nh lý v c u trúc l ng nhau.
Gi s (u,v)E Không gi m t ng quát gi s d[u] < d[v] Khi đó v
ph i tr thành đã duy t xong tr c khi u tr thành đã duy t xong.
N u (u,v) đ c kh o sát l n đ u tiên theo h ng uv, thì tr c th i
đi m kh o sát v ph i có màu tr ng, và do đó (u,v) là c nh c a cây.
N u (u,v) đ c kh o sát l n đ u tiên theo h ng vu, u ph i có màu
xám t i th i đi m kh o sát c nh này và do đó nó là c nh ng c.
Trang 364 M t M t ss ng ng d ng d ng c a c a tìm tìm ki m ki m trên trên đđ th th
Các ng d ng c a DFS và BFS
Các thu t toán tìm ki m trên đ th BFS và DFS
đ c ng d ng đ gi i nhi u bài toán trên đ th ,
ch ng h n nh
Tìm đ ng đi gi a hai đ nh s và t c a đ th ;
Ki m tra tính liên thông, liên thông m nh c a đ th ;
Xác đ nh các thành ph n liên thông, song liên thông, liênthông m nh;
Tính hai phíac a đ th ;
Tínhph ng c a đ th
Trang 37Bài toán đ ng đi
Bài toán đ t ra là: "Cho đ th G=(V,E) và hai đ nh s, t c a nó H i
có t n t i đ ng đi t s đ n t hay không? Trong tr ng h p câu tr
N u t không đ c th m, ta kh ng đ nh là không có đ ng đi c n tìm.
Chú ý: ng đi tìm đ c t s đ n t theo BFS_Visit(s) là đ ng đi
ng n nh t (theo s c nh).
Bài toán liên thông
ki m tra xem đ th G có ph i liên thông hay không N u G
không là liên thông, c n đ a ra s l ng thành ph n liênthông và danh sách các đ nh c a t ng thành ph n liên thông
gi i bài toán này, ta ch vi c th c hi n DFS(G) (ho cBFS(G)) Khi đó s l n g i th c hi n BFS_Visit()(DFS_Visit()) s chính là s l ng thành ph n liên thông c a
đ th Vi c đ a ra danh sách các đ nh c a t ng thành ph nliên thông s đòi h i ph i đ a thêm vào bi n ghi nh n xem
m i đ nh đ c th m l n g i nào trong BFS(G) (DFS(G))
Trang 38Bài toán liên thông m nh
Hãy ki m tra xem đ th G có ph i liên thông m nh hay
không?
K t qu sau đây cho phép qui d n bài toán c n gi i v bàitoán đ ng đi
và ch khi luôn tìm đ c đ ng đi t m t đ nh v đ n t t c
ng c h ng c a t t c các cung.
D th y n u A là ma tr n k c a G thì ma tr n chuy n v AT là ma tr n k c a GT (đi u này gi i thích tên g i đ th chuy n v ).
Trang 39Thu t toán ki m tra tính liên thông m nh
đ nh u không đ c th m thì G không liên thông
m nh, n u trái l i G là liên thông m nh.
th không ch a chu trình
• Bài toán: Cho đ th G=(V,E) H i G có ch a chu trình hay không
• M nh đ th G là không ch a chu trình khi và ch khi DFS th c hi n
đ i v i G không phát hi n ra c nh ng c.
• Ch ng minh
) N u G không ch a chu trình thì không th có c nh ng c Hi n nhiên:
b i vì s t n t i c nh ng c kéo theo s t n t i chu trình.
) Taph i ch ng minh: N u không có c nh ng c thì G là á chu trình Ta
ch ng minh b ng l p lu n ph n đ : G có chu trình c nh ng c G i v là
đ nh trên chu trình đ c th m đ u tiên, và u là đ nh đi tr c v trên chu trình Khi vđ c th m, các đ nh khác trên chu trình đ u là đ nh tr ng.Ta ph i th m
đ c t t c các đ nh đ t đ c t v tr c khi quay tr l i t DFS-Visit() Vì
th c nh uv đ c duy t t đ nh u v t tiên v c a nó, vì th (u, v) là c nh
ng c.
Trang 40Bài toán s p x p tôpô (Topological Sort)
Bài toán đ t ra là: Cho đ th có h ng không có chu trình G= (V, E).
Hãy tìm cách s p x p các đ nh sao cho n u có c nh (u,v) thì u ph i đi
Khi cung (u,v) đ c kh o sát, thì u có màu xám Khi đó v
có th có m t trong 3 màu: xám, tr ng, đen
N u v có màu xám (u,v) là c nh ng c T n t i chu
Trang 41Thu t toán s p x p tôpô
Thu t toán có th mô t v n t t nh sau:
Th c hi n DFS(G), khi m i đ nh đ c duy t xong
ta đ a nó vào đ u danh sách liên k t (đi u đó có ngh a là nh ng đ nh k t thúc th m càng mu n s càng g n đ u danh sách h n).
Danh sách liên k t thu đ c khi k t thúc DFS(G) s cho ta th t c n tìm.
Thu t toán s p x p tôpô
TopoSort(G)
1 for uV color[u] = white; // kh i t o
2 L = new(linked_list); // kh i t o danh sách liên k t r ng L
3 if (color[v] == white) TopVisit(v);
4 N p u vào đ u danh sách L // uđã duy t xong
}
Th i gian tính c a TopoSort(G) là O(|V|+|E|).
Trang 42Ví d
th G DFS(G) Th t tôpô
Thu t toán xoá d n đ nh
M t thu t toán khác đ th c hi n s p x p tôpô đ c xây d ng d a trên m nh đ sau
Trang 43Thu t toán xoá d n đ nh
T m nh đ ta suy ra thu t toán xoá d n đ nh đ th c
hi n s p x p tôpô sau đây:
Tho t tiên, tìm các đ nh có bán b c vào b ng 0 Rõ ràng ta
có th đánh s chúng theo m t th t tu ý b t đ u t 1
Ti p theo, lo i b kh i đ th nh ng đ nh đã đ c đánh scùng các cung đi ra kh i chúng, ta thu đ c đ th m i
Trang 44Thu t toán xoá d n đ nh
Ví d Th c hi n thu t toán xoá d n đ nh đ i v i đ th
87 Nguy n c Ngh a - B môn KHMT HBKHN
Thu t toán xoá d n đ nh
f
c h
ánh s a b i 1Xoá các cung đi ra kh i a
88 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 45Thu t toán xoá d n đ nh
f
c h
ánh s f b i 2Xoá các cung đi ra kh i f
89 Nguy n c Ngh a - B môn KHMT HBKHN
Thu t toán xoá d n đ nh
f
c h
1 2 nh e và j có deg-(e)= deg-(j) = 0
ánh s e và j theo th t tu ý
b i 3 và 4Xoá các cung đi ra kh i e và j
90 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 46Thu t toán xoá d n đ nh
f
c h
nh i và g có deg-(i)= deg-(g) = 0ánh s i và g theo th t tu ý
b i 5 và 6Xoá các cung đi ra kh i i và g
91 Nguy n c Ngh a - B môn KHMT HBKHN
Thu t toán xoá d n đ nh
f
c h
b i 7, 8 và 4Xoá các cung đi ra kh i b, d và h
92 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 47Thu t toán xoá d n đ nh
f
c h
93 Nguy n c Ngh a - B môn KHMT HBKHN
BAO ÓNG TRUY N NG
Transitive Closure
Trang 48E* = {(u,v)| có đ ng đi t u đ n v trên G}
Bài toán: Cho đ th có h ng G, tìm bao đóng truy n ng G*
0
3
45
0
3
45
M nh đ Thu t toán tìm đ c bao đóng truy n ng v i th i gian O(|V|3 ).
CM: Ta ch ng minh thu t toán tìm đ c bao đóng truy n ng b ng qui n p.
L n l p 1: Ma tr n có 1 v trí (s,t) iff có đ ng đi s-t ho c s-0-t
L n l p th i: Gán ph n t v trí (s,t) giá tr 1 iff có đ ng đi t s đ n t trong
đ th không ch a đ nh v i ch s l n h n i (ngo i tr hai mút)
L n l p th i+1
N u có đ ng đi t s đ n t không ch a đ nh có ch s l n h n i – A[s,t] đã có giá
tr 1
N u có đ ng đi t s đ n i+1 và đ ng đi t i+1 đ n t, và c hai đ u không ch a
đ nh v i ch s l n h n i (ngo i tr hai mút) thì A[s,t] đ c gán giá tr 1
Nguy n c Ngh a - B môn KHMT HBKHN
Trang 49Thu t toán Warshall c i ti n
Ta có th c i ti n thu t toán b ng cách b sung thêm câu l nh
Trang 512
Trang 52Thu t toán Kruskal
Thu t toán s xây d ng t p c nh E T c a cây khung nh nh t
T = (V, E T) theo t ng b c
Tr c h t s p x p các c nh c a đ th G theo th t không
gi m c a đ dài
B t đ u t t p E T = , m i b c ta s l n l t duy t trongdanh sách c nh đã s p x p, t c nh có đ dài nh đ n c nh
có đ dài l n h n, đ tìm ra c nh mà vi c b sung nó vào t p
E T không t o thành chu trình trong t p này
Thu t toán s k t thúc khi ta thu đ c t p E T g m n-1 c nh.
Trang 53Cài đ t thu t toán Kruskal
Có 2 thao tác đòi h i nhi u tính toán nh t trong 1
b c l p c a thu t toán Kruskal:
gi m c a đ dài. i v i đ th có m c nh, b c này đòi h i th i gian
O(m log m) Khi đó trong b c l p vi c ch n c nh l n nh t đòi h i th i
gian O(1).
Tuy nhiên, đ xây d ng cây khung nh nh t v i n-1 c nh, nói chung,
th ng ta ch ph i xét p < m c nh Do đó thay vì s p x p toàn b dãy
c nh ta s s d ng heap-min:
t o đ ng đ u tiên ta m t th i gian O(m),
Vi c vun l i đ ng sau khi l y ra ph n t nh nh t g c đòi h i th i
gian O(log m).
Suy ra thu t toán s đòi h i th i gian O(m+p log m) cho vi c s p x p
các c nh Trong vi c gi i các bài toán th c t , s p th ng nh h n
r t nhi u so v i m.
Trang 54Ki m tra: T p E T {e} có ch a chu trình hay không?
Ký hi u E* =E T {e}
Vi c này có th th c hi n nh s d ng thu t toán ki m tra xem
đ th G=(V,E*) có ch a chu trình hay không đã trình bày
trong m c tr c Th i gian c n thi t là O(n), trong đó n = |V|.
V i nh ng đ xu t v a nêu ta thu đ c cài đ t thu t toánKruskal v i th i gian
O(m+m log m) + O(n.m) = O(nm + m log m)
Chú ý: Có cách th c hi n khác d a trên c u trúc d li u các
t p không giao nhau đ th c hi n thao tác ki m tra t p E T
{e} có ch a chu trình hay không?
C u trúc d li u cho thu t toán Kruskal
B sung c nh (u, v) vào E T có t o thành chu trình?
• M i thành ph n c a T (đang xây d ng) là m t cây.
• Khi u và v thu c cùng m t thành ph n liên thông thì vi c b
sung (u,v) s t o thành chu trình.
• Khi u và v thu c các thành ph n liên thông khác nhau thì vi c
b sung (u,v) s không t o thành chu trình.
108 Nguy n c Ngh a - B môn KHMT HBKHN
Trang 55C u trúc d li u cho thu t toán Kruskal
C u trúc d li u cho thu t toán Kruskal
• Khi c nh (u, v) đ c b sung vào T, hai thành ph n ch a u và
Trang 56C u trúc d li u cho thu t toán Kruskal
112
C u trúc d li u các t p không giao nhau
( Disjoint-set Data Structures)
V n đ đ t ra là: Cho t p V g m n ph n t , ta c n xây d ng
c u trúc d li u bi u di n phân ho ch t p V ra thành các t p con V1, V2, …, V k h tr th c hi n hi u qu các thao tác sau:
Makeset(x): T o m t t p con ch a duy nh t ph n t x.
Union(x, y): Thay th các t p V i và V j (trong đó x V i
và y V j ) b i t p V i V jtrong phân ho ch đang xét
Find(x): Tìm tên r(V i) c a t p V i ch a ph n t x.
Nh v y, Find(x) và Find(y) tr l i cùng m t giá tr khi và
ch khi x và y thu c cùng m t t p con trong phân ho ch.
C u trúc d li u đáp ng yêu c u này có tên là c u trúc d
li u Union-Find (ho c Disjoint-set data structure)
Nguy n c Ngh a - B môn KHMT HBKHN
Trang 57C u trúc d li u các t p không giao nhau
( Disjoint-set Data Structures)
C u trúc d li u các t p không giao nhau
( Disjoint-set Data Structures)
Trang 58C u trúc d li u các t p không giao nhau
( Disjoint-set Data Structures)
}
Th i gian: O(h)
Nguy n c Ngh a - B môn KHMT HBKHN
Trang 59Phân tích đ ph c t p
Có th th y th i gian tính c a hàm Find(x) ph thu c vào
đ cao c a cây ch a x Trong tr ng h p cây có k đ nh và
có d ng nh m t đ ng đi thì đ cao c a cây s là k- 1.
Trang 60C u trúc d li u các t p không giao nhau
Li u có cách nào đ gi m đ cao c a các cây con?
Có m t cách th c hi n r t đ n gi n: Khi n i hai cây chúng ta s đi u ch nh con tr c a g c c a cây con có ít đ nh h n, ch không th c hi n vi c
n i m t cách tu ti n.
ghi nh n s ph n t c a m t cây chúng ta s
s d ng thêm bi n Num[v] ch a s ph n t c a cây con v i g c t i v.
u:= Find(x); // Tìm u là g c c a cây con ch a x
v:= Find(y); // Tìm u là g c c a cây con ch a y
Nguy n c Ngh a - B môn KHMT HBKHN
Trang 61CM Qui n p theo s đ nh c a cây.
T b đ suy ra các thao tác Find và Union đ c
Trang 62Phân tích th i gian tính
Thu t toán Kruskal s d ng c u trúc d li u Union-Find
Dòng 1-3 (kh i t o): O(|V|)
Dòng 4 (s p x p): O(|E| log |E|)
Dòng 6-8 (các thao tác v i phân ho ch): O(|E| log |E|)
T ng c ng: O(|E| log |E|)
Nguy n c Ngh a - B môn KHMT HBKHN
Trang 63Phát bi u bài toán
nh ngh a Cho đ th có h ng G = (V, E) v i tr ng s trên c nh c(e),
e E Gi s s, tV và P(s, t) là đ ng đi t s đ n t trên đ th
P(s,t): s = v0, v1, …., v k-1 , v k = t.
Ta g i đ dài c a đ ng đi P(s,t) là t ng tr ng s trên các cung c a nó,
t c là n u ký hi u đ dài này là (P(s,t)) , thì theo đ nh ngh a
Có 3 d ng bài toán đ ng đi ng n nh t c b n
Bài toán 1) Tìm đ ng đi ng n nh t gi a 2 đ nh cho tr c.
Bài toán 2) Tìm đ ng đi ng n nh t t m t đ nh ngu n s đ n t t c các đ nh còn l i.
Bài toán 3) Tìm đ ng đi ng n nh t gi a hai đ nh b t kì.
Các bài toán đ c d n ra theo th t t đ n gi n đ n ph c
t p h n
N u ta có thu t toán đ gi i m t trong ba bài toán thì thu ttoán đó c ng có th s d ng đ gi i hai bài toán còn l i