You are on page 1of 8

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

CHUYN CU TRC D LIU C BIT


A . L thuyt :
Trong chuyn ny ta s nhc ti 2 loi cu trc c bit , l Interval Tree v
Binary Index Tree. l 2 cch t chc d liu rt thng minh , vic t chc ny cng
dn ti vic tm ra nhng thut ton hay vi cp trung bnh thp O(NlogN) . V
trnh by tng ca cc thut ton ny ta s xem xt n thng qua cc bi ton c th
c th hiu r hn.
I . Interval Tree :
Bi ton : Cho N hnh ch nht trong mt phng to . Hy tnh din tch b ph bi N
hnh ch nht ny.
Gii hn : + 1 N 2000. Cc to u l s nguyn .
+ Time limit 0.5 s , b nh 200 KB.
Phn tch : i vi bi ton ny ta c th gii bng gii thut thng thng vi cp
O(N2). l sp xp cc hnh ch nht theo to Y , sau tnh din tch b ph gia 2
khe. Tng din tch b ph s l tng din tch b ph gia 2 khe (H.1).

C1
C2
C3
C4
C5
C6
C7
C8
B1

B2

B3
B4
( Hnh 1 )

B5

B6

B7

B8

( hnh 1 ta thy c cc khe B1B2 , B2B3 ,, B7B8. )


V sp xp cc HCN tng dn theo tung nn vi mi khe ta ch cn thao tc n
gin l xt t 1 -> N nhng HCN no ph ln khe m thi. C tt c khong N*2 1
khe , vi mi khe ta xt N HCN -> Cp chnh xc O(2*N2).
R rng vi N >= 2000 th trong vng 0.5 s chng trnh kh c th tr ra kt qu ngay
c.

Trang 1

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

Chc hn rt nhiu bn cng s ngh ra thut ton ny v c th s bn khon mt iu


rng liu c cch g ch xt mi hnh ch nht ng mt ln hay khng ?
Cu tr li l : nu mun ch xt 1 ln th hin thi mnh cng khng bit nhng m mnh
bit c thut ton c th p ng yu cu vi s ln xt l 2 ln !
Ni dung thut ton v cch lm: Nu nh thut ton O(N2) ta ch xt cc khe theo
honh ( cc khe B ) th y ta li quan tm ti khe theo tung ( cc khe C ) . Tuy
nhin v mt bn cht thut ton vn khng c g thay i vn ch l tnh din tch gia
cc khe ( honh ) m thi. Ta s phn tch 1 HCN ra thnh 2 nh :
+ nh 1 l nh tri di . ( ta c gi l nh M ca 1 HCN )
+ nh 2 l nh phi trn.. ( ta c gi l nh ng ca 1 HCN )
Vi mi nh ta s lu 4 thng s: to , v nu l nh 2 ta lu tung nh 1, nu l
nh 1 ta lu tung nh 2 v mt bin cho bit nh l tri di hay phi trn. R
rng vi 2 nh ny thi l cng c th i din cho 1 HCN c ri.
Ta s c 2*N nh v 1 dy C1,C2*N-1( tt nhin dy ny sp xp theo th t tng
dn). Gi tp 2*N nh ny l tp nh HCN.
Ta sp xp 2*N nh theo th t tng dn ca honh . By gi ta s tnh din tch bng
cch tnh tng din tch ca cc khe ( honh ) gia 2 im lin tip trong s 2*N im
ni trn. Ta xt tun t cc khe t khe 1 -> khe 2*N-1.
Vi dy C ta s t chc 1 cy nh phn y nh sau :

..

Trong nh 1 lu s phn b ph ln tung t C1 -> C2*N.


