Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 14

Chuyn 4 : THIT

K THUT TON

PHNG PHP DUYT QUAY LUI V K THUT NHNH CN


I.
I. MC TIU CA BI HC : A/. MC TIU CHUN CA BI HC : TT Ni dung Mc cn t Kin thc: Bit nguyn l c bn ca phng php quay lui l lit k v th tt c cc kh nng xy dng nghim c th cho bi ton. Hiu c lc tng qut ca mt thut ton quay Chin lc gii ton bng cch lui. 1 duyt ton b. Phng php K nng: quay lui Nhn bit c vect nghim v tng thnh phn ca vecto nghim; Bit c tp iu kin mt vect chn l nghim; Nhn bit c tp cc ng c vin c chn lm thnh phn th i ca vect nghim. Mt s bi ton thng gp Kin thc: c gii bng duyt ton b Hiu cch xc nh cc bc xy dng vect ng c vin v - Bi ton lit k cc dy nh kim tra tm nghim ca mi bi ton c th. phn di n; K nng: 2 - Bi ton lit k tp con k phn Ci t c chng trnh v th nghim chng trnh vi t; cc b d liu khc nhau. - Bi ton xp 8 qun hu; - Bi ton m i tun. B/. MC TIU CHI TIT CA BI HC : Ni dung Mc tiu Bc 1 Bc 2 Bc 3 Ni dung 1 - Pht biu ng - Lng ha c thi - D bo nhng dng - Chin lc gii ton tng duyt ton b, gian thc hin i vi bi tp c th dng cch bng cch duyt ton m t c ni dung li gii theo hng duyt ton b (c th b. ca phng php duyt duyt ton b. xut 1 vi bi ton thc - Phng php quay lui ton b. tin mi..) Ni dung 2 - Pht biu ng - Chng minh c l - xut 1 vi bi ton -Bi ton lit k cc tng duyt ton b do phi dng cch mi c th dng cch dy nh phn di n; trong li gii bi tp duyt ton b trong bi duyt ton b gii. ny. ny, - Vit on code cn - Tnh c thi gian thit . thc hin chng trnh. Ni dung 3 Sau bi hc ny hc - Chng minh c l - Pht biu c nhng -Bi ton lit k tp con sinh s c th: do phi dng cch du hiu c trng ca k phn t; - Pht biu ng duyt ton b trong bi loi bi ton cn dng -Bi ton xp 8 qun tng duyt ton b ny, phng php duyt hu; trong li gii bi tp - Tnh c thi gian ton b. c trng ca -Bi ton m i tun. ny. thc hin chng trnh. li gii vit theo cch - Vit on code cn ny (Cch vit lnh x thit . l , thi gian thc hin ,

Ni dung 4 -Bi ton m i t A n B trn bn c sao cho tng s im thng l max. -Bi ton du lch t A n tt c cc thnh ph (1 ln) ri v li A vi chi ph Min.

Sau bi hc ny hc sinh s c th: - Pht biu ng tng duyt ton b nng cao trong li gii bi tp ny, - Vit on code cn thit .

- Chng minh c l do phi dng cch duyt ton b dung nhnh cn.. trong bi ny, - Tnh c thi gian thc hin chng trnh & so snh c thi gian thc hin nu gii bng duyt ton b bnh thng,

yu cu v b nh..) - Pht biu c nhng du hiu c trng ca loi bi ton cn dng phng php duyt ton b dung nhnh cn.. c trng ca li gii vit theo cch ny (Cch vit lnh x l , thi gian thc hin , yu cu v b nh..)

I.1. Chin lc gii bi ton bng cch duyt ton b. Phng php quay lui

