"Уточняющее прицеливание"
- From
- Andrew Plyako (2:5030/922.20)
- To
- Nickita A Startcev
- Date
- 2002-05-07T15:58:54Z
- Area
- RU.ALGORITHMS
Hello Nickita.
05 May 02 14:51, you wrote to me:
NS>>> Есть одномерный массив элементов (x,y,data), где x,y -
NS>>> координаты этого псевдоточечного объекта. Диапазон в котором
NS>>> лежат координаты известен.
NS>>> Можно ли найти ближайший к X0,Y0 объект быстрее, чем за o(n) ?
AP>> Только если тем или иным способом упорядочить массив.
Ну, например, так:
Раз диапозон координат задан, то для простоты будем считать, что все координаты лежат в первом квадранте (x>0, y>0). Тогда, упорядочим точки по возрастанию расстояния до начала коориднат.
Пусть нам надо найти точку ближайшую к точке A:
| A
| B
|___________
O
Заметим, что (по неравенству треугольника) |AB| > |OB| - |OA|.
Таким образом, если текущей "наиближайшей" точкой является точка С,
то мы можем не рассматривать все X: |OX| > |AC| + |OA|. То есть, обнаружив очередной претендент на звание "ближайшей точки", мы сразу отсекаем "хвост" нашего массива -- можем его не рассматривать.
Чем ближе исходная точка A к точке O, тем лучше. Как следствие, иногда может иметь смысл хранить сразу несколько "упорядочеваний" массива (относительно расстояния до разных точек).
Andrew
---
* Origin: Думать безОбразно -- безобрАзно!!! (2:5030/922.20)