37
1 Chương 5: Chương 5: Giải thuật trên đồ Giải thuật trên đồ thị thị 5.1. 5.1. Cấu trúc lưu trữ đồ thị b Cấu trúc lưu trữ đồ thị b ằng danh sách kề ằng danh sách kề 5.2. 5.2. Tìm kiếm trên đồ thị Tìm kiếm trên đồ thị 5.3. 5.3. Cây bao trùm ngắn nhất Cây bao trùm ngắn nhất 5.4. 5.4. Sắp xếp tôpô Sắp xếp tôpô

Chg 6 do thi

Embed Size (px)

Citation preview

Page 1: Chg 6 do thi

1

Chương 5: Chương 5: Giải thuật trên đồ thịGiải thuật trên đồ thị

5.1. 5.1. Cấu trúc lưu trữ đồ thị bằng dCấu trúc lưu trữ đồ thị bằng danh sách kềanh sách kề

5.2. 5.2. Tìm kiếm trên đồ thịTìm kiếm trên đồ thị

5.3. 5.3. Cây bao trùm ngắn nhấtCây bao trùm ngắn nhất

5.4. 5.4. Sắp xếp tôpôSắp xếp tôpô

Page 2: Chg 6 do thi

22

5.1. Lưu trữ bằng danh sách kề5.1. Lưu trữ bằng danh sách kề Danh sách các đỉnh vDanh sách các đỉnh v11, v, v22,..., v,..., vnn

Danh sách kề của mỗi đỉnh Adj(vDanh sách kề của mỗi đỉnh Adj(vii) , i=1..n) , i=1..n

AD

CB

E

F

A B C ED

B A C

C A B E F

D A F

E A C

F C D

Page 3: Chg 6 do thi

33

5.2. Tìm kiếm trên đồ thị5.2. Tìm kiếm trên đồ thị Tìm kiếm ưu tiên chiều sâuTìm kiếm ưu tiên chiều sâu

Tìm kiếm ưu tiên chiều rộngTìm kiếm ưu tiên chiều rộng Tìm đường đi ngắn nhấtTìm đường đi ngắn nhất

Kí hiệu: V(G)=tập các đỉnh của G, E(G)=tập các Kí hiệu: V(G)=tập các đỉnh của G, E(G)=tập các cạnh của G.cạnh của G.

Hàm Color(u) chỉ trạng thái các đỉnh trong quá Hàm Color(u) chỉ trạng thái các đỉnh trong quá trình tìm kiếm. Color(u) nhận một trong 3 giá trị : trình tìm kiếm. Color(u) nhận một trong 3 giá trị : WHITE, GRAY, BLACK. Lúc đầu, Color(u)=WHITE WHITE, GRAY, BLACK. Lúc đầu, Color(u)=WHITE nghĩa là chưa được xét, với những đỉnh u bắt đầu nghĩa là chưa được xét, với những đỉnh u bắt đầu xét, Color(u)=GRAY, khi u đã xét xong xét, Color(u)=GRAY, khi u đã xét xong Color(u)=BLACKColor(u)=BLACK

Page 4: Chg 6 do thi

44

Nội dung bài toán tìm kiếmNội dung bài toán tìm kiếm Cho đồ thị G=(V,E) và một đỉnh s. Xuất phát từ Cho đồ thị G=(V,E) và một đỉnh s. Xuất phát từ

đỉnh s, hãy duyệt qua tất cả các đỉnh của đồ thịđỉnh s, hãy duyệt qua tất cả các đỉnh của đồ thị

Kí hiệu: Kí hiệu: V(G)=tập các đỉnh của G, E(G)=tập các cạnh của V(G)=tập các đỉnh của G, E(G)=tập các cạnh của

G.G. Hàm Color(u) chỉ trạng thái các đỉnh trong quá Hàm Color(u) chỉ trạng thái các đỉnh trong quá