Pht biu bi ton C 8 qun hu trn mt bn c vua 8 x 8. Em cn ch ra cch t 8 qun hu vo bn c vua sao cho chng khng tn cng nhau, tc l khng qun no cng dng, cng ct hoc cng ng cho. Em cn a ra cc phng n c th. xut ca em? Phng n 1: Quay lui vt cn a ra tt c cc nghim Xut pht t u tin ca bn c, t mt qun hu vo Ti mi bc ta chn mt m cha c i n, tin hnh t th. Nu t c th th bc tip theo, nu khng th quay li bc trc. C th: Ta xy dng vector nghim dn tng bc, bt u t vector khng (). Thnh phn u tin x1 c chn ra t tp S1 = A1. Gi s chn c cc thnh phn x1, x2, , xi-1 th t cc iu kin ca bi ton ta xc nh c tp S i. Chn mt phn t xi t Si ta m rng nghim c x1, x2, , xi. Lp li qu trnh trn m rng nghim. Phng n 2: Tm mt nghim bng phng php quay lui Thc hin th quy nh phng n 1, nhng khi tm c mt nghim ta dng li v ghi ra nghim lun. Lc tng qut ca thut ton quay lui vt cn c th biu din bi th tc Backtracking.
procedure Backtrack; begin S1:=A1; k:=1; while k>0 do begin while Sk <> # do begin <chn xk Si>; Sk:=Sk {xk}; if (x1, x2,,xk) l nghim then <a ra nghim>; k:=k+1; <Xc nh Sk>; end; k:=k-1; // quay lui end; end; Trn thc t, thut ton quay lui vt cn thng c dng bng m t quy nh sau: procedure Backtrack(i);// xy dng thnh phn th i begin <Xc nh Si>; for xi Si do begin <ghi nhn thnh phn th i>; if (tm thy nghim) then <a ra nghim> else Backtrack(i+1); <loi thnh phn i>;

end; end;

Bi ton 1 Lit k tt c cc t hp chp k ca tp n s nguyn t 1 n n. Nhn xt: Nghim ca bi ton phi tha mn cc iu kin sau: - L mt vector X = (x1, x2,, xk) - xi ly gi tr trong tp {1, 2, , n} - Rng buc xi < xi+1 vi mi i t 1 n k 1 (v tp khng sp th t nn ta sp chng theo th t tng dn). Ta c 1 x1 <x2 < < xk n, do tp Si (cc ng c vin chn lm thnh phn th i) l t xi-1 + 1 n ( n k + i). iu ny ng cho c trng hp n = 1 ta thm vo x0 = 0. Mu:
program ToHop; const MAX =20; type vector =array[0..MAX]of longint; var x :vector; n,k :longint; procedure GhiNghiem(x:vector); var i :longint; begin for i:=1 to k do write(x[i],' '); writeln; end; procedure ToHop(i:longint); var j:longint; begin for j := x[i-1]+1 to n-k+i do begin x[i] := j; if i=k then GhiNghiem(x) else ToHop(i+1); end; end; BEGIN write('Nhap n, k:'); readln(n,k); x[0]:=0; ToHop(1); END.

Tho lun: Lp bng test vi k = 2, n = 4.


n = 4, k=2 1. 1 2 2. 1 3 3. 1 4

Bi ton 2 (T lm) Lit k tt c cc dy nh phn di n. Input: n Output: tp cc dy nh phn c di n V d: n =3 Dy nh phn c di 3 gm: 000,001,010,011,100,101,110,111 Bi ton 3 Chnh hp lp chp k ca n l mt dy k thnh phn, mi thnh phn l mt phn t ca tp n phn t, c xt n th t v khng yu cu cc thnh phn khc nhau. Mt v d l dy nh phn. Mt dy nh phn di n l mt chnh hp lp chp n ca 2 phn t {0, 1}. Cc dy nh phn di 2: 00, 01, 10, 11. Nhn xt: V c xt n th t nn 01 v 10 l khc nhau. Yu cu: Cn xc nh cc chnh hp lp chp k ca n phn t tc l tm cc nghim tha mn: - L mt vector X = (x1, x2,, xk) - xi ly gi tr trong tp {1, 2, , n} - Khng c rng buc no gia cc thnh phn Mu 1. Ch xt i vi tp s nguyn t 1 n n 2. S dng mt mng x[1..n] biu din chnh hp lp 3. Th tc quy sinh tt c cc chnh hp lp ca n:
procedure ChinhHopLap(i:longint); var j:longint; begin for j := 1 to n do begin x[i] := j; if i=k then GhiNghiem(x) else ChinhHopLap(i+1); end; end;

Tho lun: Lp bng test vi n = 2, k = 3.


1. 2. 3. 4. 5. 6. 7. 8. 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2

n = 2, k=3

