Priority search trees

Một phần của tài liệu Một số kiểu dữ liệu trừu tượng ứng dụng trong hình học tính toán (Trang 43)

2.2.2.1 Phát biểu bài toán

Trong cấu trúc cho cửa sổ đã mô tả ở trên sử dụng range trees với các cấu trúc liên kết. Các truy vấn phạm vi thực hiện với phạm vi không bị giới hạn một phía. Trong phần này sẽ mô tả một cấu trúc dữ liệu khác làcây tìm kiếm ưu tiên (priority search trees)cho vấn đề cửa sổ cải thiện không gian lưu trữ chỉ còn Cho tập hợp gồm điểm trong mặt phẳng, ta muốn thiết kế một cấu trúc dữ liệu cho các truy vấn phạm vi hình chữ nhật có dạng và yêu cầu báo cáo tất cả các điểm của nằm trong

2.2.2.2 Thuật toán và cấu trúc dữ liệu

Truy vấn phạm vi một chiều thường yêu cầu các điểm nằm trong phạm vi . Để tìm các điểm hiệu quả ta có thể lưu trữ tập hợp các điểm trong range trees một chiều. Nếu khoảng không bị giới hạn bên trái và yêu cầu các điểm nằm trong . Điều này có thể được giải quyết bằng cách duyệt theo danh sách được sắp xếp bắt đầu từ điểm ngoài cùng bên trái, cho đến khi gặp một điểm không nằm trong phạm vi. Thời gian truy vấn là thay vì

với trường hợp tổng quát [5].

Để có thể mở rộng chiến lược này cho truy vấn phạm vi hai chiều không bị giới hạn bên trái ? Bằng cách nào phải tích hợp thông tin về tọa độ trong cấu trúc mà không sử dụng các cấu trúc liên kết, do đó trong sốcác điểm có tọa độ thuộc , có thể dễ dàng chọn các điểm có tọa độ thuộc [

Một danh sách tuyến tính đơn không thích hợp cho điều này, do đó cần đưa ra một cấu trúc khác làm việc với heap. Heap thường được sử dụng cho các truy vấn ưu tiên với yêu cầu tìm giá trị nhỏ nhất (hoặc lớn nhất) trong tập hợp, nhưng heap cũng có thể được dùng để trả lời cho các truy vấn phạm vi một chiều có dạng . Ngoài ra, cấu trúc cây của heap cũng có một lợi thế khác: cấu trúc cây làm cho heap dễ dàng tích hợp thông tin về tọa độ [5].

Truy vấn có thể được thực hiện với bằng cách duyệt xuống phía dưới cây. Khi thăm một nút cần kiểm tra xem nếu tọa độ của điểm được lưu trữ tại nút nằm trong . Nếu điểm có tọa độ nằm trong phạm vi này thì báo cáo điểm đó và tiếp tục tìm trong cả hai cây con, ngược lại hủy bỏ việc tìm kiếm trong phần này của cây. Trong hình 2.14 báo cáo điểm 1, 3 và 4; các nút 8 và 11 được thăm nhưng hủy bỏ việc tìm kiếm ở đó.

Hình 2.14 - Heap của tập hợp {1, 3, 4, 8, 11, 15, 21, 22, 36}

1

3 8

11 4 15 21

Tronghình 2.15điểm có tọa độ nhỏ nhấtđược lưu trữ tại gốc. Các điểmkhácđượcphân chia theotọa độ . Cácđiểm , và cótọa độ nhỏ hơnvà đượclưu trữtrongcây contrái. Trong các điểm này cótọa độ nhỏ nhất, điểmnàyđược đặttạigốccủacây convà thực hiện tương tự.

Hình 2.15 -Tập hợp các điểm và cây tìm kiếm ưu tiên tương ứng

Giả sử tất cả các điểm có tọa độ khác nhau, không làm mất tính tổng quát giả sử tất cả các tọa độ là phân biệt.

 Nếu ∅ thì cây tìm kiếm ưu tiên (priority search trees) là một lá rỗng.  Ngược lại, gọi là điểm có tọa độ nhỏ nhất trong , là điểm

giữa các tọa độ của các điểm còn lại và gọi ; .

Cây tìm kiếm ưu tiên bao gồm một nút gốc với điểm và các giá trị được lưu trữ. Hơn nữa,

 cây con trái của là cây tìm kiếm ưu tiên của tập hợp ,  cây con phải của là cây tìm kiếm ưu tiên của tập hợp .

Hình 2.16 - Truy vấn của cây tìm kiếm ưu tiên

Truy vấn với phạm vi trong cây tìm kiếm ưu tiên được thực hiện như sau. Trước tiên tìm với và như được chỉ ra trong hình

p5 p2 p4 p1 p6 p3

2.16. Tất cả cáccây con có bóng mờ trong hình vẽ chỉ lưu trữ các điểm có tọa độ nằm trong phạm vi. Vì vậy, ta có thể tìm các cây con đó chỉ dựa trên tọa độ .Điều này được thực hiện với chương trình con sau [5].

REPORTINSUBTREE( )

Input. Gốc của cây con trong cây tìm kiếm ưu tiên và giá trị .

Output. Tất cả các điểm của cây con của tọa độ tại . 1. if không là lá và then

2. Báo cáo .

3. REPORTINSUBTREE( ) 4. REPORTINSUBTREE( )

Nếu gọi REPORTINSUBTREE tại mỗi cây con được chọn thì sẽ tìm tất cả các điểm nằm trong phạm vi truy vấn không? Câu trả lời là không. Gốc của cây lưu trữ điểm có tọa độ nhỏ nhất, có thể là một điểm nằm trong phạm vi truy vấn. Trong thực tế, bất kỳ điểm sắp xếp nào được lưu trữ tại nút trên đường đi tìm kiếm với hoặc có thể nằm trong phạm vi truy vấn, vì vậy cũng nên kiểm tra chúng. Điều này dẫn đến các thuật toán truy vấn như dưới đây[5].

Algorithm QUERYPRIOSEARCHTREE( )

Input.Cây tìm kiếm ưu tiên và phạm vi truy vấn, không bị giới hạn bên trái. Output. Tất cả các điểm nằm trong phạm vi.

1. Tìm và trong . Gọi là nút nơi mà chia hai đường đi tìm kiếm. 2. for mỗi nút trên đường đi tìm kiếm của và do

3. if then Báo cáo .

4. for mỗi nút trên đường đi trong cây con trái của do

5. if đường đi tìm kiếm bên trái tại nút then

6. REPORTINSUBTREE( )

7. for mỗi nút trên đường đi của trong cây con phải của do

8. if đường đi tìm kiếm bên phải tại nút then

9. REPORTINSUBTREE( )

2.2.2.3 Phân tích độ phức tạp

Định lí 2.8 Cây tìm kiếm ưu tiên cho tập hợp gồm điểm trong mặt phẳng sử

cây tìm kiếm ưu tiên có thể báo cáo tất cả các điểm trong một phạm vi truy vấn

có dạng trong thời gian , trong đó là số

điểm báo cáo [5].

Một phần của tài liệu Một số kiểu dữ liệu trừu tượng ứng dụng trong hình học tính toán (Trang 43)

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

(82 trang)