CH
NG 7
th và các thu t toán đ th
HCM
HAN
HP
DAN
N I DUNG
1.
th
th vô h
ng,
th có h
ng,Tính liên thông c a đ th
2. Bi u di n đ th
Bi u di n đ th b i ma tr n, Danh sách k , Danh sách c nh
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
Nguy n
c Ngh a - B môn KHMT
HBKHN
2
1.
th
th là c p (V, E), trong đó
V là t p đ nh
E là h các c p đ nh g i là các c nh
Ví d :
Các đ nh là các sân bay
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)
DBP
DAN
HAP
HCM
HAN
Nguy n
BKK
c Ngh a - B môn KHMT
NHT
VIN
HBKHN
3
Các ki u c nh
C nh có h ng (Directed edge)
C p có th
t g m hai đ nh (u,v)
nh u là đ nh đ u
nh v là đ nh cu i
Ví d , chuy n bay
C nh vô h ng (Undirected edge)
C p không có th
t g m 2 đ nh (u,v)
Ví d , tuy n bay
th có h ng (digraph)
Các c nh có h
ng
Ví d , m ng truy n tin
th vô h ng (Undirected graph/graph)
Các c nh không có h
ng
Ví d , m ng tuy n bay
Nguy n
c Ngh a - B môn KHMT
HBKHN
HAN
flight
VN 426
HCM
HAN
1135
km
HCM
4
ng d ng
M ch lôgic (Electronic circuits)
Phòng máy 1
M ch in
M ch tích h p
Phòng hành chính
M ng giao thông (Transportation
networks)
Phòng máy 2
Phòng Giáo v
M ng xa l
M ng tuy n bay
M ng máy tính (Computer
networks)
M ng c c b
Internet
Web
Tr
Ban Giám đ c
T Tin
S đ quan h th c th
(Entity-relationship diagram)
B m
Cu i
Nguy n
c Ngh a - B môn KHMT
HQG
Phòng Tuyên hu n
C s d li u (Databases)
ng
Ch H ng
5
HBKHN
Thu t ng
u mút c a c nh
U và V là các đ u mút c a c nh a
C nh k v i đ nh
a, d, và b k v i đ nh V
nh k
U
U và V là k nhau
V
e
W
X có b c 5
h và i là các c nh l p
Khuyên
h
X
d
C nh l p
b
c
B c c a đ nh
a
j
Z
i
g
f
Y
j là khuyên
n đ th : Không ch a c nh l p và khuyên
Nguy n
c Ngh a - B môn KHMT
HBKHN
6
Thu t ng
Nguy n
(ti p t c)
ng đi
Dãy các đ nh (ho c dãy các c nh), trong đó hai đ nh
liên ti p là có c nh n i:
P: s = v0, v1, ..., vk-1, vk = t,
(vi-1, vi) là c nh c a đ th , i=1, 2, ..., k.
dài c a đ ng đi là s c nh trên đ ng đi (k).
s - đ nh đ u và t - đ nh cu i c a đ ng đi P
ng đi đ n
Các đ nh trên đ ng đi là phân bi t
c Ngh a - B môn KHMT
Thu t ng
7
HBKHN
(ti p t c)
V
a
U
c
b
d
P2
P1
X
h
Z
e
W
g
f
Y
Ví d
P1= V,X,Z (dãy c nh: b, h) là đ
ng đi đ n
ng đi nh ng
P2= U,W,X,Y,W,V) (P2=c,e,g,f,d) là đ
không là đ n
Nguy n
c Ngh a - B môn KHMT
HBKHN
8
Thu t ng
(ti p)
Chu trình
ng đi g m các c nh
phân bi t có đ nh đ u trùng
đ nh cu i
Chu trình đ n
Ngo i tr đ u trùng cu i,
không còn hai đ nh nào
gi ng nhau
Ví d
Nguy n
C1= V,X,Y,W,U là CT đ n
C2=U,W,X,Y,W,V là chu trinh
không là đ n
c Ngh a - B môn KHMT
a
U
c
V
b
d
C2
X
h
e
C1
g
W
f
Z
Y
9
HBKHN
Tính ch t
Tính ch t 1
Ký hi u
Sv deg(v) = 2m
CM: m i c nh đ
cđ m2l n
Tính ch t 2
Trong đ n đ th vô h ng (đ
th không có c nh l p và
khuyên)
m n (n - 1)/2
CM: m i đ nh có b c không
quá (n - 1)
T
n
m
deg(v)
s đ nh
s c nh
b c c a đ nh v
Ví d
n=4
m=6
deg(v) = 3
ng t có nh ng c n cho
đ th có h ng
Nguy n
c Ngh a - B môn KHMT
HBKHN
10
Graph ADT
Các phép toán c b n (Basic Graph operations)
kh i t o/create (s đ nh, isDirected)
hu /destroy
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
is directed or undirected
b sung c nh / insert an edge
lo i b c nh / remove an edge
có c nh n i gi a hai đ nh / tell whether an edge exists between
two vertices
duy t các đ nh k c a m t đ nh cho tr
c / An iterator that
process all vertices adjacent to a given vertex
11
c Ngh a - B môn KHMT HBKHN
Nguy n
Các bài toán x lý đ th
Tính giá tr c a m t s đ c tr ng s c a đ th (s liên thông,
s c s , ...)
Tìm m t s t p con c nh đ c bi t (ch ng h n, c p ghép, bè,
chu trình, cây khung, ...)
Tìm m t s t p con đ nh đ c bi t (ch ng h n, ph đ nh, ph
c nh, t p đ c l p,...)
Tr l i truy v n v m t s tính ch t c a đ th (liên thông,
ph ng, ...)
Các bài toán t i u trên đ th : Cây khung nh nh t, đ ng
đi ng n nh t, lu ng c c đ i trong m ng, ...
...
Nguy n
c Ngh a - B môn KHMT
HBKHN
12
2 Bi u di n đ th
Nguy n
c Ngh a - B môn KHMT
HBKHN
13
2. Bi u di n đ th
Có nhi u cách bi u di n,
Vi 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
di n:
B nh mà cách bi u di n đó đòi h i
Th i gian c n thi t đ tr l i các truy v n th
ng xuyên
đ i v i đ th trong quá trình x lý đ th :
Ch ng h n:
Có c nh n i hai đ nh u, v ?
Li t kê các đ nh k c a đ nh v ?
Nguy n
c Ngh a - B môn KHMT
HBKHN
14
Ma tr n k (Adjacency Matrix)
n n ma tr n A.
Các đ nh đ c đánh s t 1 đ n |V| theo 1
th t nào đó.
1 nÕu (i, j ) E
A[i, j ] = aij =
A xác đ nh b i:
0 nÕu tr¸i l¹i
1
a
3
b
c
2
d4
1
2
3
4
1
0
0
0
0
2
1
0
0
0
3
1
1
0
0
4
1
0
1
0
1
3
a
b
c
d
A = AT đ i v i đ th vô h
Nguy n
c Ngh a - B môn KHMT
HBKHN
2
4
1
2
3
4
1
0
1
1
1
2
1
0
1
0
3
1
1
0
1
4
1
0
1
0
ng.
15
Ma tr n k
Chú ý v s d ng ma tr n k :
Dòng toàn không ~đ nh cô l p.
M[i, i] = 1 khuyên (self-loop)
B nh (Space)
|V |2 bits
Các thông tin b sung, ch ng h n chi phí trên c nh, c n đ c c t
gi d i d ng ma tr n.
Th i gian tr l i các truy v n
Hai đ nh i và j có k nhau? O(1)
B sung ho c lo i b c nh
O(1)
B sung đ nh:
t ng kích th c ma tr n
Li t kê các đ nh k c a v :
O(|V|) (ngay c khi v là đ nh cô l p).
Nguy n
c Ngh a - B môn KHMT
HBKHN
16
Ma tr n tr ng s
Trong tr ng h p th cú tr ng s trờn c nh, thay vỡ ma
tr n k , bi u di n th ta s d ng ma tr n tr ng s
C = c[i, j], i, j = 1, 2,..., n,
với
c(i, j ), nếu (i, j ) E
c[i, j ] =
nếu (i, j ) E,
,
trong đó 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ột
trong các giá trị sau: 0, +, -.
Nguy n
c Ngh a - B mụn KHMT
17
HBKHN
Ma tr n tr ng s
Vớ d
1
8
5
6
2
3
5
8
7
3
4
Nguy n
6
c Ngh a - B mụn KHMT
2
HBKHN
5 3 6
8
A = 6
2
7
8
18
Danh sách k (Adjacency List)
Danh sách k : V i m i đ nh v c t gi
sách các đ nh k c a nó.
Là m ng Adj g m |V| danh sách.
M i đ nh có m t danh sách.
V i m i u V, Adj[u] bao g m t t c các đ nh k c a u.
Ví d
th vô h
ng
u
v
w
v
u
w
w
u
v
x
z
y
v
z
x
th có h
ng
y
c Ngh a - B môn KHMT
a
b
b
e
c
b
c
d
t
Nguy n
danh
e
b
f
f
19
HBKHN
Bi u di n đ th b i danh sách k
Yêu c u b nh :
i v i đ th có h
ng:
T ng s ph n t trong t t c các danh sách k là
out-degree(v) = |E | (out-degree(v) – s
vV
T ng c ng b nh : (|V |+|E |)
i v i đ th vô h ng:
T ng s ph n t trong t t c các danh sách k là
degree(v) = 2|E |
vV
Nguy n
cung đi ra kh i v)
(degree(v) – s c nh k v i v)
T ng c ng b nh : (|V |+|E |)
c Ngh a - B môn KHMT
HBKHN
20
Bi u di n đ th b i danh sách k
B nh (Space):
O(|V| + |E|)
Th ng là nh h n nhi u so v i |V|2, nh t là đ i v i đ th th a
(sparse graph) – là đ th mà |E| = k |V| v i k < 10.
Th i gian tr l i các truy v n:
Thêm c nh
O(1)
Xoá c nh
Duy t qua danh sách k c a m i đ u mút.
Thêm đ nh
Ph thu c vào cài đ t.
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
hi u qu (t i h n ma tr n k )
Nguy n
c Ngh a - B môn KHMT
HBKHN
21
Danh sách c nh (Edge List)
V i m i c nh e = (u, v) c t gi
dau[e]= u
, cuoi[e] = v
N u đ th có tr ng s trên c nh, thì c n có
thêm m t bi n c t gi c[e]
ây là cách chu n b d li u cho các đ th
th c t
Nguy n
c Ngh a - B môn KHMT
HBKHN
22
Danh sách c nh
1
8
5
6
2
3
5
8
7
3
4
Nguy n
6
2
c Ngh a - B môn KHMT
e
1
2
3
4
5
6
7
8
dau[e]
1
5
4
1
1
4
2
3
cuoi[e]
5
1
5
4
2
3
3
2
c[e]
6
8
7
3
5
2
8
6
23
HBKHN
ánh giá th i gian th c hi n các thao tác
n đ nh, m c nh
đ n đ th vô h
Edge
List
Adjacency
List
Adjacency
Matrix
B nh
n+m
n+m
n2
incidentEdges(v)
m
deg(v)
n
areAdjacent (v, w)
m
min(deg(v), deg(w))
1
insertVertex(o)
1
1
n2
insertEdge(v, w, o)
1
1
1
removeVertex(v)
removeEdge(e)
m
1
deg(v)
1
n2
1
Nguy n
ng
c Ngh a - B môn KHMT
HBKHN
24
3. Các thu t toán duy t đ th
Graph Searching
Nguy n
c Ngh a - B môn KHMT
HBKHN
25
Duy t đ th
Ta g i duy t đ th (Graph Searching ho c Graph Traversal)
là vi c duy t qua m i đ nh và m i c nh c a đ th .
ng d ng:
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:
Nguy 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)
c Ngh a - B môn KHMT
HBKHN
26
Ýt
ng chung
Trong quá trình th c hi n thu t toán, m i đ nh
ba tr ng thái:
m t trong
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
kh o sát các đ nh đ t t i đ c t v:
Nguy n
Tho t đ u m i đ nh đ u có màu tr ng (ch a th m - not visited).
nh đã đ c th m s chuy n thành màu xám (tr thành đã th m
nh ng ch a duy t xong).
Khi t t c các đ nh k c a m t đ nh v là đã đ c th m, đ nh v s có
màu đen (đã duy t xong).
c Ngh a - B môn KHMT
HBKHN
27
Thu t toán tìm ki m theo chi u r ng
(BFS algorithm)
Nguy n
c Ngh a - B môn KHMT
HBKHN
28
BFS
Input:
th G = (V, E), có h
Output:
ng ho c vô h
ng, và đ nh xu t phát sV.
V im ivV
d[v] = kho ng cách t s đ n v.
[v] – đ nh đi tr c v trong đ ng đi ng n nh t t s đ n v.
Xây d ng cây BFS g c t i s ch a t t c các đ nh đ t đ n đ
c t s.
Ta s s d ng màu đ ghi nh n tr ng thái c a đ nh trong quá trình duy t:
Tr ng (White) – ch a th m.
Xám (Gray) – đã th m nh ng ch a duy t xong.
en (Black) – đã duy t xong
Nguy n
c Ngh a - B môn KHMT
29
HBKHN
Tìm ki m theo chi u r ng t
đ nh s
BFS_Visit(s)
1. for u V – {s}
2
do color[u] white
3
d[u]
4
[u] NULL
5 color[s] gray
6 d[s] 0
7
[s] NULL
8 Q
10 while Q
11 do u dequeue(Q)
12
for v Adj[u]
13
do if color[v] = white
14
then color[v] gray
15
d[v] d[u] + 1
16
[v] u
17
enqueue(Q,v)
18
color[u] black
9 enqueue(Q,s)
Nguy n
c Ngh a - B môn KHMT
HBKHN
30
Thu t toán tìm ki m theo chi u r ng trên đ th G
BFS(G)
1. for u V
2.
do color[u] white
3.
[u] NULL
5. for u V
6.
do if color[u] = white
7.
Nguy n
then BFS-Visit(u)
c Ngh a - B môn KHMT
31
HBKHN
Ví d : Th c hi n BFS(A)
A
B
J
F
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
D
HBKHN
32
Q = {A}
A
B
J
F
I
C
H
E
Nguy n
D
c Ngh a - B môn KHMT
33
HBKHN
Q = {B,F}
A
B
J
F
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
D
HBKHN
34
Q = {F,C,J}
A
B
J
F
I
C
H
E
Nguy n
D
c Ngh a - B môn KHMT
35
HBKHN
Q = {C,J,E,I}
A
F
B
J
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
D
HBKHN
36
Q = {J,E,I,H}
A
B
J
F
I
C
H
E
Nguy n
D
c Ngh a - B môn KHMT
37
HBKHN
Q = {E,I,H}
A
B
J
F
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
D
HBKHN
38
Q = {I,H}
A
B
J
F
I
C
H
E
Nguy n
D
c Ngh a - B môn KHMT
39
HBKHN
Q = {H}
A
B
J
F
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
D
HBKHN
40
Q = {}
K t thúc BFS(A)
A
B
J
F
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
D
HBKHN
41
Tính đúng đ n c a BFS
nh lý:
•
•
•
Nguy n
BFS_Visit(s) cho phép đ n th m t t c các đ nh
vV đ t đ n đ c t s.
Khi thu t toán k t thúc d[v] cho ta đ dài đ
đi ng n nh t (theo s c nh) t s đ n v.
ng
V i m i đ nh v đ t đ n đ c t s, [v] cho ta
đ nh đi tr c đ nh v trong đ ng đi ng n nh t t
s đ n v.
c Ngh a - B môn KHMT
HBKHN
42
Cây tìm ki m theo chi u r ng (Breadth-first Tree)
i v i đ th G = (V, E) v i đ nh xu t phát s, ký hi u G = (V , E) là
đ th v i
V ={vV : [v] NULL}{s}
E ={([v],v)E : v V - {s}}
th G đ
c g i là cây BFS(s):
V ch a t t c các đ nh đ t đ n đ
v i m i vV , đ
đ n v trên G.
ng đi t s đ n v trên G là đ
ng đi ng n nh t t s
c g i là các c nh c a cây.
Các c nh trong E đ
|E | = |V | - 1.
Nguy n
c t s và
c Ngh a - B môn KHMT
43
HBKHN
Ví d : Cây BFS(A)
A
B
J
F
I
C
H
E
Nguy n
c Ngh a - B môn KHMT
HBKHN
44
ph c t p c a BFS
Thu t toán lo i b m i đ nh kh i hàng đ i đúng 1 l n, do đó
thao tác DeQueue th c hi n đúng |V| l n.
V i m i đ nh, thu t toán duy t qua t t c các đ nh k c a nó
và th i gian x lý m i đ nh k nh v y là h ng s . Nh v y
th i gian th c hi n câu l nh if trong vòng l p while là b ng
h ng s nhân v i s c nh k v i đ nh đang xét.
Do đó t ng th i gian th c hi n vi c duy t qua t t c các đ nh
là b ng m t h ng s nhân v i s c nh |E|.
Th i gian t ng c ng: O(|V|) + O(|E|) = O(|V|+|E|), hay
O(|V|2)
Nguy n
c Ngh a - B môn KHMT
HBKHN
45
Thu t toán tìm ki m theo chi u sâu
(DFS)
Nguy n
c Ngh a - B môn KHMT
HBKHN
46
Tì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)
[v] : đ nh t đó ta đ n th m đ nh v.
R ng tìm ki m theo chi u sâu (g i t t là r ng DFS - Forest
of depth-first trees):
Nguy n
G = (V,E ),
E = {( [v],v): vV và [v] ≠ null}.
c Ngh a - B môn KHMT
HBKHN
47
Thu t toán tìm ki m theo chi u sâu
b t đ u t đ nh u
DFS-Visit(u)
color[u] GRAY
time time + 1
d[u] time
for v Adj[u]
do if color[v] = WHITE
then [v] u
DFS-Visit(v)
color[u] BLACK
f[u] time time + 1
Nguy n
c Ngh a - B môn KHMT
HBKHN
48
Thu t toán tìm ki m theo chi u sâu trên đ th G
DFS(G)
1. for u V[G]
2.
do color[u] white
3.
[u] NULL
4. time 0
5. for u V[G]
6.
do if color[u] = white
7.
then DFS-Visit(u)
Nguy n
c Ngh a - B môn KHMT
49
HBKHN
Ví d
Th c hi n DFS trên đ th sau:
u
v
w
1/8
2/7
9/12
4/5
3/6
10/11
x
y
z
DFS(G) s g i th c hi n DFS(u) và DFS(w).
C p s vi t trong các đ nh v là d[v]/f[v].
Các c nh đ m là các c nh c a r ng tìm ki m.
Nguy n
c Ngh a - B môn KHMT
HBKHN
50