Chèn và tìm kiếm trong cây 2-d

Một phần của tài liệu Cấu trúc dữ liệu đa phương tiện và mô hình cơ sở dữ liệu hình ảnh (Trang 25)

Việc chèn nút N vào cây do T trỏ tới đƣợc phát biểu phi hình thức nhƣ sau: Kiểm tra xem N và T có thống nhất các trƣờng XVAL và YVAL hay không. Nếu thống nhất thì chỉ việc viết đè nút T và kết thúc. Nếu không hãy rẽ trái nếu N.XVAL < T.XVAL và rẽ phải trong trƣờng hợp ngƣợc lại. Giả sử P là nút con đang khảo sát. Nếu N và P thống nhất trong các trƣờng XVAL và YVAL thì chỉ cần viết đè P và kết thúc, nếu không thì rẽ trái khi N.YVAL<P.YVAL, rẽ phải trong trƣờng hợp ngƣợc lại. Lặp thủ tục này, hãy rẽ nhánh theo XVAL khi đang ở mức chẵn trong cây, và theo YVAL khi đang ở mức lẻ.

   1 ) ( 0 P level

Nếu N là gốc của cây Nếu cha của N là P

Thí dụ trên hình 2.3 là lƣới bản đồ. Gốc (0,0) ở góc dƣới trái của lƣới. Mỗi tế bào có kích thƣớc 8, do vậy kích thƣớc bản đồ là 64x64. Giả sử, phải xây dựng cây 2-d, trƣờng INFO chỉ chứa tên địa điểm.

Danh sách các địa điểm nhƣ bảng 2.1 sau đây: Thành phố (XVAL,YVAL) Banja Luka (19,45) Derventa (40,50) Teslic (38,38) Tuzla (54,40) Sinj (4,4) Bảng 2.1

Khởi động cây là rỗng. Hình 2.4 là trình tự chèn vào cây. Các cây này đƣợc xây dựng nhƣ sau đây:

a) b) c) Mức 0 Mức 2 Mức 3 Mức 1 Hình 2.4 d) e)

1. Khi chèn Banja Luka vào cây có một nút với INFO = Banja Luka,XVAL = 19, YVAL = 45. Nút này biểu diễn toàn bộ vùng bản đồ. Tổng quát, mỗi nút N biểu diễn vùng Reg(N). Các trƣờng XVAL và YVAL của các nút N xác định điểm trong

Reg(N). Điểm này (N.XVAL, N.YVAL) chia Reg(N) thành 2 phần bằng cách vẽ đƣờng thẳng đứng qua điểm trong vùng ( nếu nút ở mức chẵn) hay vẽ đƣờng nằm ngang qua điểm trong vùng (nếu nút ở mức lẻ ).

2. Khi chèn Derventa, phải so sánh các trƣờng XVAL của Derventa với của

Banja Luka, thực hiện rẽ phải vì toạ độ x (40) của Derventa lớn hơn của Banja Luka(19). Kết quả trên hình 2.4b. Banja Luka chia đôi vùng bằng đƣờng thẳng đứng (hình 2.5.a) – mọi điểm nằm bên phải có toạ độ x lớn hơn hay bằng 19, bên trái có toạ độ nhỏ hơn 19. Derventa biểu diễn vùng bên phải của đƣờng thẳng đứng trong hình 2.5.a.

3. Khi chèn Teslic, trƣớc hết so sánh trƣờng XVAL của TeslicBanjaLuka. Trƣờng này của Teslic là 38, của Banja Luka là 19, vậy nên thực hiện rẽ phải. Sau đó so sánh trƣờng YVAL của Teslic với YVAL của Derventa.YVAL của Teslic là 38, của Derventa là 50, do vậy phải rẽ trái. Kết quả trên hình 2.4c. Derventa chia đôi vùng bằng đƣờng thẳng nằm ngang trong hình 2.5.b . Vùng phía trên đƣờng thẳng có toạ độ x lớn hơn hay bằng 19, toạ độ y lớn hơn hay bằng 50. Vùng phía dƣới đƣờng thẳng có toạ độ x nhỏ hơn 19, toạ độ y nhỏ hơn 50.

4. Khi chèn Tuzla, trƣớc hết phải so sánh XVAL của Tuzla và Banja Luka. Giá trị XVAL của Tuzla là 54, còn của Banja Luka là 19,vậy phải rẽ phải. Sau đó so sánh

YVAL của Tuzla (40) và Derventa (50), vậy phải rẽ trái. Tiếp tục so sánh XVAL của

Tuzla (54) và Teslic (38), vậy phải rẽ phải (hình 2.4d).

5. Cuối cùng, khi chèn thành phố Sinj, thực hiện so sánh XVAL của Sinj

Banja Luka,. phải rẽ trái vì toạ độ x của Sinj nhỏ hơn của Banja Luka. Kết quả đƣợc mô tả trên hình 2.4d và 2.4e.

Trong trƣờng hợp tồi nhất thì độ cao của cây 2-d với k nút là (k-1), việc tìm kiếm nút cho trƣớc sẽ mất O(k) lần.

Một phần của tài liệu Cấu trúc dữ liệu đa phương tiện và mô hình cơ sở dữ liệu hình ảnh (Trang 25)