yes, sir )
А какая логика? От каждой точки считать расстояние до 99 других точек. Получить минимальное расстояние для заданной точки, и перейти к следующей точки. Итого получим в конце 99 минимальных расстояний и выбираем среди них наименьшее? Или не так?
Это вам 100! вычислений нужно, плохое решение. Можно попробовать взять прямоугольник по границам точек, потом делить его пополам по вертикали/горизонтали и смотреть сколько точек из исходных попадут в меньшие прямоугольники, пока не получите две точки.
SELECT t1.city, t2.city, ST_Distance(t1.geo_point,t2.geo_point) FROM cities t1 JOIN cities t2 ON TRUE WHERE t1.city <> t2.city ORDER BY ST_Distance(t1.geo_point,t2.geo_point) LIMIT 1 для 100 городов будет норм для большого количества, конечно, будет тяжеловато
По-моему, не 100!, а 100^2
Выборка из 100 элементов по два без повторов, 1 с 99, 2 с 98...
Разве в этом случае не 99+98+...+1 вычислений?
Да, ошибся там сумма а не проищведение
WHERE t1.city < t2.city иначе попадет (Москва,Питер) и (Питер,Москва)
Да, для 100 городов это терпимый излишек (половина лишних операций) :) Ваш фильтр - классная идея, не подумал об этом, спасибо!
Обсуждают сегодня