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 305 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

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 vV   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 | vV  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], vV) 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?

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

TỪ KHÓA LIÊN QUAN