You are on page 1of 6

Nguyn H Dng Chuyn Tin kha 2005 - 2008 trng THPT H Ni Amsterdam Interval Tree

Interval Tree
Trong mt s bi ton, vic gii quyt thng thng l rt kh khn, khng phi v mt gii thut m l v phc tp ca thut ton. phc tp cng cao chng trnh chy cng mt nhiu thi gian. gii quyt vn ny, ngi ta ngh ra nhng cu trc d liu c bit, mt trong s l Interval Tree. Xt bi ton quen thuc sau: Bi ton: Cho N hnh ch nht c ta nguyn nm trn mt phng ta v c cc cnh song song vi cc trc. Mi hnh ch nht c cho bi ta nh tri trn v nh phi di. Yu cu: Hy tnh din tch m tt c cc hnh ch nht ny ph ln. Input: COVER.INP Dng u l s N s hnh ch nht (1 <= N <= 2000) N dng tip theo, dng th i gm 4 s Xi, Yi, Ai, Bi th hin ta nh tri trn v nh phi di ca hnh ch nht th i (-20000 <= Xi, Yi, Ai, Bi <= 20000) Output: COVER.OUT Gm mt dng duy nht l p s ca bi ton Thi gian chy: 0.5s V d: COVER.INP 5 -2 4 -1 4 2 28 2 2 5 6 3 1 6 3 6 5 0 0 2 5 1 COVER.OUT

Minh ha:

Nguyn H Dng Chuyn Tin kha 2005 - 2008 trng THPT H Ni Amsterdam Interval Tree

Hng dn: tin cho vic phn tch bi ton, chng ta s gi honh ca cc nh hnh ch nht l H1, H2, , H2*N c sp xp theo chiu tng; tung ca cc nh hnh ch nht l T 1, T2, , T2*N (gi s cc tung c lit k theo chiu tng - y ch rng: ch c honh c sp xp tng, cn tung l do chng ta quy c). Cch lm thng thng l sp xp H theo chiu tng nh gi s trn, sau tnh din tch tng khe H1H2, H2H3, , H2*N-1H2*N. Nh vy, phc tp ca thut ton ca chng ta l O(N2), thi gian l T(N(log2N + N)), kh c th p ng thi gian chy l 1s. cho tin, tt c d liu ca chng ta u coi nh sp xp bng Quick Sort. Trong hon cnh , rt may mn, chng c mt cu trc d liu c bit khc c th thc hin c iu ny vi phc tp O(Nlog2N) v thi gian chy l T(2Nlog2N). l dng Interval Tree, bn cht ca Interval ht sc n gin, chng ta s xt r hn qua phn tch chi tit bi ton ny. Thut ton ca chng ta v bn cht cng ging vi thut ton va cp: Sp xp cc honh tng dn. Tnh din tch che ph tng khe H1H2, H2H3, , H2*N-1H2*N ca honh , ly tng, ta c p s ca bi ton. Trc ht, ta gn cho mi honh c sp xp mt nhn, nhn s gm Low, High lu li tung ca hnh ch nht cha honh v nhn Open. Open s cha gi tr true nu l nh trn tri ca hnh ch nht, false nu l nh di phi ca hnh ch nht. Vi bi, ta s c cc honh c gn nhn (sau khi sp xp) nh sau: 2

Nguyn H Dng Chuyn Tin kha 2005 - 2008 trng THPT H Ni Amsterdam Interval Tree
H[1] = -2; Label[1]. Low = 0; Label[1]. High = 2; Label[1]. Open = true; H[2] = -1; Label[2]. Low = 2; Label[2]. High = 5; Label[2]. Open = true; ...

Tip theo ta s xy dng mt cy nh cy nh phn y , mi nh s tng trung cho s hnh ch nht che ph trn on [A, B] thuc tung , mi nh gm c 2 phn Number v Cover vi ngha: 1) Number: s lng hnh ch nht che ph ton b [A, B] 2) Cover: tng s on tung b che ph trn on [A, B]

