Задача...
- From
- Max Alekseyev (2:5015/60)
- To
- Andrew Plyako
- Date
- 2002-10-23T18:54:12Z
- Area
- RU.ALGORITHMS
████ OS/2 Hi, Andrew !
Replying to a message of Andrew Plyako to Max Alekseyev:
MA>> Для простоты рассмотрим случай общего положения точек (никакие три не
MA>> лежат на одной прямой).
AP> 1) Это как раз-таки, частный случай, а не общий.
Это с какой стороны посмотреть. Недаром указанное положение называется "общим".
AP> 2) В общем случае -- мы ничего не знаем о положении точек -- твой
AP> алгоритм не приемлим; точнее, его работоспособная модификация
AP> сведется к полному перебору.
Хм. Нет. Полный перебор тут O(n^3). Но даже в худшем случае можно управиться за O(n^2 log n). См. ниже.
MA>> пока не добьешься требуемого условия.
AP> Проверка "требуемого условия" потребует еще, как минимум [n/2]-1
AP> операцию.
Нет. Достаточно отсортировать точки по возрастанию угла поворота за время O(n*log n). Тогда при повороте до очередной точки, с одной стороны от прямой число точек уменьшится на единицу, а с другой соответственно увеличится. Соответственно, достаточно посчитать баланс в начале вращения, и сразу вычислить порядковый номер точки до которой нужно совершить поворот.
MA>> Сложность порядка O(n),
AP> Соответсвенно, O(n^2).
Истина посередине: O(n*log n) (для общего положения).
Когда про расположение точек ничего не известно, можно перебрать всевозможные "центры". Это решит задачу за время O(n^2*log n).
Regards, °°
Max ~
--- FleetStreet 1.27.3.8
* Origin: (2:5015/60)