trình tìm kiếm. Color(u) nhận một trong 3 giá trị : trình tìm kiếm. Color(u) nhận một trong 3 giá trị : WHITE, GRAY, BLACK. Lúc đầu, Color(u)=WHITE WHITE, GRAY, BLACK. Lúc đầu, Color(u)=WHITE nghĩa là chưa được xét, với những đỉnh u bắt đầu nghĩa là chưa được xét, với những đỉnh u bắt đầu xét, Color(u)=GRAY, khi u đã xét xong xét, Color(u)=GRAY, khi u đã xét xong Color(u)=BLACKColor(u)=BLACK

Page 5: Chg 6 do thi

55

5.2.1. Tìm kiếm ưu tiên chiều sâu (DFS)5.2.1. Tìm kiếm ưu tiên chiều sâu (DFS)

Procedure DFS(G)Procedure DFS(G) {Khởi tạo: {Khởi tạo: Mọi đỉnh u chưa được xét Mọi đỉnh u chưa được xét }}1.1. for each u for each u V[G] V[G] 2.2.     do color[u]:= do color[u]:= WHITEWHITE ; ;3.3. for each đỉnh u for each đỉnh u   V[G]   V[G] 4.4. do if color[u] = do if color[u] = WHITEWHITE5.5.             then then DFS-VisitDFS-Visit (u)   (u)  

Procedure DFS-Visit (u)Procedure DFS-Visit (u)1.1. color[u] := color[u] := GRAYGRAY  2.2. for each v for each v Adj[u] do Adj[u] do3.3. if color[v] =if color[v] =WHITEWHITE4.4.       then   DFS-Visit (v) then   DFS-Visit (v) 5.5. color[u]:= color[u]:= BLACKBLACK  

Thủ tục đệ quy:Thủ tục đệ quy:

Page 6: Chg 6 do thi

66

Tìm kiếm ưu tiên chiều sâu (DFS)Tìm kiếm ưu tiên chiều sâu (DFS)

Thủ tục không đệ quy: Thủ tục không đệ quy:

Procedure DFS(G,s) Procedure DFS(G,s) 1.1.For each u in V[G]  do color[u]:= WHITE ;For each u in V[G]  do color[u]:= WHITE ;2.2.color[s]:=GRAY;color[s]:=GRAY;3.3.Push(s,Stack)Push(s,Stack)4.4.While Stack # While Stack # 5.5. u:= Pop(Stack);u:= Pop(Stack);6.6. if có vif có v Adj(u) and color(v)=WHITE then Adj(u) and color(v)=WHITE then 7.7. color(v):=GRAY ; Push(v,Stack); color(v):=GRAY ; Push(v,Stack); 8.8. else color(u):=BLACK;else color(u):=BLACK;9.9.end;end;CHÚ Ý:CHÚ Ý: Hàm Push(v,Stack) đặt phần tử v vào đỉnh ngăn xếp StackHàm Push(v,Stack) đặt phần tử v vào đỉnh ngăn xếp Stack Hàm Pop(Stack) lấy phần tử đửng ở đỉnh ngăn xếp ra khỏi Hàm Pop(Stack) lấy phần tử đửng ở đỉnh ngăn xếp ra khỏi

ngăn xếpngăn xếp

Page 7: Chg 6 do thi

77

Ví dụ:Ví dụ:DFS(A)DFS(A)

A D

CB

E

F

StackStack(Sám)(Sám)

vv Adj(v)Adj(v)TrắngTrắng

Đỉnh trắngĐỉnh trắng Đỉnh Đỉnh đenđen

AA AA B,C,D,EB,C,D,E B,C,D,E,FB,C,D,E,F

A,BA,B BB CC C,D,E,FC,D,E,F

A,B,CA,B,C CC E,FE,F D,E,FD,E,F

A,B,C,EA,B,C,E EE D,FD,F EE

A,B,CA,B,C CC FF DD

A,B,C,FA,B,C,F FF DD

A,B,C,F,A,B,C,F,DD

DD DD

A,B,C,FA,B,C,F FF FF

