Bài giảng chuyên đề

258 332 0
Bài giảng chuyên đề

Đ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

Bài toán lit kê Lê Minh Hoàng { 1z MC LC § 0. GI I THIU 2 § 1. NH C LI MT S KIN THC I S T HP . 3 I. CH NH HP LP .3 II. CH NH HP KHÔNG LP .3 III. HOÁN V  3 IV. T  HP .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 TP CON K PHN 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 TP CON K PHN T 14 III. LI T KÊ CÁC CHNH HP KHÔNG LP CHP K 15 IV. BÀI TOÁN PHÂN TÍCH S  .16 V. BÀI TOÁN X P HU .18 § 4. K  THUT NHÁNH CN 22 I. BÀI TOÁN T I U 22 II. S  BÙNG N T HP .22 III. MÔ HÌNH K  THUT NHÁNH CN .22 IV. BÀI TOÁN NG I DU LCH .23 V. DÃY ABC 25 Bài toán lit kê Lê Minh Hoàng { 2z § 0. GII THIU Trong thc t, có mt s bài toán yêu cu ch rõ: trong mt tp các đi tng cho trc có bao nhiêu đi tng tho mãn nhng điu kin nht đnh. Bài toán đó gi là bài toán đm cu hình t hp. Trong lp các bài toán đm, có nhng bài toán còn yêu cu ch rõ nhng cu hình tìm đc tho mãn điu kin đã cho là nhng cu hình nào. Bài toán yêu cu đa ra danh sách các cu hình có th có gi là bài toán lit kê t hp.  gii bài toán lit kê, cn phi xác đnh đc mt thut toán đ có th theo đó ln lt xây dng đc tt c các cu hình đang quan tâm. Có nhiu phng pháp lit kê, nhng chúng cn phi đáp ng đc hai yêu cu di đây: • Không đc lp li mt cu hình • Không đc b sót mt cu hình Có th nói rng, phng pháp lit kê là phng k cui cùng đ gii đc mt s bài toán t hp hin nay. Khó khn chính ca phng pháp này chính là s bùng n t hp.  xây dng 1 t cu hình (con s này không phi là ln đi vi các bài toán t hp - Ví d lit kê các cách xp n≥13 ngi quanh mt bàn tròn) và gi thit rng mi thao tác xây dng mt khong 1 giây, ta phi mt quãng 31 nm mi gii xong. Tuy nhiên cùng vi s phát trin ca máy tính đin t, bng phng pháp lit kê, nhiu bài toán t hp đã tìm thy li gii. Qua đó, ta cng nên bit rng ch nên dùng phng pháp lit kê khi không còn mt phng pháp nào khác tìm ra li gii. Chính nhng n lc gii quyt các bài toán thc t không dùng phng pháp lit kê đã thúc đy s phát trin ca nhiu ngành toán hc. Cui cùng, nhng tên gi sau đây, tuy v ngha không phi đng nht, nhng trong mt s trng hp ngi ta có th dùng ln ngha ca nhau đc. ó là: • Phng pháp lit kê • Phng pháp vét cn trên tp phng án • Phng pháp duyt toàn b Bài toán lit kê Lê Minh Hoàng { 3z § 1. NHC LI MT S KIN THC I S T HP Cho S là mt tp hu hn gm n phn t và k là mt s t nhiên. Gi X là tp các s nguyên dng t 1 đn k: X = {1, 2, ., k} I. CHNH HP LP Mi ánh x f: X → S. Cho tng ng vi mi i ∈ X, mt và ch mt phn t f(i) ∈ S. c gi là mt chnh hp lp chp k ca S. Nhng do X là tp hu hn (k phn t) nên ánh x f có th xác đnh qua bng các giá tr f(1), f(2), ., f(k). Ví d: S = {A, B, C, D, E, F}; k = 3. Mt ánh x f có th cho nh sau: i 123 f(i) E C E Nên ngi ta đng nht f vi dãy giá tr (f(1), f(2), ., f(k)) và coi dãy giá tr này cng là mt chnh hp lp chp k ca S. Nh ví d trên (E, C, E) là mt chnh hp lp chp 3 ca S. D dàng chng minh đc kt qu sau bng quy np hoc bng phng pháp đánh giá kh nng la chn: S chnh hp lp chp k ca tp gm n phn t: k k n nA = II. CHNH HP KHÔNG LP Khi f là đn ánh có ngha là vi ∀i, j ∈ X ta có f(i) = f(j) ⇔ i = j. Nói mt cách d hiu, khi dãy giá tr f(1), f(2), ., f(k) gm các phn t thuc S khác nhau đôi mt thì f đc gi là mt chnh hp không lp chp k ca S. Ví d mt chnh hp không lp (C, A, E): i 123 f(i) C A E S chnh hp không lp chp k ca tp gm n phn t: )!kn( !n )1kn) .(2n)(1n(nA k n − =+−−−= III. HOÁN V Khi k = n. Mt chnh hp không lp chp n ca S đc gi là mt hoán v các phn t ca S. Ví d: mt hoán v: (A, D, C, E, B, F) ca S = {A, B, C, D, E, F} i123456 f(i) A D C E B F  ý rng khi k = n thì s phn t ca tp X = {1, 2, , n} đúng bng s phn t ca S. Do tính cht đôi mt khác nhau nên dãy f(1), f(2), ., f(n) s lit kê đc ht các phn t trong S. Nh vy f là toàn ánh. Mt khác do gi thit f là chnh hp không lp nên f là đn ánh. Ta có tng ng 1-1 gia các phn t ca X và S, do đó f là song ánh. Vy nên ta có th đnh ngha mt hoán v ca S là mt song ánh gia {1, 2, ., n} và S. S hoán v ca tp gm n phn t = s chnh hp không lp chp n: !nP n = IV. T HP Mt tp con gm k phn t ca S đc gi là mt t hp chp k ca S. Bài toán lit kê Lê Minh Hoàng { 4z Ly mt tp con k phn t ca S, xét tt c k! hoán v ca tp con này. D thy rng các hoán v đó là các chnh hp không lp chp k ca S. Ví d ly tp {A, B, C} là tp con ca tp S trong ví d trên thì: (A, B, C), (C, A, B), (B, C, A), . là các chnh hp không lp chp 3 ca S. iu đó tc là khi lit kê tt c các chnh hp không lp chp k thì mi t hp chp k s đc tính k! ln. Vy: S t hp chp k ca tp gm n phn t: )!kn(!k !n !k A C k n k n − == S tp con ca tp n phn t: nnn n 1 n 0 n 2)11(C .CC =+=+++ Bài toán lit kê Lê Minh Hoàng { 5z § 2. PHNG PHÁP SINH (GENERATE) Phng pháp sinh có th áp dng đ gii bài toán lit kê t hp đt ra nu nh hai điu kin sau tho mãn: 1. Có th xác đnh đc mt th t trên tp các cu hình t hp cn lit kê. T đó có th xác đnh đc cu hình đu tiên và cu hình cui cùng trong th t đã xác đnh 2. Xây dng đc thut toán t cu hình cha phi cu hình cui, sinh ra đc cu hình k tip nó. Phng pháp sinh có th mô t nh sau: <Xây dng cu hình đu tiên>; repeat <a ra cu hình đang có>; <T cu hình đang có sinh ra cu hình k tip nu còn>; until <ht cu hình>; Th t t đin Trên các kiu d liu đn gin chun, ngi ta thng nói ti khái nim th t. Ví d trên kiu s thì có quan h: 1 < 2; 2 < 3; 3 < 10; ., trên kiu ký t Char thì cng có quan h 'A' < 'B'; 'C' < 'c' . Xét quan h th t toàn phn "nh hn hoc bng" ký hiu "≤" trên mt tp hp S, là quan h hai ngôi tho mãn bn tính cht: Vi ∀a, b, c ∈ S • Tính ph bin: Hoc là a ≤ b, hoc b ≤ a; • Tính phn x: a ≤ a • Tính phn đi xng: Nu a ≤ b và b ≤ a thì bt buc a = b. • Tính bc cu: Nu có a ≤ b và b ≤ c thì a ≤ c. Trong trng hp a ≤ b và a ≠ b, ta dùng ký hiu "<" cho gn, (ta ngm hiu các ký hiu nh ≥, >, khi phi đnh ngha) Ví d nh quan h "≤" trên các s nguyên cng nh trên các kiu vô hng, lit kê là quan h th t toàn phn. Trên các dãy hu hn, ngi ta cng xác đnh mt 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 phn t ca a 1 , ., a n , b 1 , ., b n đã có quan h th t "≤". Khi đó a ≤ b nu nh • Hoc a i = b i vi ∀i: 1 ≤ i ≤ n. • Hoc tn ti mt s nguyên dng 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 trng hp này, ta có th vit a < b. Th t đó gi là th t t đin trên các dãy đ dài n. Khi đ dài hai dãy a và b không bng nhau, ngi ta cng xác đnh đc th t t đin. Bng cách thêm vào cui dãy a hoc dãy b nhng phn t đc bit gi là phn t ∅ đ đ dài ca a và b bng Bài toán lit kê Lê Minh Hoàng { 6z nhau, và coi nhng phn t ∅ này nh hn tt c các phn t khác, ta li đa v xác đnh th t t đin ca 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 Mt dãy nh phân đ dài n là mt dãy x = x 1 x 2 .x n trong đó x i ∈ {0, 1} (∀i : 1 ≤ i ≤ n). D thy: mt dãy nh phân x đ dài n là biu din nh phân ca mt giá tr nguyên p(x) nào đó nm trong đon [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 lp chng trình lit kê các dãy nh phân theo th t t đin có ngha là s lit kê ln lt các dãy nh phân biu din 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 lit kê nh sau: p(x)01234567 x 000 001 010 011 100 101 110 111 Nh vy dãy đu tiên s là 00 .0 và dãy cui cùng s là 11 .1. Nhn xét rng nu dãy x = (x 1 , x 2 , ., x n ) là dãy đang có và không phi dãy cui cùng thì dãy k tip s nhn đc bng cách cng thêm 1 ( theo c s 2 có nh) vào dãy hin ti. Ví d khi n = 8: Dãy đang có: 10010000 Dãy đang có: 10010111 cng thêm 1: + 1 cng thêm 1: + 1   Dãy mi: 10010001 Dãy mi: 10011000 Nh vy k thut sinh cu hình k tip t cu hình hin ti có th mô t nh sau: Xét t cui dãy v đu (xét t hàng đn v lên), gp s 0 đu tiên thì thay nó bng s 1 và đt tt c các phn t phía sau v trí đó bng 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 liu vào (Input): nhp t file vn bn BSTR.INP cha s nguyên dng n ≤ 30 Kt qu ra(Output): ghi ra file vn bn 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 * Thut toán sinh lit kê các dãy nh phân đ dài n program Binary_Strings; const max = 30; Bài toán lit kê Lê Minh Hoàng { 7z var x: array[1 max] of Integer; n, i: Integer; begin {nh ngha li thit b nhp/xut chun} 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 hin ti} WriteLn; i := n; {x i là ph n t cui dãy, lùi dn i cho ti khi gp s 0 hoc khi i = 0 thì dng} while (i > 0) and (x[i] = 1) do Dec(i); if i > 0 then {Ch a gp phi cu 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; {ã ht cu hình} {óng thit b nhp xut chun, thc ra không cn vì BP s t đng đóng Input và Output trc khi thoát chng trình} Close(Input); Close(Output); end. II. LIT KÊ CÁC TP CON K PHN T Ta s lp chng trình lit kê các tp con k phn t ca tp {1, 2, ., n} theo th t t đin Ví d: vi n = 5, k = 3, ta phi lit kê đ 10 tp 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 vy tp con đu tiên (cu hình khi to) là {1, 2, ., k}. Cu hình kt thúc là {n - k + 1, n - k + 2, ., n}. Nhn xét: Ta s in ra tp con bng cách in ra ln lt các phn t ca nó theo th t tng dn. T đó, ta có nhn xét nu x = {x 1 , x 2 , ., x k } và x 1 < x 2 < . < x k thì gii hn trên (giá tr ln nht có th nhn) ca x k là n, ca x k-1 là n - 1, ca x k-2 là n - 2 . C th: gii hn trên ca x i = n - k + i; Còn tt nhiên, gii hn di ca x i (giá tr nh nht x i có th nhn) là x i-1 + 1. Nh vy nu ta đang có mt dãy x đi din cho mt tp con, nu x là cu hình kt thúc có ngha là tt c các phn t trong x đu đã đt ti gii hn trên thì quá trình sinh kt thúc, nu không thì ta phi sinh ra mt dãy x mi tng dn tho mãn va đ ln hn dãy c theo ngha không có mt tp con k phn t nào chen gia chúng khi sp th t t đin. Ví d: n = 9, k = 6. Cu hình đang có x = {1, 2, 6, 7, 8, 9}. Các phn t x 3 đn x 6 đã đt ti gii hn trên nên đ sinh cu hình mi ta không th sinh bng cách tng mt phn t trong s các x 6 , x 5 , x 4 , x 3 lên đc, ta phi tng x 2 = 2 lên thành x 2 = 3. c cu hình mi là x = {1, 3, 6, 7, 8, 9}. Cu hình này đã tho mãn ln hn cu hình trc nhng cha tho mãn tính cht va đ ln mun vy ta li thay x 3 , x 4 , x 5 , x 6 bng các gii hn di ca nó. Tc 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 cu hình mi x = {1, 3, 4, 5, 6, 7} là cu hình k tip. Nu mun tìm tip, ta li nhn thy rng x 6 = 7 cha đt gii hn trên, nh vy ch cn tng x 6 lên 1 là đc x = {1, 3, 4, 5, 6, 8}. Vy k thut sinh tp con k tip t tp đã có x có th xây dng nh sau: Bài toán lit kê Lê Minh Hoàng { 8z • Tìm t cui dãy lên đu cho ti khi gp mt phn t x i cha đt gii hn 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); • Nu tìm thy: if i > 0 then ♦ Tng x i đó lên 1. x i := x i + 1; (1, 3, 6, 7, 8, 9) ♦ t tt c các phn t phía sau x i bng gii hn di: for j := i + 1 to k do x j := x j-1 + 1; (1, 3, 4, 5, 6, 7) Input: file vn bn SUBSET.INP cha hai s nguyên dng n, k (1 ≤ k ≤ n ≤ 30) cách nhau ít nht mt du cách Output: file vn bn SUBSET.OUT các tp con k phn t ca tp {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 * Thut toán sinh lit kê các tp con k phn t program Combinations; const max = 30; var x: array[1 max] of Integer; n, k, i, j: Integer; begin {nh ngha li thit b nhp/xut chun} 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 khi to)} Count := 0; {Bi n đm} ――repeat {In ra c u hình hin ti} 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 cui dãy, lùi dn i cho ti khi gp mt x i ch a đt gii hn trên n - k + i} while (i > 0) and (x[i] = n - k + i) do Dec(i); if i > 0 then― {N u cha lùi đn 0 có ngha là cha phi cu hình kt thúc} ―― begin Inc(x[i]); {Tng x i lên 1, t các phn t đng sau x i b ng gii hn di ca nó} for j := i + 1 to k do x[j] := x[j - 1] + 1; end; until i = 0; {Lùi đn tn 0 có ngha là tt c các phn t đã đt gii hn trên - ht cu 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 nhng điu kin nht đnh. Bài toán đó gi là bài toán đm cu hình t hp. Trong lp các bài toán đm, có nhng bài toán còn yêu cu ch rõ nhng. cho là nhng cu hình nào. Bài toán yêu cu đa ra danh sách các cu hình có th có gi là bài toán lit kê t hp.  gii bài toán lit kê, cn phi

Ngày đăng: 08/11/2013, 03:15

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