Структури даних, які вас цікавлять, - це метричні дерева. Тобто вони підтримують ефективний пошук у метричних просторах. Метричний простір формується сукупністю об'єктів і визначеною серед них функцією відстані, що задовольняє нерівність трикутника. Мета полягає в тому, щоб отримати набір об'єктів і елемент запиту, щоб отримати ці об'єкти досить близько до запиту.
Оскільки проблеми пошуку буквально скрізь є інформатикою, існує величезна кількість різних метричних дерев. Однак їх можна розділити принаймні на дві групи: на основі стрижнів та кластеризації (і, звичайно, є і гібриди). Добре опитування - Е. Чавес та ін., Пошук у метричних просторах, 2001 . Дивіться, наприклад, Розділ 5: Поточні рішення метричних просторів, стор. 283.
Там, у таблиці 1, Чавес та ін. розглянемо 16 різних метричних дерев. Вони представляють складність простору, складність конструкції, складність запиту та додатковий час запиту процесора для кожного (якщо відомо). Якщо ви не надто дбаєте про складність конструкції, складність запиту для BK-дерева єО ( н.)α), де 0 < α < 1залежно від діапазону пошуку та структури простору. Або якщо у вас немає величезної кількості елементів, подивіться на AESA (наближаючи до усунення алгоритму пошуку). Створювати та зберігати величезні простори неприйнятно повільно (О ( н.)2) час і простір), але експериментально було показано O ( 1 ) час запиту.
Чавес та ін. також дайте хороший огляд інших дерев, і, звичайно, більше посилань, якщо якесь конкретне викликає ваш інтерес. На практиці продуктивність різних дерев часто оцінюється експериментально. Це, на мою думку, дуже залежить від структури простору. Тому важко сказати, яке саме дерево було б найбільш ефективним у вашому випадку. Тим не менш, я вважаю, що найкраще спочатку поїхати з найпростішим. Якщо BK-дерева найпростіші для побудови, спробуйте їх спочатку. Якщо вони не відповідають вашим вимогам, вкладіть час (можливо, час програмування), щоб зібрати більше фактів про ваш простір, які могли б допомогти вам прийняти більш обґрунтовані рішення.