nh 2 lu s phn b ph ln ph ln tung t C1 -> CN, nh 3 lu s phn b
ph ln tung t CN+1 -> C2*N.
nh 4 lu s phn b ph ln tung t C1 -> CN div 2, nh 5 lu s phn b ph
ln tung t CN div 2+1 -> CN , nh 6 lu s phn b ph ln tung t CN+1 -> CN+N div 2 ,
nh 7 lu s phn b ph ln tung t CN+N div 2 +1 -> C2*N. v.v

Trang 2

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

Vi mi nh trn cy nh phn ny ta c 2 thng s cn lu l s HCN ang ph ln


on ny v ph ln l bao nhiu .
By gi ta s xt 2*N nh trong tp cc nh ca HCN.
Xt ti khe L ( honh ) gia nh i v i+1 ta lm nh sau :
Nu nh i l nh M ca mt HCN R , n c tung l Y1 , tung ca nh cn li l
Y2, tc l hin thi n s ph ln on t Y1 -> Y2 ( tung ).
Ta xt on Y1 -> Y2 ny trn cy nh phn m ta va dng xong.
Xt ti nt P ca cy, ( nt P ny ph t CS -> CF ):
Nu Y1 <= CS , CF <= Y2 th ta c th thy l HCN R ny ph ln ton b tung
trong on t CS -> CF trong khe L ny. -> Ta s phi sa li thng s ca nt P ny
l tng s HCN ph on ny ln 1 v cho bit on ny b ph ton b = CF CS.
Nu Y1 >= CF hoc Y2 <= CS th suy ra on Y1- > Y2 ny hon ton chng ph g ln
on CS -> CF c -> Ta khng phi xt ti cc nt con ca n na.
Nu on [Y1,Y2] [CS,CF] th ta s gi ti cc nt con ca n, xt tip cc nt
con ca n vi on Y1,Y2 ny.
Chng trnh minh ho :
Procedure Mo( Y1 , Y2 , P , C[S] , C[F] : Integer) ;
Var
mid : Integer ;
Begin
If (Y1 >= C[F]) or (Y2 <= C[S]) then Exit ;
If (Y1 <= C[S]) and (C[F] <= Y2) then Begin
SoHCNphu[P] := SoHCNphu[P] + 1 ;
Biphu[P] := C[F] C[S] ; Exit;
End ;
If S+1 >= F then Exit ; { tc l nt P ny l nt l }
mid := (S+F) div 2 ;
Mo( Y1 , Y2 , P*2 , C[S] , C[mid] )
;
Mo( Y1 , Y2 , P*2+1, C[mid] , C[F] ) ;
If SoHCNphu[P] = 0 then Biphu[P] := Biphu[P*2] + Biphu[P*2+1] ;
End ;

Nu nh i l nh ng ca mt HCN R , n c tung l Y2 , tung ca nh cn li


l Y1, tc l hin thi n s ph ln on t Y1 -> Y2 ( tung ).
Ta xt on Y1 -> Y2 ny trn cy nh phn :
Xt ti nt P ca cy, ( nt P ny ph t CS -> CF ):
Nu Y1 <= CS , CF <= Y2 th ta c th thy l HCN R ny ph ln ton b tung
trong on t CS -> CF trong khe L ny. -> Ta s phi sa li thng s ca nt P ny
l gim s HCN ph on ny ln 1 , tc l mt hnh ch nht khng cn ph ln
on ny na. Nu nh s HCN ph ln on ny = 0 -> on ny s b ph ln mt
on = tng s phn b ph ca 2 nt con ca n . ngc lI ta khng cn phi xt ti nt
con ca n na

Trang 3

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

Nu

Y1 >= CF hoc Y2 <= CS th suy ra on Y1- > Y2 ny hon ton chng ph g ln


