các thuật toán cấu trúc dữ liệu đặc biệt , giúp ích cho các kì thi lập trình.Sách được viết bời thầy Lê Minh Hoàng và một số thầy khác .Sách được phổ biến trong cuộc tập huấn Giáo Viên , Sách không những có lí thuyết đầy đủ dễ hiểu mà còn giải một lớp bài giúp người đọc hiểu thêm về cấu trúc đặc biệt rõ hơn
Cây quản lý phạm vi này gii thiu cây qun lý phm vi (range trees). t cu trúc d liu quan trng, có nhiu ng dng trong các thut toán hình hc, truy v d liu và x lý tín hiu. Cây qun lý ph cp nhiu trong các k thi olympic tin hc trong kho l 1. Giới thiệu Gi s ta có m d liu cha h a các nhân viên trong mt công ty, thông tin v mi nhân viên là mt bn ghi gm nhia chp b d liu này luôn bing bi các lnh thêm/bt/cp nht b i truy vn d m s i tui t 40 ti 50 và có m tháng t 3 triu ti 5 triu Tính ta nhi có thâm niên công tác t 10 lên và có t 2 ti 4 con Dng bài toán qung và tr li các dng truy vn k trên có th mô i dng hình hc: Chng hn ta có th biu din mi nhân viên bi mm trên mt phng t vi trc t là tui và trc t là mm s tui t 40 ti 50 và có m 3 ti 5 tri din gii thành: m s m có t (Xem Hình 1) Hình 1 Bài toán truy vn phm vi có th phát biu hình thn qun lý mt tp các ng biu din bi các m trong không gian chiu, mi m ngoài t ca nó còn có th cha thêm mt s thông tin khác * . Tp liên tc bing bi phép thêm/bi các truy vn. Mi truy vn, cho bi phm vi là mt siêu hp , yêu cu tr li v thông tin tng hp t tt c m nm trong siêu hp . này, ta quan tâm ti các dng thông tin tng hp có tính cht trc là nu và là hai tm ri nhau thì thông tin tng hp t m có th d c t thông tin tng hp trên và thông tin tng hp trên v d liu nhân s, ta có th d c: S i trong tp bng cách ly s i trong cng s i trong . a nt trong tp , có th nh bng công thc S u tp ch g lc tt c nhm nm trong phm vi truy vn và tng hp thông tin t nhm m ln, mc dù phép thêm bm có th thc hin * Trong CSDL quan h, mt s ct s nh làm t và nhng ct còn li s c coi là thông tin cn truy vn tùy theo tng ng dng c th. Ο 40 50 3.000.000 5.000.000 nhanh (thi gian nu s dng cu trúc d ling), thi gian truy vn tr nên rt chm (mt thi gian tr li mi truy vn vi là s m trong và là s chiu ca không gian). Cây qun lý phm vi là mt cu trúc d liu hiu qu gii quyt bài toán trên, nó cho phép thc hin mi phép thêm, bt, cp nht, truy vn trong thi gian , thích hp vi x lý d liu lng t chm so vi ng khi Trong các phn tip theo, phn 2 kho sát mt s cu trúc d liu và thut toán gii quyt bài toán truy vn phm vi 1 chiu. Phn 3 m rng các cu trúc d liu cho truy vn phm vi nhiu chiu. Phn 4 là mt s bài toán ng dng, m rng ca cây qun lý phm vi, cui cùng là kt lun và danh mc tài liu tham kho. 2. Truy vấn phạm vi một chiều 2.1. Cây nhị phân tìm kiếm t nh biu din danh sách là s dng mng hoc danh sách móc ni. S dng mng có t tt vi phép truy cp ngu nhiên b chm nu danh sách luôn b bi ng bi các phép dng danh sách móc ni có th thun ti trong các phép chèn/xóa thì li g m trong phép truy cp ngu nhiên. Trong mc này chúng ta s trình bày mu din danh sách bng cây nh p ngu nhiên, chèn, xóa và truy vn c thc hin trong thi gian . N c trình bày qua mt bài toán c th: Bài toán (Range Query): Cho mt danh sách cha các s nguyên. Ký hiu là s phn t trong danh sách. Các phn t liên tip bu t 1. Bu vi mt danh sách rng, xét các phép bii danh sách Phép chèn : Chèn mt s vào v trí ca danh sách. ng hp thì s c thêm vào cui danh sách. Phép xóa : Xóa phn t th trong danh sách. Phép cp nht : t phn t th bng . Phép truy vn : Tr v tng các phn t nm trong phm vi t ti Yêu cu: Cho dãy phép bic thc hin tun t, hãy tr li tt c các truy vn Input Dòng 1 cha s dòng tip, mi dòng cho thông tin v mt phép bii. Mi dòng bt u bi mt ký t Nu ký t u dòng là thì tip theo là hai s nguyên ng vi phép chèn ( ) Nu ký t u dòng là thì tip theo là s nguyên ng vi phép xóa . Nu ký t p theo là hai s nguyên ng vi phép cp nht ( ) Nu ký t p theo là hai s nguyên ng vi phép truy vn () Output Tr li tt c các truy vn , vi mi truy vn in ra câu tr li trên 1 dòng Sample Input Sample Output 11 I 1 8 {8} I 1 3 {3 8} I 3 6 {3 8 6} I 3 2 {3 8 2 6} Q 1 3 U 3 4 {3 8 4 6} I 2 5 {3 5 8 4 6} D 1 {5 8 4 6} Q 2 4 U 1 7 {7 8 4 6} Q 1 4 13 18 25 2.1.1. Biểu diễn danh sách Chúng ta s các phn t ca danh sách trong mt cu trúc cây nh phân sao cho nu duyt cây theo thứ tự giữa thì các phn t ca s c lit t trong danh sách. Cây nh t bi mt cu trúc liên kng và con trng chính ca cách tip cn này là đồng bộ thứ tự của danh sách trừu tượng với thứ tự giữa của cây, quy việc chèn xóa trên về việc chèn xóa trên cây nhị phân. Có mt s ng gia cu trúc d liu này và cây nh phân tìm kim (binary search trees – BST): Nu danh sách trng gm các phn t p xn thì t nhiên cây biu din danh sách tr thành cây nh phân tìm kim. Nu duyt cây nh phân tìm kim theo th t gin các khóa tìm kim, còn nu duyt cây biu din danh sách theo th t gia ta s c danh sách . Có th có nhiu cu trúc cây nh phân tìm kim ng vi mt tp khóa tìm ki y có nhiu cu trúc cây biu din danh sách ng vi danh sách . ng cây biu din danh sách có th k tha t cây nh phân tìm kim bi các k thut cân bng cây nh phân tìm kim luôn bo tn th t gia cng vi th t n ca các khóa tìm king b th t danh sách vi th t gia ca các nút trên cây ch không phi là th t c hay th t sau. Chính vì có nhing gia cu trúc cây biu din danh sách và cây nh phân tìm kim, tcây nh phân tìm kim binary search trees (BST) cho cu trúc d liu này. 2.1.2. Cấu trúc nút Có th thy rng khi duyt cây theo th t gia thì các nút mt nhánh cây s c lit kê trong mn liên tip, không có nút nhánh khác xen vào. Nói cách khác, bn cht mi nhánh cây là mn các phn t liên tip trong danh sách trng . i ý cho vi thêm nhng thông tin tng hp v n liên tip này ti nhng mng hp c th này, mi nút s cha thêm 2 thông tin: S nút trong nhánh gc thc hin phép truy cp ngu nhiên) và tng các phn t trong nhánh gc tr li truy vn tng). Tóm li, mi nút trên cây là mt bn ghi gng: ng : Cha phn t ng Cha liên kt (con tr) ti nút cha, nu là nút gc (không có nút ng t bng mt con tr c bit, ký hiu . ng : Cha liên kt (con tr) ti nút con trái, nu nút không có nhánh con trái thì tng t bng . ng : Cha liên kt (con tr) ti nút con phi, nu nút không có nhánh con phng t bng . Trng cha s nút trong nhánh gc ng cha tng phn t cha trong nhánh gc Hình 2. Cây biu din danh sách gm 7 phn t (1, 7, 3, 6, 5, 4, 2) 1 7 3 6 5 4 2 type PNode = ^TNode; //Kiểu con trỏ tới một nút TNode = record key: TKey; P, L, R: PNode; len: Integer; sum: Int64; end; var sentinel: TNode; nilT: PNode; //Con trỏ tới nút đặt biệt root: PNode; //Con trỏ tới nút gốc begin nilT := @sentinel; nilT^.size := 0; nilT^.sum := 0; end. Các ngôn ng lp trình bng cung cp hng con tr (hay gán cho các liên kt không tn ti trong cu trúc d liu. Hng con tr ch c s dng so sánh vi các con tr c phép truy cp bin ng . t cây nh phân, chúng ta s dng con tr gán cho nhng liên kt không có thc (công d ). Ch có khác là con tr tr ti mt bin có thực m ng ca là vô nghĩa. Chúng ta hy sinh mt ô nh cho bin n hóa các thao tác trên cây * . Th tc ng hp các thông tin trong t nhng thông tin ph tr trong hai nút con: procedure Update(x: PNode); begin x^.len := x^.L^.len + x^.R^.len + 1; //Tính số nút trong nhánh x x^.sum := x^.L^.sum + x^.R^.sum + x^.value; //Tính tổng các phần tử trong nhánh x end; c và . d trình bày các thao tác, ta vit sn các th tc móc ni các nút: Th tc cho làm con trái , th tc cho làm con phi * Ma bi bm tra con tr c khi truy cp nút . procedure SetL(x, y: PNode); begin y^.P := x; x^.L := y; end; procedure SetR(x, y: PNode); begin y^.P := x; x^.R := y; end; 2.1.3. Truy cập ngẫu nhiên C các phép biu có mt tham s v trí, vy viu tiên là phng vi v trí trong danh sách trng là nút nào trong cây. Theo nguyên lý ca phép duyt cây theo th t gia (duyt nhánh t nhánh phi), thu ng vi v trí có th din t tìm nút th trong nhánh cây gc c hnh là s th t ca nút gc (theo th t gia): Nu thì nút cn tìm chính là nút . Nu thì quy v tìm nút th trong nhánh con trái ca . Nu thì quy v tìm nút th trong nhánh con phi ca . S c l ng vi v trí có th tính b sâu ca nút kt qu cng thêm 1. Phép truy cp ng t bng hàm : Nhn vào nút và mt s nguyên , tr v ng vi v c . function NodeAt(x: PNode; i: Integer): PNode; var ord: Integer; begin repeat ord := x^.L^.len + 1; //Xác định số thứ tự nút x if ord = i then Break; //Nút cần tìm chính là x if i < ord then //Quy về tìm nút thứ i trong nhánh con trái x := x^.L else //Quy về tìm nút thứ i – ord trong nhánh con phải begin i := i - ord; x := x^.R; end; until False; Result := x; end; 2.1.4. Vấn đề cân bằng cây Thao tác truy cp ngu nhiên thc hin mt phép di chuyn t gc xung mt nút mang s th t nh, nu cây nh phân suy bin, phép truy cp ngu nhiên không khác gì phép truy cp tun t trên danh sách móc ni và tr nên kém hiu qu. Rt may mn là ta có nhbng cây. Nhc gi cho chiu cao cây là mng vi là s nút trên cây, hom bo cho dãy thao tác truy cp ngu nhiên c thc hin trong thi gian . Nh bc k tha t các cu trúc d liu cây nh phân tìm kim t cân bng (self-balancing binary search trees Treaps, cây nh phân tìm kim ng Hu ht các k thut cân bc thc hin bi phép quay cây, có hai loi: quay phi (right rotation) và quay trái (left rotation). Nu là con trái ca , phép quay phi theo liên kt ct nhánh con phi ca làm con trái ca làm con phi ca . Nút c y lên làm gc nhánh thay cho nút Hình 3, có th thy rng phép quay phi bo tn th t gia . c li, nu là con phi ca , phép quay trái theo liên kt vi ct nhánh con trái ca làm con phi ca làm con trái ca y lên làm nút nhánh thay cho nút Hình 3 thy rng phép quay trái bo tn th t gia . Hình 3. Phép quay cây Ta vit mt thao tác t i , và , phép s quay theo liên kt y nút lên phía gc cây sâu ca gim 1) và kéo nút xut mc làm con nút . Chú ý là sau phép , ta ch cn cp nht thông tin ph tr ca nút và p nht thông tin ph tr ca nút ng ng ), thông tin ph tr trong các núi. Quay phi Quay trái [...]... thông qua các đoạn sơ cấp, ngoài ra việc cài đặt dễ dàng cũng là một ưu điểm của cấu trúc dữ liệu này Ta giới hạn lại bài toán Range Query trong trường hợp đặc biệt: không có phép chèn và xóa phần tử để khảo sát cấu trúc dữ liệu cây quản lý đoạn Bài toán: (Range Query 2) Cho một dãy gồm ( Phép cập nhật Phép truy vấn Yêu cầu: Cho dãy ( số nguyên ( ) Xét hai phép biến đổi: ): Đặt ): Trả về tổng các... một dạng cấu trúc dữ liệu khác cũng cung cấp các chức năng tương đương Trong mục này, ta đơn giản hóa cấu trúc segment trees để giải quyết bài toán truy vấn phạm vi Điều này làm cho cây quản lý đoạn chỉ giống với segment trees ở hình ảnh biểu diễn còn các thuộc tính và phương thức trở nên đơn giản và “yếu” hơn nhiều so với cấu trúc nguyên thủy, theo nghĩa không trả lời được những truy vấn khó như cấu. .. minh được rằng cây Splay có thời gian thực hiện giải thuật trên một dãy thao tác chèn/xóa/tìm kiếm tương đương với cây nhị phân tìm kiếm tối ưu khi đánh giá bằng ký pháp O lớn (dĩ nhiên là sai khác một hằng số ẩn trong ký pháp O) 2.2 Cây quản lý đoạn Segment trees [2] là một cấu trúc dữ liệu ban đầu được thiết kế cho các ứng dụng hình học Cấu trúc này khá phức tạp và được sử dụng để trả lời nhiều loại... biểu diễn số nguyên có dấu Khi biểu diễn một số nguyên bằng dãy đánh số từ 0 tới bit: thì các bit được theo thứ tự từ phải qua trái, gọi là thứ tự từ bit thấp nhất ( ) tới bit cao nhất ( ) Mỗi giá trị thuộc một kiểu số nguyên được biểu diễn trong máy tính bằng một dãy bit chiều dài cố định, nhưng tùy theo kiểu số nguyên, việc giải mã dãy bit ra giá trị số có sự khác nhau Cơ chế biểu diễn số nguyên... Hình 10 Một số ví dụ về cây nhị thức Cây nhị thức thường được sử dụng để cài đặt binomial heaps [9] và fibonacci heaps [6] Dưới đây ta sẽ trình bày một phương pháp đánh số các nút trên cây nhị thức để giải quyết bài toán truy vấn phạm vi [5] Do phương pháp này sử dụng biểu diễn nhị phân để quản lý chỉ số, tác giả đã đặt tên cho nó là cây chỉ số nhị phân (binary indexed trees - BIT) một số tài liệu còn... -26 tùy theo kiểu số nguyên trên từng toán hạng Byte (không dấu) hay ShortInt (có dấu)* Một số công thức biến đổi bit: Phép cộng 1 Để tăng một số nguyên lên 1, máy sẽ xét dãy bit biểu diễn số nguyên đó, tìm bit 0 thấp nhất thay bởi bit 1 và đặt tất cả các bit đứng sau thành 0 Ví dụ khi cộng 1 vào số , máy xác định bit 0 cuối cùng (bit số 2) thay bởi 1 và đặt các bit đứng sau (bit số 0, 1) thành 0,... là nút có số nút con (bậc) lớn nhất Nếu ta ta đánh số các nút con của nút gốc theo thứ tự từ trái qua phải bởi các số nguyên , 2,…,0 thì nút con thứ là gốc của một cây nhị thức Định lý 3 có thể dễ dàng chứng minh bằng quy nạp Tên gọi cây nhị thức xuất phát từ tính chất thứ ba ( ) là hệ số nhị thức (số tổ hợp chập phần tử) của tập gồm Cây nhị thức là một cây có tính thứ tự (các nút con của một nút được... dữ liệu trong hình học tính toán Cấu trúc mà mục này nói đến, tôi tạm gọi là cây quản lý đoạn, chỉ là một hạn chế của interval trees hay segment trees trong trường hợp cụ thể Mọi bài toán giải quyết được bằng cây quản lý đoạn đều có thể giải được bằng cấu trúc dữ liệu đã trình bày ở mục 2.1, tuy nhiên điều ngược lại không đúng Mặc dù vậy, cây quản lý đoạn cung cấp một cách quản lý mới thông qua các... qua số lần thực hiện thao tác và số lời gọi hàm Nhận xét rằng mỗi khi phép truy cập phần tử đi từ gốc xuống một nút thì ngay sau đó là một lệnh chuyển nút đó lên gốc Chính vì vậy thời gian thực hiện giải thuật có thể đánh giá qua dãy các thao tác , số thao tác cần thực hiện là một đại lượng ( ) Các nghiên cứu lý thuyết đã chỉ ra rằng một phép thực hiện riêng rẽ có thể mất thời gian ( ) với là số nút... của nó quản lý các ⌊( ) 2⌋ Nếu một nút chỉ quản lý một đối tượng thì nó sẽ là nút lá và không có nút con Trong một số trường hợp cần tăng tốc thuật toán, mỗi đối tượng sẽ [ ] trỏ tới nút lá quản lý trực tiếp đối tượng được gắn với một con trỏ Để thuận tiện cho trình bày, với mỗi nút ta lưu thêm hai chỉ số biết quản lý các phần tử từ trong mảng từ chỉ số tới chỉ số và cho Hình 6 là ví dụ về cây