nh 1 ca cy c on [A, B] tng ng l [Min, Max] (vi Min, Max tng ng l tung nh nht v ln nht trong s cc hnh ch nht); nh 2 c on tng ng [A, B] l [1, Max div 2]; nh 3 l [Max div 2, Max], to thnh mt cy nh phn y . n gin hn, vi mi nh cha thng tin v on [A, B], hai nt con tng ng ca n s lu tr thng tin v on [A, (A+B) div 2] v [(A+B) div 2, B]. S d nh con th hai khng xt t [(A+B) div 2 + 1, B] bi l chng ta ang xt theo tung ch khng phi l xt theo di on thng, nu xt nh vy ta s khng b st on [(A+B) div 2, (A+B) div 2 + 1]. Qu trnh xy dng cy nh phn s c ng nht vi qu trnh tnh din tch, c ngha l vi mi khe H1H2, H2H3, , H2*N-1H2*N chng ta s xy dng mt cy nh phn tng ng vi hnh ch nht ang xt. Lu rng hnh ch nht ang xt y ni v hnh ch nht lin quan n cc honh H sau khi sp xp, bi nh ni trn, H c gn nhn i din cho mt nh ca hnh ch nht. Gi s rng chng ta ang xt n khe th i v i-1, nh k ca cy mang on [A, B], c th xy ra 2 trng hp sau: 1. nh H[i] ang xt l nh tri trn ca hnh ch nht: C 3 kh nng xy ra:

Nguyn H Dng Chuyn Tin kha 2005 - 2008 trng THPT H Ni Amsterdam Interval Tree Nu hnh ch nht che ph on [A, B], tc l (Low <= A) and (B <= High): Khi s hnh ch nht b che ph phi tng ln 1 v tng s che ph chnh bng High Low. Ta khng cn phi xt n cc nt con ca n. Nu hnh ch nht nm hon ton ngoi on [A, B], tc l (High <= A) or (B <= Low): (v chng ta ang xt n tung nn phi thm = bi nu c = th s phn b che ph cng khng tng ln): Khi , chc chn hnh ch nht cng khng che ph ln cc nt con ca n, ta khng phi lm g c. Nu hnh ch nht giao vi on [A, B], tc l trng hp cn li: Ta xt n cc nt con ca nt k. Nu nh s hnh ch nht bao ph ln k l 0 chng t tng s che ph ca k bng tng s che ph ca cc nt con ca n.
Procedure Open_True(A, B, k, Low, High); Begin if A >= B then {Xt n nt l trng hp c bit} begin Cover[k] := 0; exit; end; if (Low <= A) and (B <= High) then {Che ph [A, B]} begin Number[k] := Number[k] + 1; Cover[k] := B A; exit; end; if (High <= A) or (B <= Low) then exit; {Nm ngoi} {Giao nhau} Open_True(A, (A+B) div 2, 2*k, Low, High); {Xt nt con tri} Open_True((A+B) div 2, B, 2*k+1, Low, High); {Xt nt con phi} if Number[k] = 0 then Cover[k] := Cover[2*k] + Cover[2*k+1]; End;

2. nh H[i] ang xt l nh phi di ca hnh ch nht: C 3 kh nng xy ra: Nu hnh ch nht che ph on [A, B], tc l (Low <= A) and (B <= High): Khi s hnh ch nht b che ph phi gim ln 1. Nu nh khng cn hnh ch nht no che ph n th tng s che ph bng tng s che ph ca cc nt con ca n. Ta khng cn phi xt n cc nt con. Nu hnh ch nht nm hon ton ngoi on [A, B], tc l (High <= A) or (B <= Low): (v chng ta ang xt n tung nn phi thm = bi nu c = th s phn b che ph cng khng tng ln):