on CS -> CF c -> Ta khng phi xt ti cc nt con ca n na.
Nu on [Y1,Y2] [CS,CF] th ta s gi ti cc nt con ca n, xt tip cc nt
con ca n vi on Y1,Y2 ny.
Chng trnh minh ho :
Procedure Dong(Y1 , Y2 , P , S , F : Integer ) ;
Var
mid : Integer ;
Begin
If (Y1 >= C[F])or(Y2 <= C[S]) then Exit ;
If (Y1 <= C[S] )and(C[F] <= Y2) then Begin
SoHCNphu[P] := SoHCNphu[P] 1 ;
If SoHCNphu[P] > 0 then Exit ;
BiPhu[P] := BiPhu[ P*2 ] + BiPhu[P*2+1] ;
Exit ;
End ;
If S + 1 >= Fn then Begin { Tc l P l nt l }
Biphu[P] := 0 ;
Exit ;
End ;
mid := (S+F) div 2 ;
Dong( Y1 , Y2 , P*2
, S , mid ) ;
Dong( Y1 , Y2 , P*2+1 , mid ,F ) ;
If SoHCNphu[P] = 0 then Biphu[P] := Biphu[P*2] + Biphu[P*2+1] ;
End ;

Nh vy Biphu[1] cho ta bit ti khe L ny th tung t C1 -> C2*N b ph l bao


nhiu , din tch b ph khe L = rng * Biphu[1] . Sau y l chng trnh m t
on ny :
Procedure Solve ;
Var
Dientich , Rong , i : LongInt ;
Begin
Dientich := 0 ;
Mo( A[1].Y1 , A[1].Y2 , 1 , 1 , N ) ;
For i := 2 to 2*n do Begin
Rong := A[i].x A[i-1].x ;
Dientich := Dientich + Rong * BiPhu[1] ;
If A[i].Y1 < A[i].Y2 then Mo( A[i].Y1 , A[i].Y2 , 1 , 1 , N )
Else Dong( A[i].Y2 , A[i].Y1 , 1 , 1 , N ) ;
End;
End ;

Ta c th khng nh thut ton ny l hon ton ng n bi khi ta xt ti 1 im ng


i th chc chn tn ti 1 im M j xut hin trc , v 2 im i v j ny l i din
cho 1 HCN R , HCN R ny c honh bt u t im j v kt thc im i, nn
chng no cha xt ti im i th HCN R ny vn tn ti , vn ph ln 1 s on no

Trang 4

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

ca tung . Mi khi ta gp 1 im M tc l gp 1 HCN c cnh bn tri c honh =


im ang xt , v khi gp mt im ng tc l 1 HCN b loi khi vng ang xt v
s khng c xt ti sau ny na.
Nh vy bi ton c gii quyt. Vi mi ln cp nht nh i vo cy nh phn ta mt
logN bc, c tt c 2*N nh -> cp thut ton O(2*NlogN), ng nh ni trn
y ta ch xt mi HCN thng qua 2 im , mi im ng 1 ln.
ngha cy nh phn : Nh vy ta c th thy mi nt P ca cy nh phn i din cho
mt on , m gi tr ca n = tng gi tr ca cc on con . Bi vy n gip ta khng
phi truy xut ti tt c nhng nt m ch thng qua mt s nt cha m thi. ( V d y
l Y1 <= C[S] , C[F] <= Y2 , tc l ph ln c on ri , khng phi xt cc on con
lm g na )
Interval Tree : Cy nh phn m ta s dng trong bi tp ni trn chnh l Interval Tree.
Vy khi qut li th Interval Tree l g ? l mt cy nh phn m mi nt i din cho
mt on hay mt dy cc phn t lin tip c chung mt tnh cht no v cc nt
con ca n i din cho mt on nh hn. Khi ta mun m , lit k xem mt on cho
trc c bao nhiu phn t tho mn mt tnh cht X ( biu din trn my tnh c ,
thng thng ch l quan h > hoc <) cho trc, th khi xt tnh cht ny trn mt nt
ca cy nh phn th xy ra 3 tnh hung :
C on u tho mn tnh cht ny , khi s phn t tho mn trong on = s
phn t ca on.
C on u khng tho mn tnh cht -> s phn t tho mn trong on = 0.
C mt s phn t tho mn v cc phn t ny nm lin tip nhau trong on ang xt.
Khi ta s li phi kim tra vi 2 nt con ca n. Nt con tri = na on bn tri , nt
con phi = na on bn phi.
Khi mun cp nht thm phn t hay gim vo on ta cng lm nh vy . V mt dung
lng b nh th Internval Tree cn 2*N phn t ( = s nt ca cy ) nhng c th c
nhiu trng hp b suy bin nn tt nht nn 4-> 8*N .
Tuy nhin ni th l nh vy nhng ta cng cn lm nhiu bi tp mi c th nm r , s
dng thun thc n c.
II . Binary Index Tree :
Binary Index Tree cng l mt m hnh cy v n cng khng khc Interval Tree
v mc ch s dng , ly d liu c cp nht t nt con . V nguyn tc th bt c
bi no gii c bng Binary Index Tree cng u a v Interval Tree c nhng
cha chc c chiu ngc li ( theo kin ch quan ca mnh ) . Thut ton cng ch
c cp O(NlogN) nhng tt hn ch l n khng cn lu tt c 2*N nt m ch lu
N nt m thi.Sau y l m hnh ca cy Binary Index Tree :

