Алгоритм ближайшей пары точек

Я пытаюсь реализовать более простую версию этого алгоритма, но которая работает лучше, чем квадратичный алгоритм. Моя идея в основном состоит в том, чтобы отсортировать точки только по координате 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 - моя функция, которая просто возвращает расстояние между двумя точками.

Спасибо!

5
задан Paul 23 February 2012 в 01:08
поделиться