Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 258 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
258
Dung lượng
4,62 MB
Nội dung
Bài toán lit kê Lê Minh Hoàng { 1z MC LC § 0. GI I THIU 2 § 1. NH C LI MT S KIN THC I S T HP . 3 I. CH NH HP LP .3 II. CH NH HP KHÔNG LP .3 III. HOÁN V 3 IV. T HP .3 § 2. PH NG PHÁP SINH (GENERATE) 5 I. SINH CÁC DÃY NH PHÂN DÀI N .6 II. LI T KÊ CÁC TP CON K PHN T 7 III. LI T KÊ CÁC HOÁN V .9 § 3. THU T TOÁN QUAY LUI . 12 I. LI T KÊ CÁC DÃY NH PHÂN DÀI N .13 II. LI T KÊ CÁC TP CON K PHN T 14 III. LI T KÊ CÁC CHNH HP KHÔNG LP CHP K 15 IV. BÀI TOÁN PHÂN TÍCH S .16 V. BÀI TOÁN X P HU .18 § 4. K THUT NHÁNH CN 22 I. BÀI TOÁN T I U 22 II. S BÙNG N T HP .22 III. MÔ HÌNH K THUT NHÁNH CN .22 IV. BÀI TOÁN NG I DU LCH .23 V. DÃY ABC 25 Bài toán lit kê Lê Minh Hoàng { 2z § 0. GII THIU Trong thc t, có mt s bài toán yêu cu ch rõ: trong mt tp các đi tng cho trc có bao nhiêu đi tng tho mãn nhng điu kin nht đnh. Bài toán đó gi là bài toán đm cu hình t hp. Trong lp các bài toán đm, có nhng bài toán còn yêu cu ch rõ nhng cu hình tìm đc tho mãn điu kin đã cho là nhng cu hình nào. Bài toán yêu cu đa ra danh sách các cu hình có th có gi là bài toán lit kê t hp. gii bài toán lit kê, cn phi xác đnh đc mt thut toán đ có th theo đó ln lt xây dng đc tt c các cu hình đang quan tâm. Có nhiu phng pháp lit kê, nhng chúng cn phi đáp ng đc hai yêu cu di đây: • Không đc lp li mt cu hình • Không đc b sót mt cu hình Có th nói rng, phng pháp lit kê là phng k cui cùng đ gii đc mt s bài toán t hp hin nay. Khó khn chính ca phng pháp này chính là s bùng n t hp. xây dng 1 t cu hình (con s này không phi là ln đi vi các bài toán t hp - Ví d lit kê các cách xp n≥13 ngi quanh mt bàn tròn) và gi thit rng mi thao tác xây dng mt khong 1 giây, ta phi mt quãng 31 nm mi gii xong. Tuy nhiên cùng vi s phát trin ca máy tính đin t, bng phng pháp lit kê, nhiu bài toán t hp đã tìm thy li gii. Qua đó, ta cng nên bit rng ch nên dùng phng pháp lit kê khi không còn mt phng pháp nào khác tìm ra li gii. Chính nhng n lc gii quyt các bài toán thc t không dùng phng pháp lit kê đã thúc đy s phát trin ca nhiu ngành toán hc. Cui cùng, nhng tên gi sau đây, tuy v ngha không phi đng nht, nhng trong mt s trng hp ngi ta có th dùng ln ngha ca nhau đc. ó là: • Phng pháp lit kê • Phng pháp vét cn trên tp phng án • Phng pháp duyt toàn b Bài toán lit kê Lê Minh Hoàng { 3z § 1. NHC LI MT S KIN THC I S T HP Cho S là mt tp hu hn gm n phn t và k là mt s t nhiên. Gi X là tp các s nguyên dng t 1 đn k: X = {1, 2, ., k} I. CHNH HP LP Mi ánh x f: X → S. Cho tng ng vi mi i ∈ X, mt và ch mt phn t f(i) ∈ S. c gi là mt chnh hp lp chp k ca S. Nhng do X là tp hu hn (k phn t) nên ánh x f có th xác đnh qua bng các giá tr f(1), f(2), ., f(k). Ví d: S = {A, B, C, D, E, F}; k = 3. Mt ánh x f có th cho nh sau: i 123 f(i) E C E Nên ngi ta đng nht f vi dãy giá tr (f(1), f(2), ., f(k)) và coi dãy giá tr này cng là mt chnh hp lp chp k ca S. Nh ví d trên (E, C, E) là mt chnh hp lp chp 3 ca S. D dàng chng minh đc kt qu sau bng quy np hoc bng phng pháp đánh giá kh nng la chn: S chnh hp lp chp k ca tp gm n phn t: k k n nA = II. CHNH HP KHÔNG LP Khi f là đn ánh có ngha là vi ∀i, j ∈ X ta có f(i) = f(j) ⇔ i = j. Nói mt cách d hiu, khi dãy giá tr f(1), f(2), ., f(k) gm các phn t thuc S khác nhau đôi mt thì f đc gi là mt chnh hp không lp chp k ca S. Ví d mt chnh hp không lp (C, A, E): i 123 f(i) C A E S chnh hp không lp chp k ca tp gm n phn t: )!kn( !n )1kn) .(2n)(1n(nA k n − =+−−−= III. HOÁN V Khi k = n. Mt chnh hp không lp chp n ca S đc gi là mt hoán v các phn t ca S. Ví d: mt hoán v: (A, D, C, E, B, F) ca S = {A, B, C, D, E, F} i123456 f(i) A D C E B F ý rng khi k = n thì s phn t ca tp X = {1, 2, , n} đúng bng s phn t ca S. Do tính cht đôi mt khác nhau nên dãy f(1), f(2), ., f(n) s lit kê đc ht các phn t trong S. Nh vy f là toàn ánh. Mt khác do gi thit f là chnh hp không lp nên f là đn ánh. Ta có tng ng 1-1 gia các phn t ca X và S, do đó f là song ánh. Vy nên ta có th đnh ngha mt hoán v ca S là mt song ánh gia {1, 2, ., n} và S. S hoán v ca tp gm n phn t = s chnh hp không lp chp n: !nP n = IV. T HP Mt tp con gm k phn t ca S đc gi là mt t hp chp k ca S. Bài toán lit kê Lê Minh Hoàng { 4z Ly mt tp con k phn t ca S, xét tt c k! hoán v ca tp con này. D thy rng các hoán v đó là các chnh hp không lp chp k ca S. Ví d ly tp {A, B, C} là tp con ca tp S trong ví d trên thì: (A, B, C), (C, A, B), (B, C, A), . là các chnh hp không lp chp 3 ca S. iu đó tc là khi lit kê tt c các chnh hp không lp chp k thì mi t hp chp k s đc tính k! ln. Vy: S t hp chp k ca tp gm n phn t: )!kn(!k !n !k A C k n k n − == S tp con ca tp n phn t: nnn n 1 n 0 n 2)11(C .CC =+=+++ Bài toán lit kê Lê Minh Hoàng { 5z § 2. PHNG PHÁP SINH (GENERATE) Phng pháp sinh có th áp dng đ gii bài toán lit kê t hp đt ra nu nh hai điu kin sau tho mãn: 1. Có th xác đnh đc mt th t trên tp các cu hình t hp cn lit kê. T đó có th xác đnh đc cu hình đu tiên và cu hình cui cùng trong th t đã xác đnh 2. Xây dng đc thut toán t cu hình cha phi cu hình cui, sinh ra đc cu hình k tip nó. Phng pháp sinh có th mô t nh sau: <Xây dng cu hình đu tiên>; repeat <a ra cu hình đang có>; <T cu hình đang có sinh ra cu hình k tip nu còn>; until <ht cu hình>; Th t t đin Trên các kiu d liu đn gin chun, ngi ta thng nói ti khái nim th t. Ví d trên kiu s thì có quan h: 1 < 2; 2 < 3; 3 < 10; ., trên kiu ký t Char thì cng có quan h 'A' < 'B'; 'C' < 'c' . Xét quan h th t toàn phn "nh hn hoc bng" ký hiu "≤" trên mt tp hp S, là quan h hai ngôi tho mãn bn tính cht: Vi ∀a, b, c ∈ S • Tính ph bin: Hoc là a ≤ b, hoc b ≤ a; • Tính phn x: a ≤ a • Tính phn đi xng: Nu a ≤ b và b ≤ a thì bt buc a = b. • Tính bc cu: Nu có a ≤ b và b ≤ c thì a ≤ c. Trong trng hp a ≤ b và a ≠ b, ta dùng ký hiu "<" cho gn, (ta ngm hiu các ký hiu nh ≥, >, khi phi đnh ngha) Ví d nh quan h "≤" trên các s nguyên cng nh trên các kiu vô hng, lit kê là quan h th t toàn phn. Trên các dãy hu hn, ngi ta cng xác đnh mt quan h th t: Xét a = (a 1 , a 2 , ., a n ) và b = (b 1 , b 2 , ., b n ); trên các phn t ca a 1 , ., a n , b 1 , ., b n đã có quan h th t "≤". Khi đó a ≤ b nu nh • Hoc a i = b i vi ∀i: 1 ≤ i ≤ n. • Hoc tn ti mt s nguyên dng k: 1 ≤ k < n đ: a 1 = b 1 a 2 = b 2 . a k-1 = b k-1 a k = b k a k+1 < b k+1 Trong trng hp này, ta có th vit a < b. Th t đó gi là th t t đin trên các dãy đ dài n. Khi đ dài hai dãy a và b không bng nhau, ngi ta cng xác đnh đc th t t đin. Bng cách thêm vào cui dãy a hoc dãy b nhng phn t đc bit gi là phn t ∅ đ đ dài ca a và b bng Bài toán lit kê Lê Minh Hoàng { 6z nhau, và coi nhng phn t ∅ này nh hn tt c các phn t khác, ta li đa v xác đnh th t t đin ca hai dãy cùng đ dài. Ví d: • (1, 2, 3, 4) < (5, 6) • (a, b, c) < (a, b, c, d) • 'calculator' < 'computer' I. SINH CÁC DÃY NH PHÂN Đ DÀI N Mt dãy nh phân đ dài n là mt dãy x = x 1 x 2 .x n trong đó x i ∈ {0, 1} (∀i : 1 ≤ i ≤ n). D thy: mt dãy nh phân x đ dài n là biu din nh phân ca mt giá tr nguyên p(x) nào đó nm trong đon [0, 2 n - 1]. S các dãy nh phân đ dài n = s các s nguyên ∈ [0, 2 n - 1] = 2 n . Ta s lp chng trình lit kê các dãy nh phân theo th t t đin có ngha là s lit kê ln lt các dãy nh phân biu din các s nguyên theo th t 0, 1, ., 2 n -1. Ví d: Khi n = 3, các dãy nh phân đ dài 3 đc lit kê nh sau: p(x)01234567 x 000 001 010 011 100 101 110 111 Nh vy dãy đu tiên s là 00 .0 và dãy cui cùng s là 11 .1. Nhn xét rng nu dãy x = (x 1 , x 2 , ., x n ) là dãy đang có và không phi dãy cui cùng thì dãy k tip s nhn đc bng cách cng thêm 1 ( theo c s 2 có nh) vào dãy hin ti. Ví d khi n = 8: Dãy đang có: 10010000 Dãy đang có: 10010111 cng thêm 1: + 1 cng thêm 1: + 1 Dãy mi: 10010001 Dãy mi: 10011000 Nh vy k thut sinh cu hình k tip t cu hình hin ti có th mô t nh sau: Xét t cui dãy v đu (xét t hàng đn v lên), gp s 0 đu tiên thì thay nó bng s 1 và đt tt c các phn t phía sau v trí đó bng 0. i := n; while (i > 0) and (x i = 1) do i := i - 1; if i > 0 then begin x i := 1; for j := i + 1 to n do x j := 0; end; D liu vào (Input): nhp t file vn bn BSTR.INP cha s nguyên dng n ≤ 30 Kt qu ra(Output): ghi ra file vn bn BSTR.OUT các dãy nh phân đ dài n. BSTR.INP BSTR.OUT 3 000 001 010 011 100 101 110 111 PROG02_1.PAS * Thut toán sinh lit kê các dãy nh phân đ dài n program Binary_Strings; const max = 30; Bài toán lit kê Lê Minh Hoàng { 7z var x: array[1 max] of Integer; n, i: Integer; begin {nh ngha li thit b nhp/xut chun} Assign(Input, 'BSTR.INP'); Reset(Input); Assign(Output, 'BSTR.OUT'); Rewrite(Output); ReadLn(n); FillChar(x, SizeOf(x), 0); {C u hình ban đu x 1 = x 2 = . = x n := 0} repeat {Thu t toán sinh} for i := 1 to n do Write(x[i]); {In ra c u hình hin ti} WriteLn; i := n; {x i là ph n t cui dãy, lùi dn i cho ti khi gp s 0 hoc khi i = 0 thì dng} while (i > 0) and (x[i] = 1) do Dec(i); if i > 0 then {Ch a gp phi cu hình 11 .1} begin x[i] := 1; {Thay x i b ng s 1} FillChar(x[i + 1], (n - i) * SizeOf(x[1]), 0); {t x i + 1 = x i + 2 = . = x n := 0} end; until i = 0; {ã ht cu hình} {óng thit b nhp xut chun, thc ra không cn vì BP s t đng đóng Input và Output trc khi thoát chng trình} Close(Input); Close(Output); end. II. LIT KÊ CÁC TP CON K PHN T Ta s lp chng trình lit kê các tp con k phn t ca tp {1, 2, ., n} theo th t t đin Ví d: vi n = 5, k = 3, ta phi lit kê đ 10 tp con: 1.{1, 2, 3} 2.{1, 2, 4} 3.{1, 2, 5} 4.{1, 3, 4} 5.{1, 3, 5} 6.{1, 4, 5} 7.{2, 3, 4} 8.{2, 3, 5} 9.{2, 4, 5} 10.{3, 4, 5} Nh vy tp con đu tiên (cu hình khi to) là {1, 2, ., k}. Cu hình kt thúc là {n - k + 1, n - k + 2, ., n}. Nhn xét: Ta s in ra tp con bng cách in ra ln lt các phn t ca nó theo th t tng dn. T đó, ta có nhn xét nu x = {x 1 , x 2 , ., x k } và x 1 < x 2 < . < x k thì gii hn trên (giá tr ln nht có th nhn) ca x k là n, ca x k-1 là n - 1, ca x k-2 là n - 2 . C th: gii hn trên ca x i = n - k + i; Còn tt nhiên, gii hn di ca x i (giá tr nh nht x i có th nhn) là x i-1 + 1. Nh vy nu ta đang có mt dãy x đi din cho mt tp con, nu x là cu hình kt thúc có ngha là tt c các phn t trong x đu đã đt ti gii hn trên thì quá trình sinh kt thúc, nu không thì ta phi sinh ra mt dãy x mi tng dn tho mãn va đ ln hn dãy c theo ngha không có mt tp con k phn t nào chen gia chúng khi sp th t t đin. Ví d: n = 9, k = 6. Cu hình đang có x = {1, 2, 6, 7, 8, 9}. Các phn t x 3 đn x 6 đã đt ti gii hn trên nên đ sinh cu hình mi ta không th sinh bng cách tng mt phn t trong s các x 6 , x 5 , x 4 , x 3 lên đc, ta phi tng x 2 = 2 lên thành x 2 = 3. c cu hình mi là x = {1, 3, 6, 7, 8, 9}. Cu hình này đã tho mãn ln hn cu hình trc nhng cha tho mãn tính cht va đ ln mun vy ta li thay x 3 , x 4 , x 5 , x 6 bng các gii hn di ca nó. Tc là: • x 3 := x 2 + 1 = 4 • x 4 := x 3 + 1 = 5 • x 5 := x 4 + 1 = 6 • x 6 := x 5 + 1 = 7 Ta đc cu hình mi x = {1, 3, 4, 5, 6, 7} là cu hình k tip. Nu mun tìm tip, ta li nhn thy rng x 6 = 7 cha đt gii hn trên, nh vy ch cn tng x 6 lên 1 là đc x = {1, 3, 4, 5, 6, 8}. Vy k thut sinh tp con k tip t tp đã có x có th xây dng nh sau: Bài toán lit kê Lê Minh Hoàng { 8z • Tìm t cui dãy lên đu cho ti khi gp mt phn t x i cha đt gii hn trên n - k + i. i := n; while (i > 0) and (x i = n - k + i) do i := i - 1; (1, 2, 6, 7, 8, 9); • Nu tìm thy: if i > 0 then ♦ Tng x i đó lên 1. x i := x i + 1; (1, 3, 6, 7, 8, 9) ♦ t tt c các phn t phía sau x i bng gii hn di: for j := i + 1 to k do x j := x j-1 + 1; (1, 3, 4, 5, 6, 7) Input: file vn bn SUBSET.INP cha hai s nguyên dng n, k (1 ≤ k ≤ n ≤ 30) cách nhau ít nht mt du cách Output: file vn bn SUBSET.OUT các tp con k phn t ca tp {1, 2, ., n} SUBSET.INP SUBSET.OUT 5 3 {1, 2, 3} {1, 2, 4} {1, 2, 5} {1, 3, 4} {1, 3, 5} {1, 4, 5} {2, 3, 4} {2, 3, 5} {2, 4, 5} {3, 4, 5} PROG02_2.PAS * Thut toán sinh lit kê các tp con k phn t program Combinations; const max = 30; var x: array[1 max] of Integer; n, k, i, j: Integer; begin {nh ngha li thit b nhp/xut chun} Assign(Input, 'SUBSET.INP'); Reset(Input); Assign(Output, 'SUBSET.OUT'); Rewrite(Output); ReadLn(n, k); for i := 1 to k do x[i] := i; {x 1 := 1; x 2 := 2; . ; x 3 := k (C u hình khi to)} Count := 0; {Bi n đm} ――repeat {In ra c u hình hin ti} Write('{'); for i := 1 to k - 1 do Write(x[i], ', '); WriteLn(x[k], '}'); {Sinh ti p} i := k; {x i là ph n t cui dãy, lùi dn i cho ti khi gp mt x i ch a đt gii hn trên n - k + i} while (i > 0) and (x[i] = n - k + i) do Dec(i); if i > 0 then― {N u cha lùi đn 0 có ngha là cha phi cu hình kt thúc} ―― begin Inc(x[i]); {Tng x i lên 1, t các phn t đng sau x i b ng gii hn di ca nó} for j := i + 1 to k do x[j] := x[j - 1] + 1; end; until i = 0; {Lùi đn tn 0 có ngha là tt c các phn t đã đt gii hn trên - ht cu hình} Close(Input); Close(Output); end. [...]... sinh c u hình k ti p cho m i bài toán u n gi n nh trên (Sinh các ch nh h p không l p ch p k theo th t t i n ch ng h n) Ta sang m t chuyên m c sau nói n m t ph ng pháp li t kê có tính ph d ng cao h n, gi i các bài toán li t kê ph c t p h n ó là: Thu t toán quay lui (Back tracking) Lê Minh Hoàng { 12z Bài toán li t kê §3 THU T TOÁN QUAY LUI Thu t toán quay lui dùng gi i bài toán li t kê các c u hình... N KHI TI N HÀNH GI I CÁC BÀI TOÁN TIN H C NH BÀI TOÁN Input → Process → Output (D li u vào → X lý → K t qu ra) Vi c xác nh bài toán t c là ph i xác nh xem ta ph i gi i quy t v n gì?, v i gi thi t nào ã cho và l i gi i c n ph i t nh ng yêu c u nào Khác v i bài toán thu n tuý toán h c ch c n xác nh rõ gi thi t và k t lu n ch không c n xác nh yêu c u v l i gi i, ôi khi nh ng bài toán tin h c ng d ng trong... tích c a các s ó là l n nh t Trên th c t , ta nên xét m t vài tr ng h p c th thông qua ó hi u c bài toán rõ h n và th y c các thao tác c n ph i ti n hành i v i nh ng bài toán n gi n, ôi khi ch c n qua ví d là ta ã có th a v m t bài toán quen thu c gi i II TÌM C U TRÚC D LI U BI U DI N BÀI TOÁN Khi gi i m t bài toán, ta c n ph i nh ngh a t p h p d li u bi u di n tình tr ng c th Vi c l a ch n này tu thu... trong máy tính u c tính b ng ph ng pháp x p x c a gi i tích s Xác nh úng yêu c u bài toán là r t quan tr ng b i nó nh h ng t i cách th c gi i quy t và ch t l ng c a l i gi i M t bài toán th c t th ng cho b i nh ng thông tin khá m h và hình th c, ta ph i phát bi u l i m t cách chính xác và ch t ch hi u úng bài toán Ví d : • Bài toán: M t d án có n ng i tham gia th o lu n, h mu n chia thành các nhóm và... K THU T NHÁNH C N I BÀI TOÁN T I U M t trong nh ng bài toán t ra trong th c t là vi c tìm ra m t nghi m tho mãn m t s i u ki n nào ó, và nghi m ó là t t nh t theo m t ch tiêu c th , nghiên c u l i gi i các l p bài toán t i u thu c v l nh v c quy ho ch toán h c Tuy nhiên c ng c n ph i nói r ng trong nhi u tr ng h p chúng ta ch a th xây d ng m t thu t toán nào th c s h u hi u gi i bài toán, mà cho t i... t nh bài 5 nh ng ch li t kê các t p con có max - min ≤ T (T cho tr c) 7 M t dãy (x1, x2, , xn) g i là m t hoán v hoàn toàn c a t p {1, 2, , n} n u nó là m t hoán v và tho mãn xi ≠ i v i ∀i: 1 ≤ i ≤ n Hãy vi t ch ng trình li t kê t t c các hoán v hoàn toàn c a t p trên (n vào t bàn phím) 8 S a l i th t c in k t qu (PrintResult) trong bài x p h u có th v hình bàn c và các cách t h u ra màn hình 9 Bài. .. Chuy n t t c các bài t p trong bài tr c ang vi t b ng sinh tu n t sang quay lui 11 Xét s giao thông g m n nút giao thông ánh s t 1 t i n và m o n ng n i chúng, m i o n ng n i 2 nút giao thông Hãy nh p d li u v m ng l i giao thông ó, nh p s hi u hai nút giao thông s và d Hãy in ra t t c các cách i t s t i d mà m i cách i không c qua nút giao thông nào quá m t l n Lê Minh Hoàng { 22z Bài toán li t kê... các giá tr nguyên t xi-1 + 1 n n - k + i Qua ó ta có th th y tính ph d ng c a thu t toán quay lui: mô hình cài t có th thích h p cho nhi u bài toán, khác v i ph ng pháp sinh tu n t , v i m i bài toán l i ph i có m t thu t toán sinh k ti p riêng làm cho vi c cài t m i bài m t khác, bên c nh ó, không ph i thu t toán sinh k ti p nào c ng d cài t III LI T KÊ CÁC CH NH H P KHÔNG L P CH P K li t kê các ch nh... du l ch xu t phát t thành ph 1, mu n i th m t t c các thành ph còn l i m i thành ph úng 1 l n và cu i cùng quay l i thành ph 1 Hãy ch ra cho ng i ó hành trình v i chi phí ít nh t Bài toán ó g i là bài toán ng i du l ch hay bài toán hành trình c a m t th ng gia (Traveling Salesman) Cách gi i ây gi a xi và xi+1: hai thành ph liên 1) Hành trình c n tìm có d ng (x1 = 1, x2, , xn, xn+1 = 1) ti p trong hành... thay bài toán là tìm xâu ít ký t 'B' nh t mà v n vi t ch ng trình t ng t nh trên thì ch ng trình s ch y ch m h n chút ít Lý do: th t c Try trên s th l n l t các giá tr 'A', 'B', r i m i n 'C' Có ngh a ngay trong cách tìm, nó ã ti t ki m s d ng ký t 'C' nh t nên trong ph n l n các b d li u nó nhanh chóng tìm ra l i gi i h n so v i bài toán t ng ng tìm xâu ít ký t 'B' nh t Chính vì v y mà n u nh bài yêu . tho mãn nhng điu kin nht đnh. Bài toán đó gi là bài toán đm cu hình t hp. Trong lp các bài toán đm, có nhng bài toán còn yêu cu ch rõ nhng. cho là nhng cu hình nào. Bài toán yêu cu đa ra danh sách các cu hình có th có gi là bài toán lit kê t hp. gii bài toán lit kê, cn phi