У меня возник тот же вопрос, и я написал для него код Python:
https://github.com/jpeterbaker/lazyDistance
README.md объясняет, как неравенство треугольника можно использовать для обновления верхних и нижних границ для каждого расстояния.
Просто запустите файл Python как скрипт для примера в 2-мерном пространстве. Построенные линии - единственные фактически рассчитанные расстояния.
В моей версии экономия времени не связана с большим количеством объектов. Как я уже писал, это алгоритм O (n ^ 4), так что это на самом деле хуже, чем просто вычисление всех расстояний, если число объектов велико. Но мой метод сэкономит время, когда у вас есть скромное количество объектов, а функция расстояния очень дорога для вычисления. Предполагается, что быстрее выполнить несколько операций O (n ^ 2), а не одно измерение расстояния.
Если n большое, вы можете найти более дешевые методы, чтобы решить, какое расстояние вычислить следующим (это не включает арифметику с n ^ 2 записями матриц границ расстояний). Вам также может не потребоваться обновлять все 2 * n ^ 2 границы каждый раз, когда этот код делает.