Я пытаюсь реализовать более простую версию этого алгоритма, но который работает лучше, чем квадратичный алгоритм. Моя идея состоит в том, чтобы отсортировать точки только по координате x и попытаться решить ее оттуда. Как только я сортирую свой массив точек по координате x, я хочу перебирать массив и в основном пропускать точки, расстояние которых больше, чем первые две точки, которые я взял.Самый близкий алгоритм точек точек
Например, my currentminDist = x;
Если две пары точек, на которые я смотрю, имеют расстояние> x (только по его координате x), я игнорирую точку и перемещаю ее в массиве.
У меня есть идея, но я как бы зациклен на том, как на самом деле реализовать это (особенно часть состояния). У меня есть функция, которая возвращает мне расстояние между двумя точками, основанное на их координате x.
Я смущен тем, как писать мои условия для моего цикла, так как я хочу игнорировать точку, если расстояние слишком далеко и по-прежнему заполняет мой массив, который будет содержать ответы для ближайших точек для каждого i (я являюсь текущим пунктом, на который я смотрю).
Любые советы или указания были бы весьма полезными. Я не очень хорошо разбираюсь в алгоритмах кодирования, поэтому он довольно расстраивает.
Вот часть моего кода:
for (i = 0; i < numofmypoints; i++)
{
for (int j = i + 1; (j < numpofmypoints) && ((inputpoints[j].x - inputpoints[i].x) < currbest); j++)
{
currdist = Auxilary.distbyX(inputpoints[i],inputpoints[j]);
if (currdist < bestdist)
{
closest[i] = j;
bestdist = currdist;
}
}
}
distbyX моя функция, которая просто возвращает расстояние между двумя точками.
Спасибо!
@Paul: вам нужно сделать это часто? Не могли бы вы сохранить свои баллы в «квадранте»? http://en.wikipedia.org/wiki/Quadtree – TacticalCoder
Обратите внимание, что вы можете получить лучшую производительность, чем с наивным алгоритмом, но вы все равно будете «O (n^2)». – ARRG
Почему в вашем коде есть 'currbest' и' bestdist'? В чем разница? – Ishtar