Я могу придумать три решения, каждое из которых имеет свой компромисс между временем и пространством.
n x n массив
Если у вас есть небольшое количество n объектов и функция расстояния D (n 1 , n 2 ), вы можете рассчитать расстояния заранее .
Создание 2D n x n массива. В массиве [i, j] хранится результат D (n i , n j ).
Плюсы:
- После первоначального расчета ответ для любых двух объектов дается в O (1).
- Простота
Минусы:
- неэффективность для больших наборов данных
- Не может легко добавлять новые объекты на лету
запоминание
Запоминание функция расстояния для запоминания предыдущих вызовов.
R-Tree
Стандартная структура данных для хранения объектов в 2D \ 3D-объектах, таких как точки и Многогранники , равна R-Trees . Короче говоря, ваши объекты сгруппированы в трехмерные кубы соседних предметов. Он обеспечивает эффективное время вставки и просмотра журнала (n), а поиск порогового расстояния чрезвычайно эффективен, особенно когда ответ отрицательный.
Цитирование статьи Википедии :
Обычное использование R-дерева в реальном мире может заключаться в хранении ... полигонов, типичных для карт.
состоят из: улиц, зданий, очертаний озер, береговых линий и т. д.
а затем быстро найти ответы на такие вопросы, как «Найти все музеи»
в пределах 2 км от моего текущего местоположения "," восстановить все участки дороги
в пределах 2 км от моего местоположения "
И
Ключевая идея структуры данных состоит в том, чтобы сгруппировать близлежащие объекты и
представлять их с их минимальным ограничительным прямоугольником в следующем
более высокий уровень дерева; «R» в R-дереве для прямоугольника.
У вас есть реализации R-Tree на большинстве современных языков программирования.