1. Trang chủ
  2. » Giáo Dục - Đào Tạo

chương 3 các THUẬT TOÁN DUYỆT đồ THỊ

70 465 2

Đ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 669,5 KB

Nội dung

Chng Các thuật toán duyệt đồ thị (Graph Searching, Graph Traversal) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Cỏc thut toỏn duyt th Duyt th: Graph Searching hoc Graph Traversal Duyt qua mi nh v mi cnh ca th ng dng: Cn kho sỏt cỏc tớnh cht ca th L thnh phn c bn ca nhiu thut toỏn trờn th Hai thut toỏn duyt c bn: Tỡm kim theo chiu rng (Breadth First Search BFS) Tỡm kim theo chiu sõu (Depth First Search DFS) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni í tng chung ca cỏc thut toỏn duyt í t ng chung: Trong quỏ trỡnh thc hin thut toỏn, mi nh mt ba trng thỏi: Cha thm, th hin bi mu trng ó thm (nhng cha duyt xong), th hin bi mu xỏm ó duyt xong, th hin bi mu en Trng thỏi ca nh s bin i theo qui tc sau: Thot u mi nh u cú mu trng (cha thm - not visited) nh ó c thm s chuyn thnh mu xỏm (tr thnh ó thm nhng cha duyt xong - visited) Khi tt c cỏc nh k ca mt nh v l ó c thm, nh v s cú mu en (ó duyt xong discovered) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Tỡm kim theo chiu rng Breadth-first Search (BFS) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Tỡm kim theo chiu rng Breadth-first Search Input: th G = (V, E), vụ h ng hoc cú h ng Output: d[v] = khong cỏch ( di ca ng i ngn nht) t s (l nh xut phỏt tỡm kim) n v, vi mi v V d[v] = nu v khụng t ti c t s [v] = u nh i trc v ng i t s (l nh xut phỏt tỡm kim) n v cú di d[v] Xõy dng cõy BFS vi gc ti s cha tt c cỏc nh t ti c t s Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Procedure ProcedureBFS(s); BFS(s); (*(*Tỡm Tỡmkikimmtheo theochi chiuur rng ngbbt t uut tnh nhss*)*) begin begin color[s] color[s] gray; gray; d[s] 0; [s] d[s] 0; [s] nil; nil; QQ ; enqueue(Q,s); ; enqueue(Q,s);(*(*Np Nps svo voQQ*)*) while whileQQdo begin begin uu dequeue(Q); dequeue(Q);(*(*Ly Lyuut tQQ*)*) for forvvAdj[u] Adj[u]do ififcolor[v] = white color[v] = whitethen then begin begin color[v] color[v] gray; gray; d[v] d[v] d[u] d[u]++1;1;[v] [v] u;u; enqueue(Q,v) enqueue(Q,v) (*(*Np Npvvvo voQQ*)*) end; end; color[u] color[u] black black end; end; Trng: cha thm xỏm: ó thm en: ó duyt xong Q: hng i cỏc nh c thm color[v]: mu ca nh v d[v]: khong cỏch t s n v [u]: nh i trc v end; end; BEGIN BEGIN(*(*Main MainProgram*) Program*) Vớ d: xem minh ho for forvvVVdo do(*(*Khi Khito to*)*) begin begin color[v] color[v] white; white;d[v] d[v] ; ; [v] [v] nil; nil; end; end; for forvvVVdo ififcolor[v]=white color[v]=whitethen thenBFS(v); BFS(v); END END Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Vớ d (BFS) r v w s Nguyn c Ngha- B mụn KHMT, HBK H ni u y x Q: s Phn Lí THUYT TH t Vớ d (BFS) r s v w t u y x Q: w r 1 Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Vớ d (BFS) r s v w t u y x Q: r t x 2 Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni Vớ d (BFS) r s v w t u y x Q: t x v 2 Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 10 Phõn tớch DFS Vũng lp trờn cỏc dũng 1-2 v 5-7 ũi hi thi gian (|V|), cha tớnh thi gian thc hin lnh DFS(v) DFS(v) thc hin i vi mi nh trng vV v sau c thm nú c tụ mu xỏm Cỏc dũng 3-6 ca DFS(v) s thc hin |Adj[v]| ln Vy thi gian tng cng ca DFS(v) l vV|Adj[v]| = (|E|) Do ú thi gian ca DFS l (|V|+|E|) Thut toỏn trờn th cú ỏnh giỏ thi gian nh trờn gi l thut toỏn thi gian tuyn tớnh Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 56 CC NG DNG CA DFS Tớnh liờn thụng ca th Tỡm ng i t s n t Phỏt hin chu trỡnh Kim tra tớnh liờn thụng mnh nh hng th Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 57 Bi toỏn v tớnh liờn thụng Bi toỏn: Cho th vụ h ng G = (V,E) Hi th gm bao nhiờu thnh phn liờn thụng, v tng thnh phn liờn thụng gm cỏc nh no? Gii: S dng DFS (BFS) : Mi ln gi n DFS (BFS) chng trỡnh chớnh s sinh mt thnh phn liờn thụng Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 58 DFS gii bi toỏn liờn thụng (*(*Main MainProgram*) Program*) 1.1 for foruuVVdo 2.2 id[u] id[u] 00 3.3 cnt cnt 00 (*(*cnt cntssl lng ngtplt tplt*)*) 4.4 for foruuVVdo 5.5 ififid[u] id[u]==00 6.6 7.7 DFS-Visit(u) DFS-Visit(u) 1.1 id[u] id[u] cnt cnt 2.2 for foreach eachvvAdj[u] Adj[u]do 3.3 ififid[v] id[v]==00 4.4 then thenDFS-Visit(v) DFS-Visit(v) then thencnt cnt cnt cnt+1 +1 DFS-Visit(u) DFS-Visit(u) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 59 Tỡm ng i Bi toỏn tỡm ng i Input: th G = (V,E) xỏc nh bi danh sỏch k v hai nh s, t u ra: ng i t nh s n nh t, hoc khng nh khụng tn ti ng i t s n t Thut toỏn: Thc hin DFS(s) (hoc BFS(s)) Nu [t] = NIL thỡ khụng cú ng i, trỏi li ta cú ng i t [t] [ [ t]] s Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 60 DFS gii bi toỏn ng i (*(*Main MainProgram*) Program*) 1.1 for foruuVVdo 2.2 3.3 color[u] color[u] white white [u] [u] NIL NIL 4.4 DFS-Visit(s) DFS-Visit(s) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni DFS-Visit(u) DFS-Visit(u) 1.1 color[u] color[u] GRAY GRAY (* (*Thm Thmnh nhuu*) *) 2.2 for foreach eachvvAdj[u] Adj[u]do 3.3 ififcolor[v] color[v]==WHITE WHITE 4.4 then then[v] [v] uu 5.5 DFS-Visit(v) DFS-Visit(v) 61 DFS v Chu trỡnh Bi toỏn: Cho th G=(V,E) Hi G cú cha chu trỡnh hay khụng? nh lý: th G l khụng cha chu trỡnh v ch quỏ trỡnh thc hin DFS ta khụng phỏt hin cnh ng c Chng minh: Nu G khụng cha chu trỡnh thỡ rừ rng khụng cú cnh ngc (bi vỡ s tn ti cnh ngc dn n phỏt hin chu trỡnh) Nu khụng cú cnh ngc thỡ G l khụng cha chu trỡnh (acyclic) Thc vy Khụng cú cnh ngc tc l ch cú cnh ca cõy Nu ch cú cnh ca cõy thỡ G ch l cõy hoc rng Vy G khụng cha chu trinh Nh vy DFS cú th ỏp dng gii bi toỏn t Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 62 DFS v chu trỡnh Cn phi iu chnh nh th no phỏt hin chu trỡnh? (*(*Main MainProgram*) Program*) 1.1 for foruuVVdo 2.2 3.3 color[u] color[u] white white [u] [u] NIL NIL 4.4 time time 00 5.5 for foruuVVdo 6.6 7.7 ififcolor[u] color[u]==white white then thenDFS-Visit(u) DFS-Visit(u) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni DFS(u) DFS(u) 1.1 color[u] color[u] GRAY GRAY (* (*Thm Thmnh nhuu*) *) 2.2 time time time time++11 3.3 d[u] d[u] time time 4.4 for foreach eachvvAdj[u] Adj[u]do 5.5 ififcolor[v] color[v]==WHITE WHITE 6.6 then then[v] [v] uu 7.7 DFS-Visit(v) DFS-Visit(v) 8.8 color[u] color[u] BLACK BLACK(* (*nh nhuuó ó duyt duytxong xong*) *) 9.9 f[u] f[u] time time time time++11 63 DFS v chu trỡnh Cõu hi: Thi gian tớnh l bao nhiờu? Tr li: Chớnh l thi gian thc hin DFS: O(|V|+|E|) Cõu hi: Nu G l th vụ hng thỡ cú th ỏnh giỏ thi gian tớnh sỏt hn na c khụng? Tr li: Thut toỏn cú thi gian tớnh O(|V|), bi vỡ: Trong mt rng ( th khụng cha chu trỡnh) |E| |V| - Vỡ vy nu th cú |V| cnh thỡ chc chn nú cha chu trỡnh, v thut toỏn kt thỳc Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 64 Kim tra tớnh liờn thụng mnh Bi toỏn: Hi th cú hng G cú l liờn thụng mnh? Mnh : th cú hng G=(V,E) l liờn thụng mnh v ch luụn tỡm c ng i t mt nh v n tt c cỏc nh cũn li v luụn tỡm c ng i t tt c cỏc nh thuc V \ {v} n v Chng minh: Hin nhiờn Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 65 Thut toỏn kim tra tớnh liờn thụng mnh Thut toỏn Chọn v V đỉnh tuỳ ý Thực DFS(v) G Nếu tồn đỉnh u không đợc thăm G không liên thông mạnh thuật toán kết thúc Trái lại thực tiếp Thực DFS(v) GT = (V, ET), với ET thu đợc từ E việc đảo ngợc hớng cung Nếu tồn đỉnh u không đợc thăm G không liên thông mạnh, trái lại G liên thông mạnh Thi gian tớnh: O(|V|+|E|) Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 66 Thut toỏn kim tra tớnh liờn thụng mnh a a d f c b Nguyn c Ngha- B mụn KHMT, HBK H ni f c b e th G Phn Lí THUYT TH d e th GT 67 nh hng th Bài toán: Cho đồ thị vô hớng liên thông G= (V, E) Hãy tìm cách định hớng cạnh để thu đợc đồ thị có hớng liên thông mạnh trả lời G không định hớng đợc Thuật toán định hớng : Trong trình thực DFS(G) định hớng cạnh DFS theo chiều từ tổ tiên đến cháu, cạnh ngợc theo hớng từ cháu đến tổ tiên Ký hiệu đồ thị thu đợc G( ) Bổ đề G định hớng đợc G( ) liên thông mạnh Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 68 Vớ d: nh hng th a a d f c b Nguyn c Ngha- B mụn KHMT, HBK H ni f c b e th G Phn Lí THUYT TH d e th G() 69 Questions? Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 70 [...]... w t 2 u 3 2 y x Q: x v u 2 2 3 Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 11 Vớ d (BFS) r s 1 0 2 v 1 w t 2 u 3 2 3 y x Q: v u y 2 3 3 Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 12 Vớ d (BFS) r s 1 0 2 v 1 w Nguyn c Ngha- B mụn KHMT, HBK H ni u 3 2 3 y x Q: u y 3 3 Phn 2 Lí THUYT TH t 2 13 Vớ d (BFS) r s 1 0 2 v 1 w Nguyn c Ngha- B mụn KHMT, HBK H ni u 3 2 3 y x Q: y 3 Phn 2... HBK H ni 32 Vớ d: DFS source vertex a e g 1 | 8 | | b f 2 | 7 | 3 | 4 5 | 6 | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 33 Vớ d: DFS source vertex a e g 1 | 8 | | b f 2 | 7 | 3 | 4 5 | 6 | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 34 Vớ d: DFS source vertex a e g 1 | 8 | | f b 2 | 7 9 | 3 | 4 5 | 6 | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 35 Vớ... g 1 | | | b f 2 | | 3 | | | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 29 Vớ d: DFS source vertex a e g 1 | | | b f 2 | | 3 | 4 | | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 30 Vớ d: DFS source vertex a e g 1 | | | b f 2 | | 3 | 4 c Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 5 | | d h 31 Vớ d: DFS source vertex a e g 1 | | | b f 2 | | 3 | 4 5 | 6 | c d h... (BFS) r s 1 0 2 v 1 w Nguyn c Ngha- B mụn KHMT, HBK H ni u 3 2 3 y x Q: y 3 Phn 2 Lí THUYT TH t 2 14 Vớ d (BFS) r s 1 0 2 v 1 w Nguyn c Ngha- B mụn KHMT, HBK H ni u 3 2 3 y x Q: Phn 2 Lí THUYT TH t 2 15 Vớ d (BFS) r s 1 0 2 v 1 w t 2 u 3 2 3 y x Cõy BFS(s) Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 16 Phõn tớch BFS Vic khi to ũi hi O(|V|) Vũng lp duyt Mi nh c np vo v loi ra khi hng i mt... đó của đồ thị Sau đó chọn u là một đỉnh tuỳ ý kề với s và lặp lại quá trình đối với u ở bớc tổng quát, giả sử ta đang xét đỉnh v: Nếu nh trong số các đỉnh kề với v tìm đợc đỉnh w là cha đợc thm thì ta sẽ thm đỉnh này (nó sẽ trở thành đã thm nhng cha duyt xong) và bắt đầu từ nó ta sẽ tiếp tục quá trình tìm kiếm Nếu nh không còn đỉnh nào kề với v là cha thm thì ta sẽ nói rằng đỉnh này là đã duyệt xong... a e g 1 | 8 | | f b 2 | 7 9 | 3 | 4 5 | 6 | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 35 Vớ d: DFS source vertex a e g 1 | 8 | | b f 2 | 7 9 |10 3 | 4 5 | 6 | c d h Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 36 ... thi im kt thỳc thm (v chuyn t xỏm sang en) [v] : nh i trc v tc l nh m t ú ta n thm v S dng bin color ghi nhn trng thỏi ca cỏc nh nh ó mụ t Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 23 Depth-First Search: Code DFS(G) procedure DFS(u); BEGIN begin for v V do color[u] = GRAY; begin time = time+1; d[u] = time; color[v] = WHITE; for v Ke(u)do [v] = NIL if (color[v]= WHITE)then end; begin... kiếm từ đỉnh mà trớc đó ta đến đợc đỉnh v (nếu v = s, thì kết thúc tìm kiếm) Có thể nói nôm na là tìm kiếm theo chiều sâu bắt đầu từ đỉnh s đ ợc thực hiện trên cơ sở tìm kiếm theo chiều sâu từ tất cả các đỉnh cha thm kề với s Phn 2 Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 22 Mụ t DFS Input: th G = (V, E) cho bi danh sỏch k Output: 2 mc thi gian cho mi nh (l cỏc s nguyờn trong khong 1 v 2|V|) ... (BFS) r s v w t u 3 y x Q: v u y 3 Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 12 Vớ d (BFS) r s v w Nguyn c Ngha- B mụn KHMT, HBK H ni u 3 y x Q: u y 3 Phn Lí THUYT TH t 13 Vớ d (BFS) r... KHMT, HBK H ni 38 Vớ d: DFS source vertex a e |12 |11 g 13| b f | |10 | | | c d h Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 39 Vớ d: DFS source vertex a e |12 |11 g 13| b f | |10 |... TH Nguyn c Ngha- B mụn KHMT, HBK H ni 32 Vớ d: DFS source vertex a e g | | | b f | | | | | c d h Phn Lí THUYT TH Nguyn c Ngha- B mụn KHMT, HBK H ni 33 Vớ d: DFS source vertex a e g | | | b

Ngày đăng: 10/11/2015, 10:15

TỪ KHÓA LIÊN QUAN

w