NNS)
3.5.1.1. Giới thiệu
Trong các ứng dụng của hệ cơ sở dữ liệu không gian và hệ thống thông tin địa lý thì tìm kiếm lân cận là một trong những ứng dụng quan trọng và được sử dụng nhiều nhất. Có nhiều dạng tìm kiếm khác nhau, trong đó tìm kiếm lân cận có thể coi là một trong những ứng dụng quan trọng không thể thiếu. Bài toán tìm kiếm lân cận gần nhất (nearest neighbor search - NNS) là bài toán tối ưu hóa việc tìm kiếm đối tượng gần nhất trong không gian.
Bài toán lân cận gần nhất có thể phát biểu như sau:
Bài toán 5: Cho một tập hợp điểm trong không gian Euclid và một điểm truy vấn , hãy tìm một điểm trong tập gần nhất với .
Trong nhiều trường hợp, thuộc không gian Euclid chiều và khoảng cách được đo bằng khoảng cách Euclid hoặc khoảng cách Manhattan.
Cho và là hai điểm nằm trong không gian Euclid . Nếu
và , khi đó:
(12)
Khoảng cách Manhattan tính bằng công thức:
(13)
Các bài toán tìm lân cận gần nhất rất đa dạng là hai bài toán kinh điển là bài toán tìm một lân cận gần nhất và bài toán tìm - lân cận gần nhất.
q
Hình 3.10. Mô phỏngkếtquả của quá trình tìm k - lân cậngầnnhất (k = 5, d = 2) Các điểm tròn là tậpđiểmđầu vào, điểm hình sao q là điểm tìm kiếm.Đường tròn
với bán kính là khoảng cách từ q đếnđiểmgầnthứ 5.
Nhiều giải pháp khác nhau cho các bài toán nêu trên đã được đề xuất. Chất lượng và tính hữu dụng của các thuật toán cho bài toán lân cận gần nhất được xác định bởi độ phức tạp truy vấn cũng như độ phức tạp của các cấu trúc biểu diễn dữ liệu duy trì. Các cấu trúc chỉ mục dữ liệu không gian được sử dụng trong quá trình tìm kiếm đối tượng lân cận gần nhất là R-tree, Kd-tree. Cho bài toán tìm -lân cận gần nhất độ phức tạp trung bình của các cấu trúc chỉ mục này đều là trong trường hợp tập điểm phân bố ngẫu nhiên. Trong ba cấu trúc chỉ mục nêu trên cấu trúc R-Tree là cấu trúc động nhất cho quá trình cập nhật thông tin như thêm hay xóa nhưng tốc độ thực thi tốt nhất theo tác giả biết được vẫn là Kd-tree. Tuy nhiên, để
Một trong các mở rộng của bài toán lân cận gần nhất là bài toán - lân cận gần nhất. Bài toán - lân cận gần nhất là cách tiếp cận chung nhất trong quá trình nhận dạng mẫu, và nó cũng được ứng dụng trong nhiều lãnh vực khác nhau, đặc biệt là trong hệ thống thông tin địa lý.
Bài toán lân cận gần nhất có thể phát biểu như sau:
Bài toán 6: Cho một tập hợp điểm trong không gian Euclid , cho một điểm truy vấn và một số nguyên dương , tìm điểm trong tập gần nhất với .
Trong các hệ thống thông tin địa lý thường sử dụng không gian Euclid với số chiều . Trong thực tế, việc tìm các điểm quan tâm xung quanh một điểm xác định là một dịch vụ không thể thiếu đối với hệ thông thông tin địa lý. Một ví dụ điển hình là xác định 5 quán cơm trưa văn phòng gần công ty bạn nhất.
Dưới đây chúng tôi trình bày một thuật toán xác định k-lân cận gần nhất đơn giản dựa vào lưới tam giác Delaunay. Từ tập điểm ta xây dựng lưới tam giác Delaunay . Dựa trên cấu trúc lưới tam giác trình bày ở Chương 1 dễ dàng xác định các các đỉnh của tam giác và ba tam giác kề với nó.
Phương pháp tìm kiếm lân cận gần nhất dựa trên lưới tam giác Delaunay đã được đề cập trong các công trình [77] [78] . Phương pháp tìm kiếm lân cận gần nhất đề cập bởi Birn và các cộng sự [77] dựa trên Full Delaunay Hierachy (FDH) có tốc độ thực thi khá nhanh nhưng đòi hỏi khá tốn không gian để lưu trữ tất cả các mức phân cấp và thời gian tiền xử lý thực tế khá lâu.
3.5.1.2. Thuật toán xấp xỉ k-lân cậngầnnhấtdựa trên lưới
tam giác Delaunay cho đốitượngđiểm
Ở đây chúng ta sử dụng một hàng đợi ưu tiên theo trật tự khoảng cách đến mỗi điểm tăng dần đối với điểm .
Thuật toán P_K_NNS:
Bước 2: Xác định 3 đỉnh của tam giác là . Tính các khoảng cách . Lưu các đỉnh này vào hàng đợi ưu tiên .
Bước 3: Lấy từng đỉnh từ hàng đợi ưu tiên . Nếu đỉnh chưa được thăm thì lưu nó vào danh sách kết quả . Lấy tất cả đỉnh kề với đỉnh rồi tính các khoảng cách của nó so với đỉnh .
. Lưu các đỉnh này vào hàng đợi ưu tiên . Đánh dấu đỉnh đã thăm.
Bước 4: Quay lại bước 3 cho đến khi lấy ra đủ đỉnh. Thuật toán kết thúc.
Hình 3.11.Minh họathuật toán k - lân cậngầnnhấtdựa trên lưới tam giác
Độ phức tạp thuật toán:
Độ phức tạp của thuật toán trên phụ thuộc vào bước 1 và bước 3. Nếu sử dụng kỹ thuật xác định tam giác chứa điểm trong thuật toán xây dựng lưới tam giác Delaunay theo phương pháp chèn đỉnh tuần tự ở Chương 1 thì độ phức tạp là . Ở bước 3 sử dụng kỹ thuật loang với cấu trúc lưu vết là hàng đội ưu tiên nên độ phức tạp . Nếu tối đa bằng thì độ phức tạp của cả thuật toán trên là
.
Thời gian thực thi (s) thuật toán k-lân cận gần nhất cho 1000000 đỉnh
Số đỉnh lân cận cần tìm
(k)
Thuật toán dựa trên kd-tree
60000 6.297 0.125
80000 12.875 0.172
100000 20.547 0.218
200000 84.062 0.453
400000 308.546 0.969
Bảng 3.5.Thời gian thực thi các thuật toán tìm k-lân cận gầnnhất
Hình 3.12. Biểuđồthời gian thực thi các thuật toán tìm k-lân cậngần nhất
Thuật toán đầu tiên chúng tôi thử nghiệm dựa trên thư viện ANN[79] , còn thuật toán thứ hai là một thuật toán cải thiện tốc độ tìm kiếm của tác giả dựa trên lưới tam giác Delaunay. Qua Bảng 3.5 so sánh có thể cho thấy rằng tốc độ thực thi giải pháp của tác giả có tốc độ vượt trội với mọi k. Khi k càng lớn thì tốc độ thực thi thuật toán thứ hai càng vượt trội hơn hẳn.
3.5.1.3. Thuật toán xấp xỉ k-lân cậngầnnhấtdựa trên lưới
tam giác Delaunay cho đốitượngđường
Như chúng ta vừa trình bày ở phần trên thì bài toán lân cận gần nhất đã được trình bày cho tập đối tượng không gian là đối tượng điểm. Một trong loại đối tượng không gian rất quan trọng cần khảo sát tiếp theo là đối tượng đường. Còn đối với đối tượng vùng thì ta có thể đưa về bài toán lân cận gần nhất của điểm hay của đường. Vấn đề định vị lân cận đối tượng đường có ý nghĩa thực tiễn rất cao để xác
định một vị trí cho trước nằm trên tuyến đường nào đó chẳng hạn. Đây là bài toán tiền xử lý rất quan trọng để định vị và giám sát các đối tượng chuyển động trên mạng lưới giao thông thông qua các thiết bị định vị vị trí GPS. Chúng ta có thể phát biểu bài toán lân cận gần nhất cho đối tượng đường như sau:
Định nghĩa 1.Cho một tập hợp đoạn thẳng trong không gian Euclid , cho một điểm truy vấn , tìm đoạn thẳng trong tập gần nhất với
.
Thông thường thì ta có thể sử dụng một số cấu trúc chỉ mục không gian như Kd- Tree hoặc T-Tree để tìm kiếm. Tuy nhiên, ở đây chúng tôi đề cập một cách tiếp cận tìm kiếm rất hiệu quả dựa trên cấu trúc lưới tam giác Delaunay ràng buộc. Để đơn giản và không mất tính tổng quát, chúng ta có thể coi tập đoạn thẳng L là các cạnh ràng buộc của lưới tam giác Delaunay ràng buộc CDT đã được xây dựng trong bước tiền xử lý [4] .
Thuật toánL_K_NNS:
Ở đây chúng ta sử dụng một hàng đợi ưu tiên theo trật tự khoảng cách đến mỗi đoạn tăng dần đối với điểm .
Bước 1: Tìm tam giác chứa điểm .
Bước 2: Xác định 3 cạnh của tam giác là . Tính các khoảng cách . Lưu các cạnh này vào hàng đợi ưu tiên .
Bước 3: Xác định 3 tam giác kề tam giác là . Từ mỗi tam giác này xác định được 2 cạnh đối diện với các cạnh của tam giác tương ứng là
. Tính các khoảng cách:
. Lưu các cạnh này vào hàng đợi ưu tiên .
Bước 4: Lấy từng cạnh từ hàng đợi ưu tiên . Nếu cạnh chưa phải là cạnh ràng buộc thì lặp lại bước 3. Đánh dấu cạnh đã thăm.
Độ phức tạp thuật toán:
Độ phức tạp thuật toán này hoàn toàn tương tự thuật toán tìm k - lân cận gần nhất cho đối tượng điểm.
Thuật toán này hoàn toàn có thể mở rộng để hút đối tượng đường gần nhất rất cần thiết để hỗ trợ quá trình tiền xử lý cho việc giám sát đối tượng di động thông qua các thiết bị GPS.
Hình 3.13. Tìm 1000 điểm lân cận Hình 3.14. Tìm 1000 cạnh lân cận
3.5.1.4. Kết hợp - Thuật toánxấp xỉ k-lân cận điểm và
đườnggầnnhấtdựa trên lưới tam giác Delaunay
Tác giả kết hợp 2 thuật toán trên để giải quyết cho bài toán tìm k đối tượng gần nhất không phân biệt điểm hay đường. Chẳng hạn, từ vị trí công trình xảy ra cháy nổ, tìm k trụ nước (đối tượng điểm) và bờ hồ (đối tượng cạnh) theo độ ưu tiên khoảng cách của chúng đến công trình. Hướng tiếp cận khá đơn giản, chúng ta duy trì một lưới tam giác Delaunay DT cho các đối tượng điểm, và một lưới tam giác Delaunay ràng buộc CDT cho các đối tượng đường, vùng. Để việc kết hợp trở nên đơn giản hơn, tác giả đề xuất đóng gói 2 thuật toán trên thành các lớp hoạt động như cơ chế lặp duyệt đối tượng Iterator, để có thể tuần tự lấy ra các đối tượng điểm từ DT và đối tượng đường từ CDT theo thứ tự khoảng cách tăng dần của chúng đến điểm truy vấn. Như vậy, mã giả cho thuật toán sẽ có dạng thức như sau:
Merged_K_NNS
Input: DT , CDT , query point , number Output: set of nearest objects
1 ; ;
2 let be the K_NNS iterator for , and for ;
3 set to the first NN position in , and to the first NN position in ;
4 while do {
5 if then { let be the NN at ; ; }
6 else ;
7 if then { let be the NN at ; ; }
8 else ;
9 if then {
10 add to ; ;
11 move to the next NN position in ;
12 }
13 else if then {
14 add to ; ;
15 move to the next NN position in ;
16 }
17 else {
18 add to ; ;
19 move to the next NN position in ; 20 if then {
21 add to ; ;
22 move to the next NN position in ;
23 }
24 }
25 }
cận này cho phép tìm kiếm đồng thời theo nhiều chủng loại (category) thông tin khác nhau trên từng lưới tam giác của mỗi chủng loại.
3.5.1.5. Ứngdụngthựctiễn
Thuật toán trình bày trên đã được sử dụng trong chức năng tìm kiếm các đối tượng quan tâm xung quanh một vị trí xác định trước trên trang web http://www.vietbando.com.
3.5.2. Bài toán tìm các đốitượng quan tâm xung quanh tuyếnđườnghoạchđịnh