Главная » Просмотр файлов » Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн - Алгоритмы - Построение и анализ (2 изд.)

Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн - Алгоритмы - Построение и анализ (2 изд.) (1123758), страница 220

Файл №1123758 Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн - Алгоритмы - Построение и анализ (2 изд.) (Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн - Алгоритмы - Построение и анализ (2 изд.)) 220 страницаТ. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн - Алгоритмы - Построение и анализ (2 изд.) (1123758) страница 2202019-05-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 220)

Развернутых углов быть не должно, посюльку ни одна из вершин выпуклого многоугольника не может быть выпуклой комбинацией других вершин этого многоугольника.) После снятия со стека всех вершин, в которых при переходе к точке р; не производится левый поворот, в стек заносится точка р,.

На рис. 33.7б-л показано состояние стека Я после каждой итерации цикла 1ог. По окончании работы в строке 10 процедуры Оклнлм Бслн возвращается стек Я. На рис. 33.7м показана полученная выпуклая оболочка. В сформулированной ниже теореме формально доказывается юрректность процедуры Оклнлм Ясли. Теорема 33.1 (Корректность сканирования по Грэхему). Если процедура Оялнлм Бслн обрабатывает множество точек Я, где ~Я~ > 3, то по завершении этой процедуры стек Я будет содержать (в направлении снизу вверх) только вершины оболочки СН Я) в порядке обхода против часовой стрелки.

Доказаювольсагао. После выполнения строки 2 в нашем распоряжении имеется последовательность точек (ры рз,..., р ). Определим подмножество точек Я; = = (ро,рм...,рг) при 1 = 2,3,...,т. Множество точек Я вЂ” Я„, образуют те из них„что были удалены из-за того, что их полярный угол относительно точки ро совпадает с полярным углом некоторой точки из множества Я . Эти точки не принадлежат выпуклой оболочке СН Я), так что СН (Я ) = СН (Я). Таким образом, достаточно показать, что по завершении процедуры Оклнлм Бслн стек 5 состоит из вершин оболочки СН (Я ) в порядке обхода против часовой стрелки, если эти точки просматриваются в стеке снизу вверх. Заметим, что точно так же, как точки ро, ры р,„являются вершинами оболочки СН Я), точки ро, ры р; являются вершинами оболочки СН (Я;).

В доказательстве используется сформулированный ниже инвариант цикла. В начале каждой итерации цикла )ог в строках 6-9 стек Я состоит (снизу вверх) только из вершин оболочки СИЯ 1) в порядке их обхода против часовой стрелки. Инициализация. При первом выполнении строки 6 инвариант поддерживается, поскольку в этот момент стек Я состоит только из вершин Яз — — Яг и и это множество трех вершин формирует свою собственную выпуклую оболочку. Кроме того, если просматривать точки снизу вверх, то они будут расположены в порядке обхода против часовой стрелки.

Сохранение. При входе в новую итерацию цикла 1ог вверху стека Я находится точка р; и помещенная туда в конце предыдущей итерации (или перед 1068 Часть Чй. И эбранные тем, Рив Ра ° Рн :'Ро 0з Рб ° Р в Г/ Р ./'РЗ Р ° . р Рп Рз рз Рб Рв Рз Рн ° Ро Ра Рзо ° Рзо ° Рн Рв Рп Ро Рз Рб Ро Рз Рп ° Рз Ро ) Ро Ри ° Рзо Рб Рб Рн° Рз Ра ° Рз Ро а) Рис. 33.7. Обработка Ро о) Рис... отка процедурой Оклнлм Бс слн множеств а точек , показанного на первой нтерацие, еи, когда в = 3~. П б е но п~р~д тем после Рб. Пу~~ также Р троке 9 в стек точка Распоп Я очкои оженная в стеке , а точка .