Bi ton 4 (t lm) Vit chng trnh cho bi ton m i tun * LM VIC NHM: Tm mt nghim hoc tp hp cc nghim ca bi ton p dng phng php duyt quay lui. 1 Chia lp thnh cc nhm 2-3 HS. 2 Cc nhm tm phng n (Phiu hc tp L1, L2) 3 Cc nhm trnh by kt qu * CNG C 1 Thng nht thut ton quay lui
procedure Backtrack(i);// xy dng thnh phn th i begin <Xc nh Si>; for xi Si do begin

<ghi nhn thnh phn th i>; if (tm thy nghim) then <a ra nghim> else Backtrack(i+1); <loi thnh phn i>; end; end; Vn quan trng i vi thut ton quay lui:

- Tm cch biu din nghim ca bi ton di dng mt dy cc i

tng c chn dn tng bc (x1, x2, , xi, )


- Xc nh tp Si cc ng c vin c chn lm thnh phn th i ca

nghim. Chn cch thch hp biu din Si - Tm cc iu kin mt vector chn l nghim ca bi ton.
* BI LM THM NH (Phiu hc tp L2)
+ T hc - Tm hiu mt s bi ton: lit k cc dy nh phn di n, lit k tp con k phn t, bi ton xp 8 hu. - Nhn xt v dng nghim bi ton, cch chn mt thnh phn ca vect nghim. - Thuyt trnh 1: Nu m hnh tng qut ca thut ton quay lui - Pht vn: Yu cu hc sinh nhn xt v nghim, cch chn mt thnh phn ca vect nghim - Thuyt trnh 2: Mu chng trnh nhiphan.pas nhm mc ch cho HS hiu c cch xc nh cc bc xy dng vect ng c vin v kim tra tm nghim ca mi bi ton c th - Nhm: Trao i v vect nghim v tng thnh phn ca vect nghim, tp iu kin mt vect chn l nghim, tp cc ng c vin c chn lm thnh phn th i ca vect nghim. + T hc - Lp trnh gii bi ton m i tun, lit k dy nh phn. - D n nh: Phn tch thun li v hn ch ca phng php duyt ton b so vi nhng phng php khc, v d cc bi ton sinh tun t hc lp 10. Bi tp qui quay lui

Bi kim tra 60 pht 1. Mc ch: - Kim tra cc kin thc c bn v duyt ton b. 2. Ni dung kim tra: - M hnh ho bi ton c th gii c bng chin lc duyt ton b - Ci t thut ton. 3. Mc tiu: - Nhn bit c bi ton c th gii tt bng cch duyt ton b. - Cng c k nng ci t thut ton 4. Ni dung kim tra: T chun Mt t loi M l mt dy cc ch s, mi ch s nm trong khong t 1 n M. S lng cc ch s c mt trong mt t c gi l chiu di ca t . T loi M c gi l t chun nu n khng cha hai khc (t con) lin nhau m ging nhau. a) Vi mi cp gi tr N v M cho trc, hin th trn mn hnh mt t chun loi M c chiu di N. b) Vi mi cp gi tr N v M cho trc, tm v ghi vo tp vn bn tn TUCHUAN.OUT mi t chun loi M c chiu di N. 2 M 3; 1 N 40000. Th d: 1213123 l t chun loi 3, chiu di 7. 1213213 khng phi l t chun v n cha lin tip hai t con ging nhau l 213. Tng t, 12332 khng phi l t chun v cha lin tip hai t con ging nhau l 3. -------------------------------------p n, hng dn