A,B,CA,B,C CC CC

A,BA,B BB BB

AA AA AA

RỗngRỗng

Page 8: Chg 6 do thi

88

Ví dụ: DFS(A) (tiếp)Ví dụ: DFS(A) (tiếp)

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

Page 9: Chg 6 do thi

99

Ví dụ: DFS(A) (tiếp)Ví dụ: DFS(A) (tiếp)

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

A D

CB

E

F

Page 10: Chg 6 do thi

1010

5.3.2. Tìm kiếm ưu tiên chiều rộng (BFS)5.3.2. Tìm kiếm ưu tiên chiều rộng (BFS) Procedure BFS(G,s)Procedure BFS(G,s) 1.1. for each u for each u V[G] do V[G] do 2.2. color[u]:= WHITE;Prev(u)=Null; color[u]:= WHITE;Prev(u)=Null;

color[s]:=GRAY;color[s]:=GRAY;3.3. Q:= {s}Q:= {s}4.4. While Q # While Q # do do 5.5. u:= Head(Q); /u:= Head(Q); /*lấy u là phần tử đứng đầu *lấy u là phần tử đứng đầu

hàng đợi để xét*hàng đợi để xét*//6.6. For each v For each v Adj(u) Adj(u) 7.7. if color(v)= WHITE then if color(v)= WHITE then 8.8. color(v):=GRAY; Prev(v):= u;color(v):=GRAY; Prev(v):= u;9.9. ENQUEUE(Q,vENQUEUE(Q,v);/*đặt v vào cuối hàng đợi*/);/*đặt v vào cuối hàng đợi*/10.10. DeQueue(Q,u);DeQueue(Q,u);/* Gỡ u khỏi hàng đợi *//* Gỡ u khỏi hàng đợi */11.11. Color(u):= BLACK;Color(u):= BLACK;

Page 11: Chg 6 do thi

1111

Ví dụ:Ví dụ:BFS(A)BFS(A)

A D

CB

E

F

QueueQueue vv Adj(v)Adj(v)TrắngTrắng

Đỉnh trắngĐỉnh trắng Đỉnh Đỉnh đenđen

AA AA B,C,D,EB,C,D,E B,C,D,E,FB,C,D,E,F AA

B,C,D,EB,C,D,E BB FF BB

C,D,EC,D,E CC FF FF CC

D,E,FD,E,F DD DD

E,FE,F EE EE

FF FF FF

RỗngRỗng

Page 12: Chg 6 do thi

1212

Q=B,C,D,Q=B,C,D,EE

A D

CB

E

F

A D

CB

E

F

Ví dụ:Ví dụ:BFS(A)BFS(A)

Q=C,D,EQ=C,D,E

A D

CB

E

F

Q=E,FQ=E,F

A D

CB

E

F

A D

CB

E

F

Q=D,E,FQ=D,E,F

Q=FQ=F

A D

CB

E

F

A D

CB

E

F

Q=RỗngQ=Rỗng

Page 13: Chg 6 do thi

1313

5.2.3. Tìm đường đi ngắn nhất5.2.3. Tìm đường đi ngắn nhất

INPUT:INPUT: G=<V,E> G=<V,E> Hàm trọng số W: E Hàm trọng số W: E RR++

Đỉnh s Đỉnh s V V

OUTPUT:OUTPUT: Đường đi (độ dài) ngắn nhất từ đỉnh s Đường đi (độ dài) ngắn nhất từ đỉnh s

tới tất cả các đỉnh trong Gtới tất cả các đỉnh trong G

Page 14: Chg 6 do thi

1414

Giải thuật DIJSKTRAGiải thuật DIJSKTRA

Tổ chức dữ liệuTổ chức dữ liệu

Với mỗi uVới mỗi u V(G), đặt V(G), đặt LL(u) là độ dài đường đi (u) là độ dài đường đi

ngắn nhất từ s đến u, ngắn nhất từ s đến u, PrePre(u) là đỉnh đứng (u) là đỉnh đứng

