1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

70 308 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 70
Dung lượng 28,85 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

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 7

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

Trang 8

 Dòng toàn không ~đ nh cô l p.

 M[i, i] = 1  khuyên (self-loop)

Trang 9

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ộ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 10

w 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 12

3

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 16

Thu 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 17

J 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 18

J 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 19

J 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 20

J

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 21

J

H

C F

Q = {} K t thúc BFS(A)

41 Nguy n c Ngh a - B môn KHMT HBKHN

Trang 22

Cây tìm ki m theo chi u r ng (Breadth-first Tree)

E

Trang 24

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)

f[u]  time  time + 1

Trang 25

Thu t toán tìm ki m theo chi u sâu trên đ th G

Trang 28

4/5 3/6

Trang 31

4/5 3/6

Trang 32

Cá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 33

C 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

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

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 35

Nh 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 uv, 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 vu, 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 36

4 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 37

Bà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

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 38

Bà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

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 39

Thu 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 uv đ c duy t t đ nh u v t tiên v c a nó, vì th (u, v) là c nh

ng c.

Trang 40

Bà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 41

Thu 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 uV 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 42

Ví 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 43

Thu 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 44

Thu 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 45

Thu 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 46

Thu 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 47

Thu 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 48

E* = {(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 49

Thu 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 51

2

Trang 52

Thu 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 53

Cà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 54

Ki m tra: T p E T  {e} có ch a chu trình hay không?

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 55

C 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 56

C 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 57

C 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 58

C 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 59

Phâ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à

d ng nh m t đ ng đi thì đ cao c a cây s là k- 1.

Trang 60

C 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 61

CM Qui n p theo s đ nh c a cây.

T b đ suy ra các thao tác Find và Union đ c

Trang 62

Phâ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 63

Phá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, tV 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

Ngày đăng: 03/12/2015, 13:09

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm