3.1. Trường hợp hai chiều
Trong bài toán truy vấn phạm vi một chiều, các cấu trúc dữ liệu mà ta đã khảo sát đều là cấu trúc cây mà mỗi nút chứa thông tin tổng hợp từ một dãy các đối tượng liên tiếp mà nó quản lý.
Chuyển sang trường hợp hai chiều, vấn đề trở nên phức tạp hơn. Ý tưởng đầu tiên có thể áp dụng là sửa đổi cấu trúc cây biểu diễn/quản lý danh sách từ cây nhị phân sang cây tứ phân (quad trees): Chẳng hạn như với cây quản lý đoạn thay vì chia đôi phạm vi quản lý của mỗi nút nhánh cho hai nút con, ta chia 4 phần hình chữ nhật trong mặt phẳng thuộc phạm vi quản lý của mỗi nút nhánh cho 4 nút con… Cách làm này tuy có cải thiện một chút về mặt tốc độ nhưng không nhiều, ngoài ra trong trường hợp xấu nhất, việc trả lời mỗi truy vấn vẫn mất thời gian ( ) với là số điểm trên mặt phẳng.
Ta xét bài toán truy vấn trên mặt phẳng: Trên mặt phẳng trực chuẩn xét hai lệnh:
( ): Chấm một điểm tại tọa độ ( )
( ): Trả về số chấm trong hình chữ nhật [ ] [ ]. Cho lệnh thực hiện tuần tự, hãy trả lời tất cả những lệnh .
3.1.1. Cây quản lý phạm vi hai chiều
Cây quản lý phạm vi 2 chiều (2D-range trees) có cấu trúc sơ cấp là một cây tìm kiếm nhị phân chứa các điểm với khóa tìm kiếm là hoành độ của điểm. Nói cách khác nó là một cây biểu diễn danh sách các điểm theo thứ tự tăng dần của hoành độ, tạm thời ta chưa quan tâm tới tung độ.
Để đảm bảo tính tổng quát, ở đây ta dùng cây nhị phân tìm kiếm, trong trường hợp cụ thể có thể biến đổi về cây quản lý đoạn hay cây chỉ số nhị phân cho dễ cài đặt hơn.
Mỗi nút của cây quản lý tất cả các điểm nằm trong nhánh gốc đó. Ta gọi ( ) là tập các điểm nằm trong nhánh cây gốc . Cấu trúc thứ cấp của cây quản lý phạm vi hai chiều nằm ở cách tổ chức các ( ): Mỗi ( ) lại là một cây quản lý phạm vi một chiều theo tung độ của các điểm thuộc ( )
Hình 14 là cây quản lý phạm vi chứa 15 điểm trên mặt phẳng theo thứ tự tăng dần của hoành độ là:
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
Giả sử các các điểm này nếu xếp tăng dần theo tung độ thì thứ tự sẽ là A, J, B, I, C, K, D, O, E, N, F, L, G, M, H
Hình 14. Cây quản lý phạm vi hai chiều
3.1.2. Bổ sung điểm
Muốn bổ sung một điểm ( ) ta chèn điểm này vào cấu trúc sơ cấp của cây quản lý phạm vi 2 chiều, việc chèn được giống như trên cây nhị phân tìm kiếm thông thường. Giả sử nút chứa điểm mới chèn vào là nút , dọc trên đường đi từ lên gốc, đi qua điểm nào ta lại chèn điểm vào cấu trúc thứ cấp ( ). Như vậy điểm sẽ có mặt trong ( ) cấu trúc thứ cấp với ( ) là độ sâu của nút .
Với là số điểm cần quản lý, những dạng cây nhị phân tìm kiếm tự cân bằng có thể giữ được chiều cao cây ở mức ( ), như vậy về mặt bộ nhớ ta mất không gian ( ) để cài đặt cây quản lý phạm vi 2 chiềụ Ngoài ra chi phí thời gian thực hiện thao tác bổ sung điểm khi đó sẽ là ( )
3.1.3. Xóa điểm
Quá trình xóa một điểm ( ) diễn ra ngược lại với quá trình bổ sung điểm. Trước hết ta tìm nút chứa điểm trong cấu trúc sơ cấp (tìm theo ). Dọc trên đường đi từ lên gốc, đi qua nút nào ta lại xóa trong cấu trúc thứ cấp ( ). Thời gian thực hiện giải thuật cho mỗi phép xóa là ( ) nếu sử dụng các dạng cây nhị phân tìm kiếm tự cân bằng
3.1.4. Truy vấn
Để trả lời về truy vấn thông tin tổng hợp của các điểm trong hình chữ nhật [ ] [ ], (trong trường hợp này là số điểm). Trước hết ta truy vấn khoảng [ ] trên cấu trúc sơ cấp để tìm ra một danh sách các nút mà phạm
A 𝑆(𝑝) {𝐼 𝐽 𝐾 𝐿 𝑀 𝑁 𝑂} 𝑆(𝑝) {𝐼 𝐽 𝐾 𝐿 𝑀 𝑁 𝑂} B C D E F G H I J K L M N O I J K O L N M
Cây tìm quản lý phạm vi 1 chiều theo thứ tự tăng dần của tung độ: