Скачиваний:
21
Добавлен:
01.05.2014
Размер:
203.93 Кб
Скачать

Алгоритм Кирпатрика-Сайделя Оригинал см. в гл. 6 в файле geo.pdf

     Построение выпуклой оболочки конечного множества точек (особенно в случае точек на плоскости) довольно широко и глубоко исследовано и имеет целый ряд геометрических приложений.  Известно, что нижняя оценка нахождения упорядоченной границы выпуклой оболочки n точек на плоскости составляет , и существуют алгоритмы ее построения за время  при памяти  с использованием только арифметических операций. Известен алгоритм, интересный с точки зрения его быстродействия (статья D.G.Kirpatrick & R.Seidel “The ultimate planar convex hull algorithm” (SIAM Journal on Computing, 15(2) 1986)). Его сложность составляет , а значит, он асимптотически оптимален. Ниже приводится перевод фрагмента упомянутой статьи:    

    Отсечение и поиск  - техника, используемая для отыскания медианы по Блуму, Флойду, Пратту и Тарьяну. Техника, примененная к поиску медианы, выделяет постоянную долю чисел на каждой итерации  цикла. Решение рекуррентного уравнения дает нам время алгоритма поиска медианы.

    При поиске медианы в списке, мы сначала обобщим проблему.

Мы обсудим проблему поиска  минимальных чисел из списка , состоящего из  чисел. Сначала мы разделим  чисел на  групп, каждая по 5 элементов, будем искать медиану в каждой из групп. Пусть  будет списком из медиан. Рекурсивно ищем медиану  из списка . Можно доказать, что  больше или равно хотя бы четверти чисел в исходном списке  и меньше либо равно хотя бы четверти чисел в исходном списке .

Следовательно, число разделяет список  на 2 подсписка  и , такие, что все числа в меньше или равны  и все числа в больше или равны .  Кроме этого, размер каждого из этих двух подсписков минимально составляет  от начального списка. Теперь, если подсписок включает более  чисел, рекурсивно вызывается алгоритм поиска  минимальных чисел в списке . С другой стороны, если подсписок включает  чисел, таких что , рекурсивно вызывается алгоритм поиска  минимальных чисел в подсписке . В любом случае,  из всей величины списка мы обрабатываем максимум  от начального списка . Детали обсуждения алгоритма здесь опускаются.  Проведем анализ выше описанного алгоритма поиска медианы.

     Допустим, что временная сложность алгоритма от входных данных размера  есть . Тогда поиск медианы из списка, который состоит из  медиан, потребует время . После для обоих спискови, максимальный размер которых составляет , поиск  минимальных чисел в спискеили поиск  минимальных чисел в списке  потребует время максимально равное . Также понятно, что остальной расчет может быть сделан за время , где . Следовательно, функция удовлетворяет следующему соотношению:

Имеется- целое, т.ч.  и ,из чего несложно удостовериться по индукции в том, что

Таким образом.

   Неформально основная идея алгоритма поиска и отсечения может быть описана следующим образом:

Алгоритм отсечения и поиска   Входные данные: Задача  размера

  Выходные данные: Решение  этой задачи

НАЧАЛО 0.     Если размер  задачи  – небольшой, непосредственно решаем  и останавливаемся.

1.      Разделение задачи  на  небольших задач, размера  таким образом, что .

Здесь - фиксированная константа.

2.     Рекурсивное решение задач .

3.     После обработки результатов выполнения Шага 2 получаем решение задачи.

КОНЕЦ      Допустим, что временная сложность алгоритма Отсечения и Поиска составляет  и что Шаг1 и Шаг3 алгоритма потребуют время . Тогда функция  может быть  представлена как следующее соотношение:

    Временная сложность  алгоритма Отсечения и Поиска может быть получена при решении ранее приведенных соотношений. В частности, если функция является , тогда можно также доказать, что функция также есть.

Алгоритм построения выпуклой оболочки

(Кирпатрика – Сайделя).

   Представим алгоритм Отсечения и Поиска для построения выпуклой оболочки, которым обязаны Кирпатрику и Сайделю. Рассмотрим сначала следующую задачу:

ЗАДАЧА:

  Заданы два набора и точек на плоскости, так, что есть такая вертикальная линия , что  - слева от  и – справа от . Как найти верхний мостик между  и , т.е. линию, проходящую через точку в  и точку в таким образом, что все точки из  и  лежат ниже этой линии?

  В алгоритме ‘Слияния оболочек ‘, мы знаем, что когда выпуклая оболочка обоих наборов  и известна, верхний мостик может быть сконструирован за линейное время при подъеме отрезка между  и  до тех пор, пока уже больше не сможем поднимать отрезок. Однако построение выпуклой оболочки над  и само требует времени , которое чересчур велико для нас, т.к. мы ожидаем от алгоритма линейного времени решения задачи.

   В решении вышеописанной задачи использована технология Отсечения и Поиска. Главная идея касается поиска “подходящих” линий за время , линий, которые позволяют отбросить постоянную долю точек, как кандидатов на попадание в мостик. Мы используем рекурсию относительно оставшихся точек.

ОПРЕДЕЛЕНИЕ:

  Верхняя опорная прямая для набора  точек на плоскости включает минимум одну точку из , и все точки из  лежат ниже или на этой линии.

     Сейчас допустим, что  является верхней опорной прямой для набора и проходит через точку  из . Предположим, что  не является верхним мостиком для  и , также допустим, что является отрезком, где . Если наклон  не меньше, чем наклон , тогда легко увидеть, что этот отрезок не может быть включен в верхний мостик для   и . В частности, точка  не может принадлежать  верхнему мостику. Подобным образом, если  является верхней опорной прямой набора , проходящей через точку  из , полагаем, что  не принадлежит верхнему мостику  для  и , и  является отрезком, где .  Если наклон  не больше, чем наклон , тогда отрезок  не может находиться  в этом верхнем мостике для  и . В частности, точка  не может принадлежать верхнему мостику.

  Это ключевое наблюдение предлагает нам следующий алгоритм решения описанной задачи.

  Алгоритм ‘Верхний мостик’ (S,l)

  Входные данные: Набор  из  точек  на плоскости и вертикальная линия ,   разделяющая на левое  и правое

Соседние файлы в папке Doc