Thuật toán qui hoạch động.doc

Embed Size (px)

Citation preview

  • 7/30/2019 Thut ton qui hoch ng.doc

    1/126

    Thut ton qui hoch ng

    B HipTrong qu trnh hc tp, chng ta gp rt nhiu cc bi tp v Ton-Tin. Cc bi tp dngny rt phong ph v a dng. Thc t cha c thut ton hon chnh c th p dng cho

    mi bi ton. Tuy nhin ngi ta tm ra mt s thut ton chung nh chia tr, thamn, quay lui,... Cc thut ton ny c th p dng gii mt lp kh rng cc bi tonhay gp trong thc t. Trong bi vit ny, ti mun cp vi cc bn mt thut tonkhc, l thut ton quy hoch ng. T tng c bn ca thut ton l: gii mt bi ton ta chia bi ton thnh cc bi ton nh hn c th gii mt cchd dng. Sau kt hp li gii cc bi ton con, ta c c li gii bi ton ban u.Trong qu trnh gii cc bi ton con i khi ta gp rt nhiu kt qu trng lp ca cc biton con. tng tnh hiu qu, thay v phi tnh li cc kt qu , ta lu chng vo mtbng. Khi cn li gii ca mt bi ton con no ta ch cn tim trong bng, khng cntnh li.T tng ca thut ton quy hoch ng kh n gin. Tuy nhin khi p dng thut ton

    vo trng hp c th li khng d dng(iu ny cng tng t nh nguyn tcDirichlet trong ton vy). Khi gii bi ton bng phng php ny, chng ta phi thchin hai yu cu quan trng sau:- Tm cng thc truy hi xc nh nghim bi ton qua nghim cc bi ton con nh hn.- Vi mi bi ton c th, ta ra phng n lu tr nghim mt cch hp l t cth truy cp mt cch thun tin nht. minh ho thut ton, ta xt mt vi v d.V d 1:Cho hai dy s nguyn (a1,a2,...,am), (b1,b2,...,bn). Tm dy con chung c diln nht ca hai dy trn (coi dy khng c s nguyn no l dy con ca mi dy v c di bng 0).Li giiChng ta c th thy ngay rng phc tp ca bi ton trn ph thuc vo hai s m, n.Xt hai trng hp:+Trng hp1: m=0 hoc n=0.y l trng hp c bit, c duy nht mt dy con chung ca hai dy c di? bng0. V vy dy con chung c di ln nht ca chng c di bng 0.

    +Trng hp 2: m 0 v n 0.Trong trng hp ny, ta xt cc bi ton nh hn l tm dy con chung c di lnnht ca hai dy (a1,a2,...,ai), (b1,b2,...,bj) vi 0 i m, 0 j n. Go.i l[i,j] l di cady con chung ln nht ca hai dy (a1,...,ai), (b1,...,bj). ; Nh vy ta phi tnh tt c ccl[i,j] trong 0

  • 7/30/2019 Thut ton qui hoch ng.doc

    2/126

    uses crt;

    const fi='b2.inp';

    var

    a:array[1..10] of integer;

    b:array[1..10] of integer;

    kq:array[0..10,0..10] of integer;

    i,j,maxa,maxb:integer;

    f:text;

    procedure init;

    begin

    assign(f,fi);reset(f);i:=0;

    while not(eoln(f)) do begin inc(i);read(f,a[i]);end;maxa:=i;

    readln(f);i:=0;

    while not(eoln(f)) do begin inc(i);read(f,b[i]);end;maxb:=i;

    close(f);

    end;

    function max(a,b:integer):integer;

    begin

    if a>b then max:=a else max:=b;

    end;

    begin

    init;

    kq[0,0]:=0;

    for i:=1 to maxa do for j:=1 to maxb do

    if a[i]b[j] then kq[i,j]:=max(kq[i-1,j],kq[i,j-1])

    else kq[i,j]:=kq[i-1,j-1]+1;

    writeln('Do dai day con chung lon nhat:',kq[maxa,maxb]);

    i:=maxa;j:=maxb;

    while (i>0)or(j>0) do

    if a[i]=b[j] then begin write(a[i]);dec(i);dec(j);end

    else if kq[i-1,j]=kq[i,j] then dec(i) else dec(j);

    end.

    Vi ni dung file?b2.inp? cha 2 dy (a1,a2,..am) ,(b1,b2,..bn) sau:

    1 2 3 2 3 4 6

    6 9 8 7

    Xt bi ton kinh in v ti u t hp:

    V d 2:Cho ci ti cha c trng lng ti a l w. C n vt, vt th i c khi lng a[i] v gi tr c[i], 1 i n. Tm cch xp vt vo ti sao

    cho t gi tr ln nht.Li gii

    Gi f(k,v) l gi tr ln nht ca ti ng trng lng v v ch cha cc vt t 1 n k.

    Nu k=1 th f(k,v)=(v div a[1])*c[1]. Gi s tnh c f(s,t) vi 1

    t: tg=v div a[k], f(k,v)=max{f(k-1,u)+x*c[k]}? (*) ,vi x=0,1,2,...,tg, u=v-x*a[k]

    Gi tr ln nht l f(n,w). Ta dng mng bn ghi a[1..n,1..w] cha kt qu trung gian. Mi bn ghi a[k,v] cha gi tr f(k,v) v gi tr x tho mn cng thc

    (*).

  • 7/30/2019 Thut ton qui hoch ng.doc

    3/126

    xc nh s lng x[i] vt i tho mn iu kin ti u, ta xut pht t a[n,w] xc nh c x[n]. Nhy ti a[n-1,w-x[n]*a[n]] xc nh c x[n-1].

    C nh vy ti x[1].

    Sau y l li gii, chng trnh c vit bng ngn ng Pascal:

    uses crt;

    const n=5;w=17;

    fi='b3.inp';

    type kq=record

    num,val:integer;

    end;

    var

    a:array[1..10] of integer;{khoi luong}

    c:array[1..10] of integer;{Gia tri}

    i,j,tg,k,max,save:integer;

    f:text;

    b:array[1..n,1..w] of kq;

    procedure init;

    begin

    assign(f,fi);reset(f);

    for i:=1 to n do begin read(f,a[i],c[i]);end;

    close(f);

    end;

    begin

    init;

    for j:=1 to w do? for i:=1 to n do

    begin

    tg:=j div a[i];max:=0;

    for k:=0 to tg do if (b[i-1,j-k*a[i]].val+k*c[i])>max then

    begin max:=b[i-1,j-k*a[i]].val+k*c[i];save:=k;end;

    b[i,j].val:=max;

    b[i,j].val:=max;

    b[i,j].num:=save;

    for i:=1 to n do

    begin

    for j:=1 to w do write(b[i,j].val:3);

    writeln;

    end;

    writeln('Max:',b[n,w].val);

    i:=n;j:=w;while i>=1 do

    begin

    if b[i,j].num>0 then writeln('Co ',b[i,j].num,' do vat ',i);

    j:=j-a[i]*b[i,j].num;dec(i);

    end;

    readln;

    end.

  • 7/30/2019 Thut ton qui hoch ng.doc

    4/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    5/126

    n y ta gp mt vn : Mng Truoc ch cho php ta ln ngc t cui v u d in ra cc ch s theo th t tng dn ta phi dng thm mt mng ph P v in ngc lica mng P:dem:=0;i:=Luu;

    While i0 doBeginInc(dem);P[dem]:=i; i:=Truoc[i];End;Ch s theo th t tng dn ca dy con cc i c in ra bng dng lnh:For i:=dem downto 1 do Write(P[i],' ');Tuy nhin lm nh trn c v di dng trong khi chng ta nhn ra tnh quy trongvic ly ngc li. V th tc in ra dy con rt ngn gn v sng sa:Procedure Print(i:Integer);BeginIf i>0 then

    BeginPrint(Truoc[i]);Write(i,' ');End;End;Cng vic in ra ch cn mt li gi: Print(Luu);Ta c ton vn chng trnh:{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}{$M 65500,0,655360}Uses Crt;Const fi = 'DAYSO.INP';MaxN=5000;Var A : Array[1..MaxN] of Integer;S : Array[1..MaxN] of Integer;Truoc : Array[1..MaxN] of Integer;i,j,Luu : Word;N : Word;Procedure Init;BeginFillchar(S,SizeOf(S),1);Fillchar(Truoc,SizeOf(Truoc),0);End;

    Procedure Readfile;Var f:Text;BeginAssign(f,fi);Reset(f);Readln(f,N);For i:=1 to N do Read(f,A[i]);Close(f);

  • 7/30/2019 Thut ton qui hoch ng.doc

    6/126

    End;Procedure Find;BeginFor i:=2 to N doBegin

    For j:=i-1 downto 1 doIf (A[j]< A[i])BeginS[i]:=S[j]+1;Truoc[i]:=j;End;End;End;Procedure Print(i:Word);BeginIf i >0 then

    BeginPrint(Truoc[i]);Write(a[i],' ');End;End;Procedure OutputResult;BeginLuu:=N;For i:=N-1 downto 1 doIf S[i]>S[Luu] then Luu:=i;Print(Luu);End;BEGINClrscr;Init;Readfile;Find;OutputResult;Readln;END.Qua v d trn chng ta hiu cch m thut ton th hin. By gi chng ta s xt tip

    mt bi ton sp xp trnh t phc v khch hng m cch gii u s dng thut tonQuy hoch ng trn mng mt chiu.Ta xt tip mt v d sau:Bi ton 2: Ti thi im 0, ng ch mt my tnh hiu nng cao nhn c n thng thu s dng my ca n khch hng. Cc khch hng c nh s t 1 n n.Khch hng i cn s dng my t thi im di n thi im ci (di, ci l cc s nguyn v0 < di < ci < 1000000000) v s tr tin s dng my l p i (pi nguyn, 0 < p i 10000000).Bn cn xc nh xem ng ch cn nhn phc v nhng khch hng no sao cho khong

  • 7/30/2019 Thut ton qui hoch ng.doc

    7/126

    thi gian s dng my ca hai khch c nhn phc v bt k khng c giao nhaung thi tng tin thu c t vic phc v h l ln nht.D liu vo: T file vn bn THUE.INPDng u tin ghi s n (0 < n =< 1000);- Dng th i+1 trong s n dng tip theo ghi 3 s d i, ci, pi cch nhau bi du trng (i = 1,

    2,... n).Kt qu:Ghi ra file vn bn THUE.OUT-Dng u tin ghi hai s nguyn dng theo th t l s lng khch hng nhn phc vv tng tin thu c t vic phc v h.-Dng tip theo ghi ch s ca cc khch hng c nhn phc v.V d:

    THUE.INP THUE.OUT THUE.INP THUE.OUT

    3150 500 1501 200 100

    400 800 80

    2 1802 3

    4400 821 800200 513 500

    100 325 200600 900 600

    2 11002 4

    Bi ton ny chng ta phi ch ch: dng thut ton Quy hoch ng ti u tngbc th trc ht chng ta phi sp xp cc c i theo th t tng dn:Gi s c1 c2 ... cN.Tng t bi ton trn: Gi F[k] l s tin ln nht khi phc v mt s khch hng t 1n k.Vi mi F[k] ta c:- Nu chp nhn phc v khch k th F[k]:=F[t]+pk (vi t l ch s max tho mn khong

    thi gian [dt, ct [dk,ck] = ).- Nu khng chp nhn phc v k th F[k]:=F[k-1].Nh vy hm quy hoch ng ca F[k] s l:F[k]:=Max{F[t]+pk,F[k-1]} vi k = 2, 3,... N v t c ngha nh trn. ly li ch s cc khch hng c phc v chng ta li dng mng Truoc nh v dtrn.Trn y l nhng g ti mun trnh by vi cc bn. Theo ti, thut ton tuy n ginnhng tm ng dng ca n rt phong ph m nu nm vng n l rt c li cho t tngthut ton ca cc bn.Gii thut quy hoch ng

    CongHiep_87@yahocom

    i vi cc bn yu thch mn lp trnh th c l gii thut qui hoch ng tng iquen thuc trong vic gii quyt cc vn tin hc. Tuy nhin, s tht l kh c thtm c c c v cng thc cho vic s dng qui hoch ng. Chnh v vn ny, quihoach ng li tr thnh khng ph bin. i vi nhng bi ton nh vy, chng ta li cgng i tm cch gii khc v d nh vt cn hay tham lam....iu tht l d! Chnh vvy, ti mun a ra mt s bi ton p dng qui hoch ng mong rng sau bi bony, cc bn s yu thch gii thut ny hn.Trc ht cc bn phi lun nh rng, gii thut qui hoch ng c xut pht t

  • 7/30/2019 Thut ton qui hoch ng.doc

    8/126

    nguyn l Bellman: nu 1 cu hnh l ti u th mi cu hnh con ca n cng l ti u.Chnh v vy xy dng 1 cu hnh ti u, ta hy xy dng dn cc cu hnh con saocho cc cu hnh con ny cng phi ti u y chnh l ng li ch o cho mi biton qui hoch ng. Sau y l mt s bi ton c gii quyt bng qui hoch ng.I. Cc bi ton

    Bi 1: Trc tin chng ta hy xt 1 bi ton tht n gin v quen thuc l tm gi trln nht trong n s l a1, a2, ..., an. Gii quyt bi ton ny, ta s xy dng cc cu hnhcon ti u bng cch ln lt tm s ln nht trong k s u tin vi k chy t 1 n n:K=1: max1:=a1;K=2: max2:=max(max1,a2);K=3: max3:=max(max2,a3);..............................................K=n: maxn:=max(maxn-1,an);Nh vy khi k t ti n th maxn chnh l gi tr ln nht trong n s ch Vic ci tchng trnh ht sc n gin nh sau:Uses crt;

    Var a: array[1..100] of integer;n,k,max: integer;BeginWrite('Cho so luong phan tu: ');readln(n);For i:=1 to n do begin write('a[',i,']= ');readln(a[i]);end;Max:=a[1];For k:=2 to n doIf a[k]>max then max:=a[k];Write('Gia tri lon nhat cua day cac so da cho la: ',max);ReadlnEnd.By gi chng ta xt n bi ton 2 c phn hp dn hn. y chnh l mt trong nhngbi ton in hnh cho gii thut qui hoch ng:Bi 2:Bi ton ci ti: Cho n loi vt (1n100) vi mt vt loi th i (1in) ctrng lng l a[i] v gi tr s dng l c[i]. Mt nh thm him cn mang theo mt s vt vo ti ca mnh sao cho tng trng lng cc vt em theo khng vt qu scchu ng ca ti l w (1w250) v tng gi tr s dng t cc vt em theo l lnnht. Hy tm mt phng n mang cho nh thm him vi gi s rng s lng vtca mi loi l lun dng.* Thut gii bng qui hoch ng c m t nh sau:Ta xy dng mt mng 2 chiu f vi f[i,j] l gi tr s dng ln nht c c bi j vt t

    1 n j m tng trng lng khng vt qu j.Khi to : f[i,1]:=0 vi i < a[1]F[i,1]:=c[1]*(i div a[1]) vi i > =a[1]; (i = 1..w);Ta ln lt cho i t ti w v j t ti n bng cch sau:For j:=2 to n doFor i:=1 to w doIf i >= a[i] then f[i,j]:=Max(f[i-a[j],j]+ c[j],f[i-1,j])Else f[i,j]:=f[i-1,j].

  • 7/30/2019 Thut ton qui hoch ng.doc

    9/126

    Nh vy cho n f[w,n] ta s thu c gi tr ln nht c th t c t n loi vt cho sao cho trng lng khng vt qu w. H thc ton trn c gi l h thcDantzig. C th rt d hiu c thut ton nh sau:Phn khi to: f[i,1] c ngha l gi tr ln nht nu ch c 1 loi vt ( y l vt 1) mtrng lng khng qu Nh vy nu i < a[1] th r rng khng th mang theo vt no v

    gi tr f=0. Ngc li nu i a[1] th s vt c php mang theo i s l i div a[1] v gitr t c l f= c[1]*(i div a[1]).Phn xy dng: chng ta xt n f[i,j] c ngha l xt n gi tr ln nht c th t ct j loi vt (1,,j) m trng lng khng qa i. Vy th r rng l nu i < a[j] th cngha l vt j khng th mang i hay vi trng lng l i th ta vn khng th ci thinc gi tr f v f vn nhn gi tr f[i,j-1]. Ngc li nu i a[j] th chng ta xt vic numang thm vt j th s c li hn vic khng mang hay khng, iu c ngha l xtMax(f[i-a[j],j]+ c[j],f[i-1,j]).Chng trnh ci t gii quyt bi ton ci ti rt n gin nh sau:Uses crt;Var value,weight:array[1..30]of 0..500;{value: gia tri;weight: trong luong}

    f:array[0..500,0..30] of 0..10000;w,w1,sl:integer;fi:text;Procedure Init;Var i:byte;Beginclrscr;assign(fi,'tutxt');reset(fi);readln(fi,w,sl);w1:=w;for i:=1 to sl do readln(fi,weight[i],value[i]);End;{***********************************************}Procedure Solve;Var i,j:word;Beginfor j:=1 to sl do f[0,j]:=0;for i:=1 to w do f[i,1]:=(i div weight[1])*value[1];for j:= 2 to sl dofor i:=1 to w dobeginif i else begin

    f[i,j]:=f[i,j-1];if (value[j]+f[i-weight[j],j])>f[i,j] thenf[i,j]:=(value[j]+f[i-weight[j],j]);end;end;(************************************************}Procedure Print_rerult;Var i:byte;

  • 7/30/2019 Thut ton qui hoch ng.doc

    10/126

    Beginwrite('* Gia tri cao nhat dat duoc la: ',f[w,sl]);writeln;End;(*************************************************)Begin

    Init;Solve;Print_result;Readln;End.Ch : chng trnh trn c c d liu t file.II. Vn cng thc truy hii vi mt bi ton qui hoch ng th cng thc truy hi cng l mt phn rt quantrng. Nu chng ta ch xy dng c gi tr ti u th i khi vn l cha . Vn c t ra l lm th no xc nh c cu hnh ti gii quyt vn ny tali phi xc nh c cng thc truy h Thc t l xc nh c cng thc truy hi

    ny th cng khng phi qu kh bi t cng thc qui hoch ng chng ta cng c thsuy ngay ra c cng thc truy hTi xin tr li vi bi ton ci ti nu trn xy dng cu hnh ti u cho bi tonci ti c ngha l phi mang nhng loi vt no v mi loi vt l bao nhiu c cgi tr s dng max: Xy dng hm ph choose[i,k] vi ngha t c gi tr ttnht ti f[i,k] th cn phi s dng n loi vt no (i=1..w,k=1..n) bng cac cng thcsau:Choose[i,1]:=0 nu iTa ln lt cho k chy ti n v i chy ti w xy dng mng choose nh sau:Nu f[i,k]=f[i,k-1] th choose[i,k]:=choose[i,k-1] (do khng mang vt k)Nu khng th n choose[i,k]:=k (c ngha mang theo vt k)Khi xy dng n choose[w,n] th ta ch cn ch n ct cui cng ca mng choose vbt u truy hi. Gi s mng number[i] (i=1..n) s cho ta s lng loi vt i c mangtheo. Ta s ci thin chng trnh gii bi ton ci ti trn nh sau:Program Bai_toan_cai_tui;Uses crt;Var value,weight,number:array[1..20]of 0..1000;{value:gia tri}f,choose:array[0..1200,0..12]of 0..10000;w,w1,sl:0..2000;fi:text;Procedure Init;

    Var i:byte;Beginclrscr;assign(fi,'tui.txt');reset(fi);readln(fi,w,sl);w1:=w;for i:=1 to sl do readln(fi,weight[i],value[i]);End;{***********************************************}

  • 7/30/2019 Thut ton qui hoch ng.doc

    11/126

    Procedure Solve;Var i,j:word;Beginfor j:=1 to sl do begin f[0,j]:=0;choose[0,j]:=0;end;for i:=1 to w do

    beginf[i,1]:=(i div weight[1])*value[1];if i>=weight[1] then choose[i,1]:=1else choose[i,1]:=0;end;for j:= 2 to sl dofor i:=1 to w dobeginchoose[i,j]:=choose[i,j-1];if i else beginf[i,j]:=f[i,j-1];

    if (value[j]+f[i-weight[j],j])>f[i,j] thenbeginf[i,j]:=(value[j]+f[i-weight[j],j]);choose[i,j]:=j;end;end;end;for i:=1 to sl do number[i]:=0;while choose[w1,sl]0 dobeginnumber[choose[w1,sl]]:=number[choose[w1,sl]]+1;w1:=w1-weight[choose[w1,sl]];end;End;{**************************************************}Procedure Print;Var i:byte;Beginwrite('* Gia tri cao nhat dat duoc la: ',f[w,sl]);writeln;write('* Khoi luong da dung la: ',w-w1);writeln;writeln;writeln('* Nha tham hiem can dem nhu sau: ');

    for i:=1 to sl doif number[i]0 thenbegin write(' - ',number[i],' vat ',i, ' voi trong luong ',number[i]*weight[i],' va gia tri:',number[i]*value[i]);writeln;end;End;{************* Main **********************}

  • 7/30/2019 Thut ton qui hoch ng.doc

    12/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    13/126

    Sn HunhC rt nhiu bi ton ti u trn mt bng cho trc gm M dng, N ct nh cc dngbi tm mt hnh trnh i t dng th nht ti dng th M tho mn mt iu kin ti uno . Nhng cng c nhng bi ton ti u vi s liu ban u l cc mng phn t

    mt chiu u c th a v bi ton quy hoch ti u trn mt bng hai chiu. Mt v dd thy v d gp nht l bi ton tm xu con ln nht, tm on dy con n iu dinht, bi ton cy xng, v in hnh nht l bi ton ci ti (vi d liu u vo lnguyn).Tt c cc bi ton chng ta u c th a v mt dng tng qut m ti tm gi lBi ton tng qut quy hoch ti u trn mt bng hai chiu . Bi vit ny l s tnghp ca bn thn ti trong qu trnh hc mn tin hc PASCAL. Xin nu ra cc bn cth tham kho v cho nhng kin qu bu.Pht biu bi tonCho mt bng gm M dng, N ct. Hy tm mt phng n ti u i t dng thnht n ht dng th M vi cc nguyn tc sau:

    1. iu kin ti u:L iu kin bi ton a ra. ng i ti u c tnh bng tng trng s cc i qua.Trng s ca mt ph thuc quy tc tnh trng s ca bi ton.2. Quy tc tnh trng s:- Trng s bng tr s chnh s liu ti .- Trng s c tnh bng quy tc do ng trc quy nh tu theo tng bi ton.- Trng s ph thuc vo ng trc ang xt.3. Quy tc i t trn xung di :T dng th i bn c th i ngang sang tri hoc sang phi trn dng v i xung didng th (i+1) theo cc hng cho hoc thng ng.Thut gii chung

    1. Bc 0: M hnh ho:Nu bi ton khng phi l dng ti u trn mt bng hai chiu, ta phi tm cch m hnhho a n v dng ny.2. Bc 1: Xy dng cc quy tc tnh trng s:Xin lu rng iu kin ti u y c sn ngay t u.Tu theo dng ca bi ton ta s c cc quy tc tnh trng s khc nhau. Khi i xem xtvi cc bi ton c th ta s r hn iu ny.3. Bc 2: Xy dng quy tc i :i khi quy tc i cha c sn m phi t ngi lp trnh t ra cho ph hp vi cch m

    hnh ho ca mnh. Vn ny thuc vo t duy ca mi ngi nn rt phong ph vphc tp.4. Bc 3: Xy dng cng thc ti u:y l bc quan trng nht ca bi ton. xy dng c cng thc, ta cn phi davo cc quy tc i v tnh trng s.5. Bc 4: Duyt phng n ti u:y l bc cui cng ghi d liu tm c ra FILE kt qu.Bc ny tng i d dng v trong qa trnh quy hoch, Chng ta lu cc trng thi

  • 7/30/2019 Thut ton qui hoch ng.doc

    14/126

    ca tng i qua, a phn l lu v tr ca ng trc ny trn ng i ti u.Mt s bi ton

    Trc khi i xt cc bi ton c th, chng ta quy c rng mng A[1..M,1..N] l mnglu d liu ban u. Mng B[1..M,1..N] l mng dng quy hoch.

    Vi nhng bi ton vi d liu u vo l cc mng mt chiu th ta s dng ngay cc dliu m khng cn xy dng mng A.Cc bi ton quen thuc nh bi ton ci ti,bi ton tm on dy con n iu dinht,bi ton cy xng,.vv. ta s khng xt n y na.1. Bi ton Con kin :Trn mt sn hnh ch nht MxN, c chia thnh cc vung n v, mi cha mtlng thc n. Mt con kin xut pht t (1,1) mun i qua sn n dng th M.Con kin ch c th i theo mt dng chia nh trn sn ng vi mt dng ca bng chnht hoc i theo trn mt ct ca sn. Hy ch ra ng i gip con kin c c nhiuthc n nht.

    FOOD.INP3 5(Trong tt c cc bi ton di y, dng u bao gi cng l hai gi tr M v N)

    FOOD.OUT45 (lng thc n Max)(1,1) (2,1) (2,2) (2,3) (3,3)

    Thut gii- Bc 0: B qua v y l bi ton ng dng- Bc 1: Trng s y l lng thc n trn mi .- Bc 2: Quy tc i:

    Bc 3: Cng thc quy hochB[i,j] l lng thc n ln nht i t (1,1) n (i,j)B[1,j] = A[1,j] vi j = 1..NB[i,1] = A[i,1]+B[i-1,1] vi i = 2..MB[i,j] =Max{B[i-1,j],B[i,j-1]} + A[i,j] vi i = 2..M v j = 2..N

  • 7/30/2019 Thut ton qui hoch ng.doc

    15/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    16/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    17/126

    Bc 1: Trng s y l s lng hng ti cc ngn cha. ng thi khi tho mn iukin khuyn mi th trng s s c tng thm s lng bng s cc con s may mn(ph thuc vo ng trc).

    Bc 2: Quy tc iBc 3: Cng thcB[i,j] l lng hng max khi i t tng 1 cho n ngn cha (i,j)B[0,j]= 0 vi j =1..NB[i,0] = 0 vi i =1..MB[i,j] = Max{B[i,j-1]+KM1, B[i-1,j] + KM2,B[i-1,k]+ SA[i,u]+KM3}+A[i,j]Vi i =1..M , j =1..(N-1) , k =(j+1)..M , u = j+1..kKM1 l lng hng khuyn mi nu Abs(A[i,j]-A[i,j-1]) l con s may mn.KM2 l lng hng khuyn mi nu Abs(A[i,j]-A[i-1,j]) l con s may mn.KM3 l tng s lng hng khuyn mi nu Abs(A[i,k]-A[i-1,k]) v Abs(A[i,t]-A[i,t+1])vi t = j..(u-1) l cc con s may mn.B[i,N] = Max{B[i,N-1]+KM1,B[i-1,N]+KM2}+A[i,N]Vi i =1..MKM1 l lng hng khuyn mi nu abs(A[i,N]-A[i,N-1]) l con s may mn.KM2 l lng hng khuyn mi nu abs(A[i,N]-A[i-1,N]) l con s may mn.4.Bi ton Tch t :y l bi s 2 trong thi OLYMPIC Tin hc sinh vin ln th XII, 2003, khi khngchuyn. Mi cc bn xem bi trong s bo 5(44) ca Tp ch ISM.

    Thut gii:Bc 0: Bi ton ny thc cht l bi ton xu con ln nht . Ta xy dng bng B[i,j] lxu con ln nht gia 2 xu S1[1..i] v S[1..j].Gi ll = length(S1), l =length(S).Nhn xt thy rng vi B[ll,i]=ll vi i = ll..l th ta c mt phng n tch t. Bngphng php duyt da trn bng lu trng thi qua qu trnh quy hoch, ta xt xemnhng v tr cn li trong xu S (cha thuc S1) c to ra xu S2 khng. Nu tho mniu kin ny th bi ton gii quyt xong. Lu rng bi ton lun c li gii.Bc 1: Trng s l 0 hoc 1 tu xem S1[i] khc hoc bng S[j].Bc 2: Quy tc i:

    Bc 3: Cng thcB[0,j] = 0 vi j =1..lB[i,0] = 0 vi i =0..llB[i,j] = min{B[i,j-1],B[i-1,j],B[i-1,j-1]+gt}vi i = 1..ll , j =1..l

  • 7/30/2019 Thut ton qui hoch ng.doc

    18/126

    gt l 0 hoc 1 tu theo S1[i] khc hoc bng S[j]..Bi ton Ct hnh ch nht :y l bi 146 trong mc ra k ny . Xin cc bn xem bi trong s 6(45) ca Tpch ISM.Bc 0: Ta xy dng bng B[i,j] l s ln ct t nht ct mt hnh ch nht c kch

    thc [1..i ,1.. j].Bc 1: Trng s y l 1 th hin mt nht ct.Bc 2: Quy tc i: Bi ton ny c quy tc i tng i phc tp.

    Bc 3: Cng thcB[i,1] = i vi i = 1..MB[1,j] = j vi j = 1..NB[i,j] = min{B[i,q]+B[i,j-q],

    B[k,j]+B[i-k,j]}vi q = 1..(j-1) , k =1..(i-1)Tng ktCn rt nhiu bi ton khc c dng nh bi ton tng qut ny nhng chung quy lichng ta u c th a n v mt dng chung. Sau da vo nhng nguyn tc giichung, ta u c th gii quyt d dng.Cc dng bi ton tng qut ny khi d liu cho qu gii hn khai bo bng hai chiu uc th gii quyt bng cch quy hoch lin tc trn 2 mng mt chiu. Sau mi bc quyhoch phi thay i 2 mng ny sao cho ph hp vi bc quy hoch tip theo. Ci khca bi ton c d liu ln ny l vic lu tr trng thi sau khi quy hoch ton b tacn c th in ra file kt qu qu trnh i ca phng n ti u.Rt mong nhn c nhng kin ng gp qu bu ca cc bn c ISM. Mi thc mcxin gi cho ti theo a ch:Phng php quy hoch ng

    Phm Hi MinhQuy hoch ng l mt phng php rt hay v mnh ca tin hc. Nhng gii ccc bi ton bng phng php quy hoch ng tht chng d dng cht no. Ch yuhc sinh hin nay s dng quy hoch ng theo kiu lm tng bi cho nh mu v pdng vo nhng bi c dng tng t.Qua qu trnh hc tp ti t rt ra cho mnh mt s kinh nghim v cch gii cc bi

    ton bng quy hoch ng, xin a ra mi ngi cng tham kho v gp .

    1. L thuyt:

    Phng php quy hoch ng gm 6 bc:-Bc 1: Chia nh bi tonLp vect P c cc thnh phn x1,x2,..,xn. Mi vect P ng vi mt bi ton con ca biton. Ban u ta xy dng P vi 1 thnh phn duy nht.

  • 7/30/2019 Thut ton qui hoch ng.doc

    19/126

    -Bc 2: Lp h thc quy hoch ngXy dng hm f(P) l hm ti u ca vect P (hay hm ti u cho mi bi ton con)f(P) = g(f(P1),f(P2),..,f(Pn))g c th l hm Max,Min hoc tng tu yu cu ca bi ton l tm Max,Min hay tnh

    tng.P gi l vect chaP1,P2,P3,..,Pn gi l vect con

    -Bc 3: Kim traNu khng xy dng c hm f th thm tip hoc b i tng thnh phn ca vect P riquay li bc 2. Nu c th lm tip bc 4.

    -Bc 4: Ti u ho h thcTi u vect P bng cch xt tng thnh phn x ca vect P:Chn vect PBest trong P1,P2,P3,..Pn ch khc nhau thnh phn x sao cho c th a

    PBest vo thay P1,P2,P3..,Pn trong hm g m khng lm thay i gi tr ca hm g th cth n gin thnh phn x ca vect P.

    -Bc 5: Chn kiu quy hoch ng+ Kiu 1: Nu cc thnh phn ca vect con P1 lun hay cc thnh phn ca vectcha P th ta c th dng cc vng lp for lng nhau ci t.+ Kiu 2: Nu vect P v vect P1 lun c mi quan h cha con mt chiu th ta c thdng phng php quy c nh ci t.+ Kiu 3: Nu vect P v vect P1 lun c mi quan h cha con hai chiu nhng khngr u l vect cha , u l vect con v cn ph thuc vo tng bi ton th ta c thdng phng php repeat.. until ci t.

    -Bc 6: Ti u ho b nh (ch dng cho ci t kiu 1)n gin vect P bng cch xt tng thnh phn x ca vect P:Nu f(P(..,x,.. ))=g(f(P1(..,x1,..)),f(P2(..,x2,..)),..,f(Pn(..,xn,..)))v x-x1, x-x2,.., x-xnT no th ta ch cn a vng lp ca x ln u tin v b x rakhi vect P v lu T+1 vect P.

    2. V d:V d 1: Bi ton tm ng i ngn nht:

    * Bi ton: Cho th 1 chiu c trng s c biu din bi ma trn k a. Tm ng ingn nht t nh S n nh T.

    * Cch gii bng quy hoch ng:- Bc 1: Vect P (nh hin ti)- Bc 2: f(P(u)) = f(P1(v))+a[v,u] (f l ng i ngn nht t S n u)- Bc 3: ng.- Bc 4: Khng cn n gin.

  • 7/30/2019 Thut ton qui hoch ng.doc

    20/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    21/126

    Bi tp 1: Trn on ng AB di n km cn t k trm xng 1 ti A, 1 ti B v sao chokhong cch gia cc trm xng sau khng ln hn khong cch gia cc trm xngtrc. Tnh s cch t cc trm xng.Input:n k (n100,kn)

    Output:P s cch t cc trm.V d:Input:4 3Output:2

    Bi tp 2: Cho ma trn n*m ch gm 0 v 1.Hi cn t nht bao nhiu nht ct thng (minht ct thng phi chia ma trn ra lm 2 phn) chia ma trn thnh nhng hnh chnht ch gm 0 hoc 1.

    Input:n m (n,m20)ma trn n*mOutput:P s nht ct t nht.V d:Input:3 31 1 10 0 10 0 1Output:34. M rng:Vi phng php trn nu khng th gii c bi ton bng quy hoch ng do khkhn trong d liu hay trong vic lp h thc, ta c th nhanh chng chuyn sang mtthut ton duyt hoc tham lam. Nu h thc ng n nhng khng th lu tr ta c ths dng thut ton duyt bng cch qui (b i phn c nh ) s vn cho kt qu ngmc d c chm hn. Nu khng th lp c h thc ng ta vn c th ci t nh mtthut ton tham lam cho kt qu gn ng.Hi vng qua bi vit ny cc bn c th t rt ra nhng kinh nghim ring cho bn thn.

    Chc cc bn thnh cng vi phng php quy hoch ng.Thut ton Dijkstra trn cu trc Heap

    Trn Hng1.Nhc li thut ton Dijkstra tm ng i ngn nhtBi ton: Cho th c hng vi trng s cc cung (i,j) l C[i,j] khng m, tm ngi ngn nht t nh s n nh t.Thut ton Dijkstra:

  • 7/30/2019 Thut ton qui hoch ng.doc

    22/126

    Bc 1- Khi tr:- Khi tr nhn ng ingn nht t nh s tinh i l d[i]:= C[s,i](nu khng c ng i

    trc tip t s n i thC[s,i] bng v cng).Lu li nh trc khiti i trn hnh trnhngn nht l Tr[i] := s- Khi tr nhn nh s ld[s] =0- nh du mi nh i lt do (nhn d[i] cha ti

    u): DX[i]:=falseBc 2 (vng lp v hn):

    - Tm nh i0 t do c nhn d[i0] nh nht.- Nu khng tm c i0 (i0 =0) hoc i0 =t th thot khi vng lp cn khng th+ nh du i0 c c nh nhn DX[i0]:=True (gi i0 l nh c c nh nhn)+ Sa nhn cho cc nh j t do k vi i0 theo cng thc d[j] = Min{d[j], d[i0]+C[i0,j] vghi lu li nh trc j l i0: Tr[j]:= i0Bc 3 &minus Tm v ghi kt qu:Da vo gi tr d[t] v mng Tr kt lun thch hp

    2. Cu trc Heap v mt s php x l trn Heapa)M t Heap: Heap c m t nh mt cy nh phn c cu trc sao cho gi tr kho mi nt khng vt qu gi tr kho ca hai nt con ca n (suy ra gi tr kho ti gcHeap l nh nht).b) Hai php x l trn Heap- Php cp nht HeapVn : Gi s nt v c gi tr kho nh i, cn chuyn nt v n v tr mi trn Heap bo ton cu trc HeapGii quyt:+ Nu nt v cha c trong Heap th to thm nt v thnh nt cui cng ca Heap (hnh1)+ Chuyn nt v t v tr hin ti n v tr thch hp bng cch tm ng i ngc t vtr hin ti ca v v pha gc qua cc nt cha c gi tr kho ln hn gi tr kho ca v.

    Trn ng i y dn nt cha xung nt con, nt cha cui cng chnh l v tr mica nt v (hnh 2).Ch : trn cy nh phn, nu nh s cc nt t gc n l v t con tri sang con phith d thy: khi bit s hiu ca nt cha l i c th suy ra s hiu hai nt con l 2*i v2*i+1, ngc li s hiu nt con l j th s hiu nt cha l j div 2.

  • 7/30/2019 Thut ton qui hoch ng.doc

    23/126

    - Php loi b gc ca Heap

    Vn : Gi s cn loi b nt gc khi Heap, hy sp xp li Heap (gi l php vunng)Gii quyt:+ Tm ng i t gc v pha l, i qua cc nt con c gi tr kho nh hn trong hai ntcon cho n khi gp l.+ Trn dc ng i y, ko nt con ln v tr nt cha ca n.V d trong hnh v 2 nu b nt gc c kho bng 1, ta s ko nt con ln v tr nt chatrn ng i qua cc nt c gi tr kho l 1, 2, 6, 8 v Heap mi nh hnh 3

    3. Thut ton Dijkstra t chc trn cu trc Heap (tm k hiu l Dijkstra_Heap)

    T chc Heap: Heap gm cc nt l cc nh i t do (cha c nh nhn ng i ngnnht), vi kho l nhn ng i ngn nht t s n i l d[i]. Nt gc chnh l nh t doc nhn d[i] nh nht. Mi ln ly nt gc ra c nh nhn ca n v sa nhn cho ccnh t do khc th phi thc hin hai loi x l Heap nu (php cp nht v php loib gc).

    Vy thut ton Dijkstra t chc trn Heap nh sau:Cp nht nt 1 ca Heap (tng ng vi nt s c gi tr kho bng 0)

  • 7/30/2019 Thut ton qui hoch ng.doc

    24/126

    Vng lp cho n khi Heap rng (khng cn nt no)Begin+ Ly nh u ti nt gc ca Heap (php loi b gc Heap)+ Nu u= t th thot khi vng lp+ nh du u l nh c c nh nhn

    + Duyt danh sch cung k tm cc cung c nh u bng u, nh cui l vNu v l nh t do v d[v] > d[u] + khong cch (u,v) thBeginSa nhn cho v v ghi nhn nh trc v l uTrn Heap, cp nht li nt tng ng vi nh v.End;End;

    4. nh gi+ Thut ton Dijkstra t chc nh nu mc 1. C phc tp thut ton l O(N2), nnkhng th thc hin trn th c nhiu nh.

    + Cc php x l Heap nu (cp nht Heap v loi b gc Heap) cn thc hin khngqu 2.lgM php so snh (nu Heap c M nt). S M ti a l N (s nh ca th) vngy cng nh dn (ti 0). Ngoi ra, nu th tha (s cung t) th thao tc tm nh v kvi nh u l khng ng k khi ta t chc danh sch cc cung k ny theo tng on cnh u ging nhau (dng Forward Star). Do trn th tha, phc tp caDijkstra_Heap c th t ti O(N. k.lgN) trong k khng ng k so vi N+Kt lun: Trn th nhiu nh t cung th Dijkstra_Heap l thc hin c trong thigian c th chp nhn.

    5. Chng trnh

    uses crt;const maxN = 5001;maxM = 10001;maxC = 1000000000;fi = &rquo;minpath.in&rquo;;fo = &rquo;minpath.out&rquo;;

    type k1 = array[1..maxM] of integer;k2 = array[1..maxM] of longint;

    k3 = array[1..maxN] of integer;k4 = array[1..maxN] of longint;k5 = array[1..maxN] of boolean;

    var ke : ^k1; {danh sch nh k}c : ^k2; {trng s cung tng ng vi danh sch k}p : ^k3; 1 {v tr nh k trong danh sch k}d : k4; {nhn ng i ngn nht trong thut ton Dijkstra}

  • 7/30/2019 Thut ton qui hoch ng.doc

    25/126

    tr : k3; {lu nh trc ca cc nh trong hnh trnh ngn nht }dx : k5; {nh du nhn c nh, khng sa n}h, {heap (ng)}sh : k3; {s hiu ca nt trong heap}n,m,s,t, {s nh, s cnh, nh xut pht v nh ch}

    shmax : integer; {s nt max trn heap}

    procedure doc_inp;var i,u,v,x : integer;f : text;beginassign(f,fi);

    {c file input ln th nht}

    reset(f);

    readln(f,n,m,s,t);new(p);new(ke);new(c);fillchar(p^,sizeof(p^),0);for i:=1 to m dobeginreadln(f,u);inc(p^[u]); {p^[u] s lng nh k vi nh u}end;for i:=2 to n dop^[i] := p^[i] + p^[i-1]; {p[i]^ dng xy dng ch s ca mng k}close(f); {p[i]^ l v tr cui cng ca nh k vi nh i trong mng k}

    {c file input ln th hai}reset(f);readln(f);for i:=1 to m dobeginreadln(f,u,v,x);k[p^[u]] := v; {xc nhn k vi nh u l nh v}

    c^[p^[u]] := x; {xc nhn trng s ca cung (u,v) l x}dec(p^[u]); {chuyn v v tr ca nh k tip theo ca u}end;p^[n+1] := m; {hng ro}close(f);end;

    procedure khoitri;

  • 7/30/2019 Thut ton qui hoch ng.doc

    26/126

    var i : integer;beginfor i:=1 to n do d[i] := maxC; {nhn di ng i ngn nht t s ti i l v cng}d[s] := 0; {nhn di ng i ngn nht t s ti s l 0}fillchar(dx,sizeof(dx),False); {khi tr mng nh du: mi nh cha c nh nhn }

    fillchar(sh,sizeof(sh),0); {khi tr s hiu cc nt ca Heap l 0}shmax := 0; {khi tr s nt ca heap l 0}end;

    procedure capnhat(v : integer);{nh v va nhn gi tr mi l d[v], do cn xp li v tr ca nh v trong heap, bom tnh cht heap}

    var cha,con : integer;begincon := sh[v]; {con l s hiu nt hin ti ca v}

    if con=0 then {v cha c trong heap, th b sung vo nt cui cng ca heap}begininc(shmax);con := shmax;end;cha := con div 2; {cha l s hiu hin ti ca nt cha ca nt v hin ti}while (cha>0) and (d[h[cha]] > d[v]) do{nu nhn ca nt cha (c s hiu l cha) ln hn nhn ca nt v th a dn nt v vpha gc ti v tr tho mn iu kin ca heap bng cch: ko nt cha xung v tr cant con ca n }beginh[con] := h[cha];sh[h[con]] := con;con := cha;cha := con div 2;end;h[con] := v; {nt con cui cng trong qu trnh "ko xung" nu trn, l v tr mi ca v}sh[v] := con;end;

    function lay: integer;

    {ly khi heap nh gc, vun li heap hai cy con hp thnh heap mi}var r,c,v : integer;beginlay := h[1]; {ly ra nt gc l nt c nhn nh nht trong cc nt cha c nh nhn}v := h[shmax]; {v: nh cui cng ca heap}dec(shmax); {sau khi loi nh gc, s nt ca heap gim i 1}r := 1; {bt u vun t nt gc}while r*2

  • 7/30/2019 Thut ton qui hoch ng.doc

    27/126

    beginc := r*2; {s hiu nt con tri ca r}if (cinc(c); {so snh nhn ca hai nt con, chn c l con c nhn nh hn}if d[v]d[u]+c^[j]) then {iu kin sa nhn v}begind[v] := d[u] + c^[j]; {sa li nhn ca v}tr[v] := u; {ghi nhn li nh trc ca v l u}capnhat(v); {cp nht li v trong heap bo m cu trc heap }end;end;until shmax = 0; {dng khi khng cn nh t do (s nt ca heap bng 0)}end;

    procedure inkq;var f : text; i,j : integer;kq : k3;

    beginassign(f,fo);rewrite(f);if d[t]=maxc thenwriteln(f,-1) {ghi kt qu: v nghim}elsebeginwriteln(f,d[t]); {ghi di ng i ngn nht t nh s n nh t vo file output}

  • 7/30/2019 Thut ton qui hoch ng.doc

    28/126

    i := 0;while ts do {ln ngc cc nh lin tip ca hnh trnh ngn nht lu vo mng kq}begininc(i);kq[i] := t;

    t := tr[t];end;inc(i);kq[i] := s;for j:=i downto 1 do write(f,kq[j], ); {ghi hnh trnh vo file output}end;close(f);end;

    BEGINdoc_inp;

    khoitri;dijkstra;inkq;END.Cch khc tnh gi tr ca mt biu thc

    Quch NguynTnh gi tr ca mt biu thc l mt bi ton khng kh. C nhiu cch gii quyt biton ny chn hn nh: a biu thc s hc theo k php hu t v tin t, hoc a vdng cy biu thcTuy nhin y ti mun a ra mt phng php gii khc vinhng phng php trn nhm mc ch cho cc bn c gn xa tham kho thm vcng rt mong nhn c kin phn hi ca bn c gn xa.Phng php gii1. Biu thc ch l mt s thc th gi tr ca biu (gtbt) thc bng chnh s 2. Biu thc ch cha php ton '*' th gtbt = gtbt(trc php nhn u tin ) * gtbt(dysau php nhn u tin)3. Biu thc c cha 2 php ton '+, *' th gtbt = gtbt(dy trc du cng u tin)+gtbt(dy sau du cng u tin)

    function gtbt(s:string):real;begin

    if isnumber(s) then gtbt:=strtonumber(s)elseif all_mull_ope(s) then tinh:=gtbt(head(s,*))*gtbt(tail(s,*))elsegtbt:=gtbt(head(s,+))+ gtbt(tail(s,+));end;4. Biu thc c cha 3 php ton '+ , , *'trong trng hp ny ta chn thm du '+' votrc nhng du '' (ngoi tr du ' ' ng ti v tr th 1 : s1= ) sau vn tnh nh

  • 7/30/2019 Thut ton qui hoch ng.doc

    29/126

    (3)5. Biu thc c cha 4 php ton ' +, , *, /' tng t nh (4) v chn thm du ' *' trcnhng du ' /' sau tnh nh (3).Cc hm:Function Isnumber(s:string):boolean; {hm ny tr v gi tr ng nu s l mt s}

    var r:real; code:word;beginval(s,r,code); Isnumber:=(code=0)or (s[1]=/);end;

    Function Strtonumber(s:string):real; {hm ny tr v mt s tng ng vi s hoc 1/snu s[1] =/ }var r:real; code:word;beginval(s,r,code);if code 0 then

    begin val(copy(s,2,length(s)-1),r,code); r:=1/r; end;Strtonumber:=r;end;

    Function All_mull_ope(s:string):boolean; { hm tr v gi tr true khi trong s c ' * ' vkhng c '+' }beginAll_mull_ope:= (pos(*,s)>0) and (pos(+,s)=0);end;

    Function Head(s:string;c:char):string; { hm tr v chui ng trc du c u tin }beginHead:=copy(s,1,pos(c,s)-1);end;

    Function Tail(s:string;c:char):string; { hm tr v chui ng sau du c u tin }beginTail:=copy(s,pos(c,s)+1,length(s)-pos(c,s));end;

    Function Insert_ope(s:string):string; { hm x l chui trc khi tnh }

    var i:byte;beginwhile pos(--,s)>0 do begin i:= pos(--,s); delete(s,i,1); s[i]:=+; {i 2 du - thnhdu+}while pos( ,s)>0 do delete(s,pos( ,s),1);i:=1;repeatinc(i);

  • 7/30/2019 Thut ton qui hoch ng.doc

    30/126

    case s[i] of -: begin insert(+,s,i); inc(i); end;/: begin insert(*,s,i); inc(i); end;end;until i>= length(s);Insert_ope:=s;

    end;

    Function Tinh_gia_tri_bieu_thuc_khong_dau_ngoac(s:string) : real;var s:string;beginTinh_gia_tri_bieu_thuc_khong_dau_ngoac:= gtbt(insert_ope(s));end;

    6. Biu thc c cha 4 php ton trn v du ngoc:Trc tin ta i tm du ngoc ng u tin tnh t tri sang phi trong b iu thc. Nutn ti th ta lui v tri tm du ngoc m u tin m ta gp (tnh t du ngoc ng u

    tin). Sau trch biu thc con trong khong trn ra tnh gi tr ca biu thc con (5)v a gi tr y v dng chui ghp vo ng v tr ca n ban u trong biu thc m.Lp li bc 6. Ngc li nu khng tn ti du ngoc ng th biu thc cho l biuthc khng c cha du ngoc (5)

    Function Numbertostr(r:real):string;var s:string;beginstr(r:0:5,s);Numbertotr :=s;end;Function Tinh_gia_tri_bieu_thuc_co_ngoac(s:string):real;begini:=pos(),s);while i>0 dobeginrepeatdec(i);until s[i]=(;s1:=copy(s,i+1,pos( ),s)-i-1);delete(s,i,pos( ),s) -i+1;

    insert(numbertostr(Tinh_gia_tri_bieu_thuc_khong_dau_ngoac(s1)),s,i);i:=pos( -,s);end;Tinh_gia_tri_bieu_thuc_khong_co_ngoac:=Tinh_gia_tri_bieu_thuc_khong_dau_ngoac(s);end;

    7.X l li ca biu thc: ta ch cn sa li cht t cc on m lnh trn th ta s pht

  • 7/30/2019 Thut ton qui hoch ng.doc

    31/126

    hin c tt cc cc li m biu thc c chn hn nh: sai c php, xut hin k t l,chia cho 0

    8. M rng php ton: vi phng php nu trn cc bn d dng b sung thm mt sphp ton vo biu thc nh: ^, log, Ln, sin, cos,

    9. Tnh biu thc di:ta c th dng mng lu tr biu thc thay v chui.

    Trong qu trnh vit bi c th c xut hin mt s sai st. Mong bn c thng cm vt khc phc (nu c) hoc lin h vi tc gi ca bi vit b sung.Dijtra - thut ton tt gii cc bi ton ti u

    Giang LmBi ton ti u l mt bi ton mun thu trong tin hc bi n c ng dng thc t cao.V d nh lm th no hon thnh mt cng vic no vi chi ph t nht, hay i nhth no n ch sm nht, vv... Cng vi s tr gip ca my tnh v cc thut ton

    hiu qu gip chng ta gii quyt bi ton ti u mt cch d dng v chnh xc. Mttrong s cc thut ton hiu qu l thut ton Dijkstra- thut ton tm ng i ngnnht trn th c trng s khng m.Chc hn cc bn u khng xa l g vi thut ton Dijkstra. y l mt ci tin t thutton Ford_Bellman. Trong trung hp trng s trn cc cung l khng m, thut ton doDijkstra ngh gii bi ton tm ng i ngn nht t nh s n cc nh cn lica th lm vic hiu qu hn nhiu so vi thut ton Ford_Bellman. Thut ton cxy dng trn c s gn cho cc nh cc nhn tm thi. Nhn ca mt nh cho bit cntrn ca di ng i ngn nht t s n n. Cc nhn ny s c bin i theo mtth tc lp, m mi mt bc lp c mt nhn tm thi tr thnh nhn c nh. Nunhn ca mt nh no tr thnh nhn c nh th n s cho ta khng phi l cn trnm l ng i ngn nht t nh s n n. Thut ton c m t c th nh sau:

    u vo: th c hng G = (V,E) vi n nh, s thuc V l nh xut pht, ma trntrng s a[u,v], a[u,v] 0, u,v thuc V.u ra: di ng i ngn nht t s n tt cc nh cn li: d[v], v thuc V.truoc[v], v thuc V, ghi nhn nh i trc v trong ng i ngn nht t s n v

    Procedure Dijkstra;Beginfor v thuc V do begin d[v] := a[s,v]; truoc[v] := s; end; (* Khi to *)

    d[s] := 0; T := V {s} (* T l tp cc nh c nhn tm thi *)(* Bc lp *)while T doBeginTm nh u thuc T tho mn d[u] = Min {d[z] : z thuc T}T := T{u} (* C nh nhn ca nh u *)for v thuc T do (* Cp nht li nhn cho cc nh trong T *)if d[v] > d[u] + a[u,v] then

  • 7/30/2019 Thut ton qui hoch ng.doc

    32/126

    begin d[v] := d[u] + a[u,v]; truoc[v] := u; end;

    end;end;Thut ton Dijkstra tm c ng i ngn nht trn th sau thi gian c O(n2). Nu

    ch cn tm ng i ngn nht t s n mt nh t no th c th kt thc thut tonkhi nh t tr thnh nh c nhn c nh. Vic ci t thut ton chc khng c g khkhn. iu kh nht l trong cc bi ton c th ta phi a c n v m hnh thnh th no, nh l g, 2 nh c cung ni khi no, trng s l g, nh xut pht l g,nh kt thc l g, vv..T mi p dng thut ton c bn gii. Sau y l mt sbi ton hay ng dng thut ton Dijkstra gii.

    Bi 1: Chuyn HngBn mt kho hng hnh ch nht kch thc mxn c chia thnh cc vung n v(m hng, n ct: cc hng nh s t trn xung di, cc ct c nh s t tri quaphi). Trn cc vung ca bn c mt s k hiu:

    - Cc k hiu # nh du cc c mt kin hng xp sn.- Mt k hiu *: nh du ang c mt rbt.- Mt k hiu $: nh du cha kin hng cn xp.- Mt k hiu @: nh du v tr m cn phi xp kin hng vo $ vo .- Cc k hiu du chm ".": Cho bit trng.Ti mt thi im, r bt c th thc hin mt trong s 6 ng tc k hiu l:- L, R, U, D: Tng ng vi php di chuyn ca r bt trn bn : sang tri, sang phi,ln trn, xung di. Thc hin mt php di chuyn mt 1 cng- +, : Ch thc hin khi rbt ng bn cnh kin hng $. Khi thc hin thao tc +,rbt ng yn v y kin hng $ lm kin hng ny trt theo hng y, n khichm mt kin hng khc hoc tng nh kho th dng li. Khi thc hin thao tc , rbt ko kin hng $ v pha mnh v li li 1 theo hng ko. Thc hin thao tc yhoc ko mt C cng. R bt ch c di chuyn vo khng cha kin hng ca kho.

    Hy tm cch hng dn rbt thc hin cc thao tc a kin hng $ v v tr @ saocho s cng phi dng l t nht.D liu: Vo t file vn bn CARGO.INP- Dng 1: Ghi ba s nguyn dng m, n, C ( m, n 100; C 100)- m dng tip theo, dng th i ghi n k kiu trn hng i ca bn theo ng th ttri qua phi.Cc k hiu c ghi lin nhau.

    Kt qu: Ghi ra file vn bn CARGO.OUT- Dng 1: Ghi s cng cn thc hin- Dng 2: Mt dy lin tip cc k t thuc {L, R, U, D, +, -} th hin cc ng tc cnthc hin ca r bt.Rng buc: Lun c phng n thc hin yu cu bi.V d:

  • 7/30/2019 Thut ton qui hoch ng.doc

    33/126

    Phn tch:Thut ton: Ta s dng thut ton Dijkstra gii bi ton ny.* M hnh th:Mi nh ca th y gm 3 trng phn bit vi cc nh khc:- i: Ta dng ca kin hng (i = 1..m)- j: Ta ct ca kin hng (j = 1..n)- h: Hng ca r bt ng cnh kin hng so vi kin hng (h = 1..4: Bc, ng, Nam,

    Ty).

    Bn c th quan nim mi nh l (i,j,u,v): trong i,j: ta ca kin hng; u,v: ta ca rbt ng cnh kin hng. Nhng lm th s rt lng ph b nh v khng chy htc d liu. Ta ch cn bit hng h ca rbt so vi kin hng l c th tnh c ta ca rbt bng cch dng 2 hng mng lu cc s ra:dx : array[1..4] of integer = (-1,0,1,0)dy : array[1..4] of integer = (0,1,0,-1)Khi , ta (u,v) ca rbt s l : u := i + dx[h]; v := j + dy[h];

    - Hai nh (i1,j1,h1) v (i2,j2,h2) c gi l k nhau nu qua 1 trong 2 thao tc + hoc -kin hng c rbt y hoc ko t (i1, j1) n (i2, j2) v rbt c th di chuync t (u1,v1) n (u2,v2) ( u1 = i1+dx[h1]; v1=j1+dy[h1]; u2=i2+dx[h2]; v2=j2+dy[h2]). Tt nhin cc (i2,j2) v (u2,v2) phi u khng cha kin hng.- Trng s gia 2 nh l C (s cng m r bt y kin hng t (i1,j1) n (i2,j2) )cng vi cng r bt di chuyn t (u1,v1) n (u2,v2).Gi s kin hng cn xp ang (is,js) v hng ca rbt ng cnh kin hng l hsv cn xp kin hng vo l (ie, je). Khi , ta s dng thut ton Dijkstra tm

    ng i ngn nht t nh (is,js,hs) n nh (ie,je,he) vi he thuc {1..4}.Mng d s l 1 mng 3 chiu: d[i,j,h]: di ng i ngn nht t nh xut pht(is,js,hs) n nh (i,j,h). Kt qu ca bi ton s l d[ie,je,he] vi he thuc {1..4}. ghi nhn phng n ta s dng 3 mng 3 chiu tr1, tr2, tr3. Khi ta di t nh (i1,j1,h1)n nh (i2,j2,h2) th ta s gn: tr1[i2,j2,h2]:= i1; tr2[i2,j2,h2]:= j1; tr3[i2,j2,h2] := h1 ghi nhn cc thng tin: ta dng, ct, hung ca dnh trc nh (i2,j2,h2). T 3 mngny ta c th d dng ln li ng i.

  • 7/30/2019 Thut ton qui hoch ng.doc

    34/126

    Bi 2: Hnh trnh r nht:Thnh ph Peace va a vo p dng mt h thng in t t ng tnh l ph s dngl ph ng giao thng. Mt h thng c trin khai pht hin xe ca bn r tri, rphi, i thng hoc quay u v mi thao tc nh vy phi tr mt l ph tng ng. l 1 $ cho mi ln r tri, 5$ cho mi ln r phi, i thng v pha trc l min ph, quay

    u xe l b cm, ngoi tr tnh hung cui ph khi khng cn c th i thng, r tri,hoc r phi c na. Trong trng hp ngoi l bt buc phi quay u xe, bn phi trl ph 10$. Bn c mi thit k v a ra ch dn cho ngi i xe i sao cho phi trl ph l t nht gia 2 im bt k trong thnh ph. Rt may h thng ng giao thngca Peace c dng bn c.V d:

    v d trn k t # ch ra on ng ph, cn k t . ch ra on ng khng lng. Cc on ng ph u c th i c 2 chiu. K t E ch ra v tr xut pht caxe t c u xe hng v pha ng, cn k t F ch ra v tr kt thc. L trnh phitr l 8$, trong ta phi thc hin 3 ln r tri v 1 ln r phi n ch. Ta c ththc hin cch i r phi 2 ln n ch, nhng cch l ph phi tr l 10$.

    Chiu cao v chiu rng ca bn t nht l 4 v khng qu 30. Bn c ng 1 imxut pht v 1 im kt thc. Lun c ng i t im xut pht n im kt thc.Lun c mt khung gm ton k t . vin bn khng th vt ra ngoi bn .D liu: Vo t file vn bn ERP.INP gm cc dng:- Dng th nht cha 2 s nguyn dng h, w theo th t l chiu cao h v chiu rngca bn .- Mi dng trong h dng tip theo cha w k t. Mi k t ch l mt trong s cc k tsau:- .: v tr khng c ng- #: v tr c ng ca bn .- E: v tr xut pht, xe hng u v pha ng.- W: v tr xut pht, xe hng u v pha Ty.- N: v tr xut pht, xe hng u v pha Bc.- S: v tr xut pht, xe hng u v pha Nam.- F: v tr kt thc.Trong bn c ng 1 trong 4 k t E, W, N, S. V ng 1 k t F.Kt qu ghi ra file vn bn ERP.OUT duy nht mt s l l ph ca l trnh r nht i t

  • 7/30/2019 Thut ton qui hoch ng.doc

    35/126

    v tr xut pht n v tr kt thc.Phn tch:

    M hnh th:Mi nh ca th y gm 3 trng phn bit vi cc nh khc:

    - i: Ta dng ca nt m t ang ng( i = 1..h)- j: Ta ct ca nt m t ang ng (j = 1..w)- h: Hng ca u t (h=1..4)

    Ta s xt xem 1 (i,j) c phi l 1 nt khng. d hnh dung, ta s quan nim 1 nt y cng ging nh 1 nt giao thng nh trong thc t. Ta s xy dng mt mng nut(nut(i,j)=true: (i,j) l 1 nt ) nh sau:- iu kin cn (i,j) l 1 nt l (i,j) phi l ng.- Cc xut pht v kt thc u l nt.- Nu mt (i,j) c 2 k theo hng 1 v 3 (hoc 2 v 4) l ng v 2 k theo hng2 v 4 (hoc 1 v 3) khng l ng th (i,j) khng l 1 nt. Ngc li (i,j) l 1nt.- Khi ta ang ng (i1,j1) v t ang quay u v hng h1 ta s tm nh k bngcch i theo 4 hng(1..4).Khi i theo hng h2 ta gp mt (i2,j2) l 1 nt. Khi nh (i1,j1,h1) v (i2,j2,h2)c gi l k nhau. mi hng ta s i cho n khi gp khng l ng.- Trng s y s c lu tr trong 1 hng mng cp(u,v) vi ngha cp(u,v) l chi phphi tr t ang quay u theo hng u chuyn sang quay u theo hng v. Khi ,

    trng s gia 2 nh (i1,j1,h1) v (i2,j2,h2) l cp(h1,h2).Hng mng chi ph nh sau:cp :array[1..4,1..4] of integer= ( (0,5,10,1),(1,0,5,10),(10,1,0,5),(5,10,1,0) );- Mng d(i,j,h) s lu tr chi ph t nht i t nh xut pht (is,js,hs) n nh (i,j,h).Kt qu ca bi ton s l d(ie,je,he) vi (ie,je) l kt thc, he=1..4.

    Bi tp:Bi 1: ng i trong m cung.

    Mt m cung gm MxN vung (M dng, N ct, M, N 100). Mi vung c th c t0 n 4 bc tng bao quanh. Cn phi i t bn ngoi vo m cung, bt u t pha Ty,qua cc ca m cung v thot ra khi m cung v pha ng. Ch c php di chuyntheo 4 hng ng, Ty, Nam, Bc v i qua ni khng c tng chn.1. Trong trng hp c ng i, hy tm ng i qua t nht.2. Trong trng hp tri li, hy tm cch ph b t nht mt s bc tng c ngi. Nu c nhiu phng n nh vy, hy ch ra mt phng n ng i qua t nht.

  • 7/30/2019 Thut ton qui hoch ng.doc

    36/126

    Trng thi ca 1 c cho bi mt s nguyn trong khong 0 n 15 theo quy tc: btu l 0 (Khng c tng), cng thm 1(nu c bc tng pha Ty), cng thm 2 (nuc bc tng pha Bc), cng thm 4 (nu c bc tng pha ng), cng thm 8 (nu cbc tng pha Nam).

    D liu vo c cho bi file vn bn MECUNG.INP bao gm:- Dng u ghi 2 s M, N- Cc dng tip theo ghi ma trn trng thi ca cc gm M dng, N ct, trong gi trdng i ct j m t trng thi ca [i,j].Cc gi tr ghi trn 1 dng cch nhau t nht 1 du cch.Kt qu ghi ra file vn bn MECUNG.OUT:1. Trng hp tm thy ng i:- Dng u ghi s m ng i i qua- Dng tip theo ghi thng tin v ng i gm ta dng xut pht, sau cch 1 dutrng, l xu k t m t ng i( theo hng) vit lin tip nhau, gm cc k tD(ng), B(bc), N(nam), T(ty).

    2. Trng hp khng tm thy ng i:- Dng u ghi s 0- Dng th 2 ghi s bc tung phi ph- Dng th ba ghi s m ng i i qua- Dng cui ghi thng tin v ng di theo quy cch ging nh trng hp 1.

    Vid 1:

    Cc bn thy y, mt bi ton tng chng nh rt kh, nhng sau khi phn tch v an v m hnh th ta c th gii n d dng bng thut ton Dijkstra. Phn ci t ccbi ton trn, ti cc bn t lm. Nu mun c chng trnh hoc c g khng hiu, xinlin h vi to son hoc ti v ti s cho bn thy sc mnh ca thut ton Dijkstra!Chc cc bn thnh cngK thut tm kim nh phn gii mt s bi ton ti u

  • 7/30/2019 Thut ton qui hoch ng.doc

    37/126

    Nguyn Thanh TngC l ai trong chng ta cng bit v thut ton tm kim nh phn v s hiu qu ca n.S dng k thut tm kim tng t trong mt s bi ton ta cng t c kt qu rtkh quan. Sau y l mt s bi ton nh vy.

    I. Bi ton v d.Thng tin v mng giao thng gm n thnh ph cho bi mng A kch thc n?n gm ccphn t aij l mt gi tr nguyn dng ch ti trng ca tuyn ng ni 2 thnh ph i,j.Nu aij =0 th gia i,j khng c ng ni.Ti trng ca mt l trnh t thnh ph s n thnh ph t (c th i qua mt s thnh phtrung gian) l ti trng ca tuyn ng c ti trng nh nht thuc l trnh.Cho trc 2 thnh ph s v t. Gi thit lun c l trnh t s n t, hy tm mt l trnh t sn t c ti trng ln nht.Thut giit kmin = min {aij : aij >0}; kmax = max {aij: aij >0}Vi k thuc kmin..kmax, ta xy dng th G(k) gm:

    n nh ng vi n thnh ph.2 nh i,j c cnh ni nu aij kNu G(k) c mt ng i t s n t th ta ni mng giao thng c "l trnh ti thiu k"(V mi cnh ca G(k) u c trng s k nn nu G(k) c mt ng i t s n t thng i c ti trng k).Bi ton c chuyn thnh vic tm gi tr k ln nht thuc kmin..kmax sao cho mnggiao thng c "l trnh ti thiu k". Khi ng i t s n t tm c chnh l ng ic ti trng ln nht cn tm.Ta s dng k thut tm kim nh phn da trn nhn xt: nu mng c "l trnh ti thiup" v k l gi tr ln nht c "l trnh ti thiu k" th k thuc p..kmax. Ngc li (numng khng c "l trnh ti thiu p") th k thuc kmin..p 1.Th tc Search thc hin vic tm kim nh phn c dng nh sau:procedure search(x);beginl := kmin; r := kmax;repeatk := (l + r) div 2;check(k);if ok then l := k else r := k - 1;until l>=r;end;

    Trong th tc Check (k) thc hin:1. Xy dng th G(k) nh m t trn.2. Dng thut ton DFS kim tra xem c ng i t s n t khng. Nu c th t Okl true, ngc li th Ok l false.Chng trnh mu bn c tin theo di, ti xin cung cp chng trnh mu ca bi ton ny. x lli, mt s on chng trnh hi phc tp so vi mu trn.program weight;

  • 7/30/2019 Thut ton qui hoch ng.doc

    38/126

    constinp = weight.inp;out = weight.out;max = 100;type

    mang1 = array[1..max] of integer;mang2 = array[1..max, 1..max] of LongInt;varn,s,t,z : integer;k,l,r : LongInt;a : mang2;,kq : mang1;ok : boolean;(*********************)procedure nhap;var

    i,j : integer;f : text;beginassign(f, inp);reset(f);readln(f, n, s, t);for i := 1 to n do beginfor j := 1 to n do read(f,a[i,j]);readln(f);end;close(f);end;(*********************)procedure chbi;vari,j : integer;beginl := maxLongInt; r := 0;for i := 1 to n dofor j := 1 to n doif a[i,j] > 0 then begin

    if l > a[i,j] then l := a[i,j];if r < a[i,j] then r := a[i,j];end;end;(*********************)procedure dfs(i : integer);varj : integer;

  • 7/30/2019 Thut ton qui hoch ng.doc

    39/126

    beginfor j := 1 to n doif ([j] = 0) and (a[i,j] > = k) then begin[j] := i;dfs(j);

    end;end;(*********************)procedure check;beginfillchar(,sizeof(),0);[s] := -1;dfs(s);if [t] = 0 then ok := falseelse ok := true;end;

    (*********************)procedure search;beginrepeatk := (l+r) div 2;check;if ok then l := kelse r := k-1;until (l=r) or (l = r-1);if l = r-1 then begink := r;check;if ok then exit;end;k := l;check;end;procedure trace;vari : integer;begin

    if not ok then exit;z := 0; i := t;repeatinc(z); kq[z] := i;i := [i];until i = -1;end;(*********************)

  • 7/30/2019 Thut ton qui hoch ng.doc

    40/126

    procedure xuly;beginsearch;trace;end;

    (*********************)procedure inkq;varf : text;i : integer;beginassign(f, out);rewrite(f);writeln(f, k);for i := z downto 1 dowrite(f, ,kq[i]);

    close(f);end;(*********************)beginnhap;chbi;xuly;inkq;end.Nhn xta. Vi k thut tm kim nh phn, gii thut trn ch cn thc hin clog2(kmax kmin) ln kim tra (gi th tc check). Do hn ch aij l nguyn dng maxLongInt nn kmax kmin < 232. Th tc check s dng thut ton DFS c phc tptnh ton l O(n2) nn gii thut c thi gian thc thi c C.O(n2) vi C < 32.b. Ta khng cn phi xy dng G(k) mt cch tng minh (tnh hn thnh ma trn k)m ch cn thay biu thc kim tra c cnh (i,j) khng bng biu thc a ij k (trong th tcDFS).c. Gi tr ti u l mt trong cc phn t ca A. Trong bi ny do aij l s nguyn nnta xc nh c khong tm kim l min nguyn kmin..kmax v thc hin vic tm kimnh phn trn min .Nu aij l s thc khng th k thut tm kim nh phn khng p dng c trn min

    thc [kmin, kmax]. p dng c ta phisp xp tng dn cc phn t dng ca A (tia c n2 phn t) ri thc hin tm kim nh phn trn dy tng dn . Khi th tcsearch cn thay i: l khi to bng 1, r khi to bng n2 v th tc check c gi vitham s l d[k]: check(d[k]) trong d dy tng dn cha n 2 phn t ca A.Cng c th lm th khi aij l s nguyn, tuy nhin s khng hiu qu v s tn thi giansp xp dy v tn khng gian lu tr dy sp.II. Mt s bi ton p dng1. Bi ton 1 ( thi HSGQG nm hc 1999-2000)

  • 7/30/2019 Thut ton qui hoch ng.doc

    41/126

    C n cng nhn v n cng vic. Nu xp cng nhn i nu lm vic j th phi tr tin cngl aij. Hy tm mt cch xp mi ngi mt vic sao cho tin cng ln nht cn tr trongcch xp vic l nh nht.Thut giiNu bi ton yu cu l tm cch xp vic sao cho tng tin cng phi tr l nh nht th

    l bi ton tm cp ghp y trng s cc tiu. Tuy nhin bi ny l tm cch xpvic sao cho tin cng ln nht l nh nht. Ta c tng nh sau: tm s k b nht saocho tn ti mt cch sp xp n ngi, n vic v cc yu cu v tin cng u k.D thy vic tm kim c th thc hin bng k thut tm kim nh phn, v vic kimtra s k c tho mn khng chnh l vic kim tra th 2 pha G(k) c b ghp y hay khng. th th 2 pha G(k) c xc nh nh sau:G(k) = (X,Y,E) Trong : X l tp n nh ng vi n cng nhn, Y l tp n nh ng vi ncng vic. Vi i thuc X, j thuc Y nu aij k th cho (i,j) thuc E (2 nh i,j ch c nivi nhau nu aijk) .Nu k l s nh nht m G(k) c b ghp y th b ghp chnh l cch xp viccn tm.

    Ta cng c mt s bi ton dng tng t:Bi ton 2. Thi gian hon thnhC n cng nhn v n cng vic. Nu xp cng nhn i nu lm vic j th thi gian honthnh l Tij. Hy tm mt cch xp mi ngi mt vic sao tt c cc cng vic honthnh trong thi gian sm nht (cc cng vic c tin hnh song song).Bi ton 3. Nng sut dy truynDy truyn sn xut c n v tr v n cng nhn (u c nh s t 1..n). a ij l nng sut(s sn phm sn xut c trong mt n v thi gian) ca cng nhn i khi lm vic tiv tr j. Vi mi cch b tr dy truyn (cng nhn no lm v tr no) nng sut ca mtv tr l nng sut ca cng nhn lm vic ti v tr . Nng sut chung ca dy truyn lnng sut ca v tr km nht trn dy truyn. Hy tm cch b tr dy truyn c nngsut cao nht.Ch : trong bi ny ta phi tm s k ln nht G(k) c b ghp y v 2 nh i,j chc ni vi nhau nu aijk.2. Bi ton 4 ( thi HSGQG nm hc 1998-1999)Mt on ng quc l c n ca hng, pi l khong cch ca n so vi u ng. Numt ca hng c kho th khng cn phi i ly hng, ngc li th phi n ly hng ca hng c kho gn nht. Hy chn k ca hng t kho sao cho qung ng i lyhng di nht trong s cc cc ca hng cn li l ngn nht.Thut giiBi ny c th lm bng vt cn (duyt cc t hp). Ngoi ra cn c phng php quy

    hoch ng. Tuy nhin chng hon ton khng hiu qu khi n ln. Ta c th p dng kthut tm kim nh phn kt hp tham lam nh sau.Th tc search tm kim nh phn gi tr d trong min dmin..dmax tng t bi ton 1. Ringth tc check(d) s thc hin khc. Thay v kim tra xem c th b tr k kho sao choqung ng i ly hng ca mi ca hng khng c kho u d khng, ta s lm ngcli: ln lt b tr cc kho sao cho qung ng i ly hng ca mi ca hng khngbao gi vt qu d.Cch lm nh sau:

  • 7/30/2019 Thut ton qui hoch ng.doc

    42/126

    Gi dij l khong cch gia 2 ca hng i,j: dij = |pi pj|Dng 2 ca hng gi c ch s l 0 v t = n+1 lm bin sao cho d i0 = dit = vi mi i. t2 kho (gi) ti 2 ca hng .Vi mi ca hng i t 1 n n: nu i c kho th chuyn sang ca hng tip theo, ngcli th:

    1. Tm ca hng x c kho gn i nht v pha bn tri (x thuc 0..i).2. Tm ca hng y c kho gn i nht v pha bn phi (y thuc i..t).Nu dix hoc diy d th qung ng i ly hng ca i d (tho mn). Ngc li tm cahng j cha c kho xa i nht v pha phi (j thuc i..y) m d ij d. t kho ti j.Sau qu trnh trn m s kho (tt nhin khng tnh 2 kho 0 v t). Nu s kho k th tOk l true.3. Bi ton 5 ( thi Olympic Tin hc SV 2004)C N hnh khch, M khch sn v K xe bus. Mi hnh khch cn v mt khch sn vmi xe bus s i qua mt s khch sn no . Xe bus i c q[i] ch ngi. Hy sp xphnh khch ln xe bus sao cho:1. Mi xe bus khng cha nhiu hnh khch hn s gh ca n.

    2. Tt c hnh khch u ln xe bus c i qua khch sn mnh cn n.3. S xe bus cn dng l t nht.Thut giiBi ny c mt thut gii p dng k thut tm kim nh phn nh sau: ta s tm s T nhnht sao cho: ch dng T xe bus l ch c ht khch tho mn 3 iu kin trn.T s c tm bng phng php nh phn trong min t 1 n K. kim tra gi tr T ctho mn khng, ta s tm mt t hp T xe bus trong s K xe bus sao cho c th sp xpN hnh khch ln T xe bus tho mn 3 iu kin trn.Ta chn T xe bus bng phng php duyt t hp v kim tra t hp c c c thomn khng bng thut ton cp ghp (hoc lung trn th 2 pha). Thut ton lungthc thi nhanh hn, c m t nh sau:1. Xy dng th 2 pha G(X,Y,E). Trong : X l cc khch sn, Y l cc xe bus cchn (T xe bus). Kh nng thng qua ca mi nh thuc X l s hnh khch n khchsn . Kh nng thng qua ca mi nh thuc Y l s ch ngi ca xe bus . Nu xebus j i qua khch sn i th t kh nng thng qua trn cnh (i,j) l N, ngc li th tbng 0.2. Tm lung cc i trn th G. Nu gi tr lung qua mi nh X bng kh nngthng qua ca n th vic la chn t hp T xe bus l tho mn yu cu. T gi trlung ta cng d dng tm c cch sp xp hnh khch.Nu cc bn khng quen vi thut ton lung th c th ci bng thut ton cp ghp:1. Xy dng th 2 pha G(X,Y,E). Trong : X l cc hnh khch, Y l cc ch ngi

    trn cc xe bus c chn (c T xe bus c chn, xe t c q[t] ch th ta sinh q[t] nhtrong Y). Nu xe bus tng ng ca j i qua khch sn ca i th a cnh (i,j) vo E.2. Tm b ghp y trn th G. Nu c th vic la chn t hp T xe bus l thomn yu cu v b ghp chnh l cch sp xp hnh khch.Ta rt ra mt s nhn xt sau:1. Vic tm kim nh phn lm gim s t hp phi duyt rt nhiu. Nu vt cn thun tuth phi duyt ti a 2K t hp. Tuy nhin dng phng php tm kim nh phn, nu duyt xong gi tr T th ta khng cn phi kim tra cc t hp nhiu hn T phn t (nu T

  • 7/30/2019 Thut ton qui hoch ng.doc

    43/126

    tho mn) hoc t hn T phn t (nu T khng tho mn).2. Ta ch cn tm mt t hp tho mn, nn s t hp cn duyt cn t hn na (tm thymt t hp tho mn th khng cn tm cc t hp khc cng s phn t na). V ta cth p dng mt s k thut tham lam trong khi duyt nh: u tin chn cc xe bus chc nhiu khch, i qua nhiu khch sn, khng xt cc xe bus khng i qua khch sn

    no trong s cc khch sn c hnh khch cn n3. Cn gim min tm kim kminkmax xung cng nhiu cng tt (kt hp vi phngphp tham lam chng hn). Mt khc ghi nhn li nhng gi tr T xt trnh phi xtli mt cch v ch.Ta cng c mt bi ton gii bng k thut tng t:Bi ton 6. Mng my tnhMng gm N my tnh, mt s cp my c ni vi nhau bng cp. C mt chngtrnh iu khin, my no c ci t chng trnh th c th iu khin tt c ccmy khc c cp ni trc tip vi n (tt nhin c th iu khin chnh n). Cn chn ramt s t my nht ci chng trnh sao tt c cc my u c iu khin. Thut gii

    Bi ny ch gii c bng cch duyt tt c cc t hp. Tuy nhin p dng phng phptm kim nh phn s gip gim s t hp cn duyt rt nhiu (lp lun nh bi 5). Bnc c th ci theo c 2 phng php so snh.Trn y l mt s bi ton p dng c k thut tm kim nh phn. Li gii khngkm chng trnh mu m dnh cho bn c t ci t va trnh bi vit di mt cchkhng cn thit va bn c rn luyn k nng lp trnh. Bn c no c nhu cu vchng trnh mu tham kho, xin lin h vi tc gi quaemail: [email protected] phc tp thut ton v t chc d liu

    Trn HngTrong Tin hc, khi phn tch mt bi ton ngi ta cng tm gi thit v kt lun. Githit l nhng d liu a vo my tnh x l km theo cc iu kin rng buc chng(gi l input) v kt lun l nhng thng tin thu c sau x l (gi l output). Bi tontrong Tin hc c th hiu l bt c cng vic g c th giao cho my tnh thc hin: vmt ch, mt hnh trn mn hnh cng l bi ton! Phng php gii bi ton c th ci t thnh chng trnh my tnh (vit bng ngnng lp trnh) gi l thut ton. Thut ton c th hin l dy cc thao tc c th t vhu hn sau khi thc hin dy thao tc ny, t input ca bi ton s nhn c outputca bi ton.Mt bi ton c th c gii bng mt vi thut ton khc nhau. Ngi ta cn la chn

    thut ton thch hp v do cn nh gi thut ton. nh gi thut ton ngi tada vo khi nim phc tp thut ton. phc tp ca thut ton l i lng nhgi lng thi gian v khng gian b nh dnh cho thc hin thut ton.T ngha thc tin ca cc bi ton khc nhau, c khi ngi ta quan tm ti thut toni hi t thi gian thc hin, nhng cng c khi li quan tm nhiu hn ti thut toncho php ci t d liu chim t khng gian b nh. phc tp v khng gian b nh ca thut ton ph thuc phn ln vo cu trc d liuc s dng khi ci t thut ton.

  • 7/30/2019 Thut ton qui hoch ng.doc

    44/126

    phc tp v thi gian thc hin (cn gi l phc tp tnh ton) c nh gi sb da vo s lng cc thao tc c bn (gn, so snh 2 s nguyn, cng, nhn 2 snguyn ). S lng cc thao tc ny l mt hm s ca kch c d liu input. Nu kchc d liu input l N th thi gian thc hin thut ton l mt hm s ca N. Vi mtthut ton trn cc b d liu input khc nhau (cng kch c N) c th cc hm s ny l

    khc nhau; song iu quan tm hn c l mc tngca chng nh th no khiN tngng k.V d: Xt thut ton tm gi tr ln nht trong dy N s sau y:Input. S nguyn dng N, dy N s A1, A2, , ANOutputmax{A1, A2,, AN}Bc 1. max A1Bc 2. for i 2 to N doIfmax < Aithen max AiBc 3. Hin maxTrng hp xu nht: d liu vo l dy sp tng, th s thao tc c bn l f(N)=2N+1Trng hp tt nht: gi tr ln nht ngay u dy, th thao tc c bn l g(N)= N.

    Khi N ln ng k th f(N) v g(N) coi nh xp x nhau v xp x hm bc nht ca N.Vy trong trng hp ny ta k hiu phc tp thi gian ca thut ton trn l O(N).Ngi ta phn lp cc bi ton theo phc tp thut ton. C th lit k mt s lp sauc phc tp tng dn:- phc tp hng O(1)- phc tp lgarit O(logN)- phc tp tuyn tnh O(N)- phc tp NlogN O(NlogN)- phc tp a thc O(Nk) k: hng nguyn- phc tp lu tha O(aN) a: c s nguyn dng khc 1- phc tp giai tha O(N!)Tnh hiu qu (v thi gian) ca thut ton l nh gi v thc hin thut ton trong mtkhong thi gian cho php. Tnh hiu qu c nhn xt gin tip qua phc tp tnhton ca thut ton. phc tp ln th thi gian thc hin lu hn.Chng ta xt hai bi ton quen thuc sau y lm v d v la chn thut ton v ci td liu:

    Bi ton 1.Dy n iu tng di nhtCho mng N) gm N phn t nguyn. Hy xo i mt s t nht cc phn t ca mng nhng phn t cn li lp thnh dy tng di nht.D liu vo t file vn bn DAYTANG.IN

    Dng u l s nguyn N (1 N 30000)Tip theo l N s nguyn ln lt t phn t u n phn t cui ca mng.Kt qu ghi ra file vn bn DAYTANG.OUTDng u l s K l s lng cc phn t cn gi liTip theo l K dng, mi dng ghi 2 s: s th nht l gi tr phn t gi li, s th hai lch s (trong mng ban u) ca phn t c gi li ny. DAYTANG.IN101 2 8 10 5 9 4 3 6 7

  • 7/30/2019 Thut ton qui hoch ng.doc

    45/126

    DAYTANG.OUT51 12 25 5

    6 97 10Bi ton ny thng c gii bng Qui hoch ng. C th ci t d liu nh sau:Xy dng 2 mng mt chiu T v mng D vi ngha sau:D[i] l di ca dy kt qu khi bi ton ch xt dy A1 , A 2 ,, Ai v n c tnh theocng thc truy hi:D[i] = Max { D[i], D[j] +1 vi mi j m j < i v Aj A i } (1)T[i]=j l ch s (trong dy A ban u) ca phn t ng ngay trc A i trong dy kt qu.Cch tm T[i]: duyt mng A t v tr 1 n v tr i-1, v tr j tho mn c D[j] ln nht vA[j]A[i].Khi tr: T[1]:= 0 ; D[1]:= 1; V d:

    Khi duyt ngc tm kt qu ta tin hnh nh sau:Tm phn t ln nht trong D, gi s l D[i], ta i du ca D[i] coi nh nh du n,tm tip phn t j = T[i], li i du D[j], qu trnh c nh th li ch s j n khi j=0

    Kt qa c dy con di nht l : 3 4 7 9 10 phc tp tnh ton ca thut ton trn l O(N2). Vi N=30000 th mc d c th tchc cc mng ng mt chiu ci t d liu thc hin thut ton nhng cng khngth chp nhn c v thi gian thc hin thut ton qu lu!

    Ta tm kim mt thut ton khc (vn bng qui hoch ng):V ci t d liu:

    + Mng mt chiu A l dy s cho ban u.+ Mng mt chiu L dng lu cc ch s (trong dy A ban u) ca mt s phn tca A xp theo gi tr tng dn (to thnh mt dy trung gian l H) da vo H ta c thtm ra gi tr mng Tr.+ Mng Tr c ngha nh sau: Tr^[k] l ch s (trong dy A ban u) ca phn t ngtrc phn t Ak trong dy kt qu. Da vo mng Tr s tm ra dy kt qu.+ Dng bin d theo di di dy kt quThut ton:

  • 7/30/2019 Thut ton qui hoch ng.doc

    46/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    47/126

    while i< do>begint:=(i+j)div 2;if [k]>=[l[t]] then i:=t+1else j:=t;

    end;t:=(i+j) div 2;tr^[k]:=l[t-1];l[t]:=k; {phn t th t trong H l [k]}end;end;

    k:=l[d]; {tm vt dy kt qu, ln t cui dy}fillchar(l,sizeof(l),0);assign(f,fo);rewrite(f);

    writeln(f,d);while k>0 do {ghi li vt dy kt qu}beginl[k]:=1;k:=tr^[k];end;for k:=1 to n doif l[k]=1 then writeln(f,[k],#32,k); {ghi kt qu vo file output}close(f);end;

    phc tp thi gian ca thut ton ny l O(NlogN) nn c th chp nhn v thi giancho php khi N=30000.

    Bi ton 2. Palindrome (time limit 2s)Mt xu c gi l xu i gng nu c t tri qua phi cng ging nh c t phiqua tri. V d xu "madam" l mt xu i gng. Bi ton t ra l cho mt xu S gmcc k t thuc tp M=[a..z], hy tm cch chn vo xu S cc k t thuc tp M ti ccv tr bt k vi s lng k t chn vo l t nht xu S thnh xu i gng. V d:xu: "adbhbca" ta s chn thm 2 k t ( c v d) c xu i gng "adcbhbcda".D liu vo trong file PALIN.IN c dng:

    Dng th nht l mt s nguyn dng T (T

  • 7/30/2019 Thut ton qui hoch ng.doc

    48/126

    Thut ton.

    Dng Qui hoch ng:Gi L[i,j] l s k t cn chn thm vo on S[i..j] on ny thnh i gng (ccon S[1..i-1] v S[j+1..n] i xng nhau ri) th:

    L[i,j] = Min {L[i+1,j-1}, L[i+1,j]+1, L[i,j-1]+1} (2)

    L[i,j] = L[i+1,j-1] ch khi S[i]=S[j]L[i,j] = L[i+1,j]+1khi S[i]S[j] v ta chn thm S[i] vo bn phi S[j]. nh du hintng ny bng bt 1 trn mng nh du D.L[i,j] = L[i,j-1]+1 khi S[i]S[j] v ta chn thm S[j] vo bn tri S[i]. nh du hintng ny bng bt 0 trn mng nh du D.Nhn L[1,N] chnh l s k t chn thm cn tm.

    Do kch thc bi, khng th t chc mng hai chiu L (k c cch t chc theo kiumng ng cng khng th c, v mng hai chiu kch thc 500?500 phn t kiuInteger l qu ln).V vy iu ch cht thc hin thut ton ny l vn ci t d liu theo cch khchp l hn.Ta c nhn xt: theo cng thc truy hi (2) th L[i,j] ch lin quan ti L[i+1,j-1] , L[i,j-1]v L[i+1,j].Gi di on S[i..j] l k=j-i+1. (hay l j=i+k-1)

    Thay cho L[i, j] ta dng C3[i] (ng vi khong cch t i ti j l k).Thay cho L[i+1, j] ta dng C2[i+1] (ng vi khong cch t i+1 ti j l k-1).Thay cho L[i, j-1] ta dng C2[i] (dng C2 v ng vi khong cch t i ti j-1 vn l k-1).Thay cho L[i+1, j-1] ta dng C1[i+1] (ng vi khong cch t i+1 ti j-1 l k-2)Cng thc truy hi (2) c dng mi l:C3[i] = Min {C2[i] +1, C2[i+1] +1, C1[i+1]} (2.b)C3[i] = C1[i+1] khi S[i]=S[j]C3[i] = C2[i+1] +1 khi S[i]S[j] v chn thm S[i] vo bn phi S[j]. Dng mng D nh du hin tng ny bng bt l 1 (d[i,v] := d[i,v] or (1 SHL k), v=j div 8, k=j mod8).

    C3[i] = C2[i] +1 khi S[i]S[j] v chn thm S[j] vo bn tri S[i]. Hin tng ny c h du bng bt l 0 khi khi tr D.Vy ta ch cn dng 3 mng mt chiu l C1(500), C2(500), C3(500) v mt mng haichiu l D (500, 500 div 8).Sau y l ton b chng trnh gii bi ton 2const maxn = 501;fi = palin.in;fo = palin.out;

  • 7/30/2019 Thut ton qui hoch ng.doc

    49/126

    type m1 = array[1..maxn]of char;m2 = array[1..2*maxn]of char;m3 = array[0..maxn div 8]of byte;m4 = array[0..maxn]of m3;m5 = array[0..maxn]of integer;

    var f,g : text;a : m1;d : m4; {nh du }c1,c2,c3 : m5; {3 mng 1 chiu thay cho mng hai chiu L}kq : m2; {xu i gng cn tm}dau,cuoi,sol,n,test,sotest :integer;procedure readinp;beginn:=1;while not seekeoln(f) dobegin

    read(f,a[n]);if a[n]= thenif n>1 then breakelse continue;inc(n);end;readln(f);dec(n);end;procedure batbit(i,j :integer);var v,k :integer;beginv:=j div 8;k:=j mod 8;d[i,v]:=d[i,v] or (1 shl k);end;procedure init_data;var i,j,k :integer;beginfillchar(d,sizeof(d),0);fillchar(c1,sizeof(c1),0);

    fillchar(c2,sizeof(c2),0);fillchar(c3,sizeof(c3),0);for i:=1 to n-1 do {xt cc xuch gm 2 k t lin tip a[i] v a[i+1]}beginj:=i+1;if a[i]a[j] thenbeginc3[i]:=1; {phi chn vo 1 k t}

  • 7/30/2019 Thut ton qui hoch ng.doc

    50/126

    batbit(i,j); {nh du hin tng chn ny: chn a[i] vo bn tri a[i+1]}end;end;end;procedure process;

    var k,i,j :integer;begininit_data;for k:=3 to n dobegin{c1 lu trng thi ca c2}move(c2,c1,sizeof(c2));{ c2 lu trng thi ca c3}move(c3,c2,sizeof(c3));for i:=1 to n-k+1 dobegin

    j:=i+k-1;if a[i]=a[j] thenbeginc3[i]:=c1[i+1]; {khng cn chn thm k t no}endelsebeginif c2[i]beginc3[i]:=c2[i]+1; {chn a[i] vo bn tri a[j]}batbit(i,j); {nh du hin tng chn ny}endelsec3[i]:=c2[i+1]+1; {chn a[j] vo bn phi a[i] }end;end;end;end;function getbit(i,j :integer):byte;var p,k,v :integer;begin

    v:=j div 8;k:=j mod 8;p:=d[i,v] and (1 shl k);getbit:=ord( p>0 );end;procedure print;var i :integer;procedure find(left,right :integer);

  • 7/30/2019 Thut ton qui hoch ng.doc

    51/126

    var k :byte;beginif left>right then exit;if a[left]=a[right] thenbegin

    inc(dau); kq[dau]:=a[left];if leftbegindec(cuoi);kq[cuoi]:=a[right];end;find(left+1,right-1);exit;end;k:=getbit(left,right);if k=1 then

    begininc(dau);kq[dau]:=a[right];dec(cuoi);kq[cuoi]:=a[right];find(left,right-1);endelse begindec(cuoi);kq[cuoi]:=a[left];inc(dau);kq[dau]:=a[left];find(left+1,right);end;end;beginfillchar(kq,sizeof(kq),0);sol:=c3[1];dau:=0;cuoi:=n+sol+1;find(1,n); {Tm li kt qu bng qui }

    for i:=1 to n+sol do write(g,kq[i]);writeln(g);end;BEGINassign(f,fi); reset(f);assign(g,fo); rewrite(g);readln(f,sotest);for test:=1 to sotest do

  • 7/30/2019 Thut ton qui hoch ng.doc

    52/126

    beginreadinp;process;print;end;

    close(f); close(g);END.

    Qua hai bi ton trn, nhn thy rng khi c gng tm ti, la chn thut ton v ci td liu c th gii c nhng bi ton quen thuc t yu cu tt hn trc: thi gianthc hin nhanh v thch ng c vi cc b d liu vo c kch c ln hn.Trn Hnggio vin PTTH Nguyn Hu H TyQui hoch ng vi cc bi ton c d liu ln

    Cao Minh Anh

    Nh chng ta bit khi gii mt bi ton th vn thi gian v d liu l ct li. Vth trong cc k thi chng ta thng gp cc bi c d liu ln. Nhng bi nay thngrt kh bi v ta va phi gii quyt vn d liu, va phi gii quyt vn thi gian.V th khi c c mt thut ton hay ti u vn cha chc gii c nhng bi ny, tiu cha m cn phi c phng php ci t tt c th gii quyt v mt d liu.Quy hoch ng tng trng cho s ti u ho v thi gian v th ti xin trnh by mts bi ton d liu ln dng quy hoch ng gii v cch thc x l ca tng biton.

    Bi 1: Tm s ln nht.Cho n s nguyn (n

  • 7/30/2019 Thut ton qui hoch ng.doc

    53/126

    s khng ngh rng y l mt bi ton qui hoch ng n gin m ai cng c th lmc. Ti mun gii thiu vi cc bn bi ton tm max vi d liu ln dng file chacc phn t thay v dng mng, nh th ta va tit kim c d liu va gii quyt biton nhanh nht.

    uses crt;constfi=max.inp;go=max.out;

    var max,n,k :longint;f,g :text;

    procedure Openf;beginassign(f,fi);

    reset(f);assign(g,go);rewrite(g);end;

    procedure Closef;beginclose(f);close(g);end;

    procedure Main;var i:integer;beginmax:=-maxlongint;readln(f,n);for i:=1 to n dobeginreadln(f,k);if k>max then max:=k;end;

    end;

    procedure Print;beginwriteln(g,max);end;

    begin

  • 7/30/2019 Thut ton qui hoch ng.doc

    54/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    55/126

    vy th fx[k] s bngFx[k]:=max(Fx[0]+1,Fx[1]+1,Fx[2]+1,..,fx[k]+1)Vi cch lm nh th th bi ton tr nn n gin hn rt nhiu vi c th gii quyt viN rt ln.y l ton b chng trnh:

    uses crt;constfi=daytang.inp;go=daytang.out;

    var fx :array[0..9] of longint;n,k,max :longint;f,g :text;

    procedure Openf;

    beginassign(f,fi);reset(f);assign(g,go);rewrite(g);end;

    procedure Closef;beginclose(f);close(g);end;

    procedure Quyhoach;var i,j:integer;beginreadln(f,n);for i:=1 to n dobeginreadln(f,k);for j:=k downto 0 do

    if fx[k]end;end;

    procedure Findmax;var i:integer;beginmax:=0;

  • 7/30/2019 Thut ton qui hoch ng.doc

    56/126

    for i:=0 to 9 doif fx[i]>max then max:=fx[i];end;

    procedure Xuat;

    var i:integer;beginwriteln(g,max);end;

    beginclrscr;openf;Quyhoach;Findmax;Xuat;

    Closef;end.Chng ta c th dng vi cc s t nhin ln hn khng nht thit l t [0..9] ch cn khaibo mng Fx ln hn l c.Sau y chng ta chuyn qua mt bi ton dng qui hochng rt hay l bi Cp s cng.

    Bi 3: Cp s cng ( thi quc gia bng Bm).Cho mt tp vn bn gm N (N rt ln) s nguyn a1, a2, a3,..,an vi Abs(ai)

  • 7/30/2019 Thut ton qui hoch ng.doc

    57/126

    Nu d liu nh N=10000 th ta c th dng phng php duyt n thun gii biton trn mt cch d dng, nhng vi d liu N

  • 7/30/2019 Thut ton qui hoch ng.doc

    58/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    59/126

    luu:=i;sc :=k;end;end;dispose(a);

    dispose(b);closef;end;end;

    procedure Print;var i:integer;beginOpenf;writeln(g,max,luu:4);sd:=sc-(max-1)*luu;

    readln(f,n);for i:=1 to n dobeginreadln(f,k);if k=sd thenbeginwriteln(g,i);sd:=sd+luu;end;end;Closef;end;

    beginclrscr;Main;Print;end.

    Bi 4: Xu fibonacci.nh ngha: Dy xu fibo c xy dng theo nguyn tc sau:

    + F1 =B;F2 =A;+ Fk = Fk-1 + Fk-2.Yu cu: Tnh s ln xut hin ca SR trong Fn(tc l s xu con cc k t lin tip nhaubng SR). Hai xu con c gi l khc nhau nu khc nhu t nht mt k t.(N

  • 7/30/2019 Thut ton qui hoch ng.doc

    60/126

    S ln xut hin tm c.+ Phng php 1: Thut ton la b vo chung. Vi phng php ny ch gii quytvi d liu khng ln lm (N

  • 7/30/2019 Thut ton qui hoch ng.doc

    61/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    62/126

    procedure Closef;beginclose(f);close(g);

    end;

    procedure Swap(var A,B:string);var T:string;beginT:=A;A:=B;B:=T;end;

    procedure Solve;

    beginreadln(f,S);readln(f,n);S1:='b';S2:=';dem:=2;while length(S1)begininc(dem);R:=S2;S2:=S2+S1;S1:=R;end;if pos(S,S1)0 then a[dem-1]:=1;if pos(S,S2)0 then a[dem]:=1;end;

    procedure Main;var i,k:integer;begink :=length(S);SA:=copy(S1,1,k-1);YA:=copy(S1,length(S1)-k+2,k-1);

    SB:=copy(S2,1,k-1);YB:=copy(S2,length(S2)-k+2,k-1);for i:=dem+1 to n dobegina[i]:=a[i-1]+a[i-2];X:=SB+SA;if pos(S,X)0 then a[i]:=a[i]+1;SA:=YB;Swap(SB,YA);

  • 7/30/2019 Thut ton qui hoch ng.doc

    63/126

    end;writeln(g,a[n]:0:0);end;

    begin

    clrscr;Openf;Solve;Main;Closef;end.Nu cc bn mun lm d liu ln hn ch cn lm thm chng trnh cng s ln lxong ngay. Cn rt nhiu bi ton dng quy hoch ng gii rt hay mong rng snhn c nhng ng gp kin, nhng bi gii hay tp ch Tin hc nh trng trthnh sn chi, hc hi cho tt c cc bn yu mn Pascal ni ring v cc bn yu tinhc ni chung. Cui cng xin chc cc bn thnh cng v nhn c thm mt kinh

    nghim no v quy hoch ng. Mi thc mc xin lin h a chDuyt vi u tin v duyt vi su hn ch

    Trn HngChng ta rt quen thuc vi thut ton Back-Tracking (duyt c quay lui). Chng ta hycng nhau nhn nhn li vn ny mt ln na trc khi i vo mt vi kha cnh cbit ca vn ny: duyt vi u tin v duyt vi su hn ch.Thng l chng ta s dng Back-Tracking trong trng hp nghim ca bi ton l dycc phn t c xc nh khng theo mt lut tnh ton nht nh; mun tm nghimphi thc hin tng bc, tm kim dn tng phn t ca nghim. tm mi phn t,phi kim tra: cc kh nngc th chp nhn c ca phn t ny (gi l kim tra 'ngv sa). Nu kh nng no khng dn ti gi tr c th chp nhn c th phi loi bv chn kh nng khc (cha c chn). Sau khi chn c mt kh nng ta phi xcnhn li trng thi mi ca bi ton; v th trc khi chuyn sang chn kh nng khc taphi tr li trng thi bi ton nh trc khi chn c (ngha l phi quay lui li trngthi c). Nu phn t va xt cha l phn t cui cng th duyt tip phn t tip theo.Nu l phn t cui cng ca mt nghim th ghi nhn nghim. Nu bi ton yu cu chtm mt nghim th sau khi ghi nhn nghim cn iu khin thot khi th tc qui.Thut ton BackTracking xy dng trn c s tm kim dn tng bc theo cng mtcch thc, nn thng dng cc hm, th tc qui thc hin thut ton. V d mt dnbi nh sau:

    Procedure Tim(k:Integer); : {Tm kh nng cho bc th k}BeginVng lp < c mi kh nng cho bc kh th k >Begin< Th chn mt c >if < c ny chp nhn c > thenBegin< Lu li trng thi trc khi chp nhn c >

  • 7/30/2019 Thut ton qui hoch ng.doc

    64/126

    < Ghi nhn gi tr c cho bc th k >< Xc lp trng thi mi ca bi ton sau khi chp nhn c >If < Cha phi bc cui cng > thenTim(k+1)Else {l bc cui cng}

    Ghi_nhan_Nghiem;< Tr li trng thi ca bi ton trc khi chp nhn c > {Quay lui}< Xa gi tr c >End;End;End;Thut ton cho php tm c mi nghim (nu c) khi iu kin v thi gian cho phpv b nh cn . Song trong thc t, yu cu v thi gian v kch thc b nh b hnch, nn vic p dng Back-Tracking cho mt s bi ton c th khng dn ti kt qumong mun. Trong nhng trng hp nh th, khc phc : phn no nhng hn chny, chng ta kt hp vi phng php duyt vi u tin v phng php duyt vi

    su hn ch.1. Duyt vi u tin.Trc ht chng ta nh li phng php duyt c cn: Cn l mt iu kin kim tra c c c chp nhn hay khng. Nh c cn chng ta c th : loi b mt s ckhng tho mn iu kin, lm cho qu trnh duyt nhanh hn. Vic th mi kh nng c cho mt phn t ca nghim cng ging nh tnh trng 'd dm chn ng' ca mtngi i ng, mi khi n ngN-ng phi ln lt chn tng con ng i tiptrong cc con ng xut pht t ngN-ng . Nu c c nhng iu 'ch dn' bom chc chn nhng con ng no l ng 'ct' khng th i ti ch th ngi ing s loi ngay nhng con ng .Trong phng php duyt vi u tin chng ta li ch n tnh hung ngc li: tmnhng 'ch dn' cho bit ch : cn i theo mt s con ng nht nh trong N ng, coinhng ch dn y nh 'la bn' ch phng hng tm kim ch ca mnh. Tt nhin vica ra nhng li ch dn, nhng d on v khng nh iu ny l 'ng', iu kia l 'sal vic thn trng. Nhng khng nh tng l ' chc chn' nu thc s ch l iu 'ngnhn' th c th b st mt s con ng ti ch, hoc chch hng khng th ti ch!Nhng ni chung, nhng ch dn hp l s i ti ch hoc gn vi ch nhanh nht. iuny rt thch hp vi nhng bi ton thc t ch yu cu tm li gii 'gn st vi nghim'.Khi ngi ta thng duyt vi u tin. Ni dung duyt vi u tin xut pht t tng heuristic (tm kim): tm mt : 'ch dn'sao cho xc sut ti ch c th chpnhn. Cng vic c th l:

    + Sp xp cc c theo mt 'kho' (key) no ,+ Sau khi sp xp, ch chn mt s c cc v tr u (hoc cui) ca danh sch sp. Nhng c ny theo suy lun hp l v tnh cht v gi tr ca kho s bo m lmt : 'ch dn'cho xc sut ti ch c th chp nhn.Nhc im ca phng php ny l c th b st nghim hoc ch tm c li gii 'gnst vi nghim'. khc phc, chng ta c th p dng n nhiu ln, mi ln m rng thm s lng c trong danh sch c sp. i khi cng phi thay i hon ton, lm li t u:

  • 7/30/2019 Thut ton qui hoch ng.doc

    65/126

    iu chnh v m rng thm iu kin chn lm kho sp xp cho hp l hn.V d: (Bi ton lp lch cho sinh vin chn mn hc)Sinh vin theo hc cc trng i hc thng rt bi ri bi cc quy tc phc tp nhgi hon thnh chng trnh hc. Vic hon thnh chng trnh hc i hi sinh vin cmt s kin thc trong mt s lnh vc nht nh. Mi mt i hi c th c p ng

    bi nhiu mn hc. Mt mn hc cng c th p ng ng thi nhiu i hi khc nhau.Cc quy tc ny thng c ph bin cho cc sinh vin ngay khi h mi vo trng. Dothi gian cn li qu t nn mi sinh vin u mun theo hc t mn hc nht m vn png c tt c cc i hi ca chng trnh hc. C M mn hc c nh s t 1 nM. C N i hi c nh s t 1 n N. Vi mi mn hc cho bit danh sch cc ihi c tho mn khi hc mn ny.Cn vit mt chng trnh tm ra mt s t nht cc mn hc m mt sinh vin cn hc c th hon thnh chng trnh hc (ngha l p ng c N i hi).D liu vo t file vn bn MONHOC.INP c cu trc: Dng u l 2 s nguyn dng M v N (M, N 200); Trong M dng sau, dng th i l N s nguyn phn cch nhau bi du cch m s th j

    l 1 nu mn hc i p ng c i hi j, l 0 trong trng hp ngc li.Kt qu ghi ra file vn bn MONHOC.OUT c cu trc: Dng u tin ghi s lng t nht cc mn hc; Dng tip theo ghi s hiu cc mn hc .

    V d:

    Cch gii:Duyt chn cc mn hc vi u tin ph hp: mi ln duyt cc mn ta ch c mts mn hc cha chn c nhiu yu cu cha tha mn s c tho mn. S lng ccmn hc c c cng nhiu th thi gian thc hin chng trnh cng lu v c thdn ti trn stack, do khi lp trnh cn iu chnh s lng ny cho ph hp thi giancho php trong bi. V d mi ln ta sp gim cc mn hc cn li theo s lng yucu cn cn phi p ng m mi mn c th p ng c, sau ch chn ra mt vimn hc u dy sp lm c khi duyt. Ngoi ra vi M, N 200 cng cn t ngtthi gian trong khi duyt thot khi duyt trong phm vi thi gian cn cho php.Chng trnh:

    const fi = 'monhoc.inp';fo = 'monhoc.out';max = 200;lim = 3; {s lng mn hc c c ti a l lim, lim c th iu chnh cho ph hp}type km1 = array[1..max,1..max] of byte;km2 = array[1..max] of byte;var time : longint;a : km1; {a[i,j]=1 : mn i p ng c yu cu j}

  • 7/30/2019 Thut ton qui hoch ng.doc

    66/126

    m,n : byte;kq,lkq, {kq[i] l mn c chn th i trong phng n}dx_mon, {dx_mon[i]=1: mn i c chn}dx_yeucau: km2; {dx_yeucau[j]=k: yu cu j c p ng bi mn c chn th k} so_mon_chon, {s mn c chn}

    lso_mon_chon : byte;so_yc_dx : byte; {s yu cu c p ng}f : text;

    procedure read_in;begin{c file input ly gi tr cho cc bin M, N v mng A[1..M, 1..N]}end;

    procedure toi_uu;begin

    lkq:=kq;lso_mon_chon:= so_mon_chon;end;

    function bac(i: byte): byte;begin{Hm cho bit s yu cu cha c p ng s c p ng nu chn mn i} end;

    procedure tao_decu(var sl: byte; var danhsach: km2);var i,j,k : byte;b : km2;begin{Dng mngdanhsach cha cc mn cha chn, sau sp gim mng ny theo slng yu cu cha c p ng m mi mn c th p ng. Cui cng ch gi likhng qu lim mn (3 mn)}sl:=0;for i:=1 to m doif dx_mon[i]=0 thenbegininc(sl);

    b[sl]:=bac(i);danhsach[sl]:=i;if b[sl]=0 then dec(sl);end;if sl>1 thenbeginfor i:=1 to sl-1 dofor j:=i+1 to sl do

  • 7/30/2019 Thut ton qui hoch ng.doc

    67/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    68/126

    lso_yc_dx:=so_yc_dx; {lu li s yu cu p ng trc khi chn c, phc vbc quay lui}for i:=1 to sl do {ch duyt vi s lng c l sl}beginnap(danhsach[i]); {xc nhn c th i trong danh sch u tin}

    try;bo(danhsach[i]); {Quay lui: xo xc nhn c}so_yc_dx:=lso_yc_dx; {Ly li s yu cu p ng trc khi chn c }end;end;

    procedure hien_kq;begin{Ghi vo file output s mn chn t nht l lso_mon_chon v s hiu cc mn c chnl gi tr cc phn t ca mng lkq}end;

    BEGINclrscr;read_in;lso_mon_chon:=m+1; {Khi tr s mn c chn t nht l m+1}time:= meml[$0:$046C];try;hien_kq;END.

    2. Duyt vi su hn ch.Phng php ny c cc tc gi inh Quang Huy v c ng trnh by rt rrng trong bi 'Chin lc tm kim su lp', s bo Tin hc v Nh trng thng 8/2003.Sau y chng ti ch minh ho bng mt chng trnh gii bi ton nu trong bi bo:Bi ton. (Bin i bng s) Xt bng A c NxN vung (Nmso-char-type: 5), trongbng c mt cha s 0, cc cn li mi cha mt s nguyn dng tu . Gi P lphp i gi tr ca s 0 vi k cnh vi n.Yu cu t ra l: Cho trc bng A v bng B (B nhn c t A sau mt s php bini P no ). Hy tm li s php bin i P t nht t bng A c th bin i thnhbng B.

    D liu vo t file vn bn 'BDBANG.IN':Dng u l s nguyn dng NN dng sau, mi dng N s nguyn khng m th hin bng AN dng tip theo, mi dng N s nguyn khng m th hin bng BKt qu ghi ra file vn bn 'BDBANG.OUT': Nu khng th bin i c (do iu kinthi gian hoc b nh) th ghi -1. Nu bin i c th ghi theo qui cch sau:Dng u l s nguyn khng m K l s php bin i t nht c dy bin iA=A0 A1A2 ?AK= B

  • 7/30/2019 Thut ton qui hoch ng.doc

    69/126

    Tip theo l mt dng trngTip theo l K+1 nhm dng, mi nhm l mt bng Ai (0 i K), gia hai nhm cchnhau mt dng trng.V d:BDBANG.IN

    32 8 31 6 47 0 51 2 38 0 47 6 5BDBANG.OUT5

    2 8 3

    1 6 47 0 5

    2 8 31 0 47 6 5

    2 0 31 8 47 6 50 2 31 8 47 6 5

    1 2 30 8 47 6 5

    1 2 38 0 47 6 5

    Chng trnh.uses crt;const fi = 'bdbang.in';fo = 'bdbang.out';max = 5;dktamchapnhanvn = 25;limit = 200;dxy : array[0..3,0..1] of integer = ((0,-1),(-1,0),(1,0),(0,1));

  • 7/30/2019 Thut ton qui hoch ng.doc

    70/126

    type item = array[0..max,0..max] of integer;m1 = array[0..limit] of item;m2 = array[0..limit] of integer;var a,b : item;l,kq : m1;

    depth,pre : m2;top,n,ok,t : integer;

    function cmp(x,y : item): integer; {so snh hai bng x v y}var i,j : byte;begincmp := 0;for i:=0 to n-1 dofor j:=0 to n-1 doif x[i,j]y[i,j] then exit;cmp := 1;

    end;

    procedure a(x : item); {Np thm bng x vo stack L }begininc(top);l[top] := x;end;

    procedure get(var x : item); {Ly khi nh stack L mt bng gn cho x}beginx := l[top];dec(top);end;

    procedure read_inp;var i,j : integer;f : text;beginassign(f,fi);reset(f);readln(f,n);

    for i:=0 to n-1 do {c bng ngun}beginfor j:=0 to n-1 do read(f,a[i,j]);readln(f);end;

    for i:=0 to n-1 do {c bng ch}

  • 7/30/2019 Thut ton qui hoch ng.doc

    71/126

    beginfor j:=0 to n-1 do read(f,b[i,j]);readln(f);end;close(f);

    end;

    procedure pos0(w: item;var x,y : integer); {Tm to x v y ca 0 trong bng}var i,j : integer;beginfor i:=0 to n-1 dofor j:=0 to n-1 doif w[i,j]=0 thenbeginx := i;y := j;

    exit;end;end;

    procedure swap(var x,y : integer); {Tro i hai gi tr x v y}var c : integer;beginc := x;x := y;y := c;end;

    {Duyt theo chiu su, vi su hn ch ti a l d}procedure DLS(d : integer);var c : item;pre_c,k,x,y,u,v : integer;begintop := -1;a(a); {coi bng xut pht l nh gc ca cy tm kim}depth[top]:=0; {coi su ca nh xut pht l 0}kq[0] := a; {mng ghi nhn cc bng thu c trong qu trnh bin i }

    while (top>=0) dobeginif top=-1 then break;t := depth[top]; {bc bin i th t = su ca bng ang xt}pre_c := pre[top]; {hng ca bin i bng trc (bng 'ch) thnh bng ang xt}get(c); {c: bng ang xt}

    kq[t] := c; {ghi nhn bng thu c bc th t}

  • 7/30/2019 Thut ton qui hoch ng.doc

    72/126

    if (cmp(c,b)=1) then {nu c l bng ch th dng tm kim}beginok := 1;break;end;

    if (t

  • 7/30/2019 Thut ton qui hoch ng.doc

    73/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    74/126

  • 7/30/2019 Thut ton qui hoch ng.doc

    75/126

    Hm S(h,n) s c trin khai nh sau:if h > 9*n div 2 then h := 9*n - h;fillchar(S,sizeof(S),0);{Khi tr cho cc s c 1 ch s}for i:=0 to 9 do S[i]:=1;

    for j:=2 to n dofor k:=h downto 1 dofor i:=1 to min(k,9) doS[k]:=S[k]+S[k-i];Bi 2 - S pS t nhin h m b c 2kch s c gi l s p loi (b,k,h) nu tng kch s ubng tng kch s cui v bngh. Vi ba gi tr b, kv h cho trc hy cho bit c baonhiu s p loi (b,k,h). Th d, [1][0 ][19][0 ][0][20 ] l mt s p loi (25,3,20), trong mi ch s * ca h m 25 c ghi trong cp ngoc: [*].Gi : Mi s p loi ( b,k,h) c ghp bi 2 sx vy, trong x l s cao h cng kch s,y l s cao h c khng qu kch s (nu cn ta thm 0 u tri sy).

    Hy thc hin on trnh trn mt ln duy nht thu c ngay kt qu.Bi 3 - Chia on( thi Tin hc Quc gia Bulgary 2004)Cho hai dy s nguyn dng a[1..n] v b[1.. m]. Hy chia mi dy thnh kon, k hiuln lt t tri qua phi l 1, 2,...,k, mi on phi cha t nht mt phn t ca dytng ng. Vi mi on i = 1, 2,..., kmso-ansi-language: VI'>hy tnh hmC(i) = (t(a,i) ?s( a,i))*(t(b,i)-s(b,i))Trong t(a,i) l tng cc phn t ca dy a trong on i,s(a,i) l s lng phn t ca dy a trong on i,t(b,i) l tng cc phn t ca dy b trong on i,s(b,i) l s lng phn t ca dy b trong on i.Cui cng ta tnh tr

    Hy cho bit gi tr nh nht ca C?

    Th d, vi a = (1,2,3), b = (1,2), nu chn k=2 v chia hai dy a v b nh sau:a = ((1,2),(3)), b = ((1),(2)) thC(1) = ((1+2)-2)*(1-1) = 1*0 = 0,C(2) = (3-1)*(2-1) = 2*1 = 2,C= C(1)+C(2) = 0+2 = 2.

    Phn tch:Nhn xt 1: Nu gim mi phn t ca hai dy a v b i 1 n v th cng thc tnh C(i)s c rt gn nh sau:C(i) = t(a,i) *t( b,i)Bn hy t gii thch iu ny.Nhn xt 2: K hiu F(i,j) l tr ti u ca hm C i vi hai dy a[1..i] v b[1..j]. Ta xton cui cng, on th k. Gi s on cui cng ny cha p1 phn t ca dy a vitng l s1 v p2 phn t ca dy b vi tng l s2. Khi

  • 7/30/2019 Thut ton qui hoch ng.doc

    76/126

    F(i,j) = min {F(i-p1,j-p2) + s1*s2}Cho i, j, p1 v p2 bin thin ta tnh c F. Tip cn ny i hi phc tp O(N4).Nhn xt 3: Vi mi on k, p1 v p2 khng th ng thi ln hn 1. Tht vy, nup1 > 1 v p2 > 1 th ta c th tch on k thnh hai on con k1 v k2 vi cc tng ccphn t ln lt cho a v b l s1 = s11+s12 v s2 = s21+s22. Khi

    C(k) = s1*s2 = (s11+s12)*(s21+s22) = s11*s21 + s12*s22 +... s11*s21 + s12*s22 =C(k1)+C(k2).Theo nhn xt ny, mi on trong php chia ti u ch c th l mt trong 3 dng sau:i) cha 1 phn t ca a v 1 phn t ca b,ii) cha 1 phn t ca a v p2 > 1 phn t ca b,iii) cha p1 > 1 phn t ca a v 1 phn t ca b,Vy ta cF(i,j) = min {F(i-1,j-1) + a[i]*b[j], F(i-1,j-p2)+ a[i]*s2, F(i-p1,j-1)+ s1*b[j] }Nhn xt 4: Ta c a[i]*s2 = a[i]*(b[i-p2+1]+...+b[j-1]+b[j]) = a[i]*(b[i-p2+1]+...+b[j-1])+ a[i]*b[j], do , F(i-1,j-p2)+a[i]*s2 F(i,j-1) + a[i]*b[j].V tng t, F(i-p1,j-1)+s1*b[j] F(i-1,j) + a[i]*b[j].

    Vy ta c,F(i,j) = min {F(i-1,j-1) + a[i]*b[j], F(i,j-1)+ a[i]*b[j], F(i-1,j)+ a[i]*b[j] }a hng t amso-ansi-language: VI'>[i]*b[j] ra ngoi ta c mt h thc tht p vd tnh v ch cn phc tp O(N2).F(i,j) = min {F(i-1,j-1), F(i,j-1), F(i-1,j)} + a[i]*b[j]Bn thy trt t tnh tan gim ng k phc tp, t bc 4 xung bc 2.Gi : tnh hm F theo cng thc trn cn mt mng hai chiu. Liu bn c cch nothay bng hai mng mt chiu?Bi 4 - S duy nht( thi Tin hc cc quc gia Baltic, BOI 2004)Cho N s t nhin trong c duy nht mt s x xut hin ng 1 ln, cc s cn li uxut hin ng K > 1 ln. Tm s duy nht x?Th d, vi 7 s 123, 123, 45, 123, 45, 405, 45 ta phi tm c x = 405.Nhn xt 1: Nu K l s chn th ta dng php ton XOR bit N s cho, kt qu s chongay s x cn tm. Tuy nhin bi ton khng cho bit K l bao nhiu.Nhn xt 2: Ta c th tm c s K bng cch m s ln xut hin ca s u tin (khiu l x) trong dy. Nu K=1 th ta c ngay x l s cn tm. Ngc li, nu K > 1 th chnh l s ln xut hin ca cc s cn li. Vy l yn tm.Nhn xt 3: Vi hai nhn xt u tin chng ta d b tc trong m cung tm kim. Hy thsuy ngh v trt t xem sao. Trt t g? Trt t cc s khng cho ta thm gii php no.Ta th tm cch gii theo trt t ca cc ch s. ng vy, t hng ngn nm trc ccnh ton hc c Hy Lp nh csimet v clid ni rng cng l ch s 1 nhng nu t

    v tr khc nhau th ch s mang cc gi tr khc nhau, khi th l 1, khi l 10, khi l100. Nh vy chng ta phi m xem trong N s cho cc ch s trong tng hng xuthin bao nhiu ln. Ta dng mt mng hai chiu a ghi nhn cc s m, a[c,j] cho bits ln xut hin ca ch s c ti v tr j. Ta thy a[c,j] ch c th chia ht cho K hoc chiacho K d 1. Bn hy gii thch iu ny.V ch quan tm n cc ch s nn ta c th c cc dng ca tp input vo cc binstring. Ngoi ra ta cng c th x l cc ch s theo cc v tr tnh t phi qua tri.Ta gi thit l s di nht trong dy cho c MN=20 ch s.

  • 7/30/2019 Thut ton qui hoch ng.doc

    77/126

    MN = 20;var a: array['0'..'9',1..MN] of word;x,y: string;c: char;N,K: word;

    f,g: text;1. M cc tp inpyt f v output g.fillchar(a,sizeof(a),0);readln(f,N);readln(f,x); K:=1;for j:=1 to length(x) do inc(a[x[j],j]);for i:=2 to N dobeginreadln(f,y);if y=x then inc(K);for j:=1 to length(y) do inc(a[y[j],j]);

    end;if K > 1 thenbeginx:='';for j:=1 to MN dofor c:='0' to '9' doif a[c,j] mod K 0 thenbeginx:=x+c;break;end;end;writeln(g,x);close(f); close(g);Bi 5 - Dy k t duy nhtCho N xu k t trn bng ch ci a..z trong c duy nht mt xu x xut hin ng Mln, cc xu cn li u xut hin ng K > M ln. Tm xu x?Bi sau y cc bn ch nn gii vo chiu 30 tt.Bi 6- Qua cu(Tng qut ha thi tuyn nhn vin ca hng Microsoft)Mt n con nt i chi m giao tha vi 1 chic n lng. Gp mt cy cu mngmanh. Cc em phi a nhau qua cu. Cu yu, ch chu c sc nng ca 2 em mi

    lt, ngoi ra, cu trn v gp gnh nn buc phi soi n mi i c. Mi em qua cuvi thi gian khc nhau. Hy tm cch cc em qua cu nhanh nht. Gi thit cho n emvi thi gian vt cu ca mi em ln lt l t1, t2,?,tn.Th d, c 4 em vi thi gian vt cu ln lt l 1, 2, 5 v 10 pht. Theo phng n sauy ta phi cn 19 pht: Cho em nhanh nht? em s 1 cm n dn tng ngi qua cu:1. Em 1 dn em 2: 2 ph.2. Em 1 cm n v: 1 ph.3. Em 1 dn em 3: 5 ph.

  • 7/30/2019 Thut ton qui hoch ng.doc

    78/126

    4. Em 1 cm n v: 1 ph.5. Em 1 dn em 4: 10 ph.Nu theo phng n sau y ta c li gii ti u: 17 ph.1. Em 1 dn em 2: 2 ph.2. Em 1 cm n v: 1 ph.

    3. Em 1 giao n cho em 3 v 4 qua cu: 10 ph.4. Em 2 cm n v: 2 ph.5. Em 1 dn em 2: 2 ph.Nhn xt 1: Mt em qu chm i cng em qu nhanh s lm 'h em i nhanh, do khiqua cu nn c hai em chm nht.Nhn xt 2: Khi cm n chy v nn giao cho em i nhanh nht.Ch vi hai nhn xt trn chng ta lp c trt t gii bi ton trn nh sau:Gi ni tp hp cc em nh trc khi qua cu l T (bn tri cu), ni cn n l P (bnphi cu).Trc ht tm hai em i nhanh nht an l a v b.Lp cc bc 1-6 cho n khi T rng:

    1. a v b qua P,2. a cm n v T,3. a giao n cho 2 em chm nht x v y T,4. x v y qua P,5. x v y giao n cho b P,6. b tr v T.Bn cn lu trng hp n=1. Ngoi ra mi khi n P bn cn kim tra ngay xem cn ai T khng, mi khi T bn li phi ki