Сравнительный анализ алгоритмов построения выпуклой оболочки на плоскости
Категория реферата: Рефераты по математике
Теги реферата: реферат мыло, кредит реферат
Добавил(а) на сайт: Nedel'skij.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата
Задача ВО1. (Выпуклая оболочка). В E2 задано множество S, содержащее N точек. Требуется построить их выпуклую оболочку (т.е. полное описание границы CH(S)).
Задача ВО2. (Открытый алгоритм для выпуклой оболочки). На плоскости задана последовательность из N точек p1, …, pN. Требуется найти выпуклую оболочку таким образом, чтобы, после обработки точки pi имелась CH({p1, …, pi}).
Рассмотрим ВО1. То, что вершины многоугольника, являющегося выпуклой оболочкой, следуют в определенном порядке, указывает на связь с задачей сортировки. В самом деле, следующая теорема показывает то, что решение ВО1 должно быть в состоянии выполнить сортировку.
Теорема 2. Задача сортировки за линейное время сводится к задаче
построения выпуклой оболочки, и, следовательно, для нахождения
упорядоченной выпуклой оболочки для N точек на плоскости требуется время
((N log N).
Доказательство. Сведем задачу сортировки N положительных действительных чисел x1,.., xN к задаче ВО1. Поставим в соответствие числу xi точку (xi, xi2) и присвоим ей номер i. Выпуклая оболочка этого множества, представленная в стандартном виде будет представлять собой упорядоченное относительно значения абсциссы множество всех точек из исходного. Из него за линейное время можно получить отсортированный список.
Очевидно, что если мы можем решать ВО2, то мы можем решить и ВО1, по- этому задача ВО1 может быть сведена к ВО2 за линейное время. Следовательно, нижняя оценка для ВО2 не ниже ((N log N).
Предварительная разработка алгоритма построения выпуклой оболочки
Для начала рассмотрим несколько малопродуктивных алгоритмов построения
выпуклой оболочки.
Определение 3. Точка p выпуклого множества S называется крайней, если не существует пары точек a, b ( S таких, что p лежит на открытом отрезке ab.
Очевидно, что подмножество крайних точек E является наименьшим
подмножеством S, выпуклая оболочка которого, является выпуклой оболочкой
множества S, или conv(E)=conv(S). Поэтому нам необходимо для нахождения
выпуклой оболочки выполнить два шага:
Определить крайние точки.
Упорядочить эти точки так, чтобы они образовали выпуклый многоугольник.
Теорема 3. Точка p не является крайней точкой множества S только тогда когда она лежит в некотором треугольнике, вершинами которого принадлежат S, но сама она не является вершиной этого треугольника.
Эта теорема дает возможность построить алгоритм проверки крайности точки.
Если мы имеем дело с множеством S мощности N, то можно построить O(N3)
треугольников. Проверка принадлежности точки треугольнику выполняется за
постоянное количество операций. Следовательно, за время O(N3) можно
определить, является ли точка крайней, а за O(N4) и для всех точек.
Следующая теорема показывает, – в каком порядке должны быть точки в
конечном множестве.
Теорема 4. Последовательные вершины выпуклого многоугольника располагаются в порядке, соответствующем изменению угла относительно любой внутренней точки.
Упорядочить крайние точки множества можно относительно их центроида.
Центроид множества для N точек вычисляется за время O(N) арифметических
операций. Грэхем предложил использовать для этого только три любые
неколлинеарные точки множества S. В худшем случае это требует время O(N), но почти всегда это первые три точки.
Упорядочить их можно за время O(N log N). Таким образом, мы решаем задачу
ВО1 за время O(N4).
Метод обхода Грэхема
Приведенный выше алгоритм является неэффективным, поэтому необходим
способ более быстрого построения выпуклой оболочки. Для этого нам необходим
другой подход.
Грэхэм в одной из первых своих работ сумел показать, как можно, предварительно отсортировав точки относительно полярного угла с центром в
какой-нибудь внутренней точке, можно найти крайние точки за линейное
время[v].
Пусть центр координат в какой-нибудь внутренней точке. Упорядочим точки
относительно полярного угла, а если таковые совпадают относительно
расстояния от центра координат. Так как обе точки лежат на одной прямой
проходящей через центр координат, то для сравнения нам нет необходимости
вычислять расстояние, а можно сравнивать сумму абсолютных значений
координат.
Отсортированные точки следует поместить в двусвязный список. Так как
внутренние точки принадлежат некоторому треугольнику (Opq), где p и q –
соседние вершины точке выпуклой оболочки. Суть алгоритма в последовательном
просмотре отсортированного списка и удалении внутренних вершин. Оставшиеся
точки будут являться вершинами выпуклой оболочки.
Просмотр начнем с точки являющейся вершиной ВО. Для этого можно взять
точку с минимальной абсциссой, а если их несколько, то и минимальной
ординатой и пометить как начальную. После чего, обходим список, начиная с
нее, против часовой стрелки и проверяем внутренний угол для текущей точки.
Если он больше либо равен (, то удаляем вершину, а иначе переходим к
следующей. Так как за каждый просмотр мы или удаляем одну вершину, или
переходим к следующей, а просмотр заканчиваем при достижении вершины
начало, которая не удалится, то мы выполняем не более N шагов.
Рассмотренный метод называют методом обхода Грэхема.
Теорема 5. Выпуклая оболочка N точек на плоскости может быть найдена за время O(N log N) при памяти O(N) с использованием только арифметических операций и сравнений.
Доказательство. Из предыдущего алгоритма видно, что в нем используются только арифметические операции и сравнения. Для нахождения внутренней точки и обхода требуется линейное время, а на сортировку уходит O(N log N). Для представления списка нам достаточно O(N) памяти.
Так как выше было доказано, что нижняя оценка для алгоритма решающего эту
задачу равна O(N log N), то получаем, что обход Грэхема имеет оптимальное
время выполнения. Но он является оптимальным в худшем случае, а поведение
его в среднем мы не изучили. Этот алгоритм имеет несколько недостатков.
В нем используются тригонометрические функции, а так как их вычисление
связано с большими затратами по времени, то желательно от них избавиться.
Эндрю предложил метод решения этой проблемы[vi].
Если на плоскости заданы N точек, то существует самая левая и самая
правая точки, и они являются вершинами выпуклой оболочки. Прямая, проходящая через эти точки делит множество на две части. Это точки, которые
лежат выше и точки, которые ниже прямой. Оба множества порождают
соответствующие им части выпуклой оболочки, причем они являются монотонными
ломаными относительно оси x. Поэтому, отдельно отсортировав эти множества
по значению абсциссы, производится обход Грэхема.
Недостатками алгоритма являются и то, что он не открытый, а так же не
допускает разбиение исходной задачи на подзадачи для параллельной
обработки.
Быстрые методы построения выпуклой оболочки.
Для построения выпуклой оболочки можно создать алгоритмы построения
выпуклой оболочки, напоминающие быструю сортировку. Такие алгоритмы
называются быстрыми методами построения оболочки.
[pic]
Рис. 1: h – самая удаленная от bl точка.
Суть алгоритма состоит в том, что исходное множество S из N точек
разбивается на два подмножества, каждое из которых будет содержать одну из
двух ломаных, которые при соединении образуют выпуклую оболочку. Для начала
нужно определить две точки, которые будут являться соседними вершинами
выпуклой оболочки. Можно взять самую левую вершину, пусть это будет b, и
самую левую относительно b из оставшихся, пусть это будет e. После чего
нужно найти точку h максимально удаленную от прямой be. Все точки, лежащие
в треугольнике bel исключаются из дальнейшего рассмотрения. Остальные
точки будут делиться на два подмножества: точки, которые лежать левее bh и
eh, и точки, которые лежат правее и bh, и eh. Каждое из них содержит
ломаные которые в сочетании с e, b и h дают выпуклую оболочку. С каждым из
них проделываем то же самое. В подмножестве точек S’, лежащих левее bh и eh
выбираем h’, максимально удаленную от eh, которая делит его на три части.
Из них одна выбрасывается, а остальные делятся опять. Это реализуется
рекурсивной процедурой, которая для данного ей множества возвращает
соответствующую часть выпуклой оболочки.
В случае, когда мощность каждого, из подмножеств, на которое делится
множество, не превосходит некоторой константы умноженной на мощность
множества, получаем сложность алгоритма, как и в быстрой сортировке O(N log
N). Но в худшем случае может потребоваться время O(N 2).
Алгоритмы типа “разделяй и властвуй”.
Рекомендуем скачать другие рефераты по теме: 7 ответов, шпаргалки по социологии.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата