SlideShare a Scribd company logo
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
CHUYÊN ĐỀ CẤU TRÚC DỮ LIỆU ĐẶC BIỆT
A . Lý thuyết :
Trong chuyên đề này ta sẽ nhắc tới 2 loại cấu trúc đặc biệt , đó là Interval Tree và
Binary Index Tree. Đó là 2 cách tổ chức dữ liệu rất thông minh , việc tổ chức này cũng
dẫn tới việc tìm ra những thuật toán hay với cấp độ trung bình thấp O(NlogN) . Và để
trình bày ý tưởng của các thuật toán này ta sẽ xem xét nó thông qua các bài toán cụ thể để
có thể hiểu rõ hơn.
I . Interval Tree :
Bài toán : Cho N hình chữ nhật trong mặt phẳng toạ độ. Hãy tính diện tích bị phủ bởi N
hình chữ nhật này.
Giới hạn : + 1 ≤ N ≤ 2000. Các toạ độ đều là số nguyên .
+ Time limit 0.5 s , bộ nhớ 200 KB.
Phân tích : Đối với bài toán này ta có thể giải bằng giải thuật thông thường với cấp độ
O(N2
). Đó là sắp xếp các hình chữ nhật theo toạ độ Y , sau đó tính diện tích bị phủ giữa 2
khe. Tổng diện tích bị phủ sẽ là tổng diện tích bị phủ giữa 2 khe (H.1).
( Ở hình 1 ta thấy có các khe B1B2 , B2B3 ,…, B7B8. )
Vì đã sắp xếp các HCN tăng dần theo tung độ nên với mỗi khe ta chỉ cần thao tác đơn
giản là xét từ 1 -> N những HCN nào phủ lên khe đó mà thôi. Có tất cả khoảng N*2 – 1
khe , với mỗi khe ta xét N HCN -> Cấp độ chính xác O(2*N2
).
Rõ ràng với N >= 2000 thì trong vòng 0.5 s chương trình khó có thể trả ra kết quả ngay
được.
Trang 1
B1 B2 B3 B4 B5 B6 B7 B8
( Hình 1 )
C1
C2
C3
C4
C5
C6
C7
C8
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
Chắc hẳn rất nhiều bạn cũng sẽ nghĩ ra thuật toán này và có thể sẽ băn khoăn một điều
rằng liệu có cách gì để chỉ xét mỗi hình chữ nhật đúng một lần hay không ?
Cấu trả lời là : nếu muốn chỉ xét 1 lần thì hiện thời mình cũng không biết nhưng mà mình
biết có thuật toán có thể đáp ứng yêu cầu với số lần xét là 2 lần !
Nội dung thuật toán và cách làm: Nếu như ở thuật toán O(N2
) ta chỉ xét các khe theo
hoành độ ( các khe B ) thì ở đây ta lại quan tâm tới khe theo tung độ ( các khe C ) . Tuy
nhiên về mặt bản chất thuật toán vẫn không có gì thay đổi vẫn chỉ là tính diện tích giữa
các khe ( hoành độ ) mà thôi. Ta sẽ phân tách 1 HCN ra thành 2 đỉnh :
+ Đỉnh 1 là đỉnh trái dưới . ( ta cứ gọi là đỉnh Mở của 1 HCN )
+ Đỉnh 2 là đỉnh phải trên.. ( ta cứ gọi là đỉnh Đóng của 1 HCN )
Với mỗi đỉnh ta sẽ lưu 4 thông số: toạ độ , và nếu là đỉnh 2 ta lưu tung độ đỉnh 1, nếu là
đỉnh 1 ta lưu tung độ đỉnh 2 và một biến cho biết đỉnh đó là trái dưới hay phải trên. Rõ
ràng với 2 đỉnh này thôi là cũng có thể đại diện cho 1 HCN được rồi.
Ta sẽ có 2*N đỉnh và 1 dãy C1,…C2*N-1( tất nhiên dãy này đã sắp xếp theo thứ tự tăng
dần). Gọi tập 2*N đỉnh này là tập đỉnh HCN.
Ta sắp xếp 2*N đỉnh theo thứ tự tăng dần của hoành độ. Bây giờ ta sẽ tính diện tích bằng
cách tính tổng diện tích của các khe ( hoành độ ) giữa 2 điểm liên tiếp trong số 2*N điểm
nói trên. Ta xét tuần tự các khe từ khe 1 -> khe 2*N-1.
Với dãy C ta sẽ tổ chức 1 cây nhị phân đầy đủ như sau :
…..
Trong đó đỉnh 1 lưu số phần bị phủ lên tung độ từ C1 -> C2*N.
đỉnh 2 lưu số phần bị phủ lên phủ lên tung độ từ C1 -> CN, đỉnh 3 lưu số phần bị
phủ lên tung độ từ CN+1 -> C2*N.
đỉnh 4 lưu số phần bị phủ lên tung độ từ C1 -> CN div 2, đỉnh 5 lưu số phần bị phủ
lên tung độ từ CN div 2+1 -> CN , đỉnh 6 lưu số phần bị phủ lên tung độ từ CN+1 -> CN+N div 2 ,
đỉnh 7 lưu số phần bị phủ lên tung độ từ CN+N div 2 +1 -> C2*N. v.v…
Trang 2
1
2 3
6 74 5
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
Với mỗi đỉnh trên cây nhị phân này ta có 2 thông số cần lưu đó là số HCN đang phủ lên
đoạn này và phủ lên là bao nhiêu .
Bây giờ ta sẽ xét 2*N đỉnh trong tập các đỉnh của HCN.
Xét tới khe L ( hoành độ ) giữa đỉnh i và i+1 ta làm như sau :
Nếu đỉnh i là đỉnh Mở của một HCN R , nó có tung độ là Y1 , tung độ của đỉnh còn lại là
Y2, tức là hiện thời nó sẽ phủ lên đoạn từ Y1 -> Y2 ( tung độ ).
Ta xét đoạn Y1 -> Y2 này trên cây nhị phân mà ta vừa dựng xong.
Xét tới nút P của cây, ( nút P này phủ từ CS -> CF ):
•Nếu Y1 <= CS , CF <= Y2 thì ta có thể thấy là HCN R này đã phủ lên toàn bộ tung độ
trong đoạn từ CS -> CF trong khe L này. -> Ta sẽ phải sửa lại thông số của nút P này đó
là tăng số HCN phủ đoạn này lên 1 và cho biết đoạn này đã bị phủ toàn bộ = CF – CS.
•Nếu Y1 >= CF hoặc Y2 <= CS thì suy ra đoạn Y1- > Y2 này hoàn toàn chẳng phủ gì lên
đoạn CS -> CF cả -> Ta không phải xét tới các nút con của nó nữa.
•Nếu đoạn [Y1,Y2] ∩ [CS,CF] ≠ ∅ thì ta sẽ gọi tới các nút con của nó, xét tiếp các nút
con của nó với đoạn Y1,Y2 này.
Chương trình 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 ; { tức là nút P này là nút 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 ;
Nếu đỉnh i là đỉnh Đóng của một HCN R , nó có tung độ là Y2 , tung độ của đỉnh còn lại
là Y1, tức là hiện thời nó sẽ phủ lên đoạn từ Y1 -> Y2 ( tung độ ).
Ta xét đoạn Y1 -> Y2 này trên cây nhị phân :
Xét tới nút P của cây, ( nút P này phủ từ CS -> CF ):
•Nếu Y1 <= CS , CF <= Y2 thì ta có thể thấy là HCN R này đã phủ lên toàn bộ tung độ
trong đoạn từ CS -> CF trong khe L này. -> Ta sẽ phải sửa lại thông số của nút P này đó
là giảm số HCN phủ đoạn này lên 1 , tức là một hình chữ nhật đã không còn phủ lên
đoạn này nữa. Nếu như số HCN phủ lên đoạn này = 0 -> Đoạn này sẽ bị phủ lên một
đoạn = tổng số phần bị phủ của 2 nút con của nó . ngược lạI ta không cần phải xét tới nút
con của nó nữa
Trang 3
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
•Nếu Y1 >= CF hoặc Y2 <= CS thì suy ra đoạn Y1- > Y2 này hoàn toàn chẳng phủ gì lên
đoạn CS -> CF cả -> Ta không phải xét tới các nút con của nó nữa.
•Nếu đoạn [Y1,Y2] ∩ [CS,CF] ≠ ∅ thì ta sẽ gọi tới các nút con của nó, xét tiếp các nút
con của nó với đoạn Y1,Y2 này.
Chương trình 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 { Tức là P là nút 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ư vậy Biphu[1] cho ta biết tới khe L này thì tung độ từ C1 -> C2*N đã bị phủ là bao
nhiêu , diện tích bị phủ khe L = Độ rộng * Biphu[1] . Sau đây là chương trình mô tả
đoạn này :
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ể khẳng định thuật toán này là hoàn toàn đúng đắn bởi khi ta xét tới 1 điểm Đóng
i thì chắc chắn tồn tại 1 điểm Mở j đã xuất hiện trước đó , và 2 điểm i và j này là đại diện
cho 1 HCN R , HCN R này có hoành độ bắt đầu từ điểm j và kết thúc ở điểm i, nên
chừng nào chưa xét tới điểm i thì HCN R này vẫn tồn tại , vẫn phủ lên 1 số đoạn nào đó
Trang 4
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
của tung độ. Mỗi khi ta gặp 1 điểm Mở tức là gặp 1 HCN có cạnh bên trái có hoành độ =
điểm đang xét , và khi gặp một điểm Đóng tức là 1 HCN đã bị loại khỏi vùng đang xét và
sẽ không được xét tới sau này nữa.
Như vậy bài toán đã được giải quyết. Với mỗi lân cập nhật đỉnh i vào cây nhị phân ta mất
logN bước, có tất cả 2*N đỉnh -> cấp độ thuật toán O(2*NlogN), đúng như đã nói ở trên
ở đây ta chỉ xét mỗi HCN thông qua 2 điểm , mỗi điểm đúng 1 lần.
Ý nghĩa cây nhị phân : Như vậy ta có thể thấy mỗi nút P của cây nhị phân đại diện cho
một đoạn , mà giá trị của nó = tổng giá trị của các đoạn con . Bởi vậy nó giúp ta không
phải truy xuất tới tất cả những nút mà chỉ thông qua một số nút cha mà thôi. ( Ví dụ ở đây
là Y1 <= C[S] , C[F] <= Y2 , tức là đã phủ lên cả đoạn rồi , không phải xét các đoạn con
làm gì nữa )
Interval Tree : Cây nhị phân mà ta sử dụng trong bài tập nói trên chính là Interval Tree.
Vậy khái quát lại thì Interval Tree là gì ? Đó là một cây nhị phân mà mỗi nút đại diện cho
một “đoạn “ hay một dãy các phần tử liên tiếp có chung một tính chất nào đó và các nút
con của nó đại diện cho một đoạn nhỏ hơn. Khi ta muốn đếm , liệt kê xem một đoạn cho
trước có bao nhiêu phần tử thoả mãn một tính chất X ( biểu diễn trên máy tính được ,
thông thường chỉ là quan hệ > hoặc <) cho trước, thì khi xét tính chất này trên một nút
của cây nhị phân thì xảy ra 3 tình huống :
Cả đoạn đều thoả mãn tính chất này , khi đó số phần tử thoả mãn trong đoạn đó = số
phần tử của đoạn.
Cả đoạn đều không thoả mãn tính chất -> số phần tử thoả mãn trong đoạn đó = 0.
Có một số phần tử thoả mãn và các phần tử này nằm liên tiếp nhau trong đoạn đang xét.
Khi đó ta sẽ lại phải kiểm tra với 2 nút con của nó. Nút con trái = nửa đoạn bên trái , nút
con phải = nửa đoạn bên phải.
Khi muốn cập nhật thêm phần tử hay giảm vào đoạn ta cũng làm như vậy . Về mặt dung
lượng bộ nhớ thì Internval Tree cần 2*N phần tử ( = số nút của cây ) nhưng có thể có
nhiều trường hợp bị suy biến nên tốt nhất nên để 4-> 8*N .
Tuy nhiên nói thì là như vậy nhưng ta cũng cần làm nhiều bài tập mới có thể nắm rõ , sử
dụng thuần thục nó được.
II . Binary Index Tree :
Binary Index Tree cũng là một mô hình cây và nó cũng không khác Interval Tree
về mục đích sử dụng , lấy dữ liệu được cập nhật từ nút con… . Về nguyên tắc thì bất cứ
bài nào giải được bằng Binary Index Tree cũng đều đưa về Interval Tree được nhưng
chưa chắc đã có chiều ngược lại ( theo ý kiến chủ quan của mình ) . Thuật toán cũng chỉ
có cấp độ O(NlogN) nhưng tốt hơn ở chỗ là nó không cần lưu tất cả 2*N nút mà chỉ lưu
N nút mà thôi.Sau đây là mô hình của cây Binary Index Tree :
Trang 5
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
Mỗi nút X ở đây đại diện cho các cho nút X và các nút con của X. Rõ ràng ta thấy mô
hình của nó khác hẳn so với mô hình của cây nhị phân . Sau đây là mô tả chi tiết đồ thị :
+ Nếu đồ thị chỉ có 1 nút -> không có cung nào cả.
+ Nếu nút i lẻ , nó sẽ có cung nối với nút i+1 ( là nút chẵn ) .
+ Không xét các đỉnh lẻ nữa , các đỉnh chẵn còn lại sẽ được đánh số lại ( ngầm định
trong đầu thôi ), số thứ i = i shr 1 . Quay lại bước 1.
Trong Binary Index Tree , để biết được nút i có cha là nút nào người ta sử dụng công
thức đã được CM như sau :
Cha(i) = i + i and ( i xor ( i-1) ) ;
Mỗi khi cập nhật một phần tử ở có giá trị tương ứng là X ta sẽ tăng số phần tử = X lên:
A[x] := A[x] + 1 và gửi thông báo lên cho cha của nó , cha của nó lại tiếp tuc gửi lên cho
tới khi nào > N thì thôi. Mỗi lần gửi thông báo , ta lại tăng số phần tử của cha nó lên , tức
là A[cha] := A[cha] + 1 . Như vậy cũng có nghĩa là A[x] của ta lưư lại số phần tử có giá
trị x và số phần tử của các con của nó.
Và để kiểm tra xem từ 1 -> X có bao nhiêu phần tử người ta sử dụng một cách thức đệ
quy rất thông minh như sau :
Số phần tử 1 -> X = Số phần tử lưu được ở nút X
+ Số phần tử 1 -> ( X – X and ( X xor ( X-1) ) ) .
Ví dụ mhư muốn biết có bao nhiêu phần tử ở <= 11 chẳng hạn :
Số phần tử = A[11] + Số phần tử( 1 => 11 – 11 and (11 xor 10) ) .
= A[11] + Số phần tử( 1 => 10 ) .
= A[11] + A[10] + Số phần tử (1 => 8) ;
= A[11] + A[10] + A[8] + Số phần tử ( 1 => 0) = A[11] + A[10] + A[8]. ( hoàn
toàn chính xác , nhìn vào hình vẽ ).
Trang 6
1 5 7
3
9 11
2 6
14
4
12
8
10
13 15
16
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
Cấp độ của Binary Index Tree đã được CM rằng luôn luôn nhỏ hơn O(NlogN) , bởi vậy
chương trình chạy rất nhanh , hơn nữa lại còn nhanh hơn rất nhiều so với dùng Interval
Tree, bộ nhớ sử dụng cũng ít hơn .
B. Bài tập ứng dụng :
Bài 1 : Electronic Auction ( Đấu giá lợn sắt )
Có một sự thiếu hụt lợn sắt ở một đất nước nọ. Bởi vậy lợn sắt được bán đấu giá.
Chúng được bán ở các phiên đấu giá điện tử . Khách hàng khi đến mua có quyền đặt giá
của mình . Họ sẽ thông báo cho ban quản lý giá của mình sẵn sàng đưa ra để mua về một
con lợn sắt ( số tiền này nằm trong khoảng 0.01 VND -> 10000.00 VND và luôn có chính
xác 2 chữ số sau dấu phẩy, tức là không bao giờ có chuyện khách hàng đặt giá là 0.211
hay 3.412 mà chỉ có thể là 0.21 hoặc 3.41 mà thôi ). Hết lần này tới lần khác những
người bán sẽ đưa ra K con lợn để đấu giá , và mỗi con lợn sẽ được bán cho K người đầu
tiên trả giá >= X. Nếu như không có đủ K người thì số lợn còn lại sẽ bị chuyển tới nước
khác ngay lập tức , và không được bán tiếp trên đất nước này nữa .
Khách hàng cũng có thể thông báo huỷ bỏ cái giá mà mình đã đưa ra . Sau mỗi
cuộc giao dịch , khách hàng vẫn tiếp tục mua bán tiếp với cái giá mà họ đã thông báo cho
tới khi nào họ thông báo huỷ bỏ giá mà mình đưa ra thì thôi. Mỗi con lợn sắt được bán thì
ban quản lý đấu giá được nhận hoa hồng là 0.01 VND. Hãy tính xem sau khi kết thúc tất
cả các cuộc giao dịch thì ban quản lý lãi bao nhiêu tiền.
Giới hạn :
Freepascal : + Số dòng trong file Input <= 100000 dòng.
+ Time limit 0.5 s , bộ nhớ 5000 KB.
Turbo Pascal:+ Số dòng trong file Input <= 60000 dòng. Giá tiền giảm xuống <= 300.
+ Time limit 0.5 s , bộ nhớ 200KB .
INPUT
Gồm nhiều dòng , mỗi dòng có thể có dạng 1 trong 3 trường hợp sau :
"BID X " : Cho biết vừa có thêm 1 người thông báo giá của mình là X VND.
"DEL X" : Cho biết vừa có 1 người thông báo huỷ cái giá X mà mình đã đưa ra.
"SALE X K" : Cho biết có một người bán vừa quyết định dem bán K con lợn sắt với
cái giá ít nhất cho mỗi con lợn là X VND. K người đầu tiên trả giá >= X sẽ được mua
mỗi người 1 con.
Dòng cuối cùng ghi 1 từ duy nhất "QUIT" thông báo đã kết thúc tất cả các phiên giao
dịch, các cuộc mua bán đều đã kết thúc .
OUTPUT
1 số thực duy nhất ( cũng ghi chính xác 2 chữ số sau dấu phẩy ) là lãi mà ban quản lý thu
được .
Ví dụ :
Input Output
BID 0.01
BID 10000
BID 5000
0.06
Trang 7
Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu
BID 5000
SALE 7000 3
DEL 5000
SALE 3000 3
SALE 0.01 3
QUIT
Giải thích :
- 4 dòng đầu tiên cho biết có 4 người đã đưa ra giá của mình, đó là các giá 0.01 , 10000 ,
5000 , 5000.
- Dòng thứ 5 cho biết có một người đã đem bán 3 con lợn mỗi con giá tối thiểu là 7000
VND.->Chỉ có 1 người mua là người đặt mức giá 10000, còn lại 2 con lợn sẽ bị chuyển
đi, không bán nữa -> Lãi 0.01 đồng.
- Dòng thứ 6 cho biết có một người đã huỷ bỏ cái giá 5000 VND mà anh ta đưa ra. Tức là
lúc này chỉ còn lại 3 người với 3 mức giá 0.01 , 10000 , 5000 VND.
- Dòng thứ 7 cho biết có một người đã đem bán 3 con lợn mỗi con giá tối thiểu là 3000
VND.->Chỉ có 2 người mua là người đặt mức giá 10000 và 5000, còn lại 1 con lợn sẽ bị
chuyển đi, không bán nữa -> Lãi 0.02 đồng.
- Dòng thứ 8 cho biết có một người đã đem bán 3 con lợn mỗi con giá tối thiểu là 0.01
VND.->Có 3 người mua là người đặt mức giá 10000 ,0.01 và 5000-> Lãi 0.03 đồng.
- Dòng 9 Cho biết các phiên giao dịch đã kết thúc .
- Vậy tổng lãi sẽ là 0.01 + 0.02 + 0.03 = 0.06 VND.
Thuật giải : Đây là một bài điển hình cho việc sử dụng Binary Index Tree, nếu biết sử
dụng khéo thì cũng có thể sử dụng Interval Tree được.
Trang 8

More Related Content

What's hot

KTMT Số Nguyên - Số Chấm Động
KTMT Số Nguyên - Số Chấm ĐộngKTMT Số Nguyên - Số Chấm Động
KTMT Số Nguyên - Số Chấm ĐộngDavid Nguyen
 
Dientuso Sld
Dientuso SldDientuso Sld
Dientuso Sldhoadktd
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐỗ Đức Hùng
 
1. su dong bien nghich bien cua ham so tiet 1 2 3 4
1. su dong bien nghich bien cua ham so tiet 1  2  3  41. su dong bien nghich bien cua ham so tiet 1  2  3  4
1. su dong bien nghich bien cua ham so tiet 1 2 3 4NgcBchPhngTrngTHPTNg
 
4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoc4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoctoanpv1989
 
Trắc nghiệm cực trị hàm số (chủ đề 2)
Trắc nghiệm cực trị hàm số (chủ đề 2)Trắc nghiệm cực trị hàm số (chủ đề 2)
Trắc nghiệm cực trị hàm số (chủ đề 2)VuKirikou
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excelltrioby2
 
Phieu so 02 khao sat ham so
Phieu so 02 khao sat ham soPhieu so 02 khao sat ham so
Phieu so 02 khao sat ham soLongV86
 
05 mat101 bai1_v2.3013101225
 05 mat101 bai1_v2.3013101225 05 mat101 bai1_v2.3013101225
05 mat101 bai1_v2.3013101225Yen Dang
 
1. tai lieu tap huan tt22 mon toan
1. tai lieu tap huan tt22   mon toan1. tai lieu tap huan tt22   mon toan
1. tai lieu tap huan tt22 mon toanvinhduchanh
 
Mat101 huongdan bai3_v2.3013103225
Mat101 huongdan bai3_v2.3013103225Mat101 huongdan bai3_v2.3013103225
Mat101 huongdan bai3_v2.3013103225Yen Dang
 
Toán 1 ab 2012 thpt minh châu hưng yên
Toán 1 ab 2012 thpt minh châu   hưng yênToán 1 ab 2012 thpt minh châu   hưng yên
Toán 1 ab 2012 thpt minh châu hưng yênViệt Nam Tổ Quốc
 
Khảo sát toán chuyên vĩnh phúc 2011 lần 4 k a
Khảo sát toán chuyên vĩnh phúc 2011 lần 4 k aKhảo sát toán chuyên vĩnh phúc 2011 lần 4 k a
Khảo sát toán chuyên vĩnh phúc 2011 lần 4 k aThế Giới Tinh Hoa
 
Thuat toan tin hoc
Thuat toan tin hocThuat toan tin hoc
Thuat toan tin hocladoga
 

What's hot (19)

KTMT Số Nguyên - Số Chấm Động
KTMT Số Nguyên - Số Chấm ĐộngKTMT Số Nguyên - Số Chấm Động
KTMT Số Nguyên - Số Chấm Động
 
Dientuso Sld
Dientuso SldDientuso Sld
Dientuso Sld
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
 
Kỹ thuật số
Kỹ thuật sốKỹ thuật số
Kỹ thuật số
 
1. su dong bien nghich bien cua ham so tiet 1 2 3 4
1. su dong bien nghich bien cua ham so tiet 1  2  3  41. su dong bien nghich bien cua ham so tiet 1  2  3  4
1. su dong bien nghich bien cua ham so tiet 1 2 3 4
 
Slide chuong4
Slide chuong4Slide chuong4
Slide chuong4
 
4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoc4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoc
 
Qhd
QhdQhd
Qhd
 
Trắc nghiệm cực trị hàm số (chủ đề 2)
Trắc nghiệm cực trị hàm số (chủ đề 2)Trắc nghiệm cực trị hàm số (chủ đề 2)
Trắc nghiệm cực trị hàm số (chủ đề 2)
 
bai tap_kts
bai tap_ktsbai tap_kts
bai tap_kts
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excell
 
Phieu so 02 khao sat ham so
Phieu so 02 khao sat ham soPhieu so 02 khao sat ham so
Phieu so 02 khao sat ham so
 
05 mat101 bai1_v2.3013101225
 05 mat101 bai1_v2.3013101225 05 mat101 bai1_v2.3013101225
05 mat101 bai1_v2.3013101225
 
Bai 4
Bai 4Bai 4
Bai 4
 
1. tai lieu tap huan tt22 mon toan
1. tai lieu tap huan tt22   mon toan1. tai lieu tap huan tt22   mon toan
1. tai lieu tap huan tt22 mon toan
 
Mat101 huongdan bai3_v2.3013103225
Mat101 huongdan bai3_v2.3013103225Mat101 huongdan bai3_v2.3013103225
Mat101 huongdan bai3_v2.3013103225
 
Toán 1 ab 2012 thpt minh châu hưng yên
Toán 1 ab 2012 thpt minh châu   hưng yênToán 1 ab 2012 thpt minh châu   hưng yên
Toán 1 ab 2012 thpt minh châu hưng yên
 
Khảo sát toán chuyên vĩnh phúc 2011 lần 4 k a
Khảo sát toán chuyên vĩnh phúc 2011 lần 4 k aKhảo sát toán chuyên vĩnh phúc 2011 lần 4 k a
Khảo sát toán chuyên vĩnh phúc 2011 lần 4 k a
 
Thuat toan tin hoc
Thuat toan tin hocThuat toan tin hoc
Thuat toan tin hoc
 

Similar to Cau truc du_lieu_dac_biet

Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hocVũ Nam
 
bo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdf
bo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdfbo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdf
bo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdfLinhTrnTh14
 
[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...Nguyen Vietnam
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toánHồ Lợi
 
Thi thử toán lê văn hưu th 5 5-2012 lần 2
Thi thử toán lê văn hưu th 5 5-2012 lần 2Thi thử toán lê văn hưu th 5 5-2012 lần 2
Thi thử toán lê văn hưu th 5 5-2012 lần 2Thế Giới Tinh Hoa
 
chuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdf
chuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdfchuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdf
chuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdfcholacha
 
Giao trinhgiaithuat15
Giao trinhgiaithuat15Giao trinhgiaithuat15
Giao trinhgiaithuat15Phi Phi
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Nguyễn Công Hoàng
 
Toan pt.de026.2010
Toan pt.de026.2010Toan pt.de026.2010
Toan pt.de026.2010BẢO Hí
 
Toan pt.de027.2010
Toan pt.de027.2010Toan pt.de027.2010
Toan pt.de027.2010BẢO Hí
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Cách thức ôn thi vật lí đại học
Cách thức ôn thi vật lí đại họcCách thức ôn thi vật lí đại học
Cách thức ôn thi vật lí đại họcTrong Nguyen
 
Thao giang 2
Thao giang 2Thao giang 2
Thao giang 2Pham Son
 
4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoc4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hocPhi Phi
 

Similar to Cau truc du_lieu_dac_biet (20)

Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hoc
 
bo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdf
bo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdfbo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdf
bo-de-tham-khao-giua-hoc-ky-2-toan-8-nam-2023-2024-phong-gddt-tp-hai-duong.pdf
 
[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...
[Math educare.com] giai tich ham nhieu bien-phep tinh vi tich phan ham nhieu ...
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toán
 
Thi thử toán lê văn hưu th 5 5-2012 lần 2
Thi thử toán lê văn hưu th 5 5-2012 lần 2Thi thử toán lê văn hưu th 5 5-2012 lần 2
Thi thử toán lê văn hưu th 5 5-2012 lần 2
 
Chuong 3
Chuong 3Chuong 3
Chuong 3
 
chuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdf
chuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdfchuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdf
chuyen-de-day-so-cap-so-cong-va-cap-so-nhan-toan-11-canh-dieu.pdf
 
Giao trinhgiaithuat15
Giao trinhgiaithuat15Giao trinhgiaithuat15
Giao trinhgiaithuat15
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
 
Toan pt.de026.2010
Toan pt.de026.2010Toan pt.de026.2010
Toan pt.de026.2010
 
Toan pt.de027.2010
Toan pt.de027.2010Toan pt.de027.2010
Toan pt.de027.2010
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Sophuc
SophucSophuc
Sophuc
 
Cách thức ôn thi vật lí đại học
Cách thức ôn thi vật lí đại họcCách thức ôn thi vật lí đại học
Cách thức ôn thi vật lí đại học
 
Lý thuyết cơ sở - Bộ môn tự động đo lường
Lý thuyết cơ sở - Bộ môn tự động đo lườngLý thuyết cơ sở - Bộ môn tự động đo lường
Lý thuyết cơ sở - Bộ môn tự động đo lường
 
De toan a
De toan aDe toan a
De toan a
 
Thao giang 2
Thao giang 2Thao giang 2
Thao giang 2
 
4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoc4 cac he_dem_dung_trong_tin_hoc
4 cac he_dem_dung_trong_tin_hoc
 

More from Võ Tâm Long

Bai tap hoa hoc lop 11 ca nam
Bai tap hoa hoc lop 11 ca namBai tap hoa hoc lop 11 ca nam
Bai tap hoa hoc lop 11 ca namVõ Tâm Long
 
669160 esw0whit00hoa0o0viet0nam00tv0
669160 esw0whit00hoa0o0viet0nam00tv0669160 esw0whit00hoa0o0viet0nam00tv0
669160 esw0whit00hoa0o0viet0nam00tv0Võ Tâm Long
 
200211 gubryaltphcmhanoidansodichuyennoithi
200211 gubryaltphcmhanoidansodichuyennoithi200211 gubryaltphcmhanoidansodichuyennoithi
200211 gubryaltphcmhanoidansodichuyennoithiVõ Tâm Long
 
7 chuyenkhao dicu-dothihoa
7 chuyenkhao dicu-dothihoa7 chuyenkhao dicu-dothihoa
7 chuyenkhao dicu-dothihoaVõ Tâm Long
 
Đô thị hóa TP.HCM 1986-2015
Đô thị hóa TP.HCM 1986-2015Đô thị hóa TP.HCM 1986-2015
Đô thị hóa TP.HCM 1986-2015Võ Tâm Long
 
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939Võ Tâm Long
 
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939Võ Tâm Long
 
Vu kien chat doc mau da cam
Vu kien chat doc mau da camVu kien chat doc mau da cam
Vu kien chat doc mau da camVõ Tâm Long
 
Vu kien chat doc mau da cam
Vu kien chat doc mau da camVu kien chat doc mau da cam
Vu kien chat doc mau da camVõ Tâm Long
 
Thuyết trình cmts
Thuyết trình cmtsThuyết trình cmts
Thuyết trình cmtsVõ Tâm Long
 

More from Võ Tâm Long (20)

Chuanhk2
Chuanhk2Chuanhk2
Chuanhk2
 
Chuanhk1
Chuanhk1Chuanhk1
Chuanhk1
 
Chuan
ChuanChuan
Chuan
 
Ly p han 2
Ly p han 2Ly p han 2
Ly p han 2
 
Phuongphap
PhuongphapPhuongphap
Phuongphap
 
HÓa 11
HÓa 11HÓa 11
HÓa 11
 
Bai tap hoa hoc lop 11 ca nam
Bai tap hoa hoc lop 11 ca namBai tap hoa hoc lop 11 ca nam
Bai tap hoa hoc lop 11 ca nam
 
669160 esw0whit00hoa0o0viet0nam00tv0
669160 esw0whit00hoa0o0viet0nam00tv0669160 esw0whit00hoa0o0viet0nam00tv0
669160 esw0whit00hoa0o0viet0nam00tv0
 
200211 gubryaltphcmhanoidansodichuyennoithi
200211 gubryaltphcmhanoidansodichuyennoithi200211 gubryaltphcmhanoidansodichuyennoithi
200211 gubryaltphcmhanoidansodichuyennoithi
 
7 chuyenkhao dicu-dothihoa
7 chuyenkhao dicu-dothihoa7 chuyenkhao dicu-dothihoa
7 chuyenkhao dicu-dothihoa
 
Đô thị hóa TP.HCM 1986-2015
Đô thị hóa TP.HCM 1986-2015Đô thị hóa TP.HCM 1986-2015
Đô thị hóa TP.HCM 1986-2015
 
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
 
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
Hoàn cảnh lịch sử và đường lối của đảng từ năm 1930 đến năm 1939
 
Dioxin office
Dioxin officeDioxin office
Dioxin office
 
Dioxin office
Dioxin officeDioxin office
Dioxin office
 
Vu kien chat doc mau da cam
Vu kien chat doc mau da camVu kien chat doc mau da cam
Vu kien chat doc mau da cam
 
Nvt phanquyet jw
Nvt phanquyet jwNvt phanquyet jw
Nvt phanquyet jw
 
Vu kien chat doc mau da cam
Vu kien chat doc mau da camVu kien chat doc mau da cam
Vu kien chat doc mau da cam
 
Raodat
RaodatRaodat
Raodat
 
Thuyết trình cmts
Thuyết trình cmtsThuyết trình cmts
Thuyết trình cmts
 

Recently uploaded

onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doconluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.docQuynhAnhV
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfĐiện Lạnh Bách Khoa Hà Nội
 
slide tuần kinh tế công nghệ phần mềm hust
slide tuần kinh tế công nghệ phần mềm hustslide tuần kinh tế công nghệ phần mềm hust
slide tuần kinh tế công nghệ phần mềm hustCngV201176
 
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...Nguyen Thanh Tu Collection
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...https://www.facebook.com/garmentspace
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...Nguyen Thanh Tu Collection
 
Thực hành lễ tân ngoại giao - công tác NG
Thực hành lễ tân ngoại giao - công tác NGThực hành lễ tân ngoại giao - công tác NG
Thực hành lễ tân ngoại giao - công tác NGMeiMei949309
 
Bài thuyết trình môn học Hệ Điều Hành.pptx
Bài thuyết trình môn học Hệ Điều Hành.pptxBài thuyết trình môn học Hệ Điều Hành.pptx
Bài thuyết trình môn học Hệ Điều Hành.pptxduongchausky
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...Nguyen Thanh Tu Collection
 
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdfDS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdfthanhluan21
 
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptxCÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptxCNGTRC3
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfphamthuhoai20102005
 
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsbkjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsbhoangphuc12ta6
 
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfGIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfLngHu10
 

Recently uploaded (15)

onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doconluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
 
slide tuần kinh tế công nghệ phần mềm hust
slide tuần kinh tế công nghệ phần mềm hustslide tuần kinh tế công nghệ phần mềm hust
slide tuần kinh tế công nghệ phần mềm hust
 
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
 
Thực hành lễ tân ngoại giao - công tác NG
Thực hành lễ tân ngoại giao - công tác NGThực hành lễ tân ngoại giao - công tác NG
Thực hành lễ tân ngoại giao - công tác NG
 
Bài thuyết trình môn học Hệ Điều Hành.pptx
Bài thuyết trình môn học Hệ Điều Hành.pptxBài thuyết trình môn học Hệ Điều Hành.pptx
Bài thuyết trình môn học Hệ Điều Hành.pptx
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
 
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdfDS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
 
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptxCÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
 
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsbkjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
 
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfGIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
 

Cau truc du_lieu_dac_biet

  • 1. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu CHUYÊN ĐỀ CẤU TRÚC DỮ LIỆU ĐẶC BIỆT A . Lý thuyết : Trong chuyên đề này ta sẽ nhắc tới 2 loại cấu trúc đặc biệt , đó là Interval Tree và Binary Index Tree. Đó là 2 cách tổ chức dữ liệu rất thông minh , việc tổ chức này cũng dẫn tới việc tìm ra những thuật toán hay với cấp độ trung bình thấp O(NlogN) . Và để trình bày ý tưởng của các thuật toán này ta sẽ xem xét nó thông qua các bài toán cụ thể để có thể hiểu rõ hơn. I . Interval Tree : Bài toán : Cho N hình chữ nhật trong mặt phẳng toạ độ. Hãy tính diện tích bị phủ bởi N hình chữ nhật này. Giới hạn : + 1 ≤ N ≤ 2000. Các toạ độ đều là số nguyên . + Time limit 0.5 s , bộ nhớ 200 KB. Phân tích : Đối với bài toán này ta có thể giải bằng giải thuật thông thường với cấp độ O(N2 ). Đó là sắp xếp các hình chữ nhật theo toạ độ Y , sau đó tính diện tích bị phủ giữa 2 khe. Tổng diện tích bị phủ sẽ là tổng diện tích bị phủ giữa 2 khe (H.1). ( Ở hình 1 ta thấy có các khe B1B2 , B2B3 ,…, B7B8. ) Vì đã sắp xếp các HCN tăng dần theo tung độ nên với mỗi khe ta chỉ cần thao tác đơn giản là xét từ 1 -> N những HCN nào phủ lên khe đó mà thôi. Có tất cả khoảng N*2 – 1 khe , với mỗi khe ta xét N HCN -> Cấp độ chính xác O(2*N2 ). Rõ ràng với N >= 2000 thì trong vòng 0.5 s chương trình khó có thể trả ra kết quả ngay được. Trang 1 B1 B2 B3 B4 B5 B6 B7 B8 ( Hình 1 ) C1 C2 C3 C4 C5 C6 C7 C8
  • 2. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu Chắc hẳn rất nhiều bạn cũng sẽ nghĩ ra thuật toán này và có thể sẽ băn khoăn một điều rằng liệu có cách gì để chỉ xét mỗi hình chữ nhật đúng một lần hay không ? Cấu trả lời là : nếu muốn chỉ xét 1 lần thì hiện thời mình cũng không biết nhưng mà mình biết có thuật toán có thể đáp ứng yêu cầu với số lần xét là 2 lần ! Nội dung thuật toán và cách làm: Nếu như ở thuật toán O(N2 ) ta chỉ xét các khe theo hoành độ ( các khe B ) thì ở đây ta lại quan tâm tới khe theo tung độ ( các khe C ) . Tuy nhiên về mặt bản chất thuật toán vẫn không có gì thay đổi vẫn chỉ là tính diện tích giữa các khe ( hoành độ ) mà thôi. Ta sẽ phân tách 1 HCN ra thành 2 đỉnh : + Đỉnh 1 là đỉnh trái dưới . ( ta cứ gọi là đỉnh Mở của 1 HCN ) + Đỉnh 2 là đỉnh phải trên.. ( ta cứ gọi là đỉnh Đóng của 1 HCN ) Với mỗi đỉnh ta sẽ lưu 4 thông số: toạ độ , và nếu là đỉnh 2 ta lưu tung độ đỉnh 1, nếu là đỉnh 1 ta lưu tung độ đỉnh 2 và một biến cho biết đỉnh đó là trái dưới hay phải trên. Rõ ràng với 2 đỉnh này thôi là cũng có thể đại diện cho 1 HCN được rồi. Ta sẽ có 2*N đỉnh và 1 dãy C1,…C2*N-1( tất nhiên dãy này đã sắp xếp theo thứ tự tăng dần). Gọi tập 2*N đỉnh này là tập đỉnh HCN. Ta sắp xếp 2*N đỉnh theo thứ tự tăng dần của hoành độ. Bây giờ ta sẽ tính diện tích bằng cách tính tổng diện tích của các khe ( hoành độ ) giữa 2 điểm liên tiếp trong số 2*N điểm nói trên. Ta xét tuần tự các khe từ khe 1 -> khe 2*N-1. Với dãy C ta sẽ tổ chức 1 cây nhị phân đầy đủ như sau : ….. Trong đó đỉnh 1 lưu số phần bị phủ lên tung độ từ C1 -> C2*N. đỉnh 2 lưu số phần bị phủ lên phủ lên tung độ từ C1 -> CN, đỉnh 3 lưu số phần bị phủ lên tung độ từ CN+1 -> C2*N. đỉnh 4 lưu số phần bị phủ lên tung độ từ C1 -> CN div 2, đỉnh 5 lưu số phần bị phủ lên tung độ từ CN div 2+1 -> CN , đỉnh 6 lưu số phần bị phủ lên tung độ từ CN+1 -> CN+N div 2 , đỉnh 7 lưu số phần bị phủ lên tung độ từ CN+N div 2 +1 -> C2*N. v.v… Trang 2 1 2 3 6 74 5
  • 3. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu Với mỗi đỉnh trên cây nhị phân này ta có 2 thông số cần lưu đó là số HCN đang phủ lên đoạn này và phủ lên là bao nhiêu . Bây giờ ta sẽ xét 2*N đỉnh trong tập các đỉnh của HCN. Xét tới khe L ( hoành độ ) giữa đỉnh i và i+1 ta làm như sau : Nếu đỉnh i là đỉnh Mở của một HCN R , nó có tung độ là Y1 , tung độ của đỉnh còn lại là Y2, tức là hiện thời nó sẽ phủ lên đoạn từ Y1 -> Y2 ( tung độ ). Ta xét đoạn Y1 -> Y2 này trên cây nhị phân mà ta vừa dựng xong. Xét tới nút P của cây, ( nút P này phủ từ CS -> CF ): •Nếu Y1 <= CS , CF <= Y2 thì ta có thể thấy là HCN R này đã phủ lên toàn bộ tung độ trong đoạn từ CS -> CF trong khe L này. -> Ta sẽ phải sửa lại thông số của nút P này đó là tăng số HCN phủ đoạn này lên 1 và cho biết đoạn này đã bị phủ toàn bộ = CF – CS. •Nếu Y1 >= CF hoặc Y2 <= CS thì suy ra đoạn Y1- > Y2 này hoàn toàn chẳng phủ gì lên đoạn CS -> CF cả -> Ta không phải xét tới các nút con của nó nữa. •Nếu đoạn [Y1,Y2] ∩ [CS,CF] ≠ ∅ thì ta sẽ gọi tới các nút con của nó, xét tiếp các nút con của nó với đoạn Y1,Y2 này. Chương trình 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 ; { tức là nút P này là nút 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 ; Nếu đỉnh i là đỉnh Đóng của một HCN R , nó có tung độ là Y2 , tung độ của đỉnh còn lại là Y1, tức là hiện thời nó sẽ phủ lên đoạn từ Y1 -> Y2 ( tung độ ). Ta xét đoạn Y1 -> Y2 này trên cây nhị phân : Xét tới nút P của cây, ( nút P này phủ từ CS -> CF ): •Nếu Y1 <= CS , CF <= Y2 thì ta có thể thấy là HCN R này đã phủ lên toàn bộ tung độ trong đoạn từ CS -> CF trong khe L này. -> Ta sẽ phải sửa lại thông số của nút P này đó là giảm số HCN phủ đoạn này lên 1 , tức là một hình chữ nhật đã không còn phủ lên đoạn này nữa. Nếu như số HCN phủ lên đoạn này = 0 -> Đoạn này sẽ bị phủ lên một đoạn = tổng số phần bị phủ của 2 nút con của nó . ngược lạI ta không cần phải xét tới nút con của nó nữa Trang 3
  • 4. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu •Nếu Y1 >= CF hoặc Y2 <= CS thì suy ra đoạn Y1- > Y2 này hoàn toàn chẳng phủ gì lên đoạn CS -> CF cả -> Ta không phải xét tới các nút con của nó nữa. •Nếu đoạn [Y1,Y2] ∩ [CS,CF] ≠ ∅ thì ta sẽ gọi tới các nút con của nó, xét tiếp các nút con của nó với đoạn Y1,Y2 này. Chương trình 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 { Tức là P là nút 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ư vậy Biphu[1] cho ta biết tới khe L này thì tung độ từ C1 -> C2*N đã bị phủ là bao nhiêu , diện tích bị phủ khe L = Độ rộng * Biphu[1] . Sau đây là chương trình mô tả đoạn này : 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ể khẳng định thuật toán này là hoàn toàn đúng đắn bởi khi ta xét tới 1 điểm Đóng i thì chắc chắn tồn tại 1 điểm Mở j đã xuất hiện trước đó , và 2 điểm i và j này là đại diện cho 1 HCN R , HCN R này có hoành độ bắt đầu từ điểm j và kết thúc ở điểm i, nên chừng nào chưa xét tới điểm i thì HCN R này vẫn tồn tại , vẫn phủ lên 1 số đoạn nào đó Trang 4
  • 5. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu của tung độ. Mỗi khi ta gặp 1 điểm Mở tức là gặp 1 HCN có cạnh bên trái có hoành độ = điểm đang xét , và khi gặp một điểm Đóng tức là 1 HCN đã bị loại khỏi vùng đang xét và sẽ không được xét tới sau này nữa. Như vậy bài toán đã được giải quyết. Với mỗi lân cập nhật đỉnh i vào cây nhị phân ta mất logN bước, có tất cả 2*N đỉnh -> cấp độ thuật toán O(2*NlogN), đúng như đã nói ở trên ở đây ta chỉ xét mỗi HCN thông qua 2 điểm , mỗi điểm đúng 1 lần. Ý nghĩa cây nhị phân : Như vậy ta có thể thấy mỗi nút P của cây nhị phân đại diện cho một đoạn , mà giá trị của nó = tổng giá trị của các đoạn con . Bởi vậy nó giúp ta không phải truy xuất tới tất cả những nút mà chỉ thông qua một số nút cha mà thôi. ( Ví dụ ở đây là Y1 <= C[S] , C[F] <= Y2 , tức là đã phủ lên cả đoạn rồi , không phải xét các đoạn con làm gì nữa ) Interval Tree : Cây nhị phân mà ta sử dụng trong bài tập nói trên chính là Interval Tree. Vậy khái quát lại thì Interval Tree là gì ? Đó là một cây nhị phân mà mỗi nút đại diện cho một “đoạn “ hay một dãy các phần tử liên tiếp có chung một tính chất nào đó và các nút con của nó đại diện cho một đoạn nhỏ hơn. Khi ta muốn đếm , liệt kê xem một đoạn cho trước có bao nhiêu phần tử thoả mãn một tính chất X ( biểu diễn trên máy tính được , thông thường chỉ là quan hệ > hoặc <) cho trước, thì khi xét tính chất này trên một nút của cây nhị phân thì xảy ra 3 tình huống : Cả đoạn đều thoả mãn tính chất này , khi đó số phần tử thoả mãn trong đoạn đó = số phần tử của đoạn. Cả đoạn đều không thoả mãn tính chất -> số phần tử thoả mãn trong đoạn đó = 0. Có một số phần tử thoả mãn và các phần tử này nằm liên tiếp nhau trong đoạn đang xét. Khi đó ta sẽ lại phải kiểm tra với 2 nút con của nó. Nút con trái = nửa đoạn bên trái , nút con phải = nửa đoạn bên phải. Khi muốn cập nhật thêm phần tử hay giảm vào đoạn ta cũng làm như vậy . Về mặt dung lượng bộ nhớ thì Internval Tree cần 2*N phần tử ( = số nút của cây ) nhưng có thể có nhiều trường hợp bị suy biến nên tốt nhất nên để 4-> 8*N . Tuy nhiên nói thì là như vậy nhưng ta cũng cần làm nhiều bài tập mới có thể nắm rõ , sử dụng thuần thục nó được. II . Binary Index Tree : Binary Index Tree cũng là một mô hình cây và nó cũng không khác Interval Tree về mục đích sử dụng , lấy dữ liệu được cập nhật từ nút con… . Về nguyên tắc thì bất cứ bài nào giải được bằng Binary Index Tree cũng đều đưa về Interval Tree được nhưng chưa chắc đã có chiều ngược lại ( theo ý kiến chủ quan của mình ) . Thuật toán cũng chỉ có cấp độ O(NlogN) nhưng tốt hơn ở chỗ là nó không cần lưu tất cả 2*N nút mà chỉ lưu N nút mà thôi.Sau đây là mô hình của cây Binary Index Tree : Trang 5
  • 6. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu Mỗi nút X ở đây đại diện cho các cho nút X và các nút con của X. Rõ ràng ta thấy mô hình của nó khác hẳn so với mô hình của cây nhị phân . Sau đây là mô tả chi tiết đồ thị : + Nếu đồ thị chỉ có 1 nút -> không có cung nào cả. + Nếu nút i lẻ , nó sẽ có cung nối với nút i+1 ( là nút chẵn ) . + Không xét các đỉnh lẻ nữa , các đỉnh chẵn còn lại sẽ được đánh số lại ( ngầm định trong đầu thôi ), số thứ i = i shr 1 . Quay lại bước 1. Trong Binary Index Tree , để biết được nút i có cha là nút nào người ta sử dụng công thức đã được CM như sau : Cha(i) = i + i and ( i xor ( i-1) ) ; Mỗi khi cập nhật một phần tử ở có giá trị tương ứng là X ta sẽ tăng số phần tử = X lên: A[x] := A[x] + 1 và gửi thông báo lên cho cha của nó , cha của nó lại tiếp tuc gửi lên cho tới khi nào > N thì thôi. Mỗi lần gửi thông báo , ta lại tăng số phần tử của cha nó lên , tức là A[cha] := A[cha] + 1 . Như vậy cũng có nghĩa là A[x] của ta lưư lại số phần tử có giá trị x và số phần tử của các con của nó. Và để kiểm tra xem từ 1 -> X có bao nhiêu phần tử người ta sử dụng một cách thức đệ quy rất thông minh như sau : Số phần tử 1 -> X = Số phần tử lưu được ở nút X + Số phần tử 1 -> ( X – X and ( X xor ( X-1) ) ) . Ví dụ mhư muốn biết có bao nhiêu phần tử ở <= 11 chẳng hạn : Số phần tử = A[11] + Số phần tử( 1 => 11 – 11 and (11 xor 10) ) . = A[11] + Số phần tử( 1 => 10 ) . = A[11] + A[10] + Số phần tử (1 => 8) ; = A[11] + A[10] + A[8] + Số phần tử ( 1 => 0) = A[11] + A[10] + A[8]. ( hoàn toàn chính xác , nhìn vào hình vẽ ). Trang 6 1 5 7 3 9 11 2 6 14 4 12 8 10 13 15 16
  • 7. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu Cấp độ của Binary Index Tree đã được CM rằng luôn luôn nhỏ hơn O(NlogN) , bởi vậy chương trình chạy rất nhanh , hơn nữa lại còn nhanh hơn rất nhiều so với dùng Interval Tree, bộ nhớ sử dụng cũng ít hơn . B. Bài tập ứng dụng : Bài 1 : Electronic Auction ( Đấu giá lợn sắt ) Có một sự thiếu hụt lợn sắt ở một đất nước nọ. Bởi vậy lợn sắt được bán đấu giá. Chúng được bán ở các phiên đấu giá điện tử . Khách hàng khi đến mua có quyền đặt giá của mình . Họ sẽ thông báo cho ban quản lý giá của mình sẵn sàng đưa ra để mua về một con lợn sắt ( số tiền này nằm trong khoảng 0.01 VND -> 10000.00 VND và luôn có chính xác 2 chữ số sau dấu phẩy, tức là không bao giờ có chuyện khách hàng đặt giá là 0.211 hay 3.412 mà chỉ có thể là 0.21 hoặc 3.41 mà thôi ). Hết lần này tới lần khác những người bán sẽ đưa ra K con lợn để đấu giá , và mỗi con lợn sẽ được bán cho K người đầu tiên trả giá >= X. Nếu như không có đủ K người thì số lợn còn lại sẽ bị chuyển tới nước khác ngay lập tức , và không được bán tiếp trên đất nước này nữa . Khách hàng cũng có thể thông báo huỷ bỏ cái giá mà mình đã đưa ra . Sau mỗi cuộc giao dịch , khách hàng vẫn tiếp tục mua bán tiếp với cái giá mà họ đã thông báo cho tới khi nào họ thông báo huỷ bỏ giá mà mình đưa ra thì thôi. Mỗi con lợn sắt được bán thì ban quản lý đấu giá được nhận hoa hồng là 0.01 VND. Hãy tính xem sau khi kết thúc tất cả các cuộc giao dịch thì ban quản lý lãi bao nhiêu tiền. Giới hạn : Freepascal : + Số dòng trong file Input <= 100000 dòng. + Time limit 0.5 s , bộ nhớ 5000 KB. Turbo Pascal:+ Số dòng trong file Input <= 60000 dòng. Giá tiền giảm xuống <= 300. + Time limit 0.5 s , bộ nhớ 200KB . INPUT Gồm nhiều dòng , mỗi dòng có thể có dạng 1 trong 3 trường hợp sau : "BID X " : Cho biết vừa có thêm 1 người thông báo giá của mình là X VND. "DEL X" : Cho biết vừa có 1 người thông báo huỷ cái giá X mà mình đã đưa ra. "SALE X K" : Cho biết có một người bán vừa quyết định dem bán K con lợn sắt với cái giá ít nhất cho mỗi con lợn là X VND. K người đầu tiên trả giá >= X sẽ được mua mỗi người 1 con. Dòng cuối cùng ghi 1 từ duy nhất "QUIT" thông báo đã kết thúc tất cả các phiên giao dịch, các cuộc mua bán đều đã kết thúc . OUTPUT 1 số thực duy nhất ( cũng ghi chính xác 2 chữ số sau dấu phẩy ) là lãi mà ban quản lý thu được . Ví dụ : Input Output BID 0.01 BID 10000 BID 5000 0.06 Trang 7
  • 8. Chuyên đề cấu trúc dữ liệu đặc biệt Nguyễn Minh Hiếu BID 5000 SALE 7000 3 DEL 5000 SALE 3000 3 SALE 0.01 3 QUIT Giải thích : - 4 dòng đầu tiên cho biết có 4 người đã đưa ra giá của mình, đó là các giá 0.01 , 10000 , 5000 , 5000. - Dòng thứ 5 cho biết có một người đã đem bán 3 con lợn mỗi con giá tối thiểu là 7000 VND.->Chỉ có 1 người mua là người đặt mức giá 10000, còn lại 2 con lợn sẽ bị chuyển đi, không bán nữa -> Lãi 0.01 đồng. - Dòng thứ 6 cho biết có một người đã huỷ bỏ cái giá 5000 VND mà anh ta đưa ra. Tức là lúc này chỉ còn lại 3 người với 3 mức giá 0.01 , 10000 , 5000 VND. - Dòng thứ 7 cho biết có một người đã đem bán 3 con lợn mỗi con giá tối thiểu là 3000 VND.->Chỉ có 2 người mua là người đặt mức giá 10000 và 5000, còn lại 1 con lợn sẽ bị chuyển đi, không bán nữa -> Lãi 0.02 đồng. - Dòng thứ 8 cho biết có một người đã đem bán 3 con lợn mỗi con giá tối thiểu là 0.01 VND.->Có 3 người mua là người đặt mức giá 10000 ,0.01 và 5000-> Lãi 0.03 đồng. - Dòng 9 Cho biết các phiên giao dịch đã kết thúc . - Vậy tổng lãi sẽ là 0.01 + 0.02 + 0.03 = 0.06 VND. Thuật giải : Đây là một bài điển hình cho việc sử dụng Binary Index Tree, nếu biết sử dụng khéo thì cũng có thể sử dụng Interval Tree được. Trang 8