е , когда точка точки, что рб еще туда не доб рр находится и после -й и до .авлена, стек содержит те а ог. оэто с же му, согласно инва ва ианту Глава 33. Выч ычислительная ге ометрия 1069 Рзо ° Рзо ° Рь Рь Рз Рз Рз Рз Ра Ро ж) Ро з) Рз Рз Ра Ра Ро и) Ро к) Рз Рз Ра Ра Ро Ро м) л) цикла, в этот мом их обхо ент стек "~~ в~р~ины СН 5 содержит тол в порядке как в него олжим размышлять о ма ив ерх. матривать их снизу вв полярнь " него будет добавле ена точка рь Об Я непосредстве венно перед тем ныи угол точки от рагимся к рис.

33. точки р и п р; относительно точки с..8а. Поскольку от чки ро больше, чем поля ный точка р была б л рьр р; сворачивает в ( )ла ы снята со стека влево (в противном с ока), после д~Ж~~~~~й~~ ом случае и только вершины СН(Я ' 1 )в нем буд с ения в стек Я точки ( р; до уг содержаться вершины Часть Ч11. Избранные темы 1070 Рис. 33.8. Доказательство корректности процедуры Оклнлм 8слн СН (ф 1.1 (рД). При этом они будуг расположены в порядке обхода против часовой стрелки, если просматривать их снизу вверх. Теперь покажем, что множество вершин СН (ф 0 (р;)) совпадает с множеством точек СН (Я;). Рассмотрим произвольную точку рн снятую со стека во время выполнения г-й итерации цикла 1ог, и пусть р, — точка, расположенная в стеке Я непосредственно под точкой р~ перед снятием со стека последней (этой точкой р„может быть точка р ). Угол ~р„р~р; не сворачивает влево, и полярный угол точки р~ относительно точки ро больше полярного угла точки р,.

Как видно из рис. 33.86, точка р~ должна располагаться либо внутри треугольника, образованного точками ро, р, и р;, либо на стороне этого треугольника (но не совпадать с его вершиной). Очевидно, что поскольку точка р~ находится внутри треугольника, образованного тремя другими точками множества Я,, она не может быть вершиной СН (Я,). Так как р~ не является вершиной СН (ф), можно записать соотношение (33.1) Пусть Р; — множество точек, снятых со стека во время выполнения г-й итерации цикла 1ог. Поскольку равенство (33.1) применимо ко всем точкам множества Р;, в результате его многократного применения можно показать, что выполняется равенство СН Я, — Р;) = СН(Я;).

Однако Я; — Р; = = ф О (р,), поэтому мы приходим к заключению, что СН(ф О (р;)) = = СН٠— Р,) = СНЯ;). Мы показали, что сразу после вытеснения из стека Я точки р; в нем содержатся только вершины СН Я,) в порядке их обхода против часовой стрелки, если просматривать их в стеке снизу вверх. Последующее увеличение на единицу значения переменной г приведет к сохранению инварианта цикла в очередной итерации. Глава 33. Вычислительная геометрия 1071 Завершение.

По завершении цикла выполняется равенство ! = т+ 1, поэтому из инварианта цикла следует, что стек Я состоит только из вершин СН (Я ), т.е. из вершин СН (Я). Эти вершины расположены в порядке обхода против часовой стрелки, если они просматриваются в стеке снизу вверх. На этом доказательство завершается. й Теперь покажем, что время работы процедуры ОкАНАм Вслх равно 0 (и !8 п), где и = ~ф. Выполнение строки 1 занимает время 6 (о). Для сортировки полярных углов методом слияния или пирамидальной сортировки, а также сравнения углов с помощью векторного произведения, как описано в разделе 33.1, в строке 2 требуется время 0 (и !я п). (Все точки с одним и тем же значением полярного угла, кроме самой удаленной, можно удалить в течение времени О (и).) Выполнение строк 3-5 занимает время О (1).

В силу неравенства гп < п — 1 цикл !ог в строках 6-9 выполняется не более п — 3 раз. Так как выполнение процедуры Рози занимает время 0(1), на выполнение каждой итерации требуется время 0(1), если не принимать во внимание время, затраченное на выполнение цикла зг!и!е в строках 7 — 8. Таким образом„общее время выполнения цикла 1ог равно О (п), за исключением времени выполнения вложенного в него цикла згййе. Покажем с помощью группового анализа, что для выполнения всего цикла ий!!е потребуется время 0(п). При ! = 0,1,...,гл каждая точка р; попадает в стек Я ровно по одному разу. Как и при анализе процедуры Мыт!Рог в разделе 17.1, нетрудно заметить, что каждой операции Розн соответствует не более одной операции РоР.