trước đỉnh u trên đường đi ngắn nhất từ s trước đỉnh u trên đường đi ngắn nhất từ s

đến u.đến u. Gọi S là tập các đỉnh Gọi S là tập các đỉnh uu đã được tính xong giá đã được tính xong giá

trị hàm L(u);trị hàm L(u); Gọi Q là hàng đợi có ưu tiên gồm các đỉnh Gọi Q là hàng đợi có ưu tiên gồm các đỉnh

chưa tính xong L(u);chưa tính xong L(u);

Page 15: Chg 6 do thi

1515

Giải thuật DIJSKTRA- ngôn ngữ tự nhiênGiải thuật DIJSKTRA- ngôn ngữ tự nhiên

1. {Khởi tạo}1. {Khởi tạo} Với mọi vVới mọi vV(G) đặt V(G) đặt LL(v):= +(v):= +, , PrePre(u)=Null ; (u)=Null ; LL(s):=0; (s):=0;

QQ:= {} (rỗng):= {} (rỗng)

2. 2. {Lặp: Mỗi bước tính xong {Lặp: Mỗi bước tính xong LL(u) của một đỉnh u}(u) của một đỉnh u} 2.1. Nếu mọi đỉnh của G đã nằm trong 2.1. Nếu mọi đỉnh của G đã nằm trong QQ thì dừng. thì dừng. 2.2. Chọn đỉnh u có 2.2. Chọn đỉnh u có LL(u) nhỏ nhất, chưa nằm trong (u) nhỏ nhất, chưa nằm trong SS bổ bổ

sung vào sung vào SS Với mọi v Với mọi v Adj(u) { Adj(u) {tính lại L(v)tính lại L(v)} } nếu nếu LL(v)> (v)> LL(u)+(u)+WW(u,v) thì đặt lại(u,v) thì đặt lại LL(v):= (v):= LL(u)+(u)+WW(u,v) ; Pre(v):=u;(u,v) ; Pre(v):=u; Quay lại 2.1Quay lại 2.1

Page 16: Chg 6 do thi

1616

Giả mã giải thuật DIJSKTRAGiả mã giải thuật DIJSKTRA

Giả mã- Khởi tạoGiả mã- Khởi tạo

For each v in V(G) do For each v in V(G) do

L(v):= +L(v):= +; Pre(v):= Null; ; Pre(v):= Null; Q:=V(G); L(s)= 0; Q:=V(G); L(s)= 0;

Chú giải:Chú giải:

Hàm Q là hàng đợi ưu tiên lúc đầu gồm tất cả các Hàm Q là hàng đợi ưu tiên lúc đầu gồm tất cả các đỉnh của Gđỉnh của G

Page 17: Chg 6 do thi

1717

Giải thuật DIJSKTRAGiải thuật DIJSKTRA Giả mã- Vòng lặpGiả mã- Vòng lặp

While Q # While Q # do do

u:=ExtrackMin(Q);u:=ExtrackMin(Q);

S:=S U {u}S:=S U {u}

For each v in Adj(u) doFor each v in Adj(u) do

if L(v)> L(u)+ W(u,v) if L(v)> L(u)+ W(u,v)

then L(v):= L(u)+ W(u,v); then L(v):= L(u)+ W(u,v); Chú ý:Chú ý:

Q là hàng đợi có ưu tiên với tiêu chuẩn Disk(u) nhỏ Q là hàng đợi có ưu tiên với tiêu chuẩn Disk(u) nhỏ nhất;nhất;

ExtrackMin(Q)ExtrackMin(Q) là thủ tục lấy phần tử có giá trị là thủ tục lấy phần tử có giá trị hàm Disk(u) nhỏ nhất khỏi Qhàm Disk(u) nhỏ nhất khỏi Q

Page 18: Chg 6 do thi

1818

