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

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

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

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

Таким образом, центрированный обход дерева приводит к перечислению отрезков в порядке сортировки по их левым концам. Шаг 2. Дополнительная информация. В дополнение к самим отрезкам, каждый узел х содержит значение глах [х], которое представляет собой максимальное значение всех конечных точек отрезков, хранящихся в поддереве, корнем которого является х. Шаг 3. Поддержка информации. Мы должны убедиться, что вставка и удаление в дереве с п узлами могут быть выполнены за время О (1йп). Определить значение поля тах в узле х можно очень просто с использованием полей гпах дочерних узлов: тах [х] = шах (Ьгдй [1пт [ж]], тах [1е9 [х]], гпах [г1дМ [х]]) .

Таким образом, по теореме 14.1, вставка в дерево отрезков и удаление из него может быть выполнена за время О (1к и). В действительности, как показано в упражнениях 14.2-4 и 14.3-1, обновление поля тах после вращения может быть выполнено за время О (1). 377 26н26 25 ! — — ~~30 19 н20 17 ! — ~19 22 21 12 22 8н9 6~ — — ~!О 5~ — -~8 0~ — ч3 0 5 10 15 20 25 30 а) 419.20) ', 1;--~Г-) 6) Рис. 14.4.

Множество отрезков и его представление в виде дерева отрезков Шаг 4. Разработка новых операций. Единственная новая операция, которую мы хотим разработать, — это 1нтекчАЕ ЗКАксн(Т,1), которая осуществляет поиск отрезка в дереве Т, который перекрывается с данным. Если такого отрезка в дереве нет, процедура возвращает указатель на ограничитель п11 )Т]: 1хтекчА$.

БеАксн(Т,г) 1 х + — то!)Т] 2 и2ЬПе х 56 пгЦТ) и 1 не перекрывается с 1п1')х] 3 йо 11' !ей) ф пй)Т] и тех)1еЯ)х)) > 1ош]1) 4 Феп х — 1ефх] 5 е!ве х — ттдй1]х) 6 гетпгп х Для поиска отрезка, который перекрывается с г, мы начинаем с присвоения указателю х корня дерева и выполняем спуск по дереву. Спуск завершается когда мы находим перекрывающийся отрезок или когда х указывает на ограничитель Глава 14.

Расширение структур данных ,8Я '! ®' Ю ДО,3) 1 16,10) ) 1 125120) 1 :1 . -- 22222х 69 Ю Часть йй Структуры данных 378 ит1 [Т]. Поскольку каждая итерация основного цикла выполняется за время О [1), а высота красно-черного дерева с п узлами равна О [18 и), время работы процедуры 1нтнкуи. Знлксн равно О [18 и). Перед тем как мы убедимся в корректности процедуры 1нтекум. Белксн, давайте посмотрим, как она работает, на примере дерева, показанного на рис. 14.4. Предположим, что мы хотим найти отрезок, перекрывающийся с отрезком г' = = [22, 25].

Мы начинаем работу с корня, в котором содержится отрезок [16,21], который не перекрывается с отрезком г'. Поскольку значение тах [1е~~ (х]] = 23 превышает 1ото (1] = 22, цикл продолжает выполнение с х, указывающим на левый дочерний узел корня. Этот узел содержит отрезок [8,9], который также не перекрывается с отрезком 1. Теперь тах (1ег2 [х]] = 10 меньше 1ою [1] = 22, так что мы переходим к правому дочернему узлу.

В нем содержится отрезок (15, 23], перекрывающийся с х, так что процедура возвращает указатель на данный узел. В качестве примера неудачного поиска попробуем найти в том же дереве отрезок, перекрывающийся с отрезком г' = [11, 14]. Мы вновь начинаем с корня. Поскольку отрезок в корне [16, 21] не перекрывается с г, и поскольку тах [1е~1 [х]] = = 23 больше, чем 1ото (г] = 11, мы переходим к левому дочернему узлу корня с отрезком [8, 9].

