Thao tác xoá trong MX-Quadtree

Một phần của tài liệu (LUẬN văn THẠC sĩ) các cấu trúc dữ liệu trong hệ thống thông tin địa lý (Trang 43 - 44)

Thao tác xoá trong một MX-Quadtree 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-Quadtree 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 NULL. 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=NULL 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à NULL, 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=NULL 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à NULL. 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 NULL 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à NULL? 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 NULL 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 NULL 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à NULL. Điều đó không xảy ra và không thể collapsing. Kết thúc.

Một phần của tài liệu (LUẬN văn THẠC sĩ) các cấu trúc dữ liệu trong hệ thống thông tin địa lý (Trang 43 - 44)

Tải bản đầy đủ (PDF)

(80 trang)