Ví dụ: Dùng giải thuật DIJSKTRA Ví dụ: Dùng giải thuật DIJSKTRA Tìm đường đi ngắn nhất từ A tới tất cả Tìm đường đi ngắn nhất từ A tới tất cả các đỉnh của G.các đỉnh của G.Giá trị hàm L(u) qua các bướcGiá trị hàm L(u) qua các bước

B

A

C

D

E

F

G

32

4

4

1

3

94

5

8

39

Bổ sung vào SBổ sung vào S AA BB CC DD EE FF GG

00

AA 00 33 44 99 22

FF 00 33 33 99 22

BB 00 33 33 77 88 22

CC 00 33 33 77 88 22 66

GG 00 33 33 77 88 22 66

DD 00 33 33 77 88 22 66

EE 00 33 33 77 88 22 66

Page 19: Chg 6 do thi

1919

Mô tả từng bướcMô tả từng bướcB

A

C

D

E

F

G

32

4

4

1

3

94

5

8

39

Bổ sung Bổ sung vào vào SS

Tính lại L(u)Tính lại L(u) Hàm Hàm (u)(u)

AA L(B)=0+3=3, L(C)=0+4=4L(B)=0+3=3, L(C)=0+4=4

L(D)=0+9=9, L(F)=0+2=2L(D)=0+9=9, L(F)=0+2=2(B)=A, (B)=A, (C)=A,..(C)=A,..

FF L(C)=2+1=3, L(G)=2+4=6,L(C)=2+1=3, L(G)=2+4=6,

L(D)=4+3=7L(D)=4+3=7

BB L(E)=3+5=8L(E)=3+5=8

..........

Page 20: Chg 6 do thi

2020

6.3. Tìm cây bao trùm nhỏ nhất6.3. Tìm cây bao trùm nhỏ nhất

Giải thuật PrimGiải thuật Prim Giải thuật KruskalGiải thuật Kruskal

INPUT: INPUT: G=<V,E> liên thông, n đỉnh, m cạnhG=<V,E> liên thông, n đỉnh, m cạnh Hàm trọng số Hàm trọng số : E : E R R++

OUTPUT:OUTPUT: T=<V,E’> cây bao trùm nhỏ nhấtT=<V,E’> cây bao trùm nhỏ nhất

Page 21: Chg 6 do thi

2121

Giải thuật PrimGiải thuật Prim

Mô tả bằng ngôn ngữ tự nhiênMô tả bằng ngôn ngữ tự nhiên/*Khởi tạo: mọi đỉnh chưa xét*//*Khởi tạo: mọi đỉnh chưa xét*/V’:={s}, E’={} (rỗng); n’=1; V’:={s}, E’={} (rỗng); n’=1; While n’ < n doWhile n’ < n do Begin Begin Chọn cạnh (u,v) với u Chọn cạnh (u,v) với u V’, v V’, v V-V’ có V-V’ có (u,v) nhỏ (u,v) nhỏ

nhất nhất V’:=V’ V’:=V’ {v} ; E’:= E’ {v} ; E’:= E’ {(u,v)} ; {(u,v)} ; n’:=n’+1;n’:=n’+1; End;End;Ghi chú: Để lập trình cần dùng một Cấu trúc đống Ghi chú: Để lập trình cần dùng một Cấu trúc đống

cực tiểu và một hàng đợi có ưu tiêncực tiểu và một hàng đợi có ưu tiên

Page 22: Chg 6 do thi

2222

Giả mã Giải thuật PRIMGiả mã Giải thuật PRIM Procedure PRIM(G,w,r);Procedure PRIM(G,w,r);

1.1. Q:=V(G)Q:=V(G)

2.2. For each u in Q do Key(u):= +For each u in Q do Key(u):= +;;3.3. Key(r):=0;Pre(r):=Null;Key(r):=0;Pre(r):=Null;

4.4. While Q # While Q # do do

5.5. u:= Extract(Q);u:= Extract(Q);

6.6. for each v in Adj(u) dofor each v in Adj(u) do

