Re: "Уточняющее прицеливание"

From
Michael Ryazanov (2:5030/1006.64)
To
Nickita A Startcev
Date
2002-05-07T00:27Z
Area
RU.ALGORITHMS
▐┤E╚°' Nickita!

 NAS>>> Есть одномерный массив элементов (x,y,data), где x,y - координаты
 NAS>>> этого псевдоточечного объекта. Диапазон в котором лежат координаты
 NAS>>> известен. Можно ли найти ближайший к X0,Y0 объект быстрее, чем за o(n)
 NAS>>> ?
<...>
 MR>> Сетку построить, деревья всякие-разные...
 NAS> Какую именно сетку?

   Ну, бьётся всё поле на некоторое количество ячеек (подбирается эмпирически) N x M. К каждой ячейке привязываются объекты, в неё входящие. Потом, очевидно, можно перебирать не все подряд объекты, а по ячейкам -- сначала ту, в которую X0,Y0 попадает, потом, если надо, соседние и т.д.

 NAS> Какие именно деревья?

   Квадрантное, "двумерное дерево поиска"...
   В литме вообще-то давали (покупали) "зелёную книжку" -- Майкл Ласло "Вычислительная геометрия и компьютерная графика на C++" -- там это дело описано.

 NAS> PS: А норма abs(x2-x1)+abs(y2-y1) намного хуже стандартной
 NAS> геометрической или нет? :)

   Кому хуже? :-) Человеку непривычному, наверно, хуже. max(|x2-x1|,|y2-y1|) -- немного привычнее.
   Только чем такой вопрос вызван? На современных процессорах умножение быстро выполняется, а корень ведь для сравнения извлекать не надо.

                                                                      |V|uxau/\
--- -- - ·
 * Origin:             Ф И З Ф А К - Ч Е М П И О H !           (2:5030/1006.64)