Trang 5

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

16
8

12

10
2

14

11

13

15

Mi nt X y i din cho cc cho nt X v cc nt con ca X. R rng ta thy m


hnh ca n khc hn so vi m hnh ca cy nh phn . Sau y l m t chi tit th :
+ Nu th ch c 1 nt -> khng c cung no c.
+ Nu nt i l , n s c cung ni vi nt i+1 ( l nt chn ) .
+ Khng xt cc nh l na , cc nh chn cn li s c nh s li ( ngm nh
trong u thi ), s th i = i shr 1 . Quay li bc 1.
Trong Binary Index Tree , bit c nt i c cha l nt no ngi ta s dng cng
thc c CM nh sau :
Cha(i) = i + i and ( i xor ( i-1) ) ;
Mi khi cp nht mt phn t c gi tr tng ng l X ta s tng s phn t = X ln:
A[x] := A[x] + 1 v gi thng bo ln cho cha ca n , cha ca n li tip tuc gi ln cho
ti khi no > N th thi. Mi ln gi thng bo , ta li tng s phn t ca cha n ln , tc
l A[cha] := A[cha] + 1 . Nh vy cng c ngha l A[x] ca ta l li s phn t c gi
tr x v s phn t ca cc con ca n.
V kim tra xem t 1 -> X c bao nhiu phn t ngi ta s dng mt cch thc
quy rt thng minh nh sau :
S phn t 1 -> X =
S phn t lu c nt X
+ S phn t 1 -> ( X X and ( X xor ( X-1) ) ) .
V d mh mun bit c bao nhiu phn t <= 11 chng hn :
S phn t = A[11] + S phn t( 1 => 11 11 and (11 xor 10) ) .
= A[11] + S phn t( 1 => 10 ) .
= A[11] + A[10] + S phn t (1 => 8) ;
= A[11] + A[10] + A[8] + S phn t ( 1 => 0) = A[11] + A[10] + A[8]. ( hon
ton chnh xc , nhn vo hnh v ).

Trang 6

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

Cp ca Binary Index Tree c CM rng lun lun nh hn O(NlogN) , bi vy


chng trnh chy rt nhanh , hn na li cn nhanh hn rt nhiu so vi dng Interval
Tree, b nh s dng cng t hn .

