Tải bản đầy đủ (.pdf) (70 trang)

Bài giảng cấu trúc dữ liệu thuật toán chương 7 nguyễn đức nghĩa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.66 MB, 70 trang )

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

vV





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 |

vV



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 sV.

V im ivV
 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
vV đ 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 ={vV : [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 vV , đ
đ 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): vV 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


×