Отрезок (8, 9] также не перекрывается с г, а тах [1ег2 [х]] = 10, что меньше, чем 1ою [г] = 11, поэтому мы переходим вправо (обратите внимание, что теперь в левом поддереве нет ни одного отрезка, перекрывающегося с т. Отрезок [15,23] не перекрывается с г, его левый дочерний узел — ит1 [Т], так что цикл завершается и процедура возвращает указатель на ограничитель ит2 [Т]. Для того чтобы убедиться в корректности процедуры 1нтнкчль Яклксн, нам надо разобраться, почему для поиска нам достаточно пройти по дереву всего лишь по одному пути. Основная идея заключается в том, что в любом узле х, если гиг [х] не перекрывается с г, то дальнейший поиск всегда идет в правильном направлении, т.е.

перекрывающийся отрезок, если таковой имеется в дереве, гарантированно будет обнаружен в исследуемой части дерева. Более точно это свойство сформулировано в следующей теореме. Теорема 14.2. Процедура 1нтнкуль Бнлксн[Т, 1) либо возвращает узел, отрезок которого перекрывается с отрезком г, либо, если в дереве Т не содержится отрезка, перекрывающегося с г, возвращает ит1 (Т]. Доказательство. Цикл твййе в строках 2-5 завершается, если х = ит2 [Т] либо если 1 перекрывается с гит (х].

В последнем случае процедура тривиально возвращает значение х. Поэтому нас интересует первый случай, когда цикл завершается из-за того, что х = ит2 [Т]. Воспользуемся следующим инвариантом цикла и'Ы1е в строках 2-5. Если дерево Т содержит отрезок, который перекрывается с г, то этот отрезок находится в поддереве, корнем которого является узел х. Глава 14. Расширение структур данных 379 ) г 1 — — 4 а) б) Рис. 14.5. Отрезки в доказательстве теоремы 14.2. Пунктирной линией показана величина тах [1еф [х]] Инициализация.

Перед выполнением первой итерации в строке 1 переменной х присваивается указатель на корень дерева, так что инвариант выполняется. Сохранение. Прн каждой итерации цикла згЫ)е выполняется либо строка 4, либо строка 5. Покажем, что инвариант цикла сохраняется в любом случае. При выполнении строки 5 (в силу невыполнения условия в строке 3) мы имеем 1е)г [х] = п11 [Т] или тах [1ефх]] < 1ою [1]. Если 1е]1 [х] = п11 ]Т], то поддерево, корнем которого является 1е~1 [х]„очевидно, не может содержать отрезок, перекрывающийся с г, так что присвоение х — пдЬ1 [х] сохраняет инвариант цикла.

Предположим, следовательно, что 1еГ1 [х] ~~ п11 [Т] и тах [1ег1[х]] < 1ою [1]. Как показано на рис. 14.5а, для каждого интервала з' из левого поддерева х выполняется следующее соотношение: БлдЬ [1] (~ тах[1еф [х]] < 1ою [1]. В соответствии со свойством трихотомии отрезков, 1' и 1 не перекрываются. Таким образом, левое поддерево х не содержит отрезков, перекрывающихся с г, и присвоение х — г1дЬ1 [х] сохраняет инвариант. Пусть выполняется строка 4. В этом случае мы покажем, что если в левом поддереве х нет отрезка, перекрывающегося с г, то его вообще нет в дереве.