B. Bi tp ng dng :
Bi 1 : Electronic Auction ( u gi ln st )
C mt s thiu ht ln st mt t nc n. Bi vy ln st c bn u gi.
Chng c bn cc phin u gi in t . Khch hng khi n mua c quyn t gi
ca mnh . H s thng bo cho ban qun l gi ca mnh sn sng a ra mua v mt
con ln st ( s tin ny nm trong khong 0.01 VND -> 10000.00 VND v lun c chnh
xc 2 ch s sau du phy, tc l khng bao gi c chuyn khch hng t gi l 0.211
hay 3.412 m ch c th l 0.21 hoc 3.41 m thi ). Ht ln ny ti ln khc nhng
ngi bn s a ra K con ln u gi , v mi con ln s c bn cho K ngi u
tin tr gi >= X. Nu nh khng c K ngi th s ln cn li s b chuyn ti nc
khc ngay lp tc , v khng c bn tip trn t nc ny na .
Khch hng cng c th thng bo hu b ci gi m mnh a ra . Sau mi
cuc giao dch , khch hng vn tip tc mua bn tip vi ci gi m h thng bo cho
ti khi no h thng bo hu b gi m mnh a ra th thi. Mi con ln st c bn th
ban qun l u gi c nhn hoa hng l 0.01 VND. Hy tnh xem sau khi kt thc tt
c cc cuc giao dch th ban qun l li bao nhiu tin.
Gii hn :
Freepascal : + S dng trong file Input <= 100000 dng.
+ Time limit 0.5 s , b nh 5000 KB.
Turbo Pascal:+ S dng trong file Input <= 60000 dng. Gi tin gim xung <= 300.
+ Time limit 0.5 s , b nh 200KB .
INPUT
Gm nhiu dng , mi dng c th c dng 1 trong 3 trng hp sau :
"BID X " : Cho bit va c thm 1 ngi thng bo gi ca mnh l X VND.
"DEL X" : Cho bit va c 1 ngi thng bo hu ci gi X m mnh a ra.
"SALE X K" : Cho bit c mt ngi bn va quyt nh dem bn K con ln st vi
ci gi t nht cho mi con ln l X VND. K ngi u tin tr gi >= X s c mua
mi ngi 1 con.
Dng cui cng ghi 1 t duy nht "QUIT" thng bo kt thc tt c cc phin giao
dch, cc cuc mua bn u kt thc .
OUTPUT
1 s thc duy nht ( cng ghi chnh xc 2 ch s sau du phy ) l li m ban qun l thu
c .
V d :
Input
BID 0.01
BID 10000
BID 5000

Output
0.06

Trang 7

Chuyn cu trc d liu c bit

Nguyn Minh Hiu

BID 5000
SALE 7000 3
DEL 5000
SALE 3000 3
SALE 0.01 3
QUIT

Gii thch :
- 4 dng u tin cho bit c 4 ngi a ra gi ca mnh, l cc gi 0.01 , 10000 ,
5000 , 5000.
- Dng th 5 cho bit c mt ngi em bn 3 con ln mi con gi ti thiu l 7000
VND.->Ch c 1 ngi mua l ngi t mc gi 10000, cn li 2 con ln s b chuyn
i, khng bn na -> Li 0.01 ng.
- Dng th 6 cho bit c mt ngi hu b ci gi 5000 VND m anh ta a ra. Tc l
lc ny ch cn li 3 ngi vi 3 mc gi 0.01 , 10000 , 5000 VND.
- Dng th 7 cho bit c mt ngi em bn 3 con ln mi con gi ti thiu l 3000
VND.->Ch c 2 ngi mua l ngi t mc gi 10000 v 5000, cn li 1 con ln s b
chuyn i, khng bn na -> Li 0.02 ng.
- Dng th 8 cho bit c mt ngi em bn 3 con ln mi con gi ti thiu l 0.01
VND.->C 3 ngi mua l ngi t mc gi 10000 ,0.01 v 5000-> Li 0.03 ng.
- Dng 9 Cho bit cc phin giao dch kt thc .
- Vy tng li s l 0.01 + 0.02 + 0.03 = 0.06 VND.
Thut gii : y l mt bi in hnh cho vic s dng Binary Index Tree, nu bit s
dng kho th cng c th s dng Interval Tree c.

Trang 8

You might also like