7.7. if v if v Q and Key(v) < w(u,v) thenQ and Key(v) < w(u,v) then

8.8. Key(v):= w(u,v); Pre(v):=u; Key(v):= w(u,v); Pre(v):=u; Ghi chú: Ghi chú: Q là một cấu trúc hàng đợi có ưu tiên theo tiêu chuẩn giá trị Q là một cấu trúc hàng đợi có ưu tiên theo tiêu chuẩn giá trị

hàm Key(u) nhỏ nhất;hàm Key(u) nhỏ nhất; Thủ tục Extract(Q)lấy phần đỉnh có Key(u) nhỏ nhất khỏi Q;Thủ tục Extract(Q)lấy phần đỉnh có Key(u) nhỏ nhất khỏi Q;

Page 23: Chg 6 do thi

2323

Ví dụ: Giải thuật PRIMVí dụ: Giải thuật PRIM

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

11

9

Bổ sung loại bỏ Bổ sung loại bỏ cạnh đươc xétcạnh đươc xét

Bổ sung Bổ sung cạnhcạnh

Bổ Bổ sung sung đỉnhđỉnh

AA

AB,AC,AD,AFAB,AC,AD,AF ABAB BB

BE,BDBE,BD AFAF FF

FC,FGFC,FG FGFG GG

GC,GD,GEGC,GD,GE ACAC CC

CDCD CDCD DD

GEGE EE

Đủ 7 đỉnhĐủ 7 đỉnh

Page 24: Chg 6 do thi

2424

Giải thuật PRIM (tiếp)Giải thuật PRIM (tiếp)

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

119

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

119

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

119

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

119

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

119

B

A

C

D

E

F

G

36

7

4

10

5

912

9

8

119

Page 25: Chg 6 do thi

2525

Đặc trưng của giải thuật PRIMĐặc trưng của giải thuật PRIM

Trong quá trình xây dựng , T luôn là Trong quá trình xây dựng , T luôn là một cây con của G. Khi T chứa tất một cây con của G. Khi T chứa tất cả các đỉnh của G, T trở thành cây cả các đỉnh của G, T trở thành cây bao trùm của Gbao trùm của G

Page 26: Chg 6 do thi

2626

Giải thuật KRUSKALGiải thuật KRUSKAL

Mô tả bằng ngôn ngữ tự nhiênMô tả bằng ngôn ngữ tự nhiênV’:={}, E’={} (rỗng); m’=0; V’:={}, E’={} (rỗng); m’=0; While m’ < n-1 doWhile m’ < n-1 do Begin Begin Chọn cạnh (u,v) có Chọn cạnh (u,v) có (u,v) nhỏ nhất sao (u,v) nhỏ nhất sao

cho khi thêm vào E’ thì T không có chu cho khi thêm vào E’ thì T không có chu trình trình

E’:= E’ E’:= E’ {(u,v)} ; m’:=m’+1; {(u,v)} ; m’:=m’+1;End;End;

Page 27: Chg 6 do thi

2727

Giả mã giải thuật KRUSKALGiả mã giải thuật KRUSKAL Procedure KRUSCALProcedure KRUSCAL1.1. A:= A:= 2.2. For each u in V(G) do Make-Set(u);For each u in V(G) do Make-Set(u);3.3. Sắp xếp các cạnh của E(G) theo trong số Sắp xếp các cạnh của E(G) theo trong số

không giảm w;không giảm w;4.4. For each (u,v) in E(G)For each (u,v) in E(G)5.5. if Find-Set(u)<> Find-Set(v) thenif Find-Set(u)<> Find-Set(v) then6.6. A:= A U (u,v);A:= A U (u,v);7.7. Union(u,v);Union(u,v);Chú ý:Chú ý: A là rừng các cây trong quá trình xây dựngA là rừng các cây trong quá trình xây dựng Make_Set(u) là thủ tục tạo một tập chỉ gồm một phần tử u;Make_Set(u) là thủ tục tạo một tập chỉ gồm một phần tử u; Hàm File-Set(u) tìm tập hợp có chứa phần tử uHàm File-Set(u) tìm tập hợp có chứa phần tử u Thủ tục Union(u,v) thực hiện phép hợp hai tập chứa u và v.Thủ tục Union(u,v) thực hiện phép hợp hai tập chứa u và v.

