2.4.2. Thao tỏc xoỏ trong MX-Quadtrees
Thao tỏc xoỏ trong một MX-Quadtrees là một thao tỏc tương đối đơn giản bởi vỡ toàn bộ cỏc điểm đều nằm ở cấp cuối (đều là cỏc nỳt lỏ). Lưu ý rằng nếu N là một nỳt khụng phải lỏ trong cõy MX-Quadtrees với gốc là T thỡ khi đú vựng biểu diễn bởi nỳt N cú ớt nhất một điểm thuộc cõy. Nếu chỳng ta muốn xoỏ một điểm (x, y) từ cõy T, việc đầu tiờn là thiết lập liờn kết tương ứng của cha nỳt N tới NIL. Núi cỏch khỏc nếu M là cha của N và M.DIR trỏ tới N thỡ thiết lập M.DIR=NIL và cho lại N để giải phúng vựng nhớ. Bõy giờ tiến hành kiểm tra xem bốn trường liờn kết của M đều là NIL? nếu đỳng ta khảo sỏt cha của M (ta gọi nú là P). Vỡ M là con của P, ta tỡm trường liờn kết DIR1 sao cho P.DIR1=M. Sau đú thiết lập P.DIR1=NIL và tiếp tục kiểm tra xem toàn bộ cỏc trường liờn kết của P cú là NIL? Nếu đỳng, tiếp tục tiến trỡnh. Toàn bộ tiến trỡnh đũi hỏi phải duyệt qua cõy một lần từ đỉnh xuống đỏy (để tỡm nỳt sẽ xúa) và một lần đi ngược cõy. Như vậy toàn bộ tiến trỡnh sẽ là O(k) lần.
Hóy xem xột tiến trỡnh làm việc ra sao với cõy MX trờn hỡnh 2.8d. Giả sử ta muốn xoỏ D. Việc xúa nỳt D khụng khú khăn vỡ ta tỡm ra nú và đặt NIL vào trường liờn kết SE của cha nú (cỏi trỏ đến D). Để xỏc định xem cha của D cú hỏng? ta kiểm tra xem bốn trường liờn kết nú là NIL? Khụng đỳng vậy vỡ C và D cú cựng cha.
Mặt khỏc, xem xột việc huỷ bỏ A từ cõy tứ phõn MX trong hỡnh 2.8d. Khi đặt NIL vào trường NE của cha nỳt A, ta thấy rằng cha của A kết thỳc bởi 4 trường rỗng. Như vậy cha của A bị hỏng. Khi điều đú xảy ra, ta khảo sỏt cha của cha A (là gốc) và đặt NIL vào liờn kết NW của gốc. Khi kiểm tra xem gốc cú toàn bộ bốn trường liờn kết là NIL? Điều đú khụng xảy ra và khụng thể
2.4.3. Truy vấn khoảng trong MX-Quadtrees
Cỏc truy vấn khoảng trong MX-Quadtrees được thực hiện một cỏch hoàn toàn tương tự như cõy tứ phõn điểm. Chỉ cú hai điểm khỏc biệt đú là : Nội dung của cỏc trường XLB, XUB, YLB và YUB là khỏc nhau. Điểm khỏc biệt thứ hai là trong cõy MX-Quadtrees tất cả cỏc điểm nằm ở cỏc nỳt lỏ, do vậy đường trũn định nghĩa bởi truy vấn khoảng cần được thực hiện chỉ ở cấp độ lỏ.
2.5. Cõy R (R-Trees)
Trong phần này chỳng ta sẽ giới thiệu một kiểu cấu trỳc dữ liệu mới gọi là
R-Trees, cấu trỳc này cú thể được sử dụng để lưu trữ cỏc vựng chữ nhật của một hỡnh ảnh hay bản đồ. R-Trees đặc biệt hữu ớch trong việc lưu trữ dữ liệu số lượng lớn trờn đĩa. Do việc truy cập đĩa thường rất chậm, R-Trees cung cấp một cỏch thuận tiện trong việc cực tiểu hoỏ số lần truy cập đĩa.
Mỗi R-Trees kết hợp với một thứ tự là một số nguyờn K. Mỗi nỳt R-Trees
khụng phải là lỏ bao gồm một tập từ K/2 đến K hỡnh chữ nhật. Bằng trực quan thấy rằng mỗi nỳt khụng lỏ trong R-Trees trừ nỳt gốc ớt nhất phải là một nửa. Đặc điểm này làm cho R-Trees thớch hợp với việc truy vấn đĩa bởi vỡ mỗi truy cập đĩa mang lại một trang chứa đựng một vài hỡnh chữ nhật (ớt nhất K/2). Hơn nữa, do việc lưu trữ một số hỡnh chữ nhật trong một trang, chiều cao của R-Trees
sử dụng để lưu trữ tập hợp cỏc hỡnh chữ nhật, thường rất nhỏ. Do vậy số lần truy cập đĩa giảm bớt so với cỏc cõy mụ tả trờn.
Một hỡnh chữ nhật hoặc là “thực” hoặc là một hỡnh bao hàm một nhúm hỡnh chữ nhật. Cỏc nỳt lỏ bao gồm một hỡnh chữ nhật “thực” trong khi cỏc nỳt khụng lỏ bao gồm cỏc hỡnh chữ nhật nhúm từ một tập cỏc hỡnh chữ nhật. Hỡnh 2.10 chỉ ra cỏch nhúm cỏc hỡnh chữ nhật như sau. Nhúm Cỏc chữ nhật G1 R1, R2, R3 G2 R4, R5, R6, R7 G3 R8, R9