tl; dr Làm thế nào để một số thứ như Mathematica Nearest
được triển khai hiệu quả?Cấu trúc dữ liệu để truy xuất hiệu quả phần tử gần nhất từ một tập hợp
Mathematica có một chức năng gọi là Nearest
mà sẽ mất một danh sách "những điều" (họ có thể con số, tọa độ trong không gian ba chiều n
, chuỗi, vv), và sẽ trả về một đối tượng NearestFunction
. Đối tượng này là một hàm, khi được áp dụng cho x
, sẽ trả về phần tử danh sách gần nhất với x
bởi một số chỉ số khoảng cách. Chỉ số khoảng cách có thể được chuyển thành tham số cho Nearest
: theo mặc định, nó sử dụng khoảng cách Euclide cho dữ liệu số và một số khoảng cách chỉnh sửa cho chuỗi.
Ví dụ (điều này hy vọng sẽ làm cho các câu hỏi rõ ràng hơn):
nf = Nearest[{92, 64, 26, 89, 39, 19, 66, 58, 65, 39}];
nf[50]
sẽ trở lại 58
, yếu tố gần gũi nhất với 50
. nf[50, 2]
sẽ trả lại {58, 39}
, hai yếu tố gần nhất.
Câu hỏi: một cách hiệu quả để thực hiện chức năng này là gì? Loại cấu trúc dữ liệu nào là NearestFunction
có khả năng sử dụng nội bộ? Sự phức tạp tốt nhất có thể của việc tính toán một phần tử gần nhất cho các loại dữ liệu khác nhau là gì? Để có một danh sách đơn giản các số phân loại chúng và thực hiện tìm kiếm nhị phân sẽ hoạt động, nhưng Nearest
hoạt động với dữ liệu đa chiều cũng như với hàm khoảng cách tùy ý, vì vậy tôi cho rằng nó sử dụng một cái gì đó tổng quát hơn. Nhưng tôi sẽ không ngạc nhiên nếu nó hóa ra là chuyên môn cho một số loại dữ liệu/chức năng khoảng cách.
Bạn đã xem: http://www.google.co.uk/search?q=adjacency+data+structure – Marcin
@Marcin Tôi không quen thuộc với thuật ngữ này. – Szabolcs