Ta dng mng v[1..n] lu t cn tm. Ti mi bc i ta xc nh gi tr v[i] trong khong 1..m sao cho v[1..i] l t chun. iu kin P: v[1..i] l t chun. iu kin Q: Dng thut ton theo mt trong hai tnh hung sau y: nu i = n th bi ton c nghim v[1..n], nu i = 0 th bi ton v nghim. TimTu1: Tm 1 nghim. { khi tr mi v tr bng 0 } for i := 1 to n do v[i ] := 0; i := 1; repeat if i > n then { co nghiem v[1..n ] } begin KetQua1(n); { in nghim v[1..n ]} exit; end; if i < 1 then { v nghim } begin KetQua1(0); exit; end; if Tim(i) then inc(i) { tin } else begin { li } v[i] := 0; dec(i); end; until false; Hm Tim hot ng nh sau: duuyt cc gi tr ti v tr v[i] ca t v[1..i] k t v[i] + 1 n m sao cho v[1..i] l t chun. Tim = true nu tn ti mt gi tr v[i] nh vy. Ngc li, nu vi mi v[i] = v[i] + 1..m t v[1..i] u khng chun th Tim = false. function Tim(i: integer): Boolean; begin Tim := true; while v[i] < m do begin inc(v[i ]); if Chuan(i) { v[1..i ] la tu chuan } then exit; end; Tim := false; end; kim tra tnh chun ca t v[1..i], ta lu rng t v[1..i-1] chun (tnh cht P), do ch cn kho st cc cp t c cha v[i], c th l kho st cc cp t c chiu di k ng cui t v. l cc cp t v[i- k-k+1..i-k] v v[i-k+1..i] vi k = 1..(i div 2). Nu vi mi k nh vy hai t u khc nhau th Chuan=true, ngc li, Chuan=false. function Chuan(i: integer): Boolean; var k: integer; begin Chuan := false; for k := 1 to (i div 2) do if Bang(i,k) then exit;

Chuan := true; end; Hm Bang(i,k) kim tra xem hai t k nhau chiu di k tnh t i tr v trc c bng nhau hay khng? Hai t c xem l khc nhau nu nu chng khc nhau ti mt v tr no . function Bang(i,k: integer): Boolean; var j: integer; begin Bang := false; for j := 0 to k-1 do if v[i-j ] <> v[i-k-j ] then exit; Bang := true; end; Th tc TimTu tm mi nghim ca bi ton. Chng trnh (*-----------------------function Chuan(i: integer): Boolean; Tu chuan var k: integer; -----------------------*) begin {$B- } Chuan := false; uses crt; for k := 1 to (i div 2) do const if Bang(i,k) then exit; MN = 40; { Cho cau b: tim moi Chuan := true; nghiem } end; MN1 = 40000; { Cho cau a: tim 1 nghiem } (*-----------------------------------MM = 3; Sua v[i ] de thu duoc tu chuan gn = 'TuChuan.OUT'; Tim = true: Thanh cong var Tim = false: That bai v: array[0..MN1 ] of byte; { chua -------------------------------------*) nghiem } function Tim(i: integer): Boolean; m: byte; { so phan tu tao tu } begin n: integer; { chieu dai tu: tinh chat Q } Tim := true; g: text; { output file } while v[i ] < m do begin (*---------------------------------------inc(v[i ]); Kiem tra hai tu ke nhau, chieu if Chuan(i) then exit; dai k tinh tu vi tri i tro ve truoc end; co bang nhau ? Tim := false; ----------------------------------------*) end; function Bang(i,k: integer): Boolean; (*------------------------------------var j: integer; Hien thi ket qua, tu v[1..n] begin (Cau a: tim 1 nghiem) Bang := false; -------------------------------------*) for j := 0 to k-1 do procedure KetQua1(k: integer); if v[i-j ] <> v[i-k-j ] then exit; var i: integer; Bang := true; begin end; writeln; if k = 0 then write('Vo nghiem') (*------------------------------------------else for i := 1 to k do write(v[i ]); Kiem tra tu v[1..i] co la tu chuan ? writeln; ------------------------------------------*) end;

(*---------------------------------------Quay lui: tim 1 nghiem cho bai toan tu chuan chieu dai len, chi chua cac chu so 1..lim ----------------------------------------*) procedure TimTu1(len: integer; lim: byte); var i: integer; begin if (len < 1) or (len > MN1) then exit; if (lim < 1) or (lim > MM) then exit; n := len; m := lim; for i := 1 to n do v[i ] := 0; i := 1; repeat if i > n then { co nghiem v } begin KetQua1(n); exit; end; if i < 1 then { vo nghiem } begin KetQua1(0); exit; end; if Tim(i) then inc(i) { Tien } else { Lui } begin v[i ] := 0; dec(i); end; until false; end; (*-------------------------------Test cau a: Tu chuan dai 200 chi chua cac chu so 1, 2, 3 --------------------------------*) procedure Test1; begin clrscr; TimTu1(200,3); readln; end; (*--------------------------------Ghi mot nghiem vao file ---------------------------------*) procedure KetQua(d: integer); var i: integer; begin if d = 0 then write(g,'Vo nghiem') else begin