Строка 4 выполняется в случае, когда тах [1е)т [хЦ > 1ою [1]. Кроме того, по определению поля тах в левом поддереве х должен быть некоторый интервал 1', такой что Ь1дЬ [1'] = тах [1ег1 [х]] > 1ою [1]. (Данная ситуация проиллюстрирована на рис.

14.5б.) Поскольку 1 и 1' не перекрываются и поскольку неверно, что Ь1дЬ [1'] < < 1ою [1], отсюда в соответствии со свойством трихотомии отрезков следует, что Ь19Ь [1] < 1ою [г']. Поскольку дерево отрезков упорядочено в соответствии с левыми концами отрезков, из свойства дерева поиска вытекает, что для любого отрезка га нз правого поддерева х Ь1дЬ [1] < 1ою [1'] < 1ою [1"] . 380 Часть 111. Структуры данных Из трихотомии отрезков следует, что 1 и гв не перекрываются.

Мы можем, таким образом, заключить, что независимо от того, имеется ли в левом поддереве х отрезок, перекрывающийся с г, присвоение х — 1еу2 [х] сохраняет инвариант цикла. Завершение. Если цикл завершается по условию х = пп [Т], то в дереве, корнем которого является х, нет отрезков, перекрывающихся с г.

Обращение инварианта цикла приводит к заключению, что дерево Т не содержит отрезков, перекрывающихся с г. Следовательно, возвращаемое процедурой значение пя [Т] совершенно корректно. Итак, процедура 1нтекчле 8елксн работает корректно. Упражнения 14.3-1. Напишите псевдокод процедуры 1.еет Нотлте, которая работает с узлами дерева отрезков и обновляет поля тах за время О (1). 14.3-2. Перепишите код процедуры 1нтекчлг. Белксн для корректной работы с интервалами (отрезками без конечных точек).

14.3-3. Разработайте эффективно работающий алгоритм, который для данного отрезка г возвращает отрезок, перекрывающийся с г и имеющий минимальное значение левого конца (либо п11 [Т], если такого отрезка не существует). 14.3-4. Пусть у нас имеется дерево отрезков Т и отрезок 1. Опишите, каким образом найти все отрезки в дереве Т, перекрывающиеся с отрезком 1, за время О (ппп(п, 1с 18п)), где 1с — количество найденных отрезков. 1Дополлшпвльное условие: попробуйте найти решение, не изменяющее дерево.) 14.3-5. Какие изменения надо внести в процедуры дерева отрезков для поддержки новой операции 1нтекчм. 8елксн Ехлсти'(Т, г), которая возвращает указатель на узел х дерева отрезков Т, такой что 1ож [1п1 [х]] = 1ою [г] и )пдп [гп1 [х]] = )пдву [1] (либо пг1 [Т], если такого узла в дереве Т нет).

Все операции, включая 1нтекчлг, Белксн Ехлстьч, должны выполняться в дереве с и узлами за время О (18 и). 14.3-6. Пусть у нас есть динамическое множество натуральных чисел Щ на котором определена операция Мич блк, возвращающая минимальное расстояние между соседними числами в Я. Например, если Я = (1, 5, 9, 15, 18, 22), то М1н блг(Я) возвратит значение 18 — 15 = 3, так как 15 и 18— ближайшие соседние числа в Я. Разработайте максимально эффективные процедуры 1хзект, 13ееете, Белксн и М~н блг и проанализируйте нх время работы. Глава 14.

Расширение структур данных 381 * 14.3-7. Базы данных при разработке СБИС зачастую представляют интегральную схему как список прямоугольников. Предположим, что все прямоугольники ориентированы вдоль осей х и у, так что представление прямоугольника состоит из минимальных и максимальных координат х и у. Разработайте алгоритм для выяснения, имеются ли в данном множестве из и прямоугольников два перекрывающихся (искать все перекрывающиеся пары не надо). Перекрытием считается также ситуация, когда один прямоугольник лежит полностью внутри другого, пусть при этом их границы и не пересекаются.

Время работы алгоритма должно составлять О (и 18 и). (Указание: перемещайте "строку развертки*' по множеству прямоугольников.) Задачи 14-1. Точка максимального перекрытия Предположим, что мы хотим найти точку максимального перекрытия множества отрезков, т.е. точку, в которой перекрывается наибольшее количество отрезков множества. а) Покажите, что такая точка всегда имеется и представляет собой конечную точку одного из отрезков. б) Разработайте структуру данных, которая поддерживает эффективную работу операций 1)чтвкчл!. 1)чзвкт, 1)чтвкуд). Рн етн и Рпв РОМ (которая возвращает точку максимального перекрытия).

(Указание: воспользуйтесь красно-черным деревом всех конечных точек отрезков. С каждым левым концом отрезка связано значение +1, с правым — значение — 1. Добавьте к узлам дерева некоторую дополнительную информацию для поддержки точки максимального перекрытия.) 14-2.

Перестановка Иосифа Задача Иосифа ! формулируется следующим образом. Предположим, что и человек расставлены в круг и задано некоторое натуральное число т ( и. Начиная с определенного человека, мы идем по кругу, удаляя каждого т-го человека. После удаления человека счет продолжается дальше. Процесс продолжается, пока все и человек не будут удалены. Порядок, в котором люди удаляются из круга, определяет (и, т)-нерестановку 'Достаточно подробно об этой задаче, се происхождении и вариациях можно прочесть, например, в книге У. Болл, П Коксетср. Математические эссе и развлечения. — Млмир, ! 986 (стр.

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

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

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