Задача пошуку найближчого сусіда є задачею оптимізації, яка полягає у відшуканні у множині елементів, розташованих у багатовимірному метричному просторі, елементів, близьких до заданого, відповідно до заданої функції близькості. Формально ця задача ставиться наступним чином: надано множину точок S у просторі M та точку q ∈ M, необхідно знайти найближчу до q точку в S. Дональд Кнут в Мистецтві програмування (том 3, 1973) назвав це проблемою поштового відділення, посилаючись на застосування цієї задачі до пошуку найближчого поштового відділення. Прямим узагальненням задачі пошуку найближчого сусіда є алгоритм пошуку k-NN, який призначений для пошуку k найближчих точок.

Найчастіше M є метричним простором і запроваджується функція близькості, що визначається як метрика, яка є симетричною і задовольняє нерівності трикутника. Ще загальніше, M — це d-вимірний векторний простір, в якому близькість береться як Евклідова метрика, вулична метрика або інші метрики. Однак функція близькості може бути довільною. Одним з прикладів може бути , для якої нерівність трикутника не виконується.

Застосування Задача пошуку найближчого сусіда зустрічається у багатьох областях, наприклад:

розпізнавання образів; класифікація документів; рекомендаційні і експертні системи; динамічне розміщення реклами в Інтернеті.

Моделі даних Перед вирішенням прикладної задачі необхідно обрати форму подання об'єктів і функцію близькості. У більшості випадків об'єкти подаються у вигляді багатовимірних векторів, а як функція близькості використовується скалярний добуток векторів, але можуть бути й інші форми подання даних, наприклад:

множини — розмір перетину множин; рядки — відстань Левенштейна; граф — відповідність структур.

Споріднені задачі Існують численні варіанти задачі пошуку найближчих сусідів. Окрім класичної задачі знаходження найближчої до заданої точки, можуть бути поставлені задачі:

знайти близьких сусідів (не обов'язково найближчого); знайти найближчого сусіда для групи елементів; знайти кількох найближчих сусідів; знайти усі пари елементів, відстань між якими менша за деяку задану; знайти найближчих сусідів у середі, що динамічно змінюється.

Одним з найбільш відомих варіантів є k-NN пошук. Алгоритм k-NN

Алгоритм k-NN — це алгоритм автоматичної класифікації об'єктів. Він визначає k сусідів, найближчих до заданої точки (об'єкта). Цей метод широко використовується у прогностичній аналітиці для оцінки або класифікації точки на основі узгодженості її сусідів. k-NN граф є графом, в якому кожна точка з'єднана з її k найближчими сусідами.

Алгоритми Було запропоновано багато алгоритмів вирішення задачі пошуку найближчого сусіда. Якість та корисність алгоритмів визначається часовою складністю запитів, а також складністю усіх структур пошуку інформації, що мають підтримуватися. Не існує загального вирішення задачі у багатовимірному Евклідовому просторі, яке б використовувало поліноміальний час попередньої обробки та полілогаріфмічній час пошуку даних.

Послідовний пошук Найпростішим способом розв'язання задачі, є обчислення відстані від заданої точки до кожної іншої точки в наборі даних, постійно відстежуючи найкращий результат на даний момент. Цей алгоритм називають прямими методом, і його складність виконання становить O(dN), де N — це потужність множини точок S, а d — це розмірність простору M. Для реалізації не потрібні ніякі додаткові структури для пошуку даних, тому лінійний пошук не потребує додаткової пам'яті крім використаної для початкового набору даних.

Розбиття простору Діаграма Вороного; KD-дерева; BSP-дерева;

R-дерево.

Зворотній індекс Метод рідкісних точок.

Інші Хешування; .

Див. також Діаграма Вороного Пошук найближчої пари точок Метод найближчих k-сусідів Граф найближчих сусідів Перший засік ліпший

Примітки

Посилання Yury Lifshits. Algorithms for Nearest Neighbors: Theoretical Aspects