Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull — различия между версиями
Yurik (обсуждение | вклад) (→Алгоритм Грэхема) |
Yurik (обсуждение | вклад) (→Описание Алгоритма) |
||
| Строка 7: | Строка 7: | ||
== Описание Алгоритма == | == Описание Алгоритма == | ||
| − | [[File:Graham1.png| | + | [[File:Graham1.png|thumb|250px|Промежуточный шаг алгоритма. Для точки <tex>p_i</tex> ищем следующую перебором.]] <br/><br/> |
1) Возьмем самую правую нижнюю точку <tex>p_0</tex> нашего множества. Добавляем ее в ответ. | 1) Возьмем самую правую нижнюю точку <tex>p_0</tex> нашего множества. Добавляем ее в ответ. | ||
| Строка 15: | Строка 15: | ||
<br/><br/><br/><br/> | <br/><br/><br/><br/> | ||
| + | |||
== Корректность == | == Корректность == | ||
Версия 12:54, 16 января 2014
| Конспект не готов. |
Ниже приводятся основные алгоритмы построения выпуклых оболочек статического множества. Используются обозначения: - размер входных данных, - размер оболочки.
Содержание
Алгоритм Джарвиса
По-другому "Gift wrapping algorithm" (Заворачивание подарка).
Описание Алгоритма
1) Возьмем самую правую нижнюю точку нашего множества. Добавляем ее в ответ.
2) На каждом следующем шаге для последнего добавленного ищем среди всех недобавленных точек и с максимальным полярным углом относительно (Если углы равны, надо сравнивать по расстоянию). Добавляем в ответ. Если , заканчиваем алгоритм.
Корректность
Точка , очевидно, принадлежит оболочке. На каждом последующем шаге алгоритма мы получаем прямую , по построению которой все точки множества лежат слева от нее. Значит, выпуклая оболочка состоит из -ых и только из них.
Псевдокод
Inplace-реализация алгоритма. - исходное множество.
Jarvis(S)
find i such that S[i] has the lowest y-coordinate and highest x-coordinate
p0 = S[i]
pi = p0
k = 0
do
k++
for i = k..n
if S[i] has lower angle and higher distance than S[k] in relation to pi
swap(S[i], S[k])
pi = S[k]
while pi != p0
return k
Сложность
Добавление каждой точки в ответ занимает времени, всего точек будет , поэтому итоговая сложность .
Ссылки
Алгоритм Грэхема
Описание Алгоритма
1)Находим самую правую нижнюю точку множества , добавляем в ответ.
2)Сортируем все остальные точки по полярному углу относительно .
3)Добавляем в ответ - самую первую из отсортированных точек.
4)Берем следующую по счету точку . Пока и две последних точки в текущей оболочке и образуют неправый поворот, удаляем из оболочки .
5)Добавляем в оболочку .
6)Делаем п.5, пока не закончатся точки.
Корректность
Псевдокод
Сложность
Сортировка точек занимает времени. При обходе каждая точка добавляется в ответ не более одного раза, поэтому сложность этой части - . Суммарное время - .