Центральный Дом Знаний - Алгоритм Грэхема

Информационный центр "Центральный Дом Знаний"

Заказать учебную работу! Жми!



ЖМИ: ТУТ ТЫСЯЧИ КУРСОВЫХ РАБОТ ДЛЯ ТЕБЯ

      cendomzn@yandex.ru  

Наш опрос

Как Вы планируете отдохнуть летом?
Всего ответов: 922

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Форма входа

Логин:
Пароль:

Алгоритм Грэхема

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

В качестве входных данных процедуры Graham выступает множество точек Q, где |Q|\geqslant 3. В ней вызывается функция Top(S), которая возвращает точку, находящуюся на вершине стека S, не изменяя при этом его содержимое. Кроме того, используется также функция NextToTop(S), которая возвращает точку, расположенную в стеке S, на одну позицию ниже от верхней точки; стек S при этом не изменяется.

Graham(Q)

1) Пусть p0 — точка из множества Q с минимальной координатой y или самая левая из таких точек при наличии совпадений

2) Пусть <p_1, p_2,\ldots,p_m> — остальные точки множества Q, отсортированные в порядке возрастания полярного угла,

измеряемого против часовой стрелки относительно точки p0

(если полярные углы нескольких точек совпадают, то по расстоянию до точки p0)

3) Push(p0,S)

4) Push(p1,S)

5) for i = 2 to m do

6) while угол, образованный точками NextToTop(S),Top(S) и pi, образуют не левый поворот

(при движении по ломаной, образованной этими точками, мы движемся прямо или вправо)

7) do Pop(S)

8) Push(pi,S)

9) return S

Для определения, образуют ли три точки a, b и c левый поворот, можно использовать обобщение векторного произведения на двумерное пространство, а именно условие левого поворота будет выглядеть следующим образом: uxvy − uyvx > 0, где  u = \left\{ b_x - a_x, \; b_y - a_y \right\},v = \left\{ c_x - a_x, \; c_y - a_y \right\}

  • Пример работы А.Г.:

  • Grah1.gif

     

  • Grah2.gif

     

  • Grah3.gif

     

  • Grah4.gif

     

  • Grah5.gif

     

  • Grah6.gif

     

  • Grah7.gif

     

  • Grah8.gif

     

  • Grah9.gif

     

  • Grah10.gif

     

  • Grah11.gif

     

  • Grah12.gif

Если процедура Graham обрабатывает множество точек Q, где |Q|\geqslant 3, то по завершении этой процедуры стек S будет содержать (в направлении снизу вверх) только вершины оболочки CH(Q) в порядке обхода против часовой стрелки.

Время работы процедуры Graham равно O(n lg n), где n = |Q|. Как несложно показать, циклу while потребуется время O(n). В то время, как сортировка полярных углов займет O(n lg n) времени, откуда и следует общая асимптотика процедуры Graham.

Loading

Календарь

«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930

Архив записей

Друзья сайта

  • Заказать курсовую работу!
  • Выполнение любых чертежей
  • Новый фриланс 24