Huỷ bỏ trong cõy 2-d

Một phần của tài liệu Một số vấn đề về lưu trữ và chỉ mục trong cơ sở dữ liệu không gian (Trang 36 - 37)

Cụng việc phức tạp nhất với cõy 2-d là huỷ bỏ điểm khỏi cõy. Giả sử T là cõy 2 chiều, điểm sẽ huỷ bỏ cú tọa độ (x, y). Bước thứ nhất của việc huỷ bỏ là tỡm ra nỳt N trong T sao cho N.XVAL=x và N.YVAL=y. Nếu N là nỳt lỏ thỡ huỷ N là dễ dàng, chỉ việc đặt NIL cho LLINK, RLINK trong nỳt cha N, giải phúng vựng nhớ N. Nếu N là nỳt trong cõy thỡ tỡnh hỡnh phức tạp hơn. Trong trường hợp này, cõy con cú gốc tại N.LLINK (đặt tờn là Tl) hay tại N.RLINK (đặt tờn là Tr) là khụng rỗng. Cỏi ta muốn bõy giờ là tỡm nỳt R từ Tl hay Tr cú thể thay thế nỳt N và cú thể lần lượt được huỷ bỏ khỏi cõy con. Như vậy cỏc bước của thuật toỏn huỷ bỏ nỳt N bờn trong cõy sẽ là:

Bước 1: Tỡm nỳt ứng viờn thay thế R trong Ti với i{l, r}.

Bước 2: Thay thế mọi trường khụng cú liờn kết của N bởi cỏc trường của R. Bước 3: Huỷ bỏ đệ qui R khỏi Ti.

Đệ qui trờn đõy cú điểm dừng vỡ Ti với i{l, r} cú độ cao nhỏ hơn cõy T. Bước phức tạp nhất trong thuật toỏn trờn là tỡm ra nỳt ứng viờn thay thế. Nỳt R muốn thay thế phải cú quan hệ khụng gian với mọi nỳt P trong Tl và Tr sao cho N dẫn tới P. Cú nghĩa rằng, nếu P ở phớa tõy nam N thỡ P phải ở tõy nam R, nếu P ở tõy bắc N thỡ P phải ở tõy bắc R, ... Như vậy, nỳt mong muốn thay thế R phải thoả cỏc tớnh chất sau:

1. Mọi nỳt M trong Tl thoả M.XVAL<R.XVAL nếu level(N) là chẵn và M.YVAL<R.YVAL nếu level(N) là lẻ.

2. Mọi nỳt M trong Tr thoả M.XVALR.XVAL nếu level(N) là chẵn và M.YVALR.YVAL nếu level(N) là lẻ.

Nếu Tr khụng rỗng và level(N) là chẵn, thỡ bất kỳ nỳt nào trong Tr mà cú trường XVAL nhỏ nhất thỡ là nỳt ứng viờn thay thế. Thớ dụ, trong hỡnh 2.3e, nếu ta lấy N là nỳt chứa Banja Luka, thỡ nỳt ứng viờn thay thế từ cõy con bờn phải là nỳt liờn kết với Testic vỡ nú cú tọa độ x nhỏ nhất trong cỏc nỳt của cõy con phớa phải Banja Luka.

Mặt khỏc, nếu Tr khụng rỗng và level(N) là lẻ thỡ bất kỳ nỳt nào trong Tr mà cú trường YVAL nhỏ nhất thỡ là nỳt ứng viờn thay thế.

Tổng quỏt thỡ việc tỡm kiếm nỳt thay thế từ cõy con bờn trỏi chỉ cú thể thắng lợi dưới một số điều kiện nhất định. Nếu level(N) là chẵn thỡ nỳt thay thế phự hợp trong Tl là nỳt bất kỳ nếu thoả món trường XVAL của nú cú giỏ trị lớn

nhất. Tương tự nếu level(N) là lẻ thỡ ta cú thể sử dụng nỳt bất kỳ trong Tl mà cú trường YVAL lớn nhất để làm nỳt thay thế.

Vấn đề xảy ra là cú thể cú nhiều nỳt trong Tl cựng cú XVAL (hay YVAL) lớn nhất, trong trường hợp này điều kiện thứ hai trong định nghĩa cõy 2-d cú thể bị vi phạm bởi bước 3 vừa mụ tả trờn. Tổng quỏt thỡ, nếu N là nỳt trong và ta muốn huỷ bỏ N khỏi T thỡ tỡm thay thế từ cõy con phải vỡ việc tỡm ứng viờn thay thế trong cõy trỏi là khụng thể.

Cỏi gỡ xảy ra nếu N cú cõy phải rỗng (N.RLINK=NIL)? Trong trường hợp này ta cú thể chọn nỳt thay thế R từ Tl cú giỏ trị x nhỏ nhất trong Tl (nếu level(N) là chẵn) hay cú giỏ trị y nhỏ nhất trong Tl (nếu level(N) là lẻ). Sau đú ta sửa đổi bước 2 trong thuật toỏn trờn đõy như sau:

Bước 2 (sửa đổi): Thay thế toàn bộ cỏc trường khụng cú liờn kết của nỳt N bằng nỳt R. Đặt N.RLINK=N.LLINK và N.LLINK=NIL.

Một phần của tài liệu Một số vấn đề về lưu trữ và chỉ mục trong cơ sở dữ liệu không gian (Trang 36 - 37)