Академический Документы
Профессиональный Документы
Культура Документы
Download ebook pdf of Алгоритмы Разработка И Применение Классика Computers Science 1St Edition Джон Клейнберг full chapter
Download ebook pdf of Алгоритмы Разработка И Применение Классика Computers Science 1St Edition Джон Клейнберг full chapter
■■■■■■■■■■ ■■■■■■■■
Computers Science 1st Edition ■■■■
■■■■■■■■■
Visit to download the full and correct content document:
https://ebookstep.com/download/ebook-5385072/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...
https://ebookstep.com/product/mon-tour-du-monde-
en-80-tortues-1st-edition-bernard-devaux/
https://ebookstep.com/download/ebook-56209260/
https://ebookstep.com/product/eine-anleitung-zum-
glucklichsein-80-anregende-impulse-zur-psychischen-
gesundheit-1st-edition-alexander-huttner/
https://ebookstep.com/product/instituto-nacional-de-antropologia-
e-historia-80-anos-jaime-bali-editor-adriana-konzevik-editor/
Asuhan Kebidanan Pada Kehamilan Buku Ajar Bd Yulizawati
Sst M Keb Dr Detty Iryani M Kes M Pd Ked Aif Bd Lusiana
Elsinta B Sst M Keb Aldina Ayunda Insani S Keb Bd M Keb
Feni Andriani S Keb Bd M Keb
https://ebookstep.com/product/asuhan-kebidanan-pada-kehamilan-
buku-ajar-bd-yulizawati-sst-m-keb-dr-detty-iryani-m-kes-m-pd-ked-
aif-bd-lusiana-elsinta-b-sst-m-keb-aldina-ayunda-insani-s-keb-bd-
m-keb-feni-andriani-s-keb-bd-m-keb/
https://ebookstep.com/product/green-arrow-especial-80-anos-1st-
edition-mariko-tamaki-javier-rodriguez-tom-taylor-mike-grell-
nicola-scott/
https://ebookstep.com/product/die-80-wichtigsten-management-und-
beratungstools-von-der-bcg-matrix-zu-den-agilen-tools-dirk-
lippold/
https://ebookstep.com/product/ein-mord-erster-klasse-smiley-
bd-2-1st-edition-john-le-carre/
https://ebookstep.com/product/handbuch-
industrie-4-0-bd-2-automatisierung-2te-birgit-vogel-heuser/
Дж. Клейнберг, Е. Тардос
Алгоритмы: разработка и применение.
Классика Computers Science
Серия «Классика computer science»
Перевел с английского Е. Матвеев
Заведующая редакцией Ю. Сергиенко
Ведущий редактор Н. Римицан
Художник С. Маликова
Корректоры Н. Викторова, И. Мивриньш
Верстка А. Шляго
ББК 32.973.2-018
УДК 004.3
Клейнберг Дж., Тардос Е.
К48 Алгоритмы: разработка и применение. Классика Computers Science / Пер. с англ.
Е. Матвеева. — СПб.: Питер, 2016. — 800 с.: ил. — (Серия «Классика computer
science»).
ISBN 978-5-496-01545-5
Впервые на русском языке выходит одна из самых авторитетных книг по разработке и использованию
алгоритмов. Алгоритмы — это основа программирования, определяющая, каким образом программное обе-
спечение будет использовать структуры данных.
Вы познакомитесь с базовыми аспектами построения алгоритмов, основными понятиями и определени-
ями, структурами данных, затем перейдете к основным методам построения алгоритмов, неразрешимости
и методам решения неразрешимых задач, и, наконец, изучите рандомизацию при проектировании алгоритмов.
Самые сложные темы объясняются на четких и простых примерах, поэтому книга может использоваться
как для самостоятельного изучения студентами, так и учеными-исследователями или профессионалами
в области компьютерных технологий, которые хотят получить представление о применении тех или иных
методов проектирования алгоритмов.
Алгоритмический анализ состоит из двух фундаментальных компонентов: выделения математически
чистого ядра задачи и выявления методов проектирования подходящего алгоритма на основании структуры
задачи. И чем лучше аналитик владеет полным арсеналом возможных методов проектирования, тем быстрее
он начинает распознавать «чистые» формулировки, лежащие в основе запутанных задач реального мира.
Права на издание получены по соглашению с Addison-Wesley Longman. Все права защищены. Никакая часть
данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения вла-
дельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как на-
дежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может
гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные
ошибки, связанные с использованием книги.
ООО «Питер Пресс», 192102, Санкт-Петербург, ул. Андреевская (д. Волкова), 3, литер А, пом. 7Н.
Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.12.066 —
Книги печатные профессиональные, технические и научные.
Подписано в печать 28.01.16. Формат 70×100/16. Бумага писчая. Усл. п. л. 64,500. Тираж 1000. Заказ 0000.
Отпечатано в ОАО «Первая Образцовая типография». Филиал «Чеховский Печатный Двор».
142300, Московская область, г. Чехов, ул. Полиграфистов, 1.
Сайт: www.chpk.ru. E-mail: marketing@chpk.ru
Факс: 8(496) 726-54-10, телефон: (495) 988-63-87
Краткое содержание
Глава 3. Графы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Общие сведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Учебные аспекты и дополнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Краткое содержание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Как пользоваться книгой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Глава 3. Графы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.1. Основные определения и применения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2. Связность графа и обход графа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Поиск в ширину . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Связная компонента . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Поиск в глубину . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Набор всех компонент связности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.3. Реализация перебора графа с использованием очередей и стеков . . . . . 111
Представление графов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Очереди и стеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Реализация поиска в ширину . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Реализация поиска в глубину . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Определение всех компонент связности . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.4. Проверка двудольности: практическое применение поиска в ширину . . . 118
Задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Проектирование алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Анализ алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.5. Связность в направленных графах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Представление направленных графов . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Алгоритмы поиска . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Сильная связность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
3.6. Направленные ациклические графы и топологическое упорядочение . . . 123
Задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Проектирование и анализ алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Упражнения с решениями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Упражнение с решением 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Упражнение с решением 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Примечания и дополнительная литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8 Оглавление
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Примечания и дополнительная литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Примечания и дополнительная литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Примечания и дополнительная литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Об авторах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
Предисловие
Общие сведения
Книга предназначена для студентов, прошедших двухсеместровый вводный курс
вычислительных технологий (стандартный курс «CS1/CS2»), в ходе которого
они писали программы для реализации базовых алгоритмов, и работы с такими
структурами данных, как деревья и графы, а также с базовыми структурами данных
(массивы, списки, очереди и стеки). Так как переход между этим курсом и первым
курсом по алгоритмам еще не стал стандартным, книга открывается с изложения
тем, которые знакомы студентам некоторых образовательных учреждений по курсу
CS1/CS2, но в других учреждениях включаются в учебный план первого курса по
алгоритмам. Соответственно, эта часть может рассматриваться либо как обзор, либо
как новый материал; включая ее, мы надеемся, что книга может быть использована
в более широком диапазоне учебных курсов и с большей гибкостью в отношении
исходных знаний, обязательных для читателя.
В соответствии с описанным подходом мы разрабатываем базовые методы про-
ектирования алгоритмов, изучая задачи из многих областей компьютерной науки
и сопутствующих областей. В частности, приводятся довольно подробные описа-
ния возможных применений из области систем и сетей (кэширование, коммутация,
междоменная маршрутизация в Интернете), искусственного интеллекта (плани-
рование, игры, сети Хопфилда), распознавание образов (сегментация изображе-
ний), извлечение информации (обнаружение точки перехода, кластеризация),
исследование операций (планирование воздушного движения) и вычислительная
биология (выравнивание последовательностей, вторичная структура РНК).
Понятие вычислительной неразрешимости и NP-полноты в частности играет
значительную роль в книге. Это соответствует нашему подходу к общему процессу
Учебные аспекты и дополнения 19
Краткое содержание
Глава 1 начинается с представления некоторых типичных алгоритмических задач.
Мы начнем с задачи устойчивых паросочетаний, потому что она позволяет обо-
значить базовые аспекты разработки алгоритмов более конкретно и элегантно, чем
любые абстрактные рассуждения: поиск устойчивых паросочетаний обусловлен
естественной, хотя и сложной практической областью, на базе которой можно
абстрагировать интересную формулировку задачи и неожиданно эффективный ал-
горитм ее решения. В оставшейся части главы 1 рассматриваются пять «типичных
задач», которые предопределяют темы из оставшейся части курса. Эти пять задач
взаимосвязаны в том смысле, что все они могут рассматриваться как вариации и/
или особые случаи задачи поиска независимого множества; но одна задача может
быть решена при помощи «жадного» алгоритма, другая — методом динамического
программирования, третья — методом нахождения потока в сети, четвертая (соб-
ственно задача независимого множества) является NP-полной, а пятая — PSPACE-
полной. Тот факт, что тесно связанные задачи могут значительно отличаться по
сложности, играет важную роль в книге, и эти пять задач служат ориентирами,
к которым мы неоднократно возвращаемся по мере изложения материала.
Главы 2 и 3 помогают связать материал с учебным курсом CS1/CS2, о котором
говорилось выше. В главе 2 вводятся ключевые математические определения и по-
нятия, используемые при анализе алгоритмов, а также мотивация для их примене-
ния. Глава начинается с неформального обзора того, что же следует понимать под
вычислительной разрешимостью задачи, а также концепцией полиномиального
времени как формального критерия эффективности. Затем вопросы скорости
роста функций и асимптотического анализа рассматриваются более формально,
приводится информация по функциям, часто встречающимся при анализе ал-
горитмов, а также по их стандартным применениям. В главе 3 рассматриваются
базовые определения и алгоритмические примитивы, необходимые для работы
с графами и занимающие центральное место во многих задачах книги. К концу
учебного курса CS1/CS2 студенты реализуют многие базовые алгоритмы теории
графов, но этот материал полезно представить здесь в более широком контексте
Краткое содержание 21
книги (например, часто пропускаются разделы 4.3, 4.7–4.8, 5.5–5.6, 6.5, 7.6 и 7.11).
В главах 11–13 рассматривается примерно половина разделов.
Последнее обстоятельство стоит подчеркнуть: вместо того, чтобы рассматривать
последние главы как «высокоуровневый материал», недоступный для вводных ал-
горитмических курсов, мы написали их так, чтобы несколько начальных разделов
каждой главы были доступны для аудитории начального уровня. Наши вводные
учебные курсы включают материал из всех этих глав, так как мы считаем, что все
эти темы занимают достаточно важное место на вводном уровне.
Главы 2 и 3 рассматриваются в основном как обзор материала более ранних
курсов; но, как упоминалось выше, использование этих двух глав серьезно зависит
от связи каждого конкретного курса с предшествующими курсами.
Итоговый учебный план выглядит примерно так: глава 1; главы 4–8 (исключая
разделы 4.3, 4.7–4.9, 5.5–5.6, 6.5, 6.10, 7.4, 7.6, 7.11 и 7.13); глава 9 (кратко); глава 10,
разделы 10.1 и 10.2; глава 11, разделы 11.1, 11.2, 11.6 и 11.8; глава 12, разделы 12.1–
12.3; глава 13, разделы 13.1–13.5.
Книга также может использоваться в ознакомительной части основных учеб-
ных курсов. В нашем представлении такой курс должен познакомить студентов,
которым предстоит заниматься исследованиями во многих разных областях,
с важными современными вопросами проектирования алгоритмов. В таком случае
повышенное внимание формулировке задач тоже приносит пользу, потому что
студенты скоро начнут определять собственные исследовательские задачи в раз-
личных подобластях. На учебных курсах такого типа мы рассматриваем материал
глав 4 и 6 (разделы 4.5–4.9 и 6.5–6.10), весь материал главы 7 (начальные разделы
излагаются в более высоком темпе), быстро излагаем тему NP-полноты из главы
8 (потому что многие студенты-старшекурсники уже знакомы с этой темой), а все
оставшееся время тратится на знакомство с материалом глав 10–13.
Наконец, книга может использоваться для самостоятельного изучения студен-
тами, учеными-исследователями или профессионалами в области компьютерных
технологий, которые хотят иметь представление о применении тех или иных мето-
дов проектирования алгоритмов в контексте их работы. Многие наши выпускники
и коллеги использовали материалы книги таким образом.
Благодарности
Эта книга была написана на основе серии алгоритмических учебных курсов,
которые мы вели в Корнелльском университете. За прошедшие годы эти курсы
развивались, как развивалась и сама область, и в них отражено влияние препо-
давателей Корнелла, которые помогали сформировать их в нынешнем виде; это
Юрис Хартманис (Juris Hartmanis), Моника Хензингер (Monika Henzinger), Джон
Хопкрофт (John Hopcroft), Декстер Козен (Dexter Kozen), Ронитт Рубинфельд
(Ronitt Rubinfeld) и Сэм Туэг (Sam Toueg). Кроме того, мы бы хотели поблагода-
рить всех своих коллег по Корнеллу за бесчисленные обсуждения представленного
материала и более широкого круга вопросов, связанных со спецификой области.
24 Предисловие
некоторых людей мы хотим поблагодарить особо: это Юрий Бойков (Yuri Boykov),
Рон Элбер (Ron Elber), Дэн Хаттенлокер (Dan Huttenlocher), Бобби Клейнберг
(Bobby Kleinberg), Эви Клейнберг (Evie Kleinberg), Лиллиан Ли (Lillian Lee), Дэ-
вид Макаллестер (David McAllester), Марк Ньюман (Mark Newman), Прабхакар
Рагхаван (Prabhakar Raghavan), Барт Селман (Bart Selman), Дэвид Шмойс (David
Shmoys), Стив Строгац (Steve Strogatz), Ольга Векслер (Olga Veksler), Данкан
Уоттс (Duncan Watts) и Рамин Забих (Ramin Zabih).
Нам было приятно работать с Addison Wesley за прошедший год. Прежде всего,
спасибо Мэтту Голдстейну (Matt Goldstein) за все его советы и рекомендации и за
помощь в преобразовании огромного объема обзорного материала в конкретный
план, который улучшил книгу. Наши ранние беседы о книге с Сьюзен Хартман
(Susan Hartman) тоже принесли огромную пользу. Мы благодарим Мэтта и Сьюзен,
а также Мишель Браун (Michelle Brown), Мэрилин Ллойд (Marilyn Lloyd), Патти
Махтани (Patty Mahtani) и Мейта Суарес-Ривас (Maite Suarez-Rivas) из издатель-
ства Addison Wesley и Пола Анагностопулоса (Anagnostopoulos) и Жаки Скарлотт
(Jacqui Scarlott) из Windfall Software за работу по редактированию, подготовке
к выпуску и управлению проектом. Хотим особо поблагодарить Пола и Жаки за
мастерскую верстку книги. Спасибо Джойсу Уэллсу (Joyce Wells) за дизайн об-
ложки, Нэнси Мерфи (Nancy Murphy) из Dartmouth Publishing — за работу над
иллюстрациями; Теду Локсу (Ted Laux) за составление алфавитного указателя,
Каролу Лейбу (Carol Leyba) и Дженнифер Маккейн (Jennifer McClain) за стилевое
редактирование и корректуру.
Ансельм Блумер (Anselm Blumer) из Университета Тафта, Ричард Чанг (Richard
Chang) из Мэрилендского университета, Кевин Комптон (Kevin Compton) из
университета Мичигана, Диана Кук (Diane Cook) из Техасского университета
в Арлингтоне, Сариэл Хар-Пелед (Sariel Har-Peled) из Университета Иллинойса
в Урбана-Шампейн, Санджив Ханна (Sanjeev Khanna) из Университета Пенсильва-
нии, Филип Клейн (Philip Klein) из Университета Брауна, Дэвид Маттиас (David
Matthias) из Университета штата Огайо, Адам Мейерсон (Adam Meyerson) из
Калифорнийского университета в Лос-Анджелесе, Майкл Митценмахер (Michael
Mitzenmacher) из Гарвардского университета, Стивен Олариу (Stephan Olariu)
из Университета Олд-Доминион, Мохан Патури (Mohan Paturi) из Калифорний-
ского университета в Сан-Диего, Эдгар Рамос (Edgar Ramos) из Университета
Иллинойса в Урбана-Шампейн, Санджай Ранка (Sanjay Ranka) из Университета
Флориды в Гейнсвилле, Леон Резник (Leon Reznik) из Рочестерского технологиче-
ского института, Субхаш Сури (Subhash Suri) из Калифорнийского университета
в Санта-Барбаре, Дитер ван Мелькебек (Dieter van Melkebeek) из Университета
Висконсина в Мэдисоне, Булент Йенер (Bulent Yener) из Ренсслерского политех-
нического университета не пожалели своего времени и предоставили подробные
и содержательные рецензии на рукопись; их комментарии привели к многочислен-
ным усовершенствованиям (как большим, так и малым) в окончательной версии
текста.
Наконец, мы хотим поблагодарить наши семьи — Лиллиан, Алису, Дэвида,
Ребекку и Эми. Мы ценим их поддержку, терпение и все остальное сильнее, чем
можно выразить в тексте.
26 Предисловие
Задача
Задача устойчивых паросочетаний была частично сформулирована в 1962 году,
когда два экономиста-математика, Дэвид Гейл и Ллойд Шепли, задались вопросом:
можно ли спланировать процесс поступления в колледж (или приема на работу),
который был бы саморегулируемым (self-enforcing)? Что они имели в виду?
Давайте сначала неформально рассмотрим, какие ситуации могут возникнуть,
если группа студентов колледжа начинает подавать заявки в компании на летнюю
практику. Ключевым фактором в процессе обработки заявок становится взаимо-
действие двух разных сторон: компаний (нанимателей) и студентов (кандидатов).
Каждый кандидат упорядочивает список компаний в порядке своих предпочте-
ний, а каждая компания — после поступления заявок — формирует свой порядок
предпочтений для кандидатов, подавших заявки. На основании этих предпочте-
ний компании обращаются с предложениями к некоторым из своих кандидатов.
28 Глава 1. Введение: некоторые типичные задачи
Формулировка задачи
Чтобы добраться до сути концепции, задачу следует по возможности очистить от
всего лишнего. В мире компаний и кандидатов существует асимметрия, которая
только отвлекает от главного. Каждый кандидат подбирает одну компанию, но
каждая компания подбирает нескольких кандидатов; более того, количество канди-
датов может оказаться больше (или, как это бывает, меньше) количества доступных
вакансий. Наконец, в реальной жизни каждый кандидат редко подает заявки во все
имеющиеся компании.
По крайней мере на начальной стадии будет полезно устранить эти сложности
и перейти к «упрощенной» постановке задачи: каждый из n кандидатов подает за-
явки в каждую из n компаний, а каждая компания хочет принять на работу одного
кандидата. Вскоре вы увидите, что при этом сохраняются фундаментальные аспек-
ты задачи; в частности, наше решение упрощенной версии можно будет напрямую
расширить для более общего случая.
Вслед за Гейлом и Шепли мы заметим, что этот частный случай можно рас-
сматривать как задачу разработки системы, в которой n мужчин и n женщин могут
подыскать себе пару. В нашей задаче существует естественная аналогия для двух
«полов» (кандидаты и компании), а в рассматриваемом случае каждый участник
подыскивает себе ровно одного участника противоположного пола1.
Итак, имеется множество M = {m1, ..., mn} из n мужчин и множество W = {w1,
..., wn} из n женщин. Пусть запись M × W обозначает множество всех возможных
1
Гейл и Шепли также рассматривали задачу однополых устойчивых паросочетаний.
У нее тоже имеются свои практические применения, но на техническом уровне возникают
достаточно заметные отличия. С учетом схемы «кандидат–наниматель», которая здесь рас-
сматривается, мы будем придерживаться версии с двумя полами.
30 Глава 1. Введение: некоторые типичные задачи
1
Также встречается термин «марьяж». — Примеч. пер.
1.1. Первая задача: устойчивые паросочетания 31
Примеры
Для демонстрации этих определений будут рассмотрены два очень простых при-
мера задачи устойчивых паросочетаний.
Для начала допустим, что имеется множество из двух мужчин {m, m' } и множе-
ство из двух женщин {w, w' }. Списки предпочтений выглядят так:
m предпочитает w женщине w';
m' предпочитает w женщине w';
w предпочитает m мужчине m';
w' предпочитает m мужчине m'.
Если рассматривать этот набор списков предпочтений на интуитивном уров-
не, он представляет ситуацию полного согласия: мужчины сходятся во мнениях
относительно порядка женщин, а женщины — относительно порядка мужчин.
В такой ситуации существует уникальное устойчивое паросочетание, состоящее
из пар (m, w) и (m', w'). Другое идеальное паросочетание, состоящее из пар (m', w)
и (m, w'), не является устойчивым, потому что пара (m, w) образует неустойчивость
по отношению к этому паросочетанию. (Как m, так и w предпочли бы бросить своих
партнеров и образовать новую пару.)
В следующем примере ситуация немного усложняется. Предположим, действу-
ют следующие предпочтения:
m предпочитает w женщине w';
m' предпочитает w' женщине w;
w предпочитает m' мужчине m;
w' предпочитает m мужчине m'.
Что же происходит на этот раз? Предпочтения двух мужчин противоположны
(они ставят на первое место разных женщин); то же самое можно сказать и о пред-
почтениях двух женщин. Однако предпочтения мужчин полностью противоречат
предпочтениям женщин.
Во втором примере существуют два разных устойчивых паросочетания. Со-
четание, состоящее из пар (m, w) и (m', w' ), является устойчивым — оба мужчины
довольны, насколько это возможно, и ни один из них не покинет своего партнера.
Однако паросочетание из пар (m', w) и (m, w' ) тоже устойчиво, так как обе женщи-
ны довольны, насколько это возможно. Запомните этот важный момент, прежде
чем двигаться дальше, — в заданной ситуации может существовать более одного
устойчивого паросочетания.
32 Глава 1. Введение: некоторые типичные задачи
Проектирование алгоритма
Теперь мы продемонстрируем, что для каждого набора списков предпочтений
среди мужчин и женщин существует устойчивое паросочетание. Более того, спо-
соб демонстрации заодно ответит на второй вопрос, который был задан выше: мы
сформулируем эффективный алгоритм, который получает списки предпочтений
и строит по ним устойчивое паросочетание.
Рассмотрим некоторые базовые идеи, заложенные в основу алгоритма.
Изначально ни один из участников не имеет пары. Допустим, неженатый муж-
чина m выбирает женщину w с наивысшей оценкой в его списке предпочтений
и делает ей предложение. Можно ли немедленно объявить, что пара (m, w)
войдет в итоговое устойчивое паросочетание? Не обязательно; в какой-то мо-
мент в будущем мужчина m', более предпочтительный с точки зрения женщины
w, может сделать ей предложение. С другой стороны, для w будет рискованно
немедленно отказывать m; она может не получить ни одного предложения от
участника с более высокой оценкой в ее списке предпочтений. Таким образом,
возникает естественная идея перевести пару (m, w) в промежуточное состояние
помолвки.
Допустим, в текущем состоянии некоторые мужчины и женщины свободны
(то есть не помолвлены), а другие участвуют в помолвке. Следующий шаг мо-
жет выглядеть примерно так: произвольный свободный мужчина m выбирает
женщину с наивысшей оценкой w, которой он еще не делал предложение, и об-
ращается к ней с предложением. Если женщина w тоже свободна, то m и w всту-
пают в состояние помолвки. В противном случае w уже помолвлена с другим
мужчиной m'; тогда она определяет, кто из m и m' имеет более высокую оценку
в ее списке предпочтений; этот мужчина вступает в помолвку с w, а другой ста-
новится свободным.
Наконец, алгоритм в какой-то момент должен определить, что ни одного сво-
бодного участника не осталось; тогда все помолвки объявляются окончатель-
ными и возвращается полученное идеальное паросочетание.
Ниже приводится конкретное описание алгоритма Гейла–Шепли; его проме-
жуточное состояние изображено на рис. 1.2.
В начальном состоянии все m Ѯ M и w Ѯ W свободны.
Пока существует свободный мужчина m, который еще не успел сделать предложение
каждой женщине
Выбрать такого мужчину m.
Выбрать w — женщину с наивысшей оценкой в списке предпочтений m,
которой m еще не делал предложения.
Если w свободна, то
пара (m, w) вступает в состояние помолвки.
Иначе w в настоящее время помолвлена с m'.
Если w предпочитает m' мужчине m, то
m остается свободным.
1.1. Первая задача: устойчивые паросочетания 33
Анализ алгоритма
Для начала рассмотрим ситуацию с точки зрения женщины w во время выпол-
нения алгоритма. Какое-то время она не получает предложений и остается сво-
бодной. Потом мужчина m может сделать ей предложение, и она становится
помолвленной. Со временем она может получить дополнительные предложения
и принять те из них, в которых повышается оценка ее партнера. Итак, мы приходим
к следующим выводам:
(1.1) Женщина w остается помолвленной с момента получения первого предложе-
ния; партнеры, с которыми она вступает в помолвку, становятся все лучше и лучше
(в контексте ее списка предпочтений).
С точки зрения мужчины m, во время выполнения алгоритма все происходит
иначе. Он остается свободным до тех пор, пока не сделает предложение женщине
34 Глава 1. Введение: некоторые типичные задачи
из n женщин на этот момент уже помолвлена. Так как набор помолвленных пар
образует паросочетание, при этом также должно быть n помолвленных мужчин.
Но мужчин всего n, а согласно исходному предположению, m не помолвлен; воз-
никает противоречие. ■
(1.5) Множество S, возвращаемое при завершении, является идеальным паро-
сочетанием.
Доказательство. Множество помолвленных пар всегда образует паросочета-
ние. Предположим, что алгоритм завершается со свободным мужчиной m. При
завершении m должен был уже сделать предложение всем женщинам, в противном
случае цикл бы не завершился. Но это противоречит положению (1.4), согласно
которому не может быть свободного мужчины, который уже сделал предложение
всем женщинам. ■
Наконец, мы доказали главное свойство алгоритма, а именно то, что он приво-
дит к устойчивому паросочетанию.
(1.6) Возьмем выполнение алгоритма Гейла–Шепли, возвращающее множество
пар S. Это множество S является устойчивым паросочетанием.
Доказательство. Из (1.5) мы уже знаем, что S является идеальным паросочета-
нием. Таким образом, чтобы доказать, что S является устойчивым паросочетанием,
мы предположим, что существует неустойчивость по отношению к S, и придем
к противоречию. Согласно приведенному ранее определению, при такой неустой-
чивости S будет содержать две пары (m, w) и (m', w'), в которых:
m предпочитает w' женщине w;
w' предпочитает m мужчине m'.
В процессе выполнения алгоритма, приведшего к S, последнее предложение m
по определению было обращено к w. Вопрос: делал ли m предложение w' в неко-
торой предшествующей точке выполнения? Если не делал, то женщина w должна
находиться в списке предпочтений m выше, чем w', что противоречит нашему
допущению о том, что m предпочитает w' женщине w. Если делал, то w' отказала
ему ради другого мужчины m'', которого w' предпочитает m. Однако m' является
итоговым партнером w', а это значит, что либо m'' = m', либо, согласно (1.1), w' пред-
почитает своего итогового партнера m' мужчине m''; в любом случае это противо-
речит предположению о том, что w' предпочитает m мужчине m'.
Следовательно, S является устойчивым паросочетанием. ■
Расширения
Мы начали с определения устойчивого паросочетания и только что доказали, что
алгоритм Гейла–Шепли действительно строит его. Теперь будут рассмотрены неко-
торые дополнительные вопросы относительно поведения алгоритма Гейла–Шепли
и его связи со свойствами различных устойчивых паросочетаний.
36 Глава 1. Введение: некоторые типичные задачи
чайно общем явлении: для любых входных данных сторона, которая делает
предложение в алгоритме Гейла–Шепли, оказывается в паре с лучшим из
возможных устойчивых партнеров (с ее точки зрения), тогда как сторона,
которая не делает предложение, соответственно оказывается с худшим из
возможных устойчивых партнеров.
Графы обычно изображаются так, как показано на рис. 1.3; узлы изображаются
маленькими кружками, а ребра — отрезками, соединяющими два конца.
Перейдем к обсуждению пяти типичных задач.
Интервальное планирование
Рассмотрим очень простую задачу планирования. Имеется некий ресурс — аудито-
рия, суперкомпьютер, электронный микроскоп и т. д.; множество людей обращает-
ся с заявками на использование ресурса в течение периода времени. Заявка имеет
вид: «Можно ли зарезервировать ресурс, начиная с времени s и до времени f?»
Будем считать, что ресурс в любой момент времени может использоваться только
одним человеком. Планировщик выбирает подмножество заявок, отклоняя все
остальные, чтобы принятые заявки не перекрывались по времени. Целью плани-
рования является максимизация количества принятых заявок.
Более формальная постановка: имеется n заявок с номерами 1, ..., n; в каждой
заявке i указывается начальное время si и конечное время fi. Естественно, si < fi для
всех i. Две заявки i и j называются совместимыми, если запрашиваемые интервалы
не перекрываются, то есть заявка i приходится либо на более ранний интервал
времени, чем у j ( fi ≤ sj), либо на более поздний интервал времени, чем у j ( fj ≤ si).
В более общем смысле подмножество A заявок называется совместимым, если все
пары запросов i, j Ѯ A, i ≠ j являются совместимыми. Целью алгоритма является
выбор совместимого подмножества заявок максимально возможного размера.
Пример задачи интервального планирования представлен на рис. 1.4. На диа-
грамме представлено одно совместимое множество размера 4, и оно является
самым большим совместимым множеством.
Вскоре мы увидим, что эта задача может быть решена с применением очень
естественного алгоритма, который упорядочивает множество заявок по некоторой
эвристике, а затем «жадно» обрабатывает их за один проход, выбирая совмести-
1.2. Пять типичных задач 41
Двудольные паросочетания
При рассмотрении задачи устойчивых паросочетаний мы определили паросочетание
как множество упорядоченных пар мужчин и женщин, обладающее тем свойством,
что каждый мужчина и каждая женщина принадлежат не более чем одной из упо-
рядоченных пар. Затем идеальное паросочетание было определено как паросочета-
ние, в котором каждый мужчина и каждая женщина принадлежат некоторой паре.
42 Глава 1. Введение: некоторые типичные задачи
Независимое множество
А теперь перейдем к чрезвычайно общей задаче, которая включает большинство
более ранних задач как частные случаи. Для заданного графа G = (V, E) множество
узлов S Ӭ V называется независимым, если никакие два узла, входящие в S, не со-
единяются ребром. Таким образом, задача поиска независимого множества форму-
лируется так: для заданного графа G найти независимое множество максимально
возможного размера. Например, максимальный размер независимого множества
для графа на рис. 1.6 равен 4: оно состоит из четырех узлов {1, 4, 5, 6}.
n друзей, но некоторые пары терпеть друг друга не могут. Сколько друзей можно
пригласить на обед, если вы хотите избежать лишней напряженности? По сути,
речь идет о поиске наибольшего независимого множества в графе, узлы которого
представляют ваших друзей, а ребра — конфликты в парах.
Задачи интервального планирования и паросочетаний в двудольном графе
могут рассматриваться как особые случаи задачи независимого множества. Для
задачи интервального планирования определите граф G = (V, E), в котором узлы
соответствуют интервалам, а каждая перекрывающаяся пара соединяется ребром;
независимые множества в G соответствуют совместимым подмножествам интер-
валов. С представлением задачи паросочетаний в двудольном графе ситуация
чуть менее тривиальна. Для заданного двудольного графа G' = (V', E') выбираемые
объекты соответствуют ребрам, а конфликты возникают между двумя ребрами,
имеющими общий конец (такие пары ребер не могут принадлежать общему паро-
сочетанию). Соответственно мы определяем граф G = (V, E), в котором множество
узлов V эквивалентно множеству ребер E' в G'. Мы определяем ребро между каждой
парой элементов V, соответствующих ребрам G' с общим концом. Теперь можно
проверить, что независимые множества G точно соответствуют паросочетаниям G'.
Проверка не так уж сложна, но чтобы уследить за преобразованиями «ребра
в узлы, узлы в ребра», придется как следует сосредоточиться1.
С учетом общего характера задачи независимого множества эффективный
алгоритм ее решения должен получиться весьма впечатляющим. Он должен не-
явно включать алгоритмы для задач интервального планирования, паросочетаний
в двудольном графе, а также ряда других естественных задач оптимизации.
Текущее состояние задачи независимого множества таково: эффективные
алгоритмы для ее решения неизвестны, и есть гипотеза, что такого алгоритма не
существует. Очевидный алгоритм, действующий методом «грубой силы», пере-
бирает все подмножества узлов, проверяет каждое из них на независимость, после
чего запоминает самое большое из обнаруженных подмножеств. Возможно, это
решение близко к лучшему из того, что возможно сделать в этой задаче. Позднее
в книге будет показано, что задача независимого множества принадлежит к боль-
шому классу задач, называемых NP-полными. Ни для одной из этих задач не из-
вестен эффективный алгоритм решения, но все они эквивалентны в том смысле,
что решение любой такой задачи будет точно подразумевать существование такого
решения у всех.
Естественно задать вопрос: можно ли сказать хоть что-нибудь положительное
о сложности задачи независимого множества? Кое-что можно: если имеется граф G
из 1000 узлов и мы захотим убедить вас в том, что он содержит независимое мно-
жество S с размером 100, сделать это будет несложно. Достаточно показать граф G,
1
Для любознательных читателей заметим, что не каждая конфигурация задачи поиска
независимых множеств может быть получена из задач интервального планирования или
двудольных паросочетаний: полная задача независимых множеств является более общей.
Граф на рис. 1.3, а не может быть сгенерирован как «граф конфликтов» в задаче интер-
вального планирования, а граф на рис. 1.3, б — как граф конфликтов в задаче двудольных
паросочетаний.
1.2. Пять типичных задач 45
выделить узлы S красным цветом и позволить вам убедиться в том, что никакие два
узла не соединены ребром. Итак, между проверкой того, что множество действи-
тельно является большим независимым, и непосредственным поиском большого
независимого множества существует огромная разница. На первый взгляд заме-
чание кажется тривиальным (и действительно является таковым), но оно играет
ключевую роль в понимании этого класса задач. Более того, как вы вскоре увидите,
в некоторых особо сложных задачах даже может не быть простого способа «про-
верки» решений в этом смысле.
*****
Sitä ei käy ensinkään kieltää, että koko tämä runo soipi vielä
enemmän suomelle kuin näytteet syrjäniläisistä runoista. Ja niin on
toistenkin Moschalais-Mordwalaisten runojen laita. Mitä Ersa-
Mordwalaiseen murteesen tulee, niin on Reguly sillä säilyyn
kirjoittanut sekä satuja että lauluja. Yhdeksän semmoista runoa on
Budenz painattanut ErsaMordwalaiseen satuja runokokoelmaansa
(Ersa-Mordwin mesék és dalok).[47] Ylimalkain osoittavat ne samaa
luonnetta kuin Mokscharunot: neljälle trokeolle rakennettu runomitta
vaihtelee lyhyemmillä ja pitemmällä värssyillä, missä välistä tavuu
puuttuu taikka daktylejä astuu esiin. Sekä alkusointoa että
parallelismoa on runsaasti olemassa ja täydellisessä muodossa,
kuten jo Budenzkin lausuu. Minä painatan myöskin tähän muutamia
todisteita:
taikka:
͞͝ǀ͞͝ǀ͞͝ǀ͞͝ǀ͞͝͝ǀ͞͝͝ǀ͞͝ǀ͞
Harvemmat ovat sitä vastoin muut poikkeukset, niinkuin
͞ ͞ ͝ ͞ ͞ ͝, ͞ ͝ ͝ ͞ ͝ ͝ ͞ ͝ ͞, ͞ ͝ ͞ ͝ ͞ ͝ ͝ ͞ ͝.'[52]
Ristitanssi tanssikaamme,
Sora livaks' sotkekaamme!
Tuli kuu ensimmäisenä
Viidellä kymmenellä hevosella.
Kertoma-runot.
1.
Päiven Pārne'.
Jehtan:
Kallepa karrasa' oitu
Päive-pelen suórma-súona',
Päive-parnen koura kouka'. 90
Vuóitas-tutno súongo-miedain,
Tärve-tutno súongo-suruin,
Obbo-kaƷa kaskes-tahkin.