|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 30 Jan 2002 20:46:34 To : Nickita A Startcev Subject : Re: Поиск ближайшей точки с координатами(x,y). -------------------------------------------------------------------------------- Nickita A Startcev wrote: > Привет, Trusov ! > > > 21 Jan 02 , 18:38 Trusov Alexey писал к All: > > TA> Имеется массив координат точек. > TA> Трубуется найти ближайшую точку из этого массива (номер элемента) к > TA> зананной точке (например с координатами x0,y0). > > TA> Как это сделать наиболее быстрым способом? > TA> Интересуют идеи, алгоритмы... > > O(N) R=(x_0-x_i)^2+(y_0-y_i)^2; > Считаем R для первой точки; помним номер точки; > Перебираем все остальные точки: если R меньше - запоминаем новый R и новый > номер точки; Имея массив точек упорядоченый по одной из координат (для примера пусть будет по x) , можно оптимизировать поиск. Пусть A[1..N] массив координат всех точек включая заданную A[i], где 1 <= i <= N. Производим перебор точек в массиве от i в обе стороны вычисляя расстояние до точек A[i + delta] и A[i - delta] и запоминая ближайшую из найденых точку и расстояние до нее. Как только A[i + delta].x - A[i].x становится >= найденого минимального расстояния - прекращаем поиск в эту сторону. Соответственно как только A[i].x - A[i - delta].x становится >= найденого минимального расстояния - прекращаем поиск в другую сторону. В зависимости от распределения точек на плоскости, это может дать выигрыш вплоть до нахождения точки на первой же итеррации. Имея два массива точек A и B упорядоченные по x и y соответственно, можно двигаться от точки ai (в массиве A) в обе стороны и точки bi (та же исходная точка в массиве B) в обе стороны по тому же алгоритму. Поиск прекращается если прекращается поиск в любом из массивов. Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.algorithms/52846d7d99e1.html, оценка из 5, голосов 10
|