Nguyn H Dng Chuyn Tin kha 2005 - 2008 trng THPT H Ni Amsterdam Interval Tree Khi , chc chn hnh ch nht cng khng che ph ln cc nt con ca k, ta khng phi lm g c. Nu hnh ch nht giao vi on [A, B], tc l trng hp cn li: Ta xt n cc nt con ca nt k. Nu nh s hnh ch nht bao ph ln k l 0 chng t tng s che ph ca k bng tng s che ph ca cc nt con ca n.
Procedure Open_False(A, B, k, Low, High); Begin if A >= B then {Xt n nt l trng hp c bit} begin Cover[k] := 0; exit; end; if (Low <= A) and (B <= High) then {Che ph [A, B]} begin Number[k] := Number[k] - 1; if Cover[k] = 0 then Cover[k] := Cover[2*k] + Cover[2*k+1]; exit; end; if (High <= A) or (B <= Low) then exit; {Nm ngoi} {Giao nhau} Open_False(A, (A+B) div 2, 2*k, Low, High); {Xt nt con tri} Open_False((A+B) div 2, A, 2*k+1, Low, High); {Xt nt con phi} if Number[k] = 0 then Cover[k] := Cover[2*k] + Cover[2*k+1]; End;

tin cho vic lu tr, Interval Tree ca chng ta s c lu tr bng mng, nh i c 2 con l 2*i v 2*i+1. Phn kh nht l vic xy dng cy xong, chng trnh x l ca chng ta s bao gm sp xp theo H v xt cc khe H1H2, H2H3, , H2*N-1H2*N:
Procedure Solve; begin Sort; {Sp xp dy} Open_True(Min, Max, 1, Label[1]. Low, Label[1]. High); Area := 0; for i := 2 to 2*n do begin Area := Area + Cover[1] * (H[i] H[i-1]); {Tnh din tch} if Label[i]. Open then Open_True(Min, Max, 1, Label[i]. Low, Label[i]. High) else

Nguyn H Dng Chuyn Tin kha 2005 - 2008 trng THPT H Ni Amsterdam Interval Tree
Open_False(Min, Max, 1, Label[i]. Low, Label[i]. High); end; end;

Ch : Mt s bn s cho rng nu nh ti mt honh c nhiu nh ng hoc nhiu nh m th sao? Cu tr li l khng sao c, bi l lc H[i] H[i-1] s bng 0 v din tch s khng c tnh vo Area. Thm na, cc nh c chung honh s c m hoc ng cho n ht ri mi c vo tnh din tch. Cn phn bit Number l s hnh ch nht ph ln on [A, B] trong mt nh ca cy ch khng phi s hnh ch nht c on [A, B] ph. Nhiu bn mi c s thc mc: Chng ta ang xt n cc khe, lm sao c th xt c ht cc hnh ch nht c chung honh c? Cu tr li nm ch th nht: tt c cc hnh ch nht c chung honh , bt k l nh trn tri hay di phi u c xt ht trc khi din tch c cng chnh thc vo tng.

Loi cy m chng ta va s dng c gi l Interval Tree. Vy, Interval Tree l g? C th ni vn tt li rng Interval Tree thc cht l mt loi cy nh phn y vi mi nh cha cc thng tin v mt on [A, B] xc nh. 2 con ca n cha thng tin v on [A, (A+B) div 2] v [(A+B) div 2 + 1, B]. Ty theo mc ch s dng Interval Tree m chng ta c cc loi Interval Tree khc nhau. Mu cht ca bi ton l chng ta nhn ra c tm quan trng ca vic xc nh on m v on ng trn mt trc nht nh ( bi ton trn chng ta chn trc tung). Theo cch gii thng thng, chng ta phi lp xc nh s chng cho nhau ca cc on nguyn, phc tp ca thut gii thng thng l rt cao. Nhng gi y vi Interval Tree, phc tp ch l O(log2N), cho d xy ra trng hp 2 on chng cho ln nhau hay khng. Hng ti u cho bi ton: Nu xt ring bi ton tnh din tch ny, chng ta s nhng hng ti u sau (cc bn t nng cp chng trnh) Thay v tm Max, Min ca tung , ta cho mt mng lu li gi tr ca cc tung c th trong bi, sp xp li chng. Sau ny, li gi cc th tc Open_True v Open_False s c cc tham s chiu n phn t ca mng ny (vn bng cch chia nh phn) ch khng tham chiu trc tip n gi tr tung thc s na. C th gp Open_True v Open_False li thnh mt th tc duy nht, gim thiu chi ph khi ci t chng trnh.

You might also like