Cấu trúc dữ liệu và giải thuật - Lê Minh Hoàng pot

334 530 4
Cấu trúc dữ liệu và giải thuật - Lê Minh Hoàng pot

Đ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

LÊ MINH HOÀNG (A.K.A DSAP Textbook) i h c S ph m Hà N i, 1999-2002 Try not to become a man of success but rather to become a man of value Albert Einstein i M CL C PH N BÀI TOÁN LI T KÊ §1 NH C L I M T S KI N TH C IS T H P 1.1 CH NH H P L P 1.2 CH NH H P KHÔNG L P 1.3 HOÁN V 1.4 T H P §2 PH NG PHÁP SINH (GENERATION) 2.1 SINH CÁC DÃY NH PHÂN DÀI N 2.2 LI T KÊ CÁC T P CON K PH N T 2.3 LI T KÊ CÁC HOÁN V §3 THU T TỐN QUAY LUI 12 3.1 LI T KÊ CÁC DÃY NH PHÂN DÀI N 12 3.2 LI T KÊ CÁC T P CON K PH N T 13 3.3 LI T KÊ CÁC CH NH H P KHÔNG L P CH P K 15 3.4 BÀI TỐN PHÂN TÍCH S 17 3.5 BÀI TOÁN X P H U 19 §4 K THU T NHÁNH C N 24 4.1 BÀI TOÁN T I U 24 4.2 S BÙNG N T H P 24 4.3 MƠ HÌNH K THU T NHÁNH C N 24 4.4 BÀI TOÁN NG I DU L CH 25 4.5 DÃY ABC 27 PH N C U TRÚC D §1 CÁC B CC LI U VÀ GI I THU T 33 B N KHI TI N HÀNH GI I CÁC BÀI TOÁN TIN H C 34 1.1 XÁC NH BÀI TOÁN 34 1.2 TÌM C U TRÚC D LI U BI U DI N BÀI TOÁN 34 1.3 TÌM THU T TỐN 35 1.4 L P TRÌNH 37 1.5 KI M TH 37 1.6 T I U CH NG TRÌNH 38 §2 PHÂN TÍCH TH I GIAN TH C HI N GI I THU T 40 2.1 GI I THI U 40 2.2 CÁC KÝ PHÁP ÁNH GIÁ PH C T P TÍNH TỐN 40 2.3 XÁC NH PH C T P TÍNH TỐN C A GI I THU T 42 2.4 PH C T P TÍNH TỐN V I TÌNH TR NG D LI U VÀO 45 2.5 CHI PHÍ TH C HI N THU T TOÁN 46 ii §3 QUY VÀ GI I THU T QUY 50 3.1 KHÁI NI M V QUY 50 3.2 GI I THU T QUY 50 3.3 VÍ D V GI I THU T QUY 51 3.4 HI U L C C A QUY .55 §4 C U TRÚC D LI U BI U DI N DANH SÁCH 58 4.1 KHÁI NI M DANH SÁCH 58 4.2 BI U DI N DANH SÁCH TRONG MÁY TÍNH 58 §5 NG N X P VÀ HÀNG I 64 5.1 NG N X P (STACK) .64 5.2 HÀNG I (QUEUE) .66 §6 CÂY (TREE) 70 6.1 NH NGH A 70 6.2 CÂY NH PHÂN (BINARY TREE) 71 6.3 BI U DI N CÂY NH PHÂN 73 6.4 PHÉP DUY T CÂY NH PHÂN 74 6.5 CÂY K_PHÂN 76 6.6 CÂY T NG QUÁT 77 §7 KÝ PHÁP TI N T , TRUNG T VÀ H U T 79 7.1 BI U TH C D I D NG CÂY NH PHÂN 79 7.2 CÁC KÝ PHÁP CHO CÙNG M T BI U TH C 79 7.3 CÁCH TÍNH GIÁ TR BI U TH C 79 7.4 CHUY N T D NG TRUNG T SANG D NG H U T 83 7.5 XÂY D NG CÂY NH PHÂN BI U DI N BI U TH C 86 §8 S P X P (SORTING) 88 8.1 BÀI TOÁN S P X P 88 8.2 THU T TOÁN S P X P KI U CH N (SELECTIONSORT) .90 8.3 THU T TOÁN S P X P N I B T (BUBBLESORT) 91 8.4 THU T TOÁN S P X P KI U CHÈN (INSERTIONSORT) 91 8.5 S P X P CHÈN V I DÀI B C GI M D N (SHELLSORT) .93 8.6 THU T TOÁN S P X P KI U PHÂN O N (QUICKSORT) 94 8.7 THU T TOÁN S P X P KI U VUN NG (HEAPSORT) 101 8.8 S P X P B NG PHÉP M PHÂN PH I (DISTRIBUTION COUNTING) 104 8.9 TÍNH N NH C A THU T TỐN S P X P (STABILITY) 105 8.10 THU T TOÁN S P X P B NG C S (RADIX SORT) 106 8.11 THU T TOÁN S P X P TR N (MERGESORT) 111 8.12 CÀI T .114 8.13 ÁNH GIÁ, NH N XÉT 122 §9 TÌM KI M (SEARCHING) 126 9.1 BÀI TỐN TÌM KI M 126 9.2 TÌM KI M TU N T (SEQUENTIAL SEARCH) .126 9.3 TÌM KI M NH PHÂN (BINARY SEARCH) 126 9.4 CÂY NH PHÂN TÌM KI M (BINARY SEARCH TREE - BST) .127 iii 9.5 PHÉP B M (HASH) 132 9.6 KHỐ S V I BÀI TỐN TÌM KI M 132 9.7 CÂY TÌM KI M S H C (DIGITAL SEARCH TREE - DST) 133 9.8 CÂY TÌM KI M C S (RADIX SEARCH TREE - RST) 136 9.9 NH NG NH N XÉT CU I CÙNG 141 PH N QUY HO CH NG 143 §1 CƠNG TH C TRUY H I 144 1.1 VÍ D 144 1.2 C I TI N TH NH T 145 1.3 C I TI N TH HAI 147 1.4 CÀI T QUY 147 §2 PH NG PHÁP QUY HO CH NG 149 2.1 BÀI TOÁN QUY HO CH 149 2.2 PH NG PHÁP QUY HO CH NG 149 §3 M T S BÀI TỐN QUY HO CH NG 153 3.1 DÃY CON N I U T NG DÀI NH T 153 3.2 BÀI TOÁN CÁI TÚI 158 3.3 BI N I XÂU 160 3.4 DÃY CON CÓ T NG CHIA H T CHO K 164 3.5 PHÉP NHÂN T H P DÃY MA TR N 169 3.6 BÀI T P LUY N T P 172 PH N CÁC THU T TỐN TRÊN §1 CÁC KHÁI NI M C TH 177 B N .178 1.1 NH NGH A TH (GRAPH) 178 1.2 CÁC KHÁI NI M 179 §2 BI U DI N TH TRÊN MÁY TÍNH 181 2.1 MA TR N K (ADJACENCY MATRIX) 181 2.2 DANH SÁCH C NH (EDGE LIST) 182 2.3 DANH SÁCH K (ADJACENCY LIST) 183 2.4 NH N XÉT 184 §3 CÁC THU T TỐN TÌM KI M TRÊN TH 186 3.1 BÀI TOÁN 186 3.2 THU T TỐN TÌM KI M THEO CHI U SÂU (DEPTH FIRST SEARCH) 187 3.3 THU T TỐN TÌM KI M THEO CHI U R NG (BREADTH FIRST SEARCH) 189 3.4 PH C T P TÍNH TỐN C A BFS VÀ DFS 192 §4 TÍNH LIÊN THƠNG C A TH 193 4.1 NH NGH A 193 4.2 TÍNH LIÊN THÔNG TRONG TH VÔ H NG 194 iv 4.3 TH Y VÀ THU T TOÁN WARSHALL 194 4.4 CÁC THÀNH PH N LIÊN THÔNG M NH 197 §5 VÀI NG D NG C A DFS BFS 208 5.1 XÂY D NG CÂY KHUNG C A TH 208 5.2 T P CÁC CHU TRÌNH C S C A TH 211 5.3 BÀI TOÁN NH CHI U TH 211 5.4 LI T KÊ CÁC KH P VÀ C U C A TH 215 §6 CHU TRÌNH EULER, NG I EULER, TH EULER 219 6.1 BÀI TOÁN CÁI C U 219 6.2 NH NGH A 219 6.3 NH LÝ 219 6.4 THU T TỐN FLEURY TÌM CHU TRÌNH EULER 220 6.5 CÀI T 221 6.6 THU T TOÁN T T H N 223 §7 CHU TRÌNH HAMILTON, NG I HAMILTON, TH HAMILTON 226 7.1 NH NGH A 226 7.2 NH LÝ 226 7.3 CÀI T 227 §8 BÀI TỐN NG I NG N NH T 231 8.1 TH CÓ TR NG S 231 8.2 BÀI TOÁN NG I NG N NH T 231 8.3 TR NG H P TH KHƠNG CĨ CHU TRÌNH ÂM - THU T TOÁN FORD BELLMAN 233 8.4 TR NG H P TR NG S TRÊN CÁC CUNG KHÔNG ÂM - THU T TOÁN DIJKSTRA 235 8.5 THU T TOÁN DIJKSTRA VÀ C U TRÚC HEAP .238 8.6 TR NG H P TH KHƠNG CĨ CHU TRÌNH - S P X P TÔ PÔ 241 8.7 NG I NG N NH T GI A M I C P NH - THU T TOÁN FLOYD 244 8.8 NH N XÉT .246 §9 BÀI TỐN CÂY KHUNG NH NH T 251 9.1 BÀI TOÁN CÂY KHUNG NH NH T 251 9.2 THU T TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) 251 9.3 THU T TOÁN PRIM (ROBERT PRIM - 1957) 256 §10 BÀI TỐN LU NG C C I TRÊN M NG 260 10.1 CÁC KHÁI NI M 260 10.2 M NG TH NG D VÀ NG T NG LU NG 263 10.3 THU T TOÁN FORD-FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) .266 10.4 THU T TOÁN PREFLOW-PUSH (GOLDBERG - 1986) 270 10.5 M T S M R NG 276 §11 BÀI TỐN TÌM B GHÉP C C I TRÊN TH HAI PHÍA 283 11.1 TH HAI PHÍA (BIPARTITE GRAPH) 283 11.2 BÀI TỐN GHÉP ƠI KHƠNG TR NG VÀ CÁC KHÁI NI M .283 11.3 THU T TOÁN NG M .284 11.4 CÀI T .285 v §12 BÀI TỐN TÌM B GHÉP C C I V I TR NG S C C TI U TRÊN TH HAI PHÍA - THU T TỐN HUNGARI 291 12.1 BÀI TỐN PHÂN CƠNG 291 12.2 PHÂN TÍCH 291 12.3 THU T TOÁN 292 12.4 BÀI TỐN TÌM B GHÉP C C I V I TR NG S C C I TRÊN TH HAI PHÍA 301 12.5 NÂNG C P 301 §13 BÀI TỐN TÌM B GHÉP C C I TRÊN TH 307 13.1 CÁC KHÁI NI M 307 13.2 THU T TOÁN EDMONDS (1965) 308 13.3 THU T TOÁN LAWLER (1973) 310 13.4 CÀI T 312 13.5 PH C T P TÍNH TỐN 316 TÀI LI U C THÊM 319 vi HÌNH V Hình 1: Cây tìm ki m quay lui toán li t kê dãy nh phân .13 Hình 2: X p quân h u bàn c 8x8 .19 Hình 3: ng chéo B-TN mang ch s 10 Hình 4: L u ng chéo N-TB mang ch s 20 thu t gi i (Flowchart) 36 Hình 5: Ký pháp l n, l n l n 41 Hình 6: Tháp Hà N i .54 Hình 7: C u trúc nút c a danh sách n i Hình 8: Danh sách n i n 59 n 59 Hình 9: C u trúc nút c a danh sách n i kép 61 Hình 10: Danh sách n i kép 61 Hình 11: Danh sách n i vòng m t h ng 61 Hình 12: Danh sách n i vòng hai h ng .62 Hình 13: Dùng danh sách vịng mơ t Queue 67 Hình 14: Di chuy n toa tàu 69 Hình 15: Di chuy n toa tàu (2) 69 Hình 16: Cây 70 Hình 17: M c c a nút 71 Hình 18: Cây bi u di n bi u th c 71 Hình 19: Các d ng nh phân suy bi n 72 Hình 20: Cây nh phân hồn ch nh nh phân y Hình 21: ánh s nút c a nh phân bi u di n b ng m ng 73 Hình 22: Nh c i m c a ph y .72 ng pháp bi u di n b ng m ng .73 Hình 23: C u trúc nút c a nh phân .74 Hình 24: Bi u di n b ng c u trúc liên k t .74 Hình 25: ánh s nút c a 3_phân bi u di n b ng m ng 76 Hình 26: Bi u di n t ng quát b ng m ng 77 Hình 27: C u trúc nút c a t ng quát 78 Hình 28: Bi u th c d i d ng nh phân 79 Hình 29: Vịng l p c a QuickSort 95 Hình 30: Tr ng thái tr c g i quy 96 Hình 31: Heap 102 Hình 32: Vun Hình 33: ng 102 o giá tr k[1] cho k[n] xét ph n l i 103 Hình 34: Vun ph n l i thành ng r i l i o tr k[1] cho k[n-1] 103 Hình 35: ánh s bit .106 Hình 36: Thu t toán s p x p tr n .111 vii Hình 37: Máy Pentium 4, 3.2GHz, 2GB RAM t ch m ch p s p x p 108 khoá thu t toán s p x p t t nh t ã [0 7.107] cho dù nh ng c áp d ng 123 Hình 38: Cây nh phân tìm ki m 128 Hình 39: Xóa nút BST 129 Hình 40 Xóa nút ch có m t nhánh BST 130 Hình 41: Xóa nút có c hai nhánh BST thay b ng nút c c ph i c a trái 130 Hình 42: Xóa nút có c hai nhánh BST thay b ng nút c c trái c a ph i 130 Hình 43: ánh s bit 133 Hình 44: Cây tìm ki m s h c 133 Hình 45: Cây tìm ki m c s 136 Hình 46: V i dài dãy bit z = 3, tìm ki m c s g m khoá 2, 4, sau thêm giá tr 137 Hình 47: RST ch a khố 2, 4, 5, RST sau lo i b giá tr 138 Hình 48: Cây tìm ki m c s a) Trie tìm ki m c s b) 140 Hình 49: Hàm quy tính s Fibonacci 151 Hình 50: Tính tốn truy v t 154 Hình 51: Truy v t 163 Hình 52: Ví d v mơ hình Hình 53: Phân lo i th 178 th 179 Hình 54 182 Hình 55 183 Hình 56: th ng i 186 Hình 57: Cây DFS 189 Hình 58: Cây BFS 192 Hình 59: th G thành ph n liên thơng G1, G2, G3 c a 193 Hình 60: Kh p c u 193 Hình 61: Liên thơng m nh liên thông y u 194 Hình 62: th Hình 63: n y 195 th vơ h ng bao óng c a 195 Hình 64: Ba d ng cung DFS 199 Hình 65: Thu t toán Tarjan “b ” DFS 201 Hình 66: ánh s l i, o chi u cung t BFS v i cách ch n nh xu t phát ng c l i v i th t t xong (th t 11, 10… 3, 2, 1) 206 Hình 67: th G m t s ví d khung T1, T2, T3 c a 210 Hình 68: Cây khung DFS (a) khung BFS (b) (M i tên ch chi u i th m Hình 69: Phép nh) 210 nh chi u DFS 213 Hình 70: Phép ánh s ghi nh n cung ng Hình 71: Mơ hình c lên cao nh t 215 th c a toán b y c u 219 Hình 72 220 Hình 73 220 Hình 74 226 viii Hình 75: Phép ánh l i ch s theo th t tôpô 241 Hình 76: Hai g c r1 r2 m i h p nh t chúng .252 Hình 77: M ng v i kh n ng thông qua (1 phát, thu) m t lu ng c a v i giá tr 260 Hình 78: M ng G m ng th ng d Gf t ng ng (ký hi u f[u,v]:c[u,v] ch lu ng f[u, v] kh n ng thông qua c[u, v] cung (u, v)) 264 Hình 79: M ng th ng d Hình 80: Lu ng m ng G tr ng t ng lu ng 265 c sau t ng 265 Hình 81: M ng gi c a m ng có nhi u i m phát nhi u i m thu 276 Hình 82: Thay m t nh u b ng hai nh uin, uout 277 Hình 83: M ng gi c a m ng có kh n ng thơng qua c a cung b ch n hai phía 277 Hình 84: th hai phía 283 Hình 85: th hai phía b ghép M .284 Hình 86: Mơ hình lu ng c a tốn tìm b ghép c c i th hai phía 288 Hình 87: Phép xoay tr ng s c nh .292 Hình 88: Thu t toán Hungari .295 Hình 89: Cây pha “m c” l n h n sau m i l n xoay tr ng s c nh tìm Hình 90: ng 302 th G m t b ghép M 307 Hình 91: Phép ch p Blossom .309 Hình 92: N Blossom dò ng xuyên qua Blossom .309 306 Chuyên Enlarge; end; end; procedure Result; {In k t qu } var i, j, Count, W: Integer; f: Text; begin Assign(f, OutputFile); Rewrite(f); WriteLn(f, 'Optimal assignment:'); W := 0; Count := 0; for i := to m begin j := matchX[i]; if c[i, j] < maxC then begin Inc(Count); WriteLn(f, Count:3, ') x[', i, '] - y[', j, '] ', c[i, j]); W := W + c[i, j]; end; end; WriteLn(f, 'Cost: ', W); Close(f); end; begin Enter; Init; Solve; Result; end HSPHN 1999-2004 Lý thuy t th 307 §13 BÀI TỐN TÌM B GHÉP C C I TRÊN TH 13.1 CÁC KHÁI NI M Xét th G = (V, E), m t b ghép chung Bài tốn tìm b ghép c c Cho m t i th G m t t p c nh ôi m t khơng có th t ng qt phát bi u nh sau: th G, ph i tìm m t b ghép c c V i m t b ghép M c a Nh ng c nh thu c M nh i G (b ghép có nhi u c nh nh t) th G, ta g i: c g i c nh ã ghép hay c nh Nh ng c nh không thu c M m c g i c nh ch a ghép hay c nh nh t Nh ng nh u mút c a c nh nh ch a ghép m c g i nh ã ghép, nh ng nh l i g i M t ng i c b n ( ng i khơng có nh l p l i) c g i ng pha n u b t u b ng m t c nh nh t ti p theo c nh m, nh t n m n i ti p xen k M t chu trình c b i qua nh t m, nh t n m n i c g i nh c ng m m t ghép Ví d : V i n (chu trình khơng có nh l p l i) c g i m t Blossom n u nh, b t u k t thúc b ng c nh nh t d c chu trình, c nh ti p xen k nh xu t phát c a chu trình (c ng nh k t thúc) s (base) c a Blossom ng pha b t u m t nh ch a ghép k t thúc m t nh ch a th G b ghép M Hình 90: ng (8, 1, 2, 5, 6, 4) m t ng pha Chu trình (2, 3, 4, 6, 5, 2) m t Blossom ng (8, 1, 2, 3, 4, 6, 5, 7) m t ng m ng (8, 1, 2, 3, 4, 6, 5, 2, 1, 9) có c nh m/nh t xen k nh ng không ph i pha (và t t nhiên khơng ph i ng m ) ây khơng ph i ng i c b n Hình 90: th G m t b ghép M Ta d dàng suy Lê Minh Hồng c tính ch t sau: ng 308 ng m c ng nh Blossom c nh m úng c nh Chuyên u ng i Trong m i Blossom, nh ng nh không ph i v i nh ó c ng ph i thu c Blossom dài l v i s c nh nh t nhi u h n s nh c s u nh ã ghép nh ghép Vì Blossom m t chu trình nên m i Blossom, nh ng nh không ph i nh c s u t n t i hai ng pha t nh c s i n nó, m t ng k t thúc b ng c nh m m t ng k t thúc b ng c nh nh t, hai ng pha c hình thành b ng cách i d c theo chu trình theo hai h ng ng c Nh ví d Hình 90, nh có hai ng pha i nh c s i t i: (2, 3, 4) ng pha k t thúc b ng c nh m (2, 5, 6, 4) ng pha k t thúc b ng c nh nh t 13.2 THU T TOÁN EDMONDS (1965) C s c a thu t toán nh lý (C.Berge): M t b ghép M c a không t n t i ng m i v i M th G c c i ch Thu t toán Edmonds: M := ; nh u ch a ghép) for ( if Tìm ng m xu t phát t u then D c ng m : Lo i b nh ng c nh Tr v M b ghép c c i G ; m kh i M; Thêm vào M nh ng c nh nh t ; i u khó nh t thu t tốn Edmonds ph i xây d ng thu t tốn tìm ng m xu t phát t m t nh ch a ghép Thu t tốn ó c xây d ng b ng cách k t h p m t thu t tốn tìm ki m th v i phép ch p Blossom Xét nh ng ng pha xu t phát t m t nh x ch a ghép Nh ng nh có th n ct x b ng m t ng pha k t thúc c nh nh t c gán nhãn “nh t” (g i t t nh nh t), nh ng nh có th n c t x b ng m t ng pha k t thúc c nh m c gán nhãn “ m” (g i t t nh m) V i m t Blossom, ta nh ngh a phép ch p (shrink) phép thay th nh Blossom b ng m t nh nh t Nh ng c nh n i gi a m t nh thu c Blossom t i m t nh v ó khơng thu c Blossom c thay th b ng c nh n i gi a nh ch p v i v gi ngun tính m/nh t Có th ki m ch ng c nh n xét: sau m i phép ch p, c nh m v n c m b o b ghép th m i: HSPHN 1999-2004 Lý thuy t th 309 Shrink Shrink Blossom Blossom = = nh c s c a blossom nh ch p t blossom Hình 91: Phép ch p Blossom Thu t tốn tìm Tr ch t ng m xu t phát t nh xu t phát x nh x có th phát bi u nh sau c gán nhãn m Ti p theo thu t tốn tìm ki m th b t u t x, theo nguyên t c: t nh m ch c phép i ti p theo c nh nh t t nh nh t ch c i ti p theo c nh m M i th m t i m t nh, ta gán nhãn m/nh t cho nh ó ti p t c thao tác tìm ki m th nh bình th ng C ng trình tìm ki m, m i phát hi n th y m t c nh nh t n i hai nh m, ta d ng l i n u gán nhãn ti p s g p tình tr ng m t nh có c hai nhãn m/nh t, tr ng h p này, Blossom c phát hi n (xem tính ch t c a Blossom) b ch p thành m t nh, thu t toán cb t ul iv i th m i cho t i tr l i c câu h i: “có t n t i ng m xu t phát t x hay không?" N u ng m tìm c khơng i qua nh ch p ta ch vi c t ng c p d c theo ng m N u ng m có i qua m t nh ch p ta l i n nh ch p ó thành Blossom thay nh ch p ng m b ng m t o n ng xuyên qua Blossom: Expand Hình 92: N Blossom Lê Minh Hồng dị ng xun qua Blossom Expand 310 Chuyên L u ý r ng không ph i Blossom c ng b ch p, ch nh ng Blossom nh h ng t i trình tìm ng m m i ph i ch p m b o r ng ng m tìm c ng i c b n Tuy nhiên vi c cài t tr c ti p phép ch p Blossom n nh r c r i, òi h i m t ch ng trình v i ph c t p O(n ) D i ây ta s trình bày m t ph ng pháp cài t hi u qu h n v i ph c t p O(n3), ph ng pháp cài t không ph c t p, nh ng yêu c u ph i hi u r t rõ b n ch t thu t tốn 13.3 THU T TỐN LAWLER (1973) Trong thu t toán Edmonds, sau ch p m i Blossom thành m t nh nh ó hồn tồn l i có th n m m t Blossom m i b ch p ti p Thu t toán Lawler ch quan tâm n nh ch p cu i cùng, i di n cho Blossom nh t (Outermost Blossom), nh ch p cu i c nh danh ( ánh s ) b ng nh c s c a Blossom ngồi nh t C ng thao tác ch p/n nói mà ta c n m r ng khái ni m Blossom, có th coi m t Blossom m t t p nh n t m t nh ch p ch không n thu n ch m t chu trình pha c b n n a Xét m t Blossom B có nh c s nh r V i v B, v r, ta l u l i hai ng pha t r t i v, m t ng k t thúc b ng c nh m m t ng k t thúc b ng c nh nh t, nh v y có hai lo i v t gãn cho m i nh v (hai v t c c p nh t trình tìm ng): S[v] nh li n tr c v pha lo i S[v] = ng pha k t thúc b ng c nh m, n u không t n t i ng T[v] nh li n tr c v pha lo i T[v] = ng pha k t thúc b ng c nh nh t, n u không t n t i ng Bên c nh hai nhãn S T, m i Nhãn b[v] nh v cịn có thêm: nh c s c a Blossom ch a v Hai nh u v thu c m t Blossom b[u] = b[v] Nhãn match[v] nh ghép v i Khi ó thu t tốn tìm B nh v N u v ch a ghép match[v] = ng m b t ut nh x ch a ghép có th phát bi u nh sau: c 1: (Init) Hàng x i Queue dùng V im i Gán S[x] ch a nh ng nh m ch t, ban u ch g m m t nh m nh u, kh i gán b[u] = u match[u] = v i u 0; v i u x, gán S[u] = V i v: gán T[v] = B c 2: (BFS) L p l i b V im i nh c sau cho t i hàng i r ng: m u l y t Queue, xét nh ng c nh nh t (u, v): N u v ch a th m: HSPHN 1999-2004 Lý thuy t th 311 N u: v nh ch a ghép v nh ã ghép Tìm th y th m v ng m k t thúc v, d ng th m match[v] y match[v] vào Queue L u v t: C p nh t hai nhãn S T N u v ã th m N u v nh nh t ho c b[v] = b[u] N u v nh m b[v] b qua b[u] ta phát hi n c blossom m i ch a u v, ó: Phát hi n nh c s : Truy v t ng i ng c t hai nh m u v theo hai ng pha v nút g c, ch n l y nh a nh m chung g p u tiên trình truy v t ng c Khi ó Blossom m i phát hi n s có nh c s a Gán l i v t: G i (a = i[1], i[2], …, i[p] = u) (a = j[1], j[2], …, j[q] = v) l n l t hai ng pha d n t a t i u v Khi ó (a = i[1], i[2], …, i[p] = u, j[q] = v, j[q1], …, j[1] = a) m t chu trình pha i t a t i u v r i quay tr v a B ng cách i d c theo chu trình theo hai h ng ng c nhau, ta có th gán l i t t c nhãn S T c a nh ng nh chu trình L u ý r ng không c gán l i nhãn S T cho nh ng nh k mà b[k] = a, v i nh ng nh k có b[k] nhãn S T theo chu trình b t k S[k] T[k] tr Ch p Blossom: Xét nh ng c t t i (ch a bao gi ti p t i nh ng b c sau c nh y vào Queue) 0) mà ch a y v vào Queue ch t ng m tr v ng m , n u b c khơng tìm th y i r ng k t lu n khơng tìm th y ng m Sau ây m t s ví d v tr ng h p t nh m u xét c nh nh t (u, v): ng h p 1: v ch a th m ch a ghép: S:2 x S:2 v u x T:1 T:1 Tìm th y ng h p 2: v ch a th m ã ghép Lê Minh Hoàng T:3 u Tr m (có nhãn S[v] c 3: N u b c tìm hàng Tr c ó ã có hay ch a nh v mà b[v] {b[i[1]], b[i[2]], …, b[i[p]], b[j[1]], b[j[2]], …, b[j[q]]}, gán l i b[v] = a N u v B a b t bu c ph i gán l i ng m v ng m 312 Chuyên S:2 S:2 S:4 v u x T:3 v u x T:1 T:1 Th m c v l n match[v], gán nhãn T[v] S[match[v]] ng h p 3: v ã th m, Tr nh m thu c blossom v i u T:3 S:5 T:7 S:4 u x T:1 S:2 T:3 S:7 v T:5 S:6 b[.] = Không xét, b qua ng h p 4: v ã th m, Tr nh T:3 m b[u] b[v] T:3 S:5 T:7 S:4 S:4 a x T:1 S:2 x S:6 Phát hi n Blossom, tìm nh S:2 T:3 T:1 T:3 S:7 nh c s a = 3, gán l i nhãn S T d c chu trình pha m m i 4, vào hàng i, T i nh ng b c sau, t t i nh 6, s tìm th y m k t thúc 8, truy v t theo nhãn S T tìm c ng (1, 2, 3, 4, 5, 7, 6, 8) T:5 S:6 y hai ng T t ng c a ph ng pháp Lawler dùng nhãn b[v] thay cho thao tác ch p tr c ti p Blossom, dùng nhãn S T truy v t tìm ng m , tránh thao tác n Blossom Ph ng pháp d a m t nh n xét: M i tìm ng m , n u ng m ó xun qua m t Blossom ngồi nh t ch c ch n ph i i vào Blossom t nút c s thoát kh i Blossom b ng m t c nh nh t 13.4 CÀI Ta s cài T t ph ng pháp Lawler v i khuôn d ng Input/Output nh sau: Input: file v n b n GMATCH.INP HSPHN 1999-2004 Lý thuy t th 313 Dòng 1: Ch a hai s n, m l n l d u cách (n t s c nh s th cách nh t m t 1000) m dòng ti p theo, m i dòng ch a hai s u, v t ng tr ng cho m t c nh (u, v) c a Output: file v n b n GMATCH.OUT, ghi b ghép c c 10 Ch nh c a ng trình s a i m t chút mơ hình cài i tìm GMATCH.INP 10 11 12 16 24 28 34 36 56 59 10 78 79 th c GMATCH.OUT 1) 2) 3) 4) 10 5) t d a vào nh n xét: v m t nh m n u ch n u v = x ho c match[v] m t nh nh t, v y m t nh v có ph i nh m hay khơng ta có th ki m tra b ng bi u th c: ki m tra (v = x) or (match[v] 0) and (T[match[v]] 0) = TRUE N u v Các bi n nh c s d ng v i vai trò nh sau: match[v] b[v] m S[v] = match[v] nh ghép v i nh v nh c s c a Blossom ch a v T[v] nh li n tr c v ng pha t T[v] = n u trình BFS ch a xét t i v nh xu t phát t i v k t thúc b ng c nh nh t, InQueue[v] bi n Boolean, InQueue[v] = True v nh m ã ch t start finish: N i b t u k t thúc ng m P_4_13_1.PAS * Ph ng pháp Lawler áp d ng cho thu t toán Edmonds {$MODE DELPHI} (*This program uses 32-bit Integer [-231 231 - 1]*) program MatchingInGeneralGraph; const InputFile = 'GMATCH.INP'; OutputFile = 'GMATCH.OUT'; max = 1000; var a: array[1 max, max] of Boolean; match, Queue, b, T: array[1 max] of Integer; InQueue: array[1 max] of Boolean; n, Front, Rear, start, finish: Integer; procedure Enter; var i, m, u, v: Integer; f: Text; begin Assign(f, InputFile); Reset(f); Lê Minh Hoàng c y vào Queue 314 Chuyên FillChar(a, SizeOf(a), False); ReadLn(f, n, m); for i := to m begin ReadLn(f, u, v); a[u, v] := True; a[v, u] := True; end; Close(f); end; procedure Init; {Kh i t o b ghép r ng} begin FillChar(match, SizeOf(match), 0); end; procedure InitBFS; {Th t c cgi kh i t o tr c tìm var i: Integer; begin {Hàng i ch g m m t nh m start} Front := 1; Rear := 1; Queue[1] := start; FillChar(InQueue, SizeOf(InQueue), False); InQueue[start] := True; {Các nhãn T c kh i gán = 0} FillChar(T, SizeOF(T), 0); {Nút c s c a outermost blossom ch a i c kh i t o i} for i := to n b[i] := i; finish := 0; {finish = ngh a ch a tìm th y ng m } end; procedure Push(v: Integer); { y m t begin Inc(Rear); Queue[Rear] := v; InQueue[v] := True; end; nh function Pop: Integer; {L y m t begin Pop := Queue[Front]; Inc(Front); end; m kh i hàng nh m v vào hàng ng m xu t phát t start} i} i, tr v k t qu hàm} {Khó nh t c a ph ng pháp Lawler th t c này: Th t c x lý g p c nh nh t n i hai procedure BlossomShrink(p, q: Integer); var i, NewBase: Integer; Mark: array[1 max] of Boolean; {Th t c tìm nút c s b ng cách truy v t ng c theo ng pha function FindCommonAncestor(p, q: Integer): Integer; var InPath: array[1 max] of Boolean; begin FillChar(InPath, SizeOf(Inpath), False); repeat {Truy v t t p} p := b[p]; {Nh y t i nút c s c a Blossom ch a p, phép nh InPath[p] := True; { ánh d u nút ó} if p = start then Break; {N u ã truy v n n i xu t phát p := T[match[p]]; {N u ch a v n start truy lùi ti p until False; nh m p, q} t p q} y t ng t c d ng} hai b c, theo c nh truy v t} m r i theo c nh nh t} HSPHN 1999-2004 Lý thuy t th repeat {Truy v t t q, t ng t nh i v i p} q := b[q]; if InPath[q] then Break; {Tuy nhiên n u ch m vào q := T[match[q]]; until False; FindCommonAncestor := q; {Ghi nh n nh c s m i} end; 315 ng pha c a p d ng ngay} procedure ResetTrace(x: Integer); {Gán l i nhãn v t d c ng pha t start t i x} var u, v: Integer; begin v := x; while b[v] NewBase {Truy v t ng pha t start t i nh m x} begin u := match[v]; Mark[b[v]] := True; { ánh d u nhãn blossom c a nh ng i} Mark[b[u]] := True; v := T[u]; if b[v] NewBase then T[v] := u; {Ch t l i v t T[v] n u b[v] không ph i nút c s m i} end; end; begin {BlossomShrink} FillChar(Mark, SizeOf(Mark), False); {T t c nhãn b[v] c kh i t o ch a b ánh d u} NewBase := FindCommonAncestor(p, q); {xác nh nút c s } ResetTrace(p); ResetTrace(q); {Gán l i nhãn} if b[p] NewBase then T[p] := q; if b[q] NewBase then T[q] := p; {Ch p blossom gán l i nhãn b[i] cho nh i n u blossom b[i] b ánh d u} for i := to n if Mark[b[i]] then b[i] := NewBase; {Xét nh ng nh m i ch a c a vào Queue n m Blossom m i, y i Queue ch t sau} for i := to n if not InQueue[i] and (b[i] = NewBase) then Push(i); end; {Th t c tìm ng m } procedure FindAugmentingPath; var u, v: Integer; begin InitBFS; {Kh i t o} repeat {BFS} u := Pop; {Rút m t nh m u kh i hàng i} {Xét nh ng nh v k u qua m t c nh nh t mà v không n m blossom v i u} for v := to n if (a[u, v]) and (match[u] v) and (b[u] b[v]) then if (v = start) or (match[v] 0) and (T[match[v]] 0) then {N u v nh m} BlossomShrink(u, v) {thì gán l i v t, ch p blossom } else if T[v] = then {N u v nh nh t ch a th m t i} if match[v] = then {N u v ch a ghép ngh a tìm c ng m k t thúc v, thoát} begin T[v] := u; finish := v; Exit; end else {N u v ã ghép ghi v t ng i, th m v, th m c match[v] y match[v] vào Queue} begin T[v] := u; Push(match[v]); Lê Minh Hoàng 316 Chuyên end; until Front > Rear; end; procedure Enlarge; {N i r ng b ghép b i var v, next: Integer; begin repeat v := T[finish]; next := match[v]; match[v] := finish; match[finish] := v; finish := next; until finish = 0; end; ng m b t u t start, k t thúc procedure Solve; {Thu t toán Edmonds} var u: Integer; begin for u := to n if match[u] = then begin start := u; {V i m i nh ch a ghép start} FindAugmentingPath; {Tìm ng m b t u t start} if finish then Enlarge; {N u th y n i r ng b ghép theo end; end; finish} ng m này} procedure Result; {In b ghép tìm c} var u, count: Integer; f: Text; begin Assign(f, OutputFile); Rewrite(f); count := 0; for u := to n if match[u] > u then {V a tránh in l p c nh (u, v) (v, u), v a lo i nh ng begin Inc(count); WriteLn(f, count, ') ', u, ' ', match[u]); end; Close(f); end; nh không ghép c (match[.]=0)} begin Enter; Init; Solve; Result; end 13.5 PH C T P TÍNH TỐN Th t c BlossomShrink có ph c t p O(n) Th t c FindAugmentingPath c n không n l n g i th t c BlossomShrink, c ng thêm chi phí c a thu t tốn tìm ki m theo chi u r ng, có ph c t p O(n2) Ph ng pháp Lawler c n không n l n g i th t c FindAugmentingPath nên có ph c t p tính tốn O(n3) HSPHN 1999-2004 Lý thuy t th 317 Cho n nay, ph ng pháp t t nh t bi t n c a Micali Vazizani (1980), có th tham kh o tài li u khác Lê Minh Hồng gi i tốn tìm b ghép t ng qt ph c t p tính tốn O th c n.m B n có TÀI LI U C THÊM D i ây hai cu n sách có th nói kinh i n mà h u h t tài li u v thu t toán trích d n nhi u t hai cu n sách Các b n nên tìm m i cách c u Title: The Art of Computer Programming, 3rd edition Author: Donald E Knuth Volume 1: Fundamental Algorithms, ISBN: 0-201-89683-4 Volume 2: Seminumerical Algorithms, ISBN: 0-201-89684-2 Volume 3: Sorting and Searching, ISBN: 0-201-89685-0 Volume 4: Combinatorial Algorithms (in preparation) Volume 5: Syntactic Algorithms (in preparation) Publisher: Addison-Wesley, 1998 Title: Introduction to Algorithms, 2nd edition, ISBN: 0262032937 Authors: Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest Publisher: The MIT Press, 2001 Ngoài b n có th tham kh o thêm nh ng cu n sách sau ây: Alfred V Aho, Jeffrey D Ullman, John E Hopcroft Data Structures and Algorithms, ISBN: 0201000237, Addison Wesley, 1983 Robert Sedgewick Algorithms 2nd edition, ISBN: 0201066734, Addison Wesley, 1988 Mikhail J Atallah Ed Algorithms and Theory of Computation Handbook, ISBN: 0849326494, CRC Press, 1998 ... Nam - Tây B c ( N-TB) b t k s i qua m t s ô, ó có tính ch t: Hàng - C t = C (Const) V i m i ng chéo N-TB ta có h ng s C v i m t h ng s C: - n C có th ng chéo N- TB t - n ánh ch s cho Lê Minh. .. n x[k-1] x[k] - n-1 … x[i] n-k+i … x[1] T n - k + ó suy x[i-1] + x[i] n - k + i (1 i k) ây ta gi thi t có thêm m t s x[0] = xét i = Nh v y ta s xét t t c cách ch n x[1] t (=x[0] + 1) n n - k +... 231 242 344 c TOURISM.OUT 1-> 3-> 2-> 4-> 1 Cost: P_1_04_1.PAS * K thu t nhánh c n dùng cho toán ng i du l ch {$MODE DELPHI} (*This program uses 32-bit Integer [-2 31 231 - 1]*) program TravellingSalesman;

Ngày đăng: 19/03/2014, 04:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan