Интернет магазин китайских планшетных компьютеров



Компьютеры - Алгоритм Чана - Выбор числа точек m

23 января 2011


Оглавление:
1. Алгоритм Чана
2. Выбор числа точек m



Ясно, что обход по Джарвису, а следовательно и весь алгоритм, будет корректно работать только если m \geqslant h, но как заранее узнать сколько точек будет в выпуклой оболочке? Надо запускать алгоритм несколько раз, подбирая m и, если m < h, то алгоритм будет возвращать ошибку. Если делать подбор бинарным поиском по n, то в итоге получится время Ologn) = O, что достаточно долго.

Процесс можно ускорить, если начать с маленького значения и после значительно его увеличивать, пока не получится m \geqslant h. Например, взять 2^{2^t}. При этом t-я итерация займет O = O. Процесс поиска завершится, когда 2^{2^t} \geqslant h, то есть t = \lceil \mathrm{lg}\, \mathrm{lg}\, h \rceil.

В итоге \sum_{t=1}^{\mathrm{lg}\, \mathrm{lg}\, h} n 2^t = n \sum_{t=1}^{\mathrm{lg}\, \mathrm{lg}\, h} 2^t \leqslant n 2^{1 + \mathrm{lg}\, \mathrm{lg}\, h} = 2 n \,\mathrm{lg}\, h = O.

ChanHull
 for t = 1 to n do:
     взять m = \min;
     L = Hull;
     if L != «m маленькое, попробуйте еще» return L;


Просмотров: 2701


<<< Алгоритм Уайлера Атертона
Алгоритмы построения отрезка >>>