Аналогично ответу Калеба, но вы можете остановить итеративный цикл, если вы получите расстояние, превышающее некоторое предыдущее минимальное расстояние (извините, кода нет).
Я использовал для программирования видеоигр. Для вычисления фактического расстояния между двумя точками потребуется слишком много ресурсов процессора. Мы делили «экран» на большие декартовы квадраты и избегали вычисления фактического расстояния, если Delta-X или Delta-Y были «слишком далеко» - это просто вычитание, так что, может быть, что-то в этом роде, чтобы определить, где находится настоящий ЕвклианТребуется вычислить метрику расстояния (при необходимости расширить на n-размеры)?
РЕДАКТИРОВАТЬ - расширение «слишком далеко» комментариев выбора пары кандидатов. Для краткости я возьму двумерный пейзаж. Возьмите интересующую точку (X0, Y0) и «нарисуйте» квадрат nxn вокруг этой точки с (X0, Y0) в начале координат.
Пройдите начальный список точек и сформируйте список кандидатовточки, которые находятся в этом квадрате. При этом, если DeltaX [ABS (Xi-X0)] находится за пределами квадрата, вычислять DeltaY не нужно.
Если нет точек-кандидатов, увеличьте квадрат и выполните итерацию.
Если есть ровно одна точка-кандидат, и она находится в радиусе круга, на который наложен квадрат, то это ваш минимум.
Если «слишком много» кандидатов, сделайте квадратменьше, , но вам нужно только пересмотреть список кандидатов из этой итерации, а не все точки.
Если кандидатов не слишком много, вычислите расстояние для этого списка. При этом сначала рассчитайте DeltaX ^ 2 + DeltaY ^ 2 для первого кандидата. Если для последующих кандидатов DetlaX ^ 2 до сих пор больше, чем минимумин, нет необходимости вычислять DeltaY ^ 2.
Минимум из этого расчета является минимумом, если он находится в радиусе круга, вписанногоквадрат.
Если нет, вам нужно вернуться к предыдущему списку кандидатов, в котором есть точки внутри круга, радиус которого равен этому минимуму. Например, если вы закончили с одним кандидатом в квадрат 2x2, который оказался в вершине X = 1, Y = 1, расстояние / радиус будет SQRT (2). Поэтому вернитесь к предыдущему списку кандидатов, который имеет квадрат с жадностью или равный 2xSQRT (2).
Если это оправдано, создайте новый список кандидатов, который включает в себя только точки с квадратом +/- SQRT (2). Вычислите расстояние для этих баллов-кандидатов, как описано выше, исключая любые, которые превышают рассчитанный минимум.
Нет необходимости делать квадратный корень из суммы Дельты ^ 2, пока у вас не будет только одного кандидата.
Как измерить начальный квадрат, или если он должен быть прямоугольником, и как увеличить или уменьшить размер квадрата / прямоугольника, может повлиять знание приложения о распределении данных.
Iрассмотрел бы рекурсивные алгоритмы для некоторых из них, если язык, который вы используете, поддерживает это.