Page 28: Chg 6 do thi

2828

Giải thuật Giải thuật KruskalKruskal- Ví dụ- Ví dụ

Cạnh xétCạnh xét Các cây trong rừngCác cây trong rừng ChọnChọn

AB(3)AB(3) {A},{B},{C},{D},{E}, {F},{A},{B},{C},{D},{E}, {F},{G}{G}

ABAB

AD(4)AD(4) {A,B},{A,B},{D}{D},,{C},{E},{F}, {G}{C},{E},{F}, {G} ADAD

FG(4)FG(4) {A,B,D}{A,B,D}, {C},{E},{F},{G}, {C},{E},{F},{G} FGFG

BD(5)BD(5) {A,B,D}, {C},{E},{F,G}{A,B,D}, {C},{E},{F,G} ----

CF(6)CF(6) {A,B,D}, {C},{E},{F,G}{A,B,D}, {C},{E},{F,G} CFCF

AF(6)AF(6) {A,B,D}, {E},{A,B,D}, {E},{C,F,G}{C,F,G} AFAF

AC(7)AC(7) {A,B,D,C,F,G}, {A,B,D,C,F,G}, {E}{E} --------

DG(8)DG(8) {A,B,D,C,F,G}, {E}{A,B,D,C,F,G}, {E} --------

EG(8)EG(8) {A,B,D,C,F,G}, {E}{A,B,D,C,F,G}, {E} EGEG

DC(9)DC(9) {A,B,D,C,F,G,E}{A,B,D,C,F,G,E} ----

BE(9)BE(9) {A,B,D,C,F,G,E}{A,B,D,C,F,G,E} ----

B

A

C

D

E

F

G

36

7

4

6

9

45

9

8

8

Page 29: Chg 6 do thi

2929

Giải thuật KRUSKAL: Ví dụGiải thuật KRUSKAL: Ví dụ

Trong quá Trong quá trình xây trình xây dựng T luôn dựng T luôn không có chu không có chu trình nên là trình nên là một rừngmột rừng

B

A

C

D

E

F

G

3

6

7

4

6

9

45

9

8

8

Page 30: Chg 6 do thi

3030

Đặc điểm của giải thuật Đặc điểm của giải thuật KRUSKALKRUSKAL

Trong quá trình xây dựng T có là cây Trong quá trình xây dựng T có là cây không?không?

Trong quá trình xây dựng T luôn Trong quá trình xây dựng T luôn không có chu trình nên là một rừng, không có chu trình nên là một rừng, có thể không là một câycó thể không là một cây

Khi nào một cạnh (u,v) tạo thành một Khi nào một cạnh (u,v) tạo thành một chu trình với các cạnh đã có trong T ?chu trình với các cạnh đã có trong T ?

Khi hai đầu mút u, v thuộc cùng một Khi hai đầu mút u, v thuộc cùng một cây của T cây của T

Page 31: Chg 6 do thi

3131

6.4. Sắp xếp tô pô6.4. Sắp xếp tô pô

Bài toán: Cho một đồ thị có hướng, hãy Bài toán: Cho một đồ thị có hướng, hãy xếp các đỉnh trên một đường thẳng sao xếp các đỉnh trên một đường thẳng sao cho các cạnh luôn hướng từ trái sang phảicho các cạnh luôn hướng từ trái sang phải

B

A

C

FE

D

BA C FED

Page 32: Chg 6 do thi

3232

Giải thuật sắp xếp tôpôGiải thuật sắp xếp tôpô

