Я пытаюсь реализовать более простую версию этого алгоритма, но которая работает лучше, чем квадратичный алгоритм. Моя идея в основном состоит в том, чтобы отсортировать точки только по координате x и попытаться решить ее оттуда.Как только я отсортирую свой массив точек по координате x, я хочу перебрать массив и в основном пропустить точки, расстояние которых больше, чем первые две точки, которые я взял.
Например, my currentminDist = x;
Если две пары точек, на которые я смотрю, имеют расстояние> x (только по ее координате x dist), я игнорирую точку и прохожу мимо нее в массиве.
У меня есть идея, но я как бы застрял в том, как это реализовать (особенно в части условий). У меня есть функция, которая возвращает мне расстояние между двумя точками на основе их координаты x.
Я не понимаю, как на самом деле писать мои условия для моего цикла, так как я хочу игнорировать точку, если расстояние оказывается слишком большим, и все же заполнять свой массив, который будет содержать ответы для ближайших точек для каждого i (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 - моя функция, которая просто возвращает расстояние между двумя точками.
Спасибо!