По крайней мере три точки (ро, р1 и р ) никогда не снимаются со стека, поэтому всего выполняется не более гп — 2 операций Рог. В каждой итерации цикла згн!!е выполняется одна операция Рог, следовательно, всего этих итераций не более гп — 2. Так как проверка в строке 7 занимает время 0(1), каждый вызов Рор также требует О (1) времени, и в силу неравенства т < п — 1, полное время, которое требуется для выполнения цикла зяЫ!е, равно О (и). Таким образом, время выполнения процедуры ОкАнАМ Ясли составляет О (и !8 и). Обход по Джарвису При построении выпуклой оболочки множества точек Я путем обкода ло Джарвису (Уагч1з'з шаге!з) используется метод, известный как упаковка лаке>ил (рас!сабе старр!п8) или упаковка подарка (81Й итарр!пб).

Время выполнения алгоритма равно 0 (пй), где й — количество вершин СН (Я). В том случае, когда Ь равно о (!8 и), обход по Джарвису работает быстрее, чем сканирование по Грэхему. Интуитивно обход по Джарвису моделирует обертывание плотного куска бумаги вокруг множества Я. Начнем с того, что прикрепим конец бумаги к нижайшей точке множества, т.е. к той же точке рс, с которой начинается сканирование по Грэхему. Эта точка является вершиной выпуклой оболочки. Натянем бумагу вправо, Часть ЧИ.

Избранные темы 1072 Левая цепь, Правая цепь Левая цепь ' Правая цепь Рис. 33.9. Работа алгоритма обхода по Джарвису чтобы она не провисала, после чего переместим ее вверх до тех пор, пока она не коснется какой-то точки. Эта точка также должна быть вершиной выпуклой оболочки.

Сохраняя бумагу натянутой, продолжим наматывать ее на множество вершин, пока не вернемся к исходной точке ро. Если говорить более формально, то при обходе по Джарвису строится последовательность Н = (ро, ры..., рь 1) вершин СН Я). Начнем с точки ро. Как видно из рис.

33.9, следующая вершина выпуклой оболочки р1 имеет наименьший полярный угол относительно точки ро. (При наличии совпадений выбирается точка, самая удаленная от точки ро.) Аналогично, точка рз имеет наименьший полярный угол относительно точки р1 и т.д. По достижении самой высокой вершины, скажем, рь (совпадения разрешаются путем выбора самой удаленной из таких вершин), оказывается построенной (рис. 33.9) правая цепь (пя)п сиваш) оболочки СН Я). Чтобы сконструировать левую цепь (1ей сиваш), начнем с точки рь и выберем в качестве рь+1 точку с наименьшим полярным углом относительно точки ры но относительно отрицательного нанравления оси х.

Продолжаем выполнять зту процедуру, отсчитывая полярный угол от отрицательного направления оси х, пока не вернемся к исходной точке ро. Обход по Джарвису можно было бы реализовать путем единообразного обхода вокруг выпуклой оболочки, т.е. не прибегая к отдельному построению правой и левой цепей. В такой реализации обычно отслеживается угол последней стороны выпуклой оболочки и накладывается требование, чтобы последовательность Глава 33. Вычислительная геометрия 1073 углов, образованных сторонами оболочки с положительным направлением оси х строго возрастала (в интервале от 0 до 2к радиан).

Преимущество конструирования отдельных цепей заключается в том, что исключается необходимость явно вычислять углы; для сравнения углов достаточно методов, описанных в разделе 33.1. При надлежащей реализации время выполнения обхода по Джарвису равно О (пЛ). Для каждой из Ь вершин оболочки СН(Я) находится вершина с минимальным полярным углом. Каждое сравнение полярных углов длится в течение времени 0 (1), если используются методы, описанные в разделе 33.1.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6451
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее