Cây tứ phân matrix MX (MX-Quadtrees)

Một phần của tài liệu vấn đề lưu trữ trong hệ thống dịch vụ dựa trên vị trí (Trang 48 - 51)

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 x 2k). Ngƣời 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.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

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.

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à, tiến hành các bƣớc dƣới đây:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 2.8: Mô tả phép chèn vào cây tứ phân MX 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.8. 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.7d. 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

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

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ể collapsing. Kết thúc.

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á.

Một phần của tài liệu vấn đề lưu trữ trong hệ thống dịch vụ dựa trên vị trí (Trang 48 - 51)