Алгоритм Киркпатрика-Зайделя / Doc / ch_KS
.htmАлгоритм Кирпатрика-Сайделя Оригинал см. в гл. 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)
Входные данные: Набор из точек на плоскости и вертикальная линия , разделяющая на левое и правое