Việc xoỏ trong cõy tứ phõn là rất phức tạp. Hỡnh 2.7 chỉ ra tại sao lại phức tạp. Đầu tiờn mỗi nỳt trong cõy tứ phõn thể hiện một vựng và vựng này được định nghĩa hơi khỏc hơn so với cõy 2-d. Đối với cõy 2-d nú đủ để kết hợp 4 ràng buộc dưới dạng xc1, x<c2, yc3, y<c4 với cỏc hằng số c1,..., c4. Do đú như trong trường hợp cõy 2-d khi mà chỳng ta mở rộng nodetype thành cấu trỳc nỳt mới
newnodetype, chỳng ta cũng cú thể mở rộng cấu trỳc nỳt qtnodetype thành một cấu trỳc nỳt mới newqtnodetype với cựng kiểu trường như trờn đõy (XLB, YLB, XUB, YUB). N.NW N.SW N.NE N.SE Gốc Nỳt N Vựng biểu diễn bởi nỳt N
newqtnodetype = record INFO: infotype; XVAL, YVAL : real;
XLB, YLB, XUB, YUB : real -, +; NW, SW, NE, SE : newqtnodetype
end
Khi chốn nỳt N vào cõy T chỳng ta cần đảm bảo những điểm dưới đõy: 1. Nếu N là gốc của cõy T, thỡ N.XLB=-, N.YLB=-, N.XUB=+, và N.YUB=+. 2. Nếu P là cha của N thỡ khi đú bảng dưới đõy mụ tả những giỏ trị của cỏc trường XLB, YLB, XUB, YUB của N tuỳ thuộc vào việc N là con NW, SW, NE hay SE của P. Chỳng ta sử dụng ký hiệu w=(P.XUB–P.XLB) và h=(P.YUB – P.YLB).
Bảng 2.1 Cỏc trường hợp của phộp chốn vào cõy tứ phõn điểm
Để vận dụng thành cụng kỹ thuật xoỏ trong với cõy tứ phõn điểm thỡ khi xoỏ một nỳt trong N ta phải tỡm một nỳt thay thế R từ một trong cỏc cõy con của N (từ một trong N.NW, N.SW, N.NE, N.SE) sao cho mỗi nỳt R1 trong N.NW là ở phớa tõy bắc của R, mỗi nỳt R2 trong N.SW ở phớa tõy nam R, mỗi nỳt R3 trong N.NE ở phớa đụng bắc của R và mỗi nỳt R4 trong N.SE ở phớa đụng nam của R.
Hóy xem xột cõy tứ phõn trờn hỡnh 2.6 và hỡnh 2.7. Giả sử chỳng ta muốn xoỏ Banja Luka từ cõy tứ phõn này. Trong trường hợp này, nỳt thay thế thực tế được tỡm là Teslic. Khụng nỳt nào khỏc thoả món những điều kiện đó đặt ra ở trờn.
Tuy nhiờn, khụng phải luụn cú khả năng tỡm được một nỳt thay thế. Do vậy trong trường hợp xấu nhất việc xoỏ một nỳt N cú thể yờu cầu việc chốn lại một số nỳt trong cõy con trỏ bởi N.NE, N.SE, N.NW và N.SW. Trong phần sau ta sẽ khảo sỏt cõy tứ phõn MX cho phộp xúa nỳt một cỏch dễ dàng hơn.
Trường hợp
N.XLB N.XUB N.YLB N.YUB
N= P.NW P.XLB P.XLB+w0.5 P.YLB+h0.5 P.YUB
N= P.SW P.XLB P.XLB+w0.5 P.YLB P.YLB+h0.5
N= P.NE P.XLB+w0.5 P.XUB P.YLB+h0.5 P.YUB
2.3.3. Truy vấn khoảng trong cõy tứ phõn điểm
Cỏc truy vấn khoảng trong cõy tứ phõn được thực hiện gần như cỏch thức thực hiện trong cõy 2-d. Mỗi nỳt trong một cõy tứ phõn thể hiện một vựng và phương phỏp tớnh túan và truy vấn khoảng trỏnh việc tỡm kiếm cỏc cành bắt nguồn từ những nỳt mà cỏc vựng liờn quan đến chỳng khụng giao với đường trũn định nghĩa bởi truy vấn khoảng. Đại thể như nếu chỳng ta đang tỡm kiếm cõy tứ phõn điểm bắt nguồn từ T với tất cả cỏc điểm trong một đường trũn C, tõm (xc, yc) và cú bỏn kớnh là r, giải thuật được nờu ra như sau:
Giải thuật 2.1
proc RangeQueryPointQuadtree(T: newptnodetype, C: circle) 1. If region(T) C = then Halt
2. else
(a) If (T.XVAL, T.YVAL) C then print (T.XVAL, T.YVAL); (b) RangeQueryPointQuadtree(T.NW, C);
(c) RangeQueryPointQuadtree(T.SW, C); (d) RangeQueryPointQuadtree(T.NE, C); (e) RangeQueryPointQuadtree(T.SE, C); End proc
2.4. Cõy tứ phõn matrix MX (MX-Quadtrees)
Trong cả hai trường hợp cõy 2-d và cõy tứ phõn điểm, hỡnh thự của cõy phụ thuộc vào thứ tự cỏc đối tượng được chốn vào cõy. Đặc biệt, thứ tự ảnh hưởng đến chiều cao của cõy, do đú ảnh hưởng đến độ phức tạp của cỏc thao tỏc tỡm kiếm và chốn. Mỗi nỳt N của cõy 2-d và cõy tứ phõn điểm biểu diễn vựng và phõn chia vựng thành 2 (trường hợp cõy 2-d) hoặc 4 (trường hợp cõy tứ phõn) vựng con. Việc phõn chia cú thể khụng đều vỡ nú phụ thuộc vào vị trớ điểm (N.XVAL, N.YVAL) trong vựng biểu diễn bởi N.
Ngược lại, mục tiờu của cõy MX-quadtree là để đảm bảo hỡnh dạng (và chiều cao) của cõy độc lập với số lượng cỏc nỳt của cõy, cũng như thứ tự chốn cỏc nỳt này. Thờm nữa, MX-quadtree tập trung vào việc đem lại cỏc giải thuật xoỏ và tỡm kiếm cú hiệu quả.
Một cỏch ngắn gọn, cõy MX-quadtree làm việc như sau: Đầu tiờn chỳng ta giả định rằng bản đồ đang được phõn thành một lưới kớch thước (2k
NW SW NE SE
a)
A
b)
A B
phỏt triển ứng dụng tự do lựa chọn k và một khi nú được chọn thỡ nú phải cố định.
MX-quadtree cú cấu trỳc nỳt tương tự như cõy tứ phõn điểm, đú là chỳng cú kiểu newqtnodetype. Cú một sự khỏc biệt là gốc của MX-quadtree miờu tả vựng xỏc định bởi XLB = 0, XUB = 2k
, YLB = 0, YUB = 2k. Hơn nữa, khi một vựng được phõn chia, nú được chia ở giữa. Do vậy, nếu N là một nỳt, khi đú cỏc vựng thể hiện bởi bốn cành của N được mụ tả theo bảng dưới đõy. Trong bảng này, w ký hiệu chiều rộng của vựng được biểu diễn bởi N và được cho bởi w= N.XUB – N.XLB. Do tất cả cỏc vựng được biểu diễn bởi cỏc nỳt trong
MX- quadtree là cỏc vựng vuụng, nờn w = N.YUB – N.YLB.
Con XLB XUB YLB YUB
NW N.XLB N.XLB +w/2 N.YLB +w/2 N.YLB +w
SW N.XLB N.XLB +w/2 N.YLB N.YLB +w/2
NE N.XLB +w/2 N.XLB +w N.YLB +w/2 N.YLB +w
SE N.XLB +w/2 N.XLB +w N.YLB N.YLB +w/2
Bảng 2.2. Mụ tả bốn cành của nỳt N trong cõy tứ phõn MX
2.4.1. Chốn và tỡm kiếm trong MX-Quadtree
Chỳng ta hóy xem xột cỏch chốn điểm vào cõy MX-Quadtree. Mỗi điểm (x, y) trong cõy MX-Quadtree biểu diễn vựng 1x1 mà gúc dưới bờn trỏi là (x, y). Điểm chốn vào nỳt biểu diễn vựng 1x1 tương ứng với điểm này. Giả sử bõy giờ chỳng ta muốn chốn cỏc điểm A, B, C và D như trờn hỡnh 2.8, hóy tiến hành cỏc bước như dưới đõy: