Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
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
Nội dung
CH NG th thu t toán đ th HCM HAN HP DAN N I DUNG th th vơ h ng, th có h ng,Tính liên thơng c a đ th Bi u di n đ th Bi u di n đ th b i ma tr n, Danh sách k , Danh sách c nh Các thu t toán t đ th Thu t tốn tìm ki m theo chi u sâu, Thu t tốn tìm ki m theo chi u r ng M t s ng d ng c a tìm ki m đ th Bài toán đ ng đi, Bài tốn liên thơng, th khơng ch a chu trình tốn s p x p tơpơ, Bài tốn tơ màu đ nh đ th Bài tốn khung nh nh t Thu t toán Kruscal, C u trúc d li u bi u di n phân ho ch, Bài toán đ ng ng n nh t Thu t toán Dijkstra, Cài đ t thu t toán v i c u trúc d li u Nguy n c Ngh a - B môn KHMT HBKHN th th c p (V, E), V t p đ nh E h c p đ nh g i c nh Ví d : Các đ nh sân bay Các c nh th hi n đ ng bay n i hai sân bay Các s c nh có th 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 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 đ nh đ u nh v đ nh cu i Ví d , chuy n bay C nh vô h ng (Undirected edge) C p khơng có th t g m đ nh (u,v) Ví d , 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 n bay Nguy n c Ngh a - B môn KHMT HBKHN HAN flight VN 426 HCM HAN 1135 km HCM ng d ng M ch lôgic (Electronic circuits) Phòng máy M ch in M ch tích h p Phịng hành M ng giao thơng (Transportation networks) Phịng máy Phịng Giáo v M ng xa l M ng 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 Tun hu n C s d li u (Databases) ng Ch H ng HBKHN Thu t ng u mút c a c nh U V đ u mút c a c nh a C nh k v i đ nh a, d, b k v i đ nh V nh k U U V k V e W X có b c h i 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 khuyên n đ th : Không ch a c nh l p khuyên Nguy n c Ngh a - B môn KHMT HBKHN Thu t ng Nguy n (ti p t c) ng Dãy đ nh (ho c dãy c nh), hai đ nh liên ti p có c nh n i: P: s = v0, v1, , vk-1, vk = t, (vi-1, vi) c nh c a đ th , i=1, 2, , k dài c a đ ng s c nh đ ng (k) s - đ nh đ u t - đ nh cu i c a đ ng P ng đ n Các đ nh đ ng phân bi t c Ngh a - B môn KHMT Thu t ng 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) đ ng đ n ng nh ng P2= U,W,X,Y,W,V) (P2=c,e,g,f,d) đ không đ n Nguy n c Ngh a - B môn KHMT HBKHN Thu t ng (ti p) Chu trình ng g m 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 gi ng Ví d Nguy n C1= V,X,Y,W,U CT đ n C2=U,W,X,Y,W,V chu trinh không đ n c Ngh a - B môn KHMT a U c V b d C2 X h e C1 g W f Z Y HBKHN Tính ch t Tính ch t Ký hi u Sv deg(v) = 2m CM: m i c nh đ cđ m2l n Tính ch t Trong đ n đ th vô h ng (đ th khơng có c nh l p khun) m n (n - 1)/2 CM: m i đ nh có b c khơng q (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) = 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 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 t đ 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 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 c nh đ c bi t (ch ng h n, c p ghép, bè, chu trình, khung, ) Tìm m t s t p đ 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 tốn t i u đ th : Cây khung nh nh t, đ ng ng n nh t, lu ng c c đ i m ng, Nguy n c Ngh a - B môn KHMT HBKHN 12 Bi u di n đ th Nguy n c Ngh a - B môn KHMT HBKHN 13 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 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 đ c n quan tâm 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 truy v n th ng xuyên đ i v i đ th trình x lý đ th : Ch ng h n: Có c nh n i hai đ nh u, v ? Li t kê đ 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 đ n |V| theo th t 1 nÕu (i, j ) E A[i, j ] = aij = A xác đ nh b i: nÕu tr¸i l¹i a b c d4 0 0 0 1 0 1 a b c d A = AT đ i v i đ th vô h Nguy n c Ngh a - B môn KHMT HBKHN 4 1 1 1 1 1 ng 15 Ma tr n k Chú ý v s d ng ma tr n k : Dịng tồn khơng ~đ nh cô l p M[i, i] = khuyên (self-loop) B nh (Space) |V |2 bits Các thông tin b sung, ch ng h n chi phí c nh, c n đ c c t gi d i d ng ma tr n Th i gian tr l i truy v n Hai đ nh i 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ê đ nh k c a v : O(|V|) (ngay c v đ 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 c nh, thay 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, , giá trị đặc biệt để cặp (i,j) không cạnh, tuỳ trường hợp cụ thể, đặt giá trị sau: 0, +, - Nguy n c Ngh a - B môn KHMT 17 HBKHN Ma tr n tr ng s Ví d 8 Nguy n c Ngh a - B môn KHMT HBKHN A = 8 18 Danh sách k (Adjacency List) Danh sách k : V i m i đ nh v c t gi sách đ nh k c a 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 đ 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 t t c danh sách k 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 t t c danh sách k degree(v) = 2|E | vV Nguy n cung 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 C u trúc d li u cho thu t toán Kruskal • Tho t tiên, ET r ng Có |V| tplt, m i thành ph n g m 1đ nh • Các t p kh i t o là: {1} {2} {3} {4} {5} {6} {7} {8} • N u vi c b sung c nh (u, v) vào ET không t o thành chu trình c nh đ c b sung ET r1 = find(u); r2 = find(v); if (r1 ≠ r2) then ET = ET (u,v); union(r1, r2); Nguy n c Ngh a - B môn KHMT HBKHN 111 C u trúc d li u t p không giao (Disjoint-set Data Structures) V n đ đ t 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 thành t p V1, V2, …, Vk h tr th c hi n hi u qu thao tác sau: Makeset(x): T o m t t p ch a nh t ph n t x Union(x, y): Thay th t p V V (trong x V i j i y Vj ) b i t p Vi Vj phân ho ch xét Find(x): Tìm tên r(V ) c a t p V ch a ph n t x i i Nh v y, Find(x) Find(y) tr l i m t giá tr ch x y thu c m t t p phân ho ch C u trúc d li u đáp ng yêu c u có tên 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 112 C u trúc d li u t p không giao (Disjoint-set Data Structures) Tr c h t đ bi u di n m i t p X V, s s d ng c u trúc có g c: Ch n m t ph n t c a X làm g c (tên c a t p X ph n t t ng ng v i g c), m i ph n t x X s có m t bi n tr parent[x] tr đ n cha c a nó, n u x g c parent[x] = x Ví d : Gi s có V = {1, 2, 3, 4, 5, 6, 7, 8, 9} V1 = {1, 3, 4}, V2 = {2, 5, 6, 7, 9}, V3 = {8} Ta có ba mơ t ba t p V1, V2, V3 Nguy n c Ngh a - B môn KHMT HBKHN 113 C u trúc d li u t p không giao (Disjoint-set Data Structures) M ng parent đ bi u di n r ng g m t V1, V2, V3: parent[v] 1 v Nguy n ng ng v i c Ngh a - B môn KHMT HBKHN 114 Makeset(x) FindSet MakeSet(x) { parent[x] := x; } Th i gian: O(1) Find(x); { while x parent[x] x = parent[x]; return x; } Th i gian: O(h), h đ cao c a ch a x Nguy n c Ngh a - B môn KHMT HBKHN 115 C u trúc d li u t p không giao (Disjoint-set Data Structures) n i t p ch a x t p ch a y có th ch a l i bi n tr c a g c c a ch a x đ cho tr đ n g c c a ch a y i u đ c th c hi n nh th t c sau Union(x, y) { u:= Find(x); (* Tìm u g c c a ch a x *) v:= Find(y); (* Tìm v g c c a ch a y *) parent[u] := v; } Th i gian: O(h) Nguy n c Ngh a - B mơn KHMT HBKHN 116 Ví d Union(x,y) y a x w b r y a x w Nguy n f b c Ngh a - B môn KHMT x tr đ n y b, r f chìm xu ng sâu h n y tr đ n x a w chìm xu ng sâu h n f r 117 HBKHN 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 ch a x Trong tr ng h p có k đ nh có d ng nh m t đ ng đ cao c a s k- Ví d : A B C D E Sau th c hi n Union(A,B); Union(B,C); Union(C,D); Union(D,E) có th thu đ c A B C D E Do hàm Find(x) có đánh giá th i gian tính O(n) Nguy n c Ngh a - B môn KHMT HBKHN 118 C u trúc d li u t p không giao Li u có cách đ gi m đ cao c a con? Có m t cách th c hi n r t đ n gi n: Khi n i hai s u ch nh tr c a g c c a có đ 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 s s d ng thêm bi n Num[v] ch a s ph n t c a v i g c t i v Nguy n c Ngh a - B môn KHMT HBKHN 119 MAKESET Union c i ti n MAKESET(x) { parent[x] := x; Num[x]:=1; } Union(x, y){ u:= Find(x); // Tìm u g c c a ch a x v:= Find(y); // Tìm u g c c a ch a y if Num[u] d[v] + c(v, w) N u đ t l i d[w] = d[v] + c(v, w) đ t p[w] = v c Ngh a - B mơn KHMT HBKHN 130 Ví d Tìm đ ng ng n nh t t đ nh B đ n đ nh l i đ th sau Nguy n c Ngh a - B mơn KHMT 131 HBKHN B ng tính toán theo thu t toán Dijkstra A B cl p B C D E F d p k d p k d p k d p k d p k d p k Kh i t o - F - F - F - F - F - F B F - T B F - F - F - F B T A F - F - F - F A T C F C F - F C T C F 11 D F C T 11 D F T Nguy n c Ngh a - B môn KHMT HBKHN E 132 K t qu th c hi n T p c nh {(p[v], v): v V-{B}} t o thành m t đ c g i đ ng ng n nh t t đ nh B đ n t t c đ nh l i Cây đ c cho hình v sau đây: A B Nguy n c Ngh a - B môn KHMT C D E F 133 HBKHN Cài đ t thu t toán v i c u trúc d li u cài đ t thu t toán Dijkstra s d ng b nhãn c a đ nh: Nhãn c a m i đ nh v g m thành ph n cho bi t thơng tin: k[v] - tìm đ cđ ng ng n nh t t đ nh ngu n đ n v hay ch a, d[v] - kho ng cách (đ dài đ p[v] - đ nh tr c đ nh v đ Các thành ph n s đ bi n k[v], d[v] p[v] Nguy n c Ngh a - B môn KHMT ng đi) t s đ n v hi n bi t HBKHN ng t t nh t hi n bi t c c t gi t ng ng 134 Cài đ t tr c ti p Dijkstra_Table(G, s) for u V { d[u] infinity; p[u] NIL; k[u] FALSE; } d[s] 0; // s đ nh ngu n T = V; while T ≠ { u đ nh có d[u] nh nh t T; 10 k[u]=TRUE; 11 T = T–{u}; 12 for (v Adj(u)) && !k[v] 13 if d[v] > d[u] + c[u, v] { 14 d[v] = d[u] + c[u, v]; 15 p[v] = u; 16 } 17 } D dàng nh n th y r ng Dijkstra_Table(G, s) đòi h i th i gian O(|V|2+|E|) Nguy n c Ngh a - B mơn KHMT 135 HBKHN Cài đ t thu t tốn Dijkstra s d ng hàng đ i có u tiên Do t i m i b c ta c n tìm đ nh v i nhãn kho ng cách nh nh t, nên đ th c hi n thao tác m t cách hi u qu ta s s d ng hàng đ i có u tiên (Priority Queue – PQ) D i ta mô t thu t tốn Dijkstra v i hàng đ i có u tiên: Nguy n c Ngh a - B môn KHMT HBKHN 136 Cài đ t thu t toán Dijkstra s d ng PQ: Kh i t o Dijkstra_Heap(G, s) for u V { d[u] infinity; p[u] NIL; k[u] FALSE; } d[s] 0; // s đ nh ngu n Q Build_Min_Heap(d[V]); // Kh i t o hàng đ i có u tiên Q t d[V] = (d[v], vV) Nguy n c Ngh a - B môn KHMT 137 HBKHN Cài đ t thu t toán Dijkstra s d ng PQ: L p while Not Empty(Q) { u Extract-Min(Q); // lo i b g c c a Q đ a vào u 10 k[u]=TRUE; 11 for (v Adj(u)) && !k[v] 12 if d[v] > d[u] + c[u, v] { 13 d[v] = d[u] + c[u, v]; 14 p[v] = u; 15 Decrease_Key(Q,v,d[v]); 16 } 17 } Nguy n c Ngh a - B mơn KHMT HBKHN 138 Phân tích th i gian tính c a thu t tốn Vịng l p for dòng đòi h i th i gian O(|V|) Vi c kh i t o đ ng đòi h i th i gian O(|V|) Vòng l p while dịng l p |V| l n thao tác ExtractMin th c hi n |V| l n đòi h i th i gian O(|V| log|V|) Thao tác Decrease_Key dòng 15 ph i th c hi n khơng q O(|E|) l n Do th i gian th c hi n thao tác thu t toán O(|E| log|V|) V y t ng c ng th i gian tính c a thu t tốn O((|E| + |V|) log|V|) Nguy n c Ngh a - B môn KHMT HBKHN 139 Questions? Nguy n c Ngh a - B môn KHMT HBKHN 140 ... W* A L 25 0 5000 289 203 177 23 50 10000 300 214 184 38 125 35 24 23 25000 309 226 200 97 250 275 181 178 13 50000 315 232 218 3 37 2222 1438 1481 54 100000 326 246 235 78 4 500 W W* A L Nguy n W*... HBKHN 74 Bài tốn liên thơng m nh Bài tốn liên thơng m nh Cho đ th có h ng G=(V,E) Hãy ki m tra xem đ th G có ph i liên thơng m nh hay khơng? K t qu sau cho phép qui d n toán c n gi i v toán đ... thơng m nh; Tính hai phía c a đ th ; Tính ph ng c a đ th c Ngh a - B môn KHMT HBKHN 72 Bài toán đ ng Bài toán đ t là: "Cho đ th G=(V,E) hai đ nh s, t c a H i có t n t i đ ng t s đ n t hay không?