write(g,'Nghiem thu ',d,': '); for i := 1 to n do write(g,v[i ]); writeln(g); end; end; (*-------------------------------------------Cau b: Liet ke toan bo cac tu chuan chieu dai len, chi chua cac chu so 1..lim ---------------------------------------------*) procedure TimTu(len: integer; lim: byte); var i: integer; d: longint; begin if (len < 1) or (len > MN) then exit; if (lim < 1) or (lim > MM) then exit; n := len; m := lim; for i := 1 to n do v[i ] := 0; assign(g,gn); rewrite(g); i := 1; d := 0; repeat if i > n then { tim duoc 1 nghiem v[1..n ] } begin inc(d); KetQua(d); i := n; end; if i < 1 then { da vet het } begin if d = 0 then KetQua(0); close(g); write('OK'); readln; exit; end; if Tim(i) then inc(i) { Tien } else { Lui } begin v[i ] := 0; dec(i); end; until false; end; (*-----------------------------------------Test cau b: Liet ke toan bo cac tu dai 16, chi chua cac chu so 1, 2,3 Ket qua ghi trong tep TuChuan.out ------------------------------------------*)

procedure Test; begin clrscr; TimTu(16,3); Phiu hc tp L1

end; BEGIN Test; END.

Duyt ton b nng cao Phng php quay lui


Nhim v: Xy dng cc mu s dng phng php quay lui cho mi tnh hung c th. Vi mi mu cn nu 12 v d p dng. Th d: Tnh hung 1. Cho mt bng v quy tc i ca qun hu, iu kin mt con hu c xp vo mt trn bn c kch thc n. V d p dng Bi ton 8 qun hu Bi gii
1. const n =8; 2. type vector =array[1..n]of longint; 3. var cot :array[1..n]of longint; 4. cheoChinh :array[1-n..n-1]of longint; 5. cheoPhu :array[1+1..n+n]of longint; 6. x :vector; 7. procedure GhiNghiem(x:vector); 8. var i :longint; 9. begin 10. for i:=1 to n do write(x[i],' '); 11. writeln; 12. end; 13. procedure xepHau(k:longint); 14. var i :longint; 15. begin 16. for i:=1 to n do 17. if (cot[i]=0) and (cheoChinh[k-i]=0) and 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. (cheoPhu[k+i]=0) then begin x[k]:=i; cot[i]:=1; cheoChinh[k-i]:=1; CheoPhu[k+i]:=1; if k=n then GhiNghiem(x) else xepHau(k+1); cot[i]:=0; cheoChinh[k-i]:=0; CheoPhu[k+i]:=0; end; end; BEGIN 32. fillchar(cot,sizeof(cot),0); fillchar(cheoChinh,sizeof(cheoCh inh),0); 33. fillchar(cheoPhu,sizeof(ch eoPhu),0); 34. xepHau(1); 35. END.

Kho st thm: Nng cp thut ton vi bi ton c N ln, bi ton m i tun Phiu hc tp L2

Cc bi tp mu Phng php quay lui


Bi tp 1. Mt xu X = x1x2xM c gi l xu con ca xu Y = y1y2yN nu ta c th nhn c xu X t xu Y bng cch xa i mt s k t, tc l tn ti mt dy cc ch s: 1 <= i1 < i2 < < iM <= N x1 = yi1, x2 = yi2, , xM = yiM

Bi tp 2.

Bi tp 3.

Bi tp 4.

Bi tp 5.

Bi tp 6.

Bi tp 7.

_____________

K THUT DUYT NHNH CN * L THUYT 1 - Kim tra chun b ca hc sinh - Gii thiu mc tiu bi hc, nh hng cho HS. 2 Gii thiu ch nghin cu: - Ch 1: Gii bi ton ngi du lch bng phng php duyt ton b. Nhn xt v s bng n t hp v kch thc ti a c th gii quyt. - Ch 2: Tm hiu m hnh k thut nhnh cn. p dng k thut nhnh cn gii bi ton ngi du lch. nh gi hiu qu ca k thut nhnh cn trong bi ny.

