Cây tứ phân điểm (Point 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 43 - 48)

Một cây tứ phân điểm giống nhƣ cây 2-d nó đƣợc sử dụng để biểu diễn các điểm dữ liệu trong không gian hai chiều. Có điều không giống nhƣ cây 2-d là cây tứ phân điểm luôn phân một vùng thành 4 phần. Trong cây 2-d, nút N phân một vùng thành hai phần do vẽ một đƣờng thẳng đi qua điểm (N.XVAL, N.YVAL). Đƣờng kẻ này có thể là đƣờng nằm ngang nếu cấp của N là lẻ hoặc là đƣờng thẳng đứ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

trong trƣờng hợp cấp của N là chẵn. Đối với cây tứ phân điểm thì nút N phân một vùng mà nó biểu diễn do vẽ cả đƣờng thẳng đứng và đƣờng nằm ngang qua điểm (N.XVAL, N.YVAL). Bốn phần đƣợc tạo ra đƣợc gọi là các góc NW (Tây Bắc), SW (Tây Nam), NE (Đông Bắc) và SE (Đông Nam) xác định bởi nút N và mỗi góc tƣơng ứng với một con của nút N. Do đó các nút trong cây bốn nhánh có thể xác định 4 cành. Trƣớc khi thực hiện các thao tác đối với cây bốn cành chúng ta đƣa ra định nghĩa đơn giản của cấu trúc nút cho một nút của cây tứ phân.

Chèn và tìm kiếm trong cây tứ phân điểm

Bây giờ chúng ta hãy khảo sát tập 5 điểm (HDongHCa, NThuatNSieu, HNgangHBuom, DDTuHBuom, HManhHBong) đã đƣợc thể hiện với cây 2-d, nó sẽ đƣợc thể hiện nhƣ thế nào thông qua một cây tứ phân. Hình 2.6 cho thấy quá trình xây dựng cây tứ phân. Tiến trình này đƣợc mô tả nhƣ sau:

Khởi đầu cây tứ phân là rỗng, việc chèn HDongHCa tạo ra nút gốc của cây đƣợc gán nhãn với cặp (19, 45).

Việc chèn NThuatNSieu tạo ra vùng miêu tả bởi HDongHCa đƣợc phân thành 4 phần thông qua việc vẽ một đƣờng nằm ngang và một đƣờng thẳng đứng qua (19, 45).NThuatNSieu, ở vị trí (40, 50), nằm trong góc phần tƣ NE, do vậy HDongHCa có con NE là NThuatNSieu.

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.4: Bản đồ mẫu xây dựng cây tứ phân điểm

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

Việc chèn HNgangHBuom đƣợc tiến hành nhƣ sau: HNgangHBuom nằm theo hƣớng Đông Nam của HDongHCa. Do vùng này hiện tại chƣa có điểm nào nên chúng ta đặt HNgangHBuom làm con SE của HDongHCa.

Việc chèn DDTuHBuom phức tạp hơn. Chúng ta thấy rằng DDTuHBuom nằm ở SE của HDongHCa. Do vậy chúng ta chuyển đến nhánh SE của HDongHCa. Kết quả là góc phần tƣ SE đƣợc chia bởi vẽ đƣờng nằm ngang và đƣờng thẳng đứng qua điểm HDongHCa. Với kết quả bốn phần đƣợc tạo ra, DDTuHBuom ở góc SE và nhƣ vậy DDTuHBuom trở thành nút con SE của HNgangHBuom.

Cuối cùng, việc chèn HManhHBong là không quá phức tạp bởi vì nó nằm ở SW của HDongHCa. Do hiện tại con trỏ này là rỗng nên ta đặt nút này chứa thông tin liên quan đến HManhHBong.

Nhìn chung chiều cao của một cây tứ phân chứa n nút có thể có giá trị lớn nhất là n- 1, điều đó có nghĩa là thời gian để tìm kiếm hay chèn là nhỏ hơn số lƣợng nút.

Thao tác xoá trên cây tứ phân điểm

Khi xoá nút N từ cây tứ phân có gốc T cũng có những nét giống nhƣ chúng ta đã thực hiện với cây 2-d để tìm một nút thay thế thích hợp cho các nút không phải là lá. Đối với trƣờng hợp các nút lá thì việc xoá không có vấn đề gì: Chúng ta đặt trƣờng liên kết tƣơng ứng của nút cha của N trỏ tới NIL và giải phóng không gian lƣu trữ.

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

Việc xoá trong cây tứ phân là rất phức tạp. Hình 2.6 chỉ ra tại sao lại phức tạp. Đầu tiên mỗi nút trong cây tứ phân thể hiện một vùng và vùng này đƣợc định nghĩa hơi khác hơn so với cây 2-d. Đối với cây 2-d nó đủ để kết hợp 4 ràng buộc dƣới dạng xc1, x<c2, yc3, y<c4 với các hằng số c1,..., c4. Do đó nhƣ trong trƣờng hợp cây 2-d khi mà chúng ta mở rộng nodetype thành cấu trúc nút mới newnodetype, chúng ta cũng có thể mở rộng cấu trúc nút qtnodetype thành một cấu trúc nút mới newqtnodetype với cùng kiểu trƣờng nhƣ trên đây (XLB, YLB, XUB, YUB).

Khi chèn nút N vào cây T chúng ta cần đảm bảo những điểm dƣới đây:

- Nếu N là gốc của cây T, thì N.XLB=-, N.YLB=-, N.XUB=+, và N.YUB=+.

- Nếu P là cha của N thì khi đó bảng dƣới đây mô tả những giá trị của các trƣờng XLB, YLB, XUB, YUB của N tuỳ thuộc vào việc N là con NW, SW, NE hay SE của P. Chúng ta sử dụng ký hiệu w=(P.XUB–P.XLB) và h=(P.YUB – P.YLB).

Để vận dụng thành công kỹ thuật xoá trong với cây tứ phân điểm thì khi xoá một nút trong N ta phải tìm một nút thay thế R từ một trong các cây con của N (từ một trong N.NW, N.SW, N.NE, N.SE) sao cho mỗi nút R1 trong N.NW là ở phía tây bắc của R, mỗi nút R2 trong N.SW ở phía tây nam R, mỗi nút R3 trong N.NE ở phía đông bắc của R và mỗi nút R4 trong N.SE ở phía đông nam của R.

Hãy xem xét cây tứ phân trên hình 2.5 và hình 2.6. Giả sử chúng ta muốn xoá nút HDongHCa từ cây tứ phân này. Trong trƣờng hợp này, nút thay thế thực tế đƣợc tìm là HNgangHBuom. Không nút nào khác thoả mãn những điều kiện đã đặt ra ở trên.

Tuy nhiên, không phải luôn có khả năng tìm đƣợc một nút thay thế. Do vậy trong trƣờng hợp xấu nhất việc xoá một nút N có thể yêu cầu việc chèn lại một số

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

nút trong cây con trỏ bởi N.NE, N.SE, N.NW và N.SW. Trong phần sau ta sẽ khảo sát cây tứ phân MX cho phép xóa nút một cách dễ dàng hơn.

Truy vấn khoảng trong cây tứ phân điểm

Các truy vấn khoảng trong cây tứ phân đƣợc thực hiện gần nhƣ cách thức thực hiện trong cây 2-d. Mỗi nút trong một cây tứ phân thể hiện một vùng và phƣơng pháp tính tóan và truy vấn khoảng tránh việc tìm kiếm các cành bắt nguồn từ những nút mà các vùng liên quan đến chúng không giao với đƣờng tròn định nghĩa bởi truy vấn khoảng.

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 43 - 48)