Ngôn ngữ tự nhiên mô tả thuật Ngôn ngữ tự nhiên mô tả thuật toán tìm sắp xếp tôpô của G=(V,E) toán tìm sắp xếp tôpô của G=(V,E) như sau:như sau:

1.1. Nếu mọi đỉnh của G đều có bậc vào Nếu mọi đỉnh của G đều có bậc vào >0 thì G không có sắp xếp tôpô.>0 thì G không có sắp xếp tôpô.

2.2. Nếu v Nếu v V(G) có bậc vào bằng 0 V(G) có bậc vào bằng 0 (không có cạnh đi vào) thì nó đặt nó (không có cạnh đi vào) thì nó đặt nó ở đầu danh sách, xóa v và các cạnh ở đầu danh sách, xóa v và các cạnh xuất phát từ v khỏi G được G’. Tiếp xuất phát từ v khỏi G được G’. Tiếp tục làm như trên với G’ . tục làm như trên với G’ .

Page 33: Chg 6 do thi

3333

Sắp xếp tôpô – Ví dụSắp xếp tôpô – Ví dụ

A

B

A

C

FE

D

B

F

C

E

DB

F

C

E

D

D

F

C

E

C

FE E FF

Page 34: Chg 6 do thi

3434

Tìm cây bao trùm theo chiều sâuTìm cây bao trùm theo chiều sâu

1. Chọn đỉnh bất kỳ 1. Chọn đỉnh bất kỳ vv00 cho vào cây cho vào cây TT 2. Xét đỉnh 2. Xét đỉnh vv mới cho vào mới cho vào T T và chưa xét xong:và chưa xét xong: Nếu có đỉnh u kề với v và chưa nằm trong Nếu có đỉnh u kề với v và chưa nằm trong

T thì bổ xung cạnh (v,u) và đỉnh u vào T; thay T thì bổ xung cạnh (v,u) và đỉnh u vào T; thay v bằng u để tiếp tục xét đỉnh u như với v; v bằng u để tiếp tục xét đỉnh u như với v;

Nếu tất cả các đỉnh kề với v đều đã nằm Nếu tất cả các đỉnh kề với v đều đã nằm trong T thì đỉnh v đã được xét xong và quay trong T thì đỉnh v đã được xét xong và quay lại xét đỉnh đứng trước v trong quá trình tìm lại xét đỉnh đứng trước v trong quá trình tìm kiếmkiếm

Nếu đỉnh vNếu đỉnh v00 đã được xét xong thì dừng. đã được xét xong thì dừng.

Page 35: Chg 6 do thi

3535

Ví dụ Ví dụ B

A

C

D

E

F

G

XétXét Bổ xung cạnh và đỉnhBổ xung cạnh và đỉnh (v)(v)

AA (AB), đỉnh B(AB), đỉnh B (B)=A(B)=A

BB (BD), đỉnh D (BD), đỉnh D (D)=B(D)=B

DD (DC), đỉnh C (DC), đỉnh C (C)=D(C)=D

CC (CF), đỉnh F(CF), đỉnh F (F)=C(F)=C

FF Không còn,quay lại CKhông còn,quay lại C

CC Không còn, quay lại DKhông còn, quay lại D

DD (CG), đỉnh G(CG), đỉnh G

GG (GE), đỉnh E (GE), đỉnh E

B

A

C

D

E

F

G

Page 36: Chg 6 do thi

3636

Tìm cây bao trùm theo chiều rộngTìm cây bao trùm theo chiều rộng

B

A

C

D

E

F

G

XétXét Bổ xung cạnh và Bổ xung cạnh và đỉnhđỉnh

Số cạnhSố cạnh

AA (AB),(AC),(AD),(AF) (AB),(AC),(AD),(AF) đỉnh B,C,D,Fđỉnh B,C,D,F

44

BB (BE), đỉnh E (BE), đỉnh E 55

CC

DD (DG), đỉnh G(DG), đỉnh G 66 B

A

C

D

E

F

G

Page 37: Chg 6 do thi

3737

Hết chươngHết chương