Chia nhm, phn cng nhim v (phiu HT N1) - Nhim v 1: o Gii bi ton ngi du lch bng phng php duyt ton b, so snh v tm ra nghim ti u ca bi ton. o Nhn xt v s bng n t hp v s trng hp cn xt ca bi ton. Xc nh kch thc ti a c th gii quyt bng phng php trn. - Nhim v 2: Tm hiu m hnh k thut nhnh cn. o Tm hiu m hnh k thut nhnh cn cho trong phiu HT N1 o p dng a ra phng n t cn cho bi ton ngi du lch. o nh gi hiu qu ca vic t cn. o a ra phng n t cn gii mt s bi ton khc trong phn bi tp (phiu HT N1)

I.2. Duyt nhnh cn + T hc - S dng thut ton quay lui gii mt s bi ton ti u: ngi du lch, dy ABC - Nhn xt v tc thut ton + Trn lp - Thuyt trnh 1: Nu m hnh ca thut ton nhnh cn - Thuyt trnh 2: Mu chng trnh ABC2.pas nhm mc ch cho HS hiu c cch phn tch bi ton tm gi tr t cn - Pht vn: 3 cu hi. - Nhm: trao i v cch tm ra cc gi tr t cn + T hc - Bi tp: du ngoc hp l, t mn - My tnh, ABC1.PAS, ABC2.PAS, Dulich.pas Bi tp nhnh cn

Phiu hc tp N1 K THUT DUYT NHNH CN Nhim v: Tm hiu k thut duyt nhnh cn. p dng vo gii bi ton ngi du lch v mt s bi ton khc. Nhim v 1. Cho bi ton Ngi du lch nh sau: C N thnh ph v mt mng li giao thng ni gia cc thnh ph vi nhau bng ng 2 chiu vi chi ph c m t bi ma trn C[1..N, 1..N]. Mt ngi du lch xut pht t thnh ph 1 mun i thm tt c cc thnh ph, mi thnh ph ng 1 ln v quay tr li ng thnh ph 1. Hy ch ra cho ngi mt hnh trnh vi chi ph t nht Yu cu: o Em hy trnh by thut ton gii bi ton trn? (S dng phng php quy quay lui hc) o Nhn xt v s bng n t hp khi tin hnh duyt ton b bng quy quay lui v kch thc ti a c th gii quyt. Hng dn: Duyt ton b bng quy quay lui. + Hnh trnh cn tm c dng X=(x1 = 1, x2, ..., xn, xn+1 = 1), trong xi v xi+1 l hai thnh ph lin tip trong hnh trnh v c ng i ti nhau (chi ph C[i,i+1] + ) v ngoi tr thnh ph 1, khng c thnh ph no lp li hai ln. Nh vy dy (x1,x2, ..., xn) lp thnh mt hon v ca (1, 2, ..., n). + Khi to: nghim Xmin= tp rng, chi ph nh nht Tmin=+

+ Tm nghim c kh nng: Ta xy dng nghim tng bc, bt u t x1 = 1, chn x2 l thnh ph khc x1 v c ng i t x1 n x2, sau chn x3 l thnh ph cha c chn trc v c ng i t x2 n x3, Qu trnh thc hin cho n khi chn c xn . +Cp nht nghim ti u: Tnh tng chi ph T=C[x1,x2] + C[x2,x3]++C[xn,xn+1] Nu T<Tmin th cp nht nghim ti u Tmin:=T Qu trnh quay lui c thc hin cho n khi xt ht cc kh nng. Sau khi th tc quay lui kt thc, nu Tmin=+ th khng c ng i no tha mn bi ton. Nu Tmin<+ th in ra nghim ti u l Xmin. * Nhn xt v s bng n t hp khi tin hnh duyt ton b bng quy quay lui

Nhim v 2 Hy xem xt m hnh k thut nhnh cn nh sau:

Em hy p dng k thut trn xc nh cn cho bi ton ngi du lch, ci t chng trnh v nh gi hiu qu ca vic t cn nh trn. Bi tp: p dng k thut nhnh cn gii mt s bi ton sau: Bi 1:

10

Bi 2:

11

You might also like