Text
                    Witold LipskI
KOMBINATORYKA
DLA PROGRAMISTOW
WYDA WNICTW А NAUKOWQ. TECHNICZNE
WARSZAWA 1982


о инато и ля n or аммистов В. Липский Перевод с польскоrо В. А. Евстиrнеева и О. А. Лоrиновой .... под редакциеи А. П. Ершова Москва «Мир» 1988 
ББК 22.17 J1 61 УДК 517.8 Липский В. Л 61 Комбинаторика для проrраММИСТQВ: Пер. с ПОЛЬСК.  М.: МИРt 1988........ 213 с. ил. 1 5В N 5-03-000979-5 Книrа польскоrо специалиста по проrраммнровамию знакомит читателей с широким спектром комбинаторных и теоретико.rрафовых злrоритмов. Описание 8лrоритмов дано на языке Паскаль; стиль изложения близок к спрзвQчНоМу..... постановка задачи, 8лrоритм ее решения, комментарии, трудоемкость, npJlMepbl. Русское издание дополнено новыми результатами. Для специалистов в об..,асти информатики, IIСС.'1едования операций, методов оптимизаЦИII, а также для студентов вузов кзк учебное пособие. л 1702070000.......058 01 (041 ) .......88 35.......88. ч. I ББК 22.17 Редакция литературы по .математическим HaYKaAt 1 5В N 5-03..000979-5 @ Ьу Wydawnictwa N auk()"10 Tcchniczne, Wаrszа\\'з 1982 @ перевод на русский ЯJЫК, С дuпunненип- МИ, «МИР». 1988 
Предисловие редактора перевода Широкое ПРИМСНСIlие ЭВ1\1 создало новыЙ жанр матемаТИ J ческой литературы. В Кllиrах этоrо жанра изложение начинает- ся с теоретическоrо обзора и заканчивается описанием алrо.. ритмов, практически rOToBbIx к автоматическому исполнению на ЭВМ. Конечно, новизна TaKoro подхода относительна и тра.. диция завершения математическоrо трактата правилами вычис- лений восходит, по меньшей мере, к ал-Хорезми. Но все же оформление операЦllонноrо баrажа математики в виде машин.. ных nporpaMM существенно отличает новые книrи от классиче- ских инженерньrх руководств по прикладной математике, от.. личным примером КОТОРЫХ служит известный справочник и. Н. Бронштейна и Н. Н. Семендяепа. Первые публикации подобноrо рода ОТНОСIIЛIIСЬ к траДИЦIIОН" ным разделам вычислительной математики. ДальнеЙшее рас.. ширение Kpyra задач, решаемых на ЭВМ, потребовало выхода На модели дискретной математики, что привело к подлинному возрождению теории rрафов 11 комбинаторики, которые за не- сколько десятков лет трансформировались из разделов «досу- rовой» математики в первостепенный инструмент решения orpoMHoro числа задач. После выхода первых трех томов еще не завершенной мо- нументальной серии «Искусство проrраммнрования дЛЯ ЭВМ» д. Кнута [Т. 1 «Основные алrоритмы» (М.: Мир, 1976), т. 2 «Получисленные алrоритм ы» (lV\.: Мир, 1977), т. 3 «Сорти", ровка и поиск» (М.: Мир, 1978)] аналоrичных руководств не появлялось в течение длительноrо времени. В отечественной литературе следовало бы в связи с этим отметить руководство В. А. Евстиrнеева «ПрименеНllе теории rрафов в проrраммиро" вании» (М.: Наука, 1985). При всей обстоятельности этой книrи она далеко не исчерпывает операционный запас дискретной ма- тематики. Уже в ходе ее написания автор и редактор познако- мились с предлаrаемой вниманию читателей моноrрафией ПОЛl-J- CKoro специалиста Витольда Липскоrо и увидели, насколько ОНа хороша и полезна. 
6 Предисловие редактора перевода Не стоит предвосхищать авторское вступление к моноrрафии В. Липскоrо, да и ее оrлавление rоворит само за себя. Хоте 04 лось бы только обраТIIТЬ внимание читателеЙ на своеобразное сочетание траДlIцнонноrо и HOBaTopcKoro подходов к изложению материала, который особенно проявляется при изложении ком.. бинаторных задач, имеющих давнюю историю. Именно это об- стоятельство побуждает высказать не столько критическое за мечание, сколько пожелание авторам будущих книr. Еще нерешенной проблемой изложения математической тео.. рии, завершающейся алrоритмами, является отсутствие дока.. зательной лоrической связи между теоретическим l'vlатериалом и алrоритмами. Доказательное проrраммирование в ero лоrи- ческом и трансформационном подходах предлаrает те или иные процедуры систематическоrо извлечения алrоритма из специ- фикации задачи, использующие отношения и факты соответ" ствующей теории, однако мы еще далеки от Toro, чтобы изла- raTb эти процедуры в стандартном и непринужденном стиле, вошедшем в обыденную научно-литературную практику. AKTY альность этой проблемы постоянно нарастает, особенно потом)', что часто практическая реализация алrоритмов требует их определенной модификации, которая не должна снижать сте.. пень математической достоверности окончательноrо варианта проrраммы. Это предисловие ПРIlХОДИТСЯ закончить печальной вестью о безвременной кончине автора этой моноrрафии, последовавшей после тяжелой болезни 30 мая 1985 r. на 36"м rоду жизни. За 14 лет интенсивной научной деятельности В. Липский опубли- ковал свыше пятидесяти работ по комбинаторике, теории ин.. формационноrо поиска и вычислительной rеометрни, а также написал три моноrрафии: «Комбинаторные аспекты теории ин... формационноrо поиска» (1975 r.), данная моноrрафия (1982 r.) н «Комбинаторный анализ» (посмертное издание 1987 r.). Переводчики 11 автор этих строк посвящают свой скромный труд доброй памяти одноrо нз ведущих представителей поль ской информатики, д-ра наук, доцента Витольда Липскоrо. Академrородок, янва р ь 1987 1:. А. п. Ершов 
От а втора Сейчас трудно было бы, пожалуй, назвать раздел теорети'" ческой информатики, в котором в течение последнеrо десяти- летия были бы достиrнуты большие успехи, нежели в конструи- ровании и анализе комбинаторных алrоритмов. С одной сто- роны, было обнаружено MHoro новых, более эффективных ме.. тодов решения комбинаторных задач с помощью ЭВМ, с дру- rой........ получены теоретические результаты, свидетельствующие все более явно о том, что для широкоrо класса проблем не существует «достаточно эффективных» алrоритмов. Эффектив- ные комбинаторные алrоритмы находят применение во .мноrпХ областях нечисленной обработки информации, особенно в днс- u U кретнои ОПТИМIIзации и в исследовании операции. В настоящей KHIIre представлены некоторые разделы ком- бинаторпки, причем особое внимание уделено конструктивному алrОРИТl\lическому подходу  рядом с обсуждаемыми комбина- торными проблемами, как правило, приводятся алrоритмы их решения вместе с анализом их вычислительной СЛО)l{НОСТИ. ЭТИ алrорнтмы представляют собой сжатые варианты проrрамм, написанных на языке ПаСI{аль. На выбор обсуждаемых про- блем, в большой мере случайный, принимая во внимание orpa.. ниченный объем книrи, а так)ке обширность рассматриваемой области, оказали влияние l{aK интересы автора, так и желание скорей дополнить, нежели продублировать две друrие книrи с родственной тематикой, подrотовленные к изданию в серии «Библиотека технолоrии проrраммирования» J2] и в серии «Информатика» [76]. Первая, самая большая rлава данной книrll содержит изло.. жение наиболее классических разделов комбинаторики (пере.. становки, разбиения мно}кеств 11 чисел, биномиальные коэффи" циенты, производящие функции и т. д.), а также мноrие......... не.. обязательно классические  алrоритмы rенерирования упомя.. нутых комбинаторных объектов. Во второй rлаве представлены основные методы, используемые при конструироваНИII алrорит- мов на rрафах, в особенности методы систематичноrо обхода Tpaq)OB. Тематика, связанная с rрафами, затраrивается и в 
8 От автора двух следующих rлавах: в ОДНОЙ из них обсуждаются методы нахождения кратчайших путей в rрафах, ребрам которых при- писаны произвольные «длины», в друrой  основное внимание сконцентрировано на задаче отыскания максимальноrо потока в сети (т. е. в rрафе с определенными «пропускными способ- ностями» ребер). в последней rлаве рассматривается примене- ние комбинаторноrо понятия матроида для решения HeKOToporo класса оптимизационных задач. Книrа предназначена для проrраммистов, желающих рас- ширить свои знания в области комбинаторных алrоритмов, а также пополнить свои практические знания теоретическими. От читателя требуются элементарные сведения из математики, а также знакомство с языком проrраммирования Паскаль [36, 75] и некоторый опыт проrраммирования на языке BbIcOKoro уровня. В заключение хочу поблаrодарить д-ра наук Виктора Ма- река за ряд ценных замечаний, которые позволили устранить поrрешности первоначальноrо варианта этой книrи. Варшава, декабрь 1980 Витольд Лuпскuи 
Моим родителя,м '. Введение в комбинаторику I.J. Основные понятия в этом разделе приводятся основные определения и обозна- чения, относящиеся к используемым лоrическим и теоретико- множественным понятиям, а также представленные в приводи- мых ниже алrоритмах. Начнем с лоrических и теоретико-множественных понятий (читателя, заинтересованноrо в более rлубоком знакомстве с этими понятиям и, мы отсылаем к работам [49] и [57]). Мы будем употреблять лоrические связки V (или), Л (и), I (не) I => (если..., то),  (тоrда и только тоrда, коrда). Тот факт, что х есть элемент множества х, будем записывать в виде х Е Х, ero отрицание......... в виде х Е;Е х. Множество тех элементов множества Х, которые удовлетворяют условию Ф, будем обо- значать через {х Е Х: Ф} (или {х: Ф}, если известно, о каком множестве Х идет речь), запись же {aI, ..., а п } будет обо- значать множество, элемеНТbI KOToporo суть а.,. . ., а,. (в частности, единственным элементом множества {а} яв- ляется а). Теоретико-множественные операции объединения, пересечения и разности обозначаются соответственно U, n и , пустое множество обозначается 0. Тот факт, что множество А содержится в множестве В (т. е. А есть подмножество множе- ства В), будет записываться в виде А с:: В или В ::::> А (всеrда имеют место включения 0 с:: А, А s А); . символ «с:» зарезер. вирован для случая, коrда исключается равенство А == В (при этом будем rоворить, что А есть собственное подмножество мно- жества В). Множество всех подмножеств множества Х будем обозначать через gJ (Х), мощность множества Х (т. е. число ero элементов)  через 1 Х 1. Последовательность длины п, члены которой суть al, ..., а п , будем обозначать через (аl, ..., а п ), либо просто через al, ... ..., а п или аl ... а п . Последовательность (а, Ь) длины два бу- дем называть упорядоченной парой. Декартово произведенuе А Х В множеств А и В определяется как множество всевоз... можных пар (а, Ь), rде а Е А, Ь Е В. Под бинарным отноше- нием (с левой областью А и правой областью В) подразуме- вается произвольное подмножество R s; А Х В. Если А == В, ТО 
10 1. Введение в комбинаторику будем rоворить о бинарном отношении на множестве А. Вме.. сто (а, Ь) Е R часто пишут aRb. По поводу отношения R на множестве Х rОВОРЯТ t что оно: (а) рефлексивно, если xRx для каждоrо х Е Х, (б) транзитивно, если (xRy Л yRz) => xRz для произвольных х, У, z Е х, (в) симметрично, если xRy => yRx для произвольных х, У ЕХ, (r) антuсимметрично, если (xRy Л yRx) => х == у для произ- вольных х, у Е х. Произвольное бинарное отношение, обладающее свойствами рефлексивности, транзитивности и симметричности, называется отношением эквивалентности, а обладающее свойствами реф- лексивности, транзитивности и антисимметричнос1'И,  отноше.. нием частичной упорядоченности. Отношение частичной упоря- доченности обычно обозначается через «», а пара (Х, ) на- зывается частично упорядоченным множеством. Будем приме- нять также очевидные обозначения, такие как х  у для у  Х, Х < у для х  у л х =1= у и т. д. Примером частично упорядо- ченноrо множества может служить множество целых чисел с отношением делимости, множество целых (или вещественных) чисел с обычным отношением меньше или равно «», а также множество [jJ (Х) с отношением включения С::: . Если функция (отображение) f сопоставляет каждому эле- менту х Е Х элемент f (х) Е У, то будем писать f: Х --+ у (такая функция может трактоваться как отношение R с::: Х Х у с тем свойством, что для каждоrо х Е Х существует в R точно одна пара вида (х, у), у Е У; дЛЯ наших же целей достаточно, од- нако, интуитивноrо понятия функции). Для произвольных А  Х, В  У определим f (А) == {у Е У: существует такое х Е А, что у == f (х)} fl (В) === {х Е Х: f (х) Е В} (вместо rl({b}) будем просто писать r 1 (b». Если {(Х)== У, то будем rоворить о функции из Х на У. Функция {: Х --+ У называется обратимой (взаимно однознач- НОЙ), если для произвольных а, Ь Е Х а =F Ь =? f (а) =t= f (Ь). Мы часто будем использовать понятие rрафа (см. .[9], [31]). Под неориентироваННblМ 2рафом (или короче 2рафом) будем понимать такую произвольную пару G === (V, Е), что Е  {{и, v}: и, v Е V Л u =/:= а}. 
1.1. ОС1l0вные понятия 11 Ориентированным 2рафом 1) будем называть такую произ.. вольную пару G == (У, Е), что Е с:: V Х v. в обоих случаях мно... жества V и Е будем называть соответственно множеством вep шин и множеством ребер 2) rрафа а. rраф обычно изображается на плоскости в виде множестuа точек, соответствующих вершинам, и соединяющих их линии, соответствующих ребрам З). Линия, изображающая ребро {и, v} или (и, v) 4), соединяет точки, изображающие вершины и, v, причем во втором случае стрелка обозначает направление от и к v (рис. 1.1). (о) (t1) V s JV S 07 lJ з . lJ S О 2 V a и 2 V 1t Рис. 1.1, а} Неориентированный ['раф; б} Ориентированный rраф. в контексте определенноrо rрафа G == (V, Е} будем часто использовать обозначения и........ и, и  V вместо {и, и} Е Е и (и, и) Е Е соответственно. Если ребро е имеет вид {и, и} или (и, и), то БУДСl\f ronopIlTb, что ребро е инциден'ТНО вершинам II и и, В то время как вершины u и v cMeolCHbl между собой. Сте- пень вершины определим Kal{ число ребер, инцидентных ей 5)'. Вершину нулевой степени будем называть изолированной (на- пример, вершина vs на рис. 1.1, а). Путем в rрафе G == (V, Е) назовем последовательность вершин ио, иl, ..., Vk, такую что 1) Или короче Ор2рафом.  Прuм. перев. 2) Элементы множества Е для орrрафа называются дУ2ами.П pUltf. перев. З) Дуrа в орrрафе изображается линией со стрелкой, указывающей ориен- тацию дуrи, т. е. направление от ее начала к концу.......... П рим. nерео. 4) Уrловые скобки используются для обозначения дуr орrрафа.  Прultf. пе рев. Б) ДЛЯ вершин орrрафа определяются полустепени захода (число заходя.. щих в вершину дуr) и исхода (число выходящих дуr). Степень вершины опре- Деляется как сумма полустепеней захода и исхода...... П puм. пepeв .... 
12 1. Введение в комбинаторику k  о п Vi  Vi+l (или Vt --+ Vi+l, если rраф а..... ориентирован.. ный), i == О, ..., k  1. 1) Вершины Vo и Vk будем называть со- ответственно началом и КОНЦом пути, а число k.......... длиной пути. Путь, начало и конец KOToporo совпадают, будем называть цик- лам 2). Если все вершины пути Vl, . 9 ., Vk различны, то будем rоворить об элементарном пути. Соответственно цикл VI, ... t Vk (Vl == Vk) будем называть элементарным, если вершины VI, ... ..., Vkl различны. ПодzрафОt rрафа G(V, Е) будем называть такой произвольный rраф О' == (V'. Е'), что V' с::: V и Е' .E З). Пусть G === (V, Е)  произвольный неориентированный rраф, и пусть V Е V. Пусть А ---- множество тех вершин u Е V, К ко.. торым существует путь из V. Множество А вместе с ребрами rрафа а, инцидеНТНbIМII вершинам из А, определяет некоторый подrраф, называемыЙ компонентой связности rрафа а. Очевид" но, что множества вершин компонент связности произвольноrо rрафа попарно не пересекаются. Например, для rрафа на рис. 1.1, а это суть множества V 1 == {иl, V2, VЗ. V4, Vб}, V 2 == === {vs} и V 3 === {и7, и8, Vg, VI0, Vll}. Будем rоворить, что rрафы G == (У, Е), й' == (V', Е') изо- морфны, если существует такое взаимно однозначное отображе- ние f из V на V', что для ПРОИЗВОЛЬНbIХ и, V Е V имеем {и, v} Е Е Е  {f(u), '(и)} Е Е' (и, v) Е Е  (f(u) f(v» Е Е' в случае ориентированных rрафов). Обычно изоморфные rрафы не раз- личаются между собой. Для произвольноrо вещественноrо числа х мы будем упо- треблять обозначения Lx J и r х, соответственно для наиболь- шеrо целоrо числа, не превосходящеrо х, и для наименьшеrо це.. лоrо числа, не меньшеrо х, например L 3.5 J == 3, r 3.51 == 4, L ----3.5 J == .......4, r 3.5' == ......3. Перейдем теперь к понятиям, связанным с алrоритмами. Алrоритмы будем обычно записывать на языке проrраммирова- ния, являющимся неформальной версией языка Паскаль ;(36, 75]. Если реализация какоrо-либо фраrмента проrраммы оче- видна, но трудоемка и затемняет идею алrоритма, то такой фраrмент будем иноrда заменять описанием на естественном языке. Мы будем TaK)I(e применять неформальные конструкции, такие как, например, циклы (for х Е Х do Р (ВbIПОЛНЯТЬ коман- 1) Термин «путь» В теории rрафоI3 используется только 13 отношении ор- rрафОВ t для rрафов используются термины «цепь» ИJ1И «маршрут».  При.и. пе рев. 2) Введенный так термин «цикл» В теории rрафов используется только в отношении rрафов, для орrрафов используется термин «контур»....... П рим. nе- рев. З) В отечественной литературе по теории rрафов rраф а' назынается чаще 'tастью rрафа, или частичным 2рафом, ПОД подrрафом же поним ается частич- ный rраф, удовлетворяющий дополнительному условию V х, У х. уе V' Л {Ха У} Е Е => {х, у} е Е').  Прим, перев. 
1.1. Основные понятия 13 ду р для всех элементов х множества Х в произвольноii по- следовательности), СТЕК  х (поместит значение переменноIi х в стек), х-<= СТЕК (СЧllтать элемент х из вершины стека и принять ero за значение переменной х), ОЧЕРЕДЬ X (вклю- чить х в очередь в качестве последнеrо элемента), х  ОЧЕ- РЕДЬ (взять первый элемент из очереди 11 принять ero в ка- честве значения переменной х) и т. д. Мы будем обычно опу- скать описания типов и переменных (иноrда для избежания недоразумений будем помещать соответствующие пояснения в комментарий). Переменная, появ.пЯlощаяся в процсдуре, рас- сматривается как локальная для данной процедуры, исключая тот случай, коrда в комментарии не сказано что-либо иное. СТрОКII проrраммы нумеруются так, чтобы IO}I(HO было указать на «цикл 17», «блок 9» и т. д. Основным параметром алrоритма, которыЙ будет нас ин- тересовать, является ero вычислительная сложность (ИЛII просто сложность), т. е. число шаrов, выполняемых алrОРIlТМОМ в xyд шем случае как функция размеРНОСТII задачи, представленной входными данными. Например, если алrоритм принимает как данные произвольный rраф G == < V, Е), то под размерностыо задачи можно понимать I VI. Сложность алrорптма опреде- ляется тоrда как функция f, такая что f (п) равно наибольшему числу шаrов алrоритма для ПРОlIзвольноrо rрафа с n веРШII- нами. Можно такл{е считать размерностью задачи пару < , V 1, I Е I ) ......... Tor да сложностыIo ЯВ,,1яется функция двух пере- менных и f (п, т) равно наибольшему числу шаrов, выполняс- мых алrОРИТl\10М для произвольноrо rрафа с п вершинаМII и Пl ребрами. Остается еще объяснить точнее, что мы ЦОНlIмаем под «шаrом» алrоритма. ДОПУСТIIМ, что наши проrраммы траНСЛII" руются на 1vlаШIfННЫЙ язык типичной ЭВМ, имеющей в наборе своих команд команды переноса слова из паМЯТII в буфер и наоборот, арифметические операции сложения, вычитания, умножения и де&l1СНIfЯ, условные переходы, операЦИII BBoдa-BЫ вода, а также косвенной адресации, выполненной аппараТIIО (т. е. определение арrумепта onepaItlI1I через адрес ячеЙки па- мяти, содержащей адрес этоrо aprYMeHTa). Выполнение любой из указанных выше команд мы II будем считать шаrом алrо- ритма. Очевидно, что при таком определении шаrа СЛОЖНОСТf) алrоритма зависит от KOHKpeTHoro вида машинных команд. Од- нако нас никоrда не будет интересовать точная сложность ал rоритма, а только асимптотическая сложность, т. е. асимптоти- ческая скорость увеличения числа шаrов алrоритма, коrда раз- мерность задачи неоrраниченно растет (чтобы можно было ro ворить о такоЙ скорости роста, предполаrаем, что объем па- мяти нашеrо компьютера неоrраllиченный, а также, что каждая ячеЙка памяти MO}l(eT содержать произвольно большое целое 
14 1. Введение в комбинаторику число). Ясно, что при двух произвольных «разумных» способах трансляции соответствующие сложности различаются не более чем на мультипликативную постоянную, а их скорость роста одинакова. Читателя, желающеrо уточнить приведенные выше очень неформальные рассуждения, отсылаем к работам [IJ и .(2] . При сравнении скорости роста двух функций '(п) и g(n) :(с неотрицательными значениями) очень удобны следующие обозначения: f (п) == О (g (n» <=> существуют константы С, N > О, такие что f(n)C. g(n) для всех nN f (п) === Q (g (п» <=> существуют константы С, N > О, такие что f (п)  С. g (п) для JIюбоrо n  N. Конечно, f(n) == Q(g(n» тоrда и только тоrда, коrда g(n) === с::: O(f(n». Символы O(g(n» и Q(g(n» читаются соответствен- но: «порядка не более чем g(n)>> и «порядка не менее чем g (n) ». Если сложность какоrо-либо алrоритм а есть О (g (n) ), то мы rоворим, что этот алrоритм «затрачивает порядка О (g (п)) времени» 1). Подобным же образом определяются символы О (g (nl, ..., nk» и Q (g (nl, ,.., nk» для функции мноrих пе- ременных, например: <! (п 1 , ..., nk) == О (g (пl' ..., nk» <=> существуют константы С, N  О, такие что f (пl' ..., пk)  Cg (п 1 , ..., nk) для всех п I , ... t пk  N.) Определенную таким образом сложность иноrда называют временной сложностью в отличие от сложности no nа.мЯТU t определяющей величину объема памяти, использованноrо алrо- ритмом, как функцию размерности задачи. 1.2. Функции и размещения Классической задачей комбинаторики является задача опре- деления числа способов размещения некоторых объектов в ка- ком-то количестве «ящиков» так, чтобы были выполнены за- данные оrраничения. Эту задачу можно сформулировать не- сколько более формально следующим образом. Даны множе- ства Х, У, причем I Х 1=== п, I у 1== т. Сколько существует функ- 1) Символьную запись f (n) == О (gO(n») не следует трактовать как равен- ство; например, из {(n) ..=.O(g(n)) и Il(n)  O(g(n», конечно, не вытекает f.(n) == h (n)  
1.2. Функции и размещения 15 ЦИЙ ': Х --+ У, удовлеТВОРЯIОЩИХ заданным оrраничеНIIЯ1? Эле- менты МНО}l{ества Х соответствуют объектам, элементы множе.. ства У ---- ящикам, а ка}l{Дая функция ': Х --+ У определяет не- которое размещение, указывая для ка}l{доrо объекта х Е Х ИЩИК f (х) Е У, в котором данный объект находится. Друrую традиционную интерпретацию получим, трактуя У как множе. ство «цветов:., а f (х) как «цвет объекта х». liаша задача, та. ким образом, эквивалентна вопросу, сколькими способами мож- но покрасить объекты так, чтобы были соблюдены некоторые оrраничения. Заметим, что без потери общности можем всеrда считать, что X{l, ..., п} и У==={I, ..., т}. Каждую функцию f можно Тоrда отождествить с последовательностью (/(1), ..., f(n). Наша задача имеет самый простой вид, если не наклады- вается никаких оrраничений на размещения. Имеет место сле- дующая TeopMa. Теорема 1.1. Если I Х 1== n, I у 1:::::; т, то число всех функции f: Х... у равно т n . Доказательство. Считая, что Х=={l, ..., п}, сводим нашу задачу к вопросу о числе всех последовательностей (Yl, ..., Уn) с членами из т-элементноrо множества У. Каждый член после.. довательности У; мы можем выбрать т способами, что дает т n возможностей выбора последовательности (Yl, ,.., Уn). 11 Леrко также найти число размещений, для которых ка)l(ДЫЙ ЯЩИК содержит не более одноrо объекта  такие размещения соответствуют взаимно однозначным функциям. Обозначим че- рез [т] n число всех взаимно однозначных функций из n-эле- MeHTHoro множества в т-элементное MHO}l{eCTBO. Теорема 1.2. Если I Х 1== п, I у I т, то число всех взаимно однозначных функций f: Х --+ У равно [пz]n === 1п (1n ........ 1) .. . (пl ........ п + 1) (1. 1) . (nолаzаем [fп] о == 1). Доказательство. Бу деrvI определять на этот раз число инъек- тивных (т. е. имеющих все различные члены) последовательно- стей (UI, ... t Уn) с членами из множества У. Элемент Yl та- Koro множества мы можем выбрать т способами, элемент У2......... т ...... 1 способаl\lИ, в общем случае если уже выбраны элементы YI, ..., Yll, то В качестве У; можем выбрать любой из т........ i + 1 элементов MHO}l{eCTBa У  {Yl, ..., Yi---l} (принимаем п  /п; если n > т, то очевидно, что и [пl] п И искомое число функ- uий равны нулю). (этодаеТm(m.......l) ... (т........п+l) ВОЗМО}l{- ностей выбора инъеКТllВНЫХ последовательностей (Yl,. . .   ., у n) · ) - 
16 1. Введение в комбинаторику Приведем в качестве примера [4] 3 === 24 последовательности длины 3 с элементами из множества Х == {1, 2, 3, 4}: (1)>2.,3) (2,1,3) (3,1,2) (4,1»2) (1,2,4) (2,1,4) (3,1,4) (4,1,3) (1, 3, 2) (2, 3, 1) (3, 2, 1) (4, 2, 1) (1,3,4) (2,3,4) (3,2,4) (4,2,3) (1,4,2) (2,4, 1) (3,4, 1) (4,3,1) (1, 4, 3) (2, 4, 3) (3, 4, 2) (4, 3, 2) Если т  n, то I{а)l(дая взаимно однозначная функция ': Х  у является взаIlМНО однозначным отобра}кением множе.. ства Х на множество У. В таком случае [п] п == n (п ........ 1) ... I обозначаем п! (п факториал). Каждое взаимно однозначное отображение f: Х  Х называется перестановкой множества х. Как частный случаil теоремы 1.2 получаем слеДУЮЩУIО теорему. Теорема 1.3. Число перестановок, n-элементноzо множества равно п! Перестановки мы будем обсуждать в послеДУЮЩIIХ разде- лах, сеЙчас же остановимся еще на одном типе размещения объектов по ящикам. Предположим, что мы размещаем п объ.. ектов по т ящикам так, чтобы каждый ящик содержал бы по- следовательность, а не множество, как прежде» помещенных в нем объектов. Два размещения назовем равными, если в ка- ждом ЯЩlIке содержится одна и та же последовательность объектов. Размещения TaKoro типа будем называть упорядо fleHHblMU размещенияии n объектов по т яи{uкам. Обозначим число таких упорядочеНIIЙ через [frl] n. Теорема 1.4. Число уf10рядоченныlx размещений n объектов по 1n ящикам равно [т]n  т (1n + 1) ... (т + n........ 1) (1.2) (полаzаем [т]О == 1). Доказательство. Будем CTPOIITb упорядоченное размещение, добавляя по очереди новые объекты. Первый объект мы мо- жем разместить т способами, второЙ......... lп + 1 способами, ибо ero можно разместить в одном IIЗ nz....... 1 пустых ящиков и.пll в ящике, содержащем первый объект, перед ним или после Hero. В общем случае предположим, что уже размещено i ---- 1 объектов, причем для k === 1, 2, ..., Пl в kM Яllике находятся rk объектов. Тоrда i-Й объект мо}кем добавить в k-й ящик 'k + 1 способами, что дает в сумме (, 1 + 1) + ... + (, т + 1) == (, 1 + ... + r т) + т == т + i ....... 1 
1.3. flересТЗIlОВКIt 17 возможностей. Таким образом, всех упор ядоченных размеше- ни й будет т (т ..+. 1) . . . (пl + n  1). 11 На рис. 1.2 представлены [3]2==12 упорядоченных разме щениЙ элементов а, Ь в трех ящиках. I а , I ь i I а J I ь I J ь ( , а I I ь r I а' t I аЬ r f [ f Ьо ( J I I 1 а ь I r J ь I а I ( J аЬ I 1 f I Ьо I , f , I аЬ I r I ( Ьо Рис. t .2. Размещение (упорядоченное) элементов а. Ь n трех ящиках. Приведем в заключение следующие простые [т]n == (т ....... n + 1) [m]n1. [l1l] n == nz! / п r , [т]n == [т + п......... 1]n. заВИСIIМОСТИ: ( 1.3) (1.4) (1.5) 1.3. Перестановки: разложение на ЦИКЛЫ. знак перестановки Напомним, что перестановкой 1) пэлементноrо множества Х называется произвольная взаимно однозначная функция {: xx. J) Обычно функция '; Х  Х называется подстановкой, а перестановкой называется вторая строка таблицы, определяющей подстановку. В этом раз.. деле и далее термин «перестановка» используется для обозначения обоих по.. нятий, что, однако, не ПРИ130ДИТ к какойлибо двусмысленности....... П рим. nе- рев. 
18 1. Введение в комбинаторику Обычно перестановка определяется с помощью таблицы с дву. мя строками, из которых каждая содержит все элемеНТbI мно- жества Х, причем элемент '(х) помещается под элементом х. )ЛЯ примера рассмотрим такую перестановку f множества {a,b,c,d}., что f (а) === d; f (Ь) == а; f (с) == С; f (d) == Ь; она записывается в виде ( а Ь с d ) '== dacb · Если порядок элементов в верхней строке фиксирован, то ка- ЖДОЙ перестановке однозначно соответствует последователь.. . ность, содержащаяся в нижнеи строке, например для переста- новки f это есть (d, а, с, Ь). Поэтому будем называть иноrда произвольную инъективную последовательность длины п с эле. ментами из множества Х перестановкой п-элементноrо множе... ства Х. В наших исследованиях лрирода Э.'lементов множества Х несущественна  примем для простоты Х == {1, ..., п}. Обозна- чим множество всех перестановок этоrо множества через 8 п . Произвопьная перестановка f Е Sn будет обычно отождеств. ляться с последовательностью (al, ...,а п ), rде al==f(i). Под суперпоэut{uей перестановок f и g мы будем понимать пере... становку fg, определяемую следующим образом f g (i) == f (g (i). Отметим, что для суперпозиции двух перестановок, скажем ( 12345 ) '== 53214 ' ( 12345 ) g== 25314 ' достаточно изменить порядок столбцов в перестановке f таким образом, чтобы в первой строке получить последовательность, имеющуюся во второй строке перестановки g, тоrда вторая строка перестановки f дает суперпозицию fg. В нашем случае ( 12345 ) g== 25314 I ( 25314 ) '=== 34251 ' ( 12345 ) fg=== 34251 · 
1.3. ПересrаНО8КИ 19 Перестановку e== ( 12 ... N ) 1 2 . . . n ()удем называть тождественной перестановкой. Очевидно, что е! z::::: fe ==, для произвольной перестановки f Е Sn. Леrко так- же заметить, что каждая перестановка f Е Sn однозначно опре- еляет перестановку f.....l, такую что '''''''1 :=: '.....1! == е. Будем Ha эывать ее перестановкой, обратной к ,. Чтобы ее определить, достаточно поменять местами строки в записи перестановки  Например, для ( 12345 ) f=== 34215 получаем ( 34215 ) ( 12345 ) f1 == 1 2 3 4 5 == 4 3 1 2 5 · Из наших рассуждений следует, что для становок /, g, h Е Sn выполняются условия (fg) }l == f (gh), fe==ef==f, tl t === tfl == е. произвольных пере- ( 1.6) ( 1 .7) ( 1.8) Чтобы отразить этот факт, будем rоворить, что Sn образует еруппу относительно операции супеРПОЗIIЦИИ. Эту rруппу будем называть симметрической сруппой степени 1l. Произвольное под.. множество G  Sn, для KOToporo выполнены условия f, gEG=?fgEG, fEG=>f1 Еа', будем называть 2руппой перестановок степени n. Каждую перестаНОВI{У f Е Sn 10ЖНО представить rрафиче- ски с помощью ориентированноrо rрафа с множеством вершин Х==={I, ..., п}, в котором х--+у тоrда и только тоrда, коrда f(x) == у. Из каждой вершины .х выходит в точности одно ребро, а именно (х, f (х). Подобны }I{е образом убеждаемся, что единственным ребром, входящим в вершину х, является <1.....1 (х), х). Леrко заметить, что, выходя ИЗ произвольной вер- шины Ха и рассматривая по очереди вершины хl == f (хо), Х2 == === , (Хl), .... t мы дойдем после конечноrо числа шаrов до вер- шины Ха, Т. е. х/ === f (Xll) === Ха для lIeKOTOporo 1  1. ОТСlода следует, что наш rраф состоит из HeKoToporo числа элементар- ных циклов с различными Iножествами вершин, в сумме даю, 
20 1. Введение в комбинаторику щих все множество х. Предположим, что в этом раЗЛО)J,СНJ1И появляются k циклов a o (i) П( l i)..... ...  а п и ) 1  а о и) , i  1 , ... , k. i.... Каждому такому циклу соответствует переставовка f == [а и) а и) а (О ] 1 О 1 ... пl....l' называемая также циклом (длины ni), которая определяется следующим образом: f i (ab i ») == ai), f 1 (х) == х fi(a\i»)==ai), ..., fi(a/}....])===a, для х Е Х ,,{аь 1 ), ..., a""I}. -Нашу перестаllОВКУ можно представить в виде суперпозиции циклов f == [а (l) а (l) a (l) ] [а (2) а (2) а (2) ] [a (k) a (k) a (k) ] о 1 ... п....l О I ... п....l ... о 1 ... п k ....l. I 2 Такое представление перестановки будем называть разложе нием на циклы. Будем rоворить, что перестановка f есть пере- 7 6 2 f С z 3 4 5 6 7) 4<) 7514236 1 3 5 Рис. 1.3. Разложение псреСl ЗНОБКИ на ЦИКЛЫ. становка типа (ЛI, ..., Лп), если она содержит в разложении на циклы в точности Лi циклов ДЛIlНЫ i, i === 1, 2, ..., n. Тип (Лl, ... I Лn) обычно записывается СIlмволически 1 "'1 . . . п Лп (если 1l === О, то i"'l опускается). Например, перестановка ( 1234567 ) '=== 7514236 имеет следующее разложение на циклы: f== [17 6 3] [2 5J [4J, следовательно, она имеет тип 112141. Это проиллюстрировано на рис. 1.3. Пару (ai, aj), i < j, будем называть инверсией переста- вовки (ai, ..., а n ), если а; > а/. Для произвольной перестанов- ки f Е S" обозначим через 1 (f) число ее инверсий, а также опре 
1.3. ПерестаНО8КИ 21 делим знак этой перестановки слеДУIОЩИМ образом: sgn (/) == ( ......1)/ (f). ПерестаНQВКУ f назовем четной, если sgn (f) == 1, инечетной, если sgn (f) == .......1. Проиллюстрируем эти понятия на ряде при- меров. Тождественная перестановка (1, ..., п) не содержит ни- каких инверсий, и, следовательно, 1 (е) == О, и для любоrо п эта перестановка будет четной. Перестановка (п, n.......... 1, ..., 1) со- держит п (п ...... 1) /2 инверсий (число всех пар (i, j), i =1= j, равно [n]2== n(п........ 1), причем каждой паре (i, j), i<j, соответствует пара (j, i), i > i). Таким образом, наша перестановка будет чет- ной для п вида 4k или 4k + 1 и нечетной в остальных случаях. Перестановка .<2, 4, 3, 5, 1) имеет следующие инверсии: ,2, 1), :(4, 3), (4, 1), (3, 1), (5, 1), следовательно, является нечетной. Знак перестановки можно определить с помощью непосред" CTBeHHoro подсчета всех инверсий, однако такой алrоритм в об- щем случае требует количества шаrов TaKoro же порядка, что и число инверсий, т. е. по меньшей мере Q (п 2 ). Опишем теперь ал- rоритм сложности О (п). Для этой цели нам понадобится не- сколько лемм. ПРОIIЗВОЛЬНУЮ перестановку, являющуюся циклом длины 2, будем называть транспозицией. Важную роль в дальнейших рас.. суждениях будут иrрать транспозиции соседних элементов, Т. е. транспозиции вида [i i + 1]. Лемма 1.5. П роизвольную перестановку f Е Sn МОЖНО пред.. ставить в виде суперпозиции l(f) транспозиций соседних эле- ментов. Доказательство. Заметим прежде Bcero, что если f имеет вид (al, ..., а п ) и t == [i i + 1], то суперпозиция ft имеет вид (aJ, ..., aiI, аЕ+I, ai, ai+2, ..., а п ). Обозначим через '; число инверсий, располо}кенных перед элементом i: ri == 1 {j : j < i 1\ а} > а;} 1. Леrко заметить, что в (aI, ..., а п ) мы MO}I{eM переставить эле- мент 1 == а'l + 1 на первую позицию, произведя '1 транспозиций соседних элементов, затем элемент 2 переставить на BTOPYIO по- зицию, произведя '2 транспозиций соседних элементов и Т. д. В конце концов после '1 + . . . + 'п == 1 (f) шаrов получим после- довательность (1, ..., п). Это означает, что ftt . . . t/(1) ::=: е, rде t 1 , ..., t/(f).......... транспозиции соседних элементов. Итак, f (' t ) l l l == 1... J (f) == t 1 (f) . . . t 1 t что завершает доказательство леммы, rде tI.== t для произ- вольной транспозиции t.. 
22 1. Введение в комбинаторику Лемма 1.6. Для проuзвОЛЬflblХ перестановок " g Е S", sgn (/g) == sgn (f) sgn (g). Доказательство. Положим сначала, что g есть транспозиция вида t == [i i + 1]. Если f == (al, ..., а п ), то f t == (а 1 , ..., а 1....1 , а 1 + 1 , а 1 , а 1 + 2, ..., а n) 11, очевидно, { 1 (/) + 1, если al < al+l' l(ft)== l(f)l. если at>al+1 0 В обоих случаях sgn (ft)  ......... (.........1 ) lа) === .........sgn (f). П роизволь- ную перестановку g мы можем на основе предыдущей леммы представить в виде /1 ... t/lt rде t 1 , ..., t k суть транспозиции со.. сеДНИХ элементов и k == 1 (g). Имеем sgn (fg) == sgn (/t 1 ... t k ) == ........ sgn ({t 1 ... tk....l) == == (........I)k sgn (/) == sgn (g) sgn (f). 11 Лемма 1.7. Каждая транспозиция есть нечетная nерестаНО8ка. Вообu{е знак произвОЛЬНО20 цикла длuны k равен (.........1) k....l. Доказательство. Первая часть леммы вытекает из Toro фак" та, что последовательность < 1, ..., i........ 1, j , i + 1, ..., j........ 1, i, j -1 1, ..., n) можно преобразовать в последовательность < 1, ..., n), произ.. ведя сперва j  i транспозиций [j.......l j], [j.......2 j........l], ..., [i i+ 1], а затем (j.... i) ........ 1 транспозпций [i+ 1 i+2], [i+2 i+3], ..., [j........l j]. Это означает, что транспозиция [ijJ мо)кет быть представлена в виде суперпозиции (j  i) + (j ......... i) ........ 1 == 2 (j ......... i)  1 транс.. позиций соседних элементов. Соrласно предыдущим леммам, знак нашей транспозиции [ij] равен (1)2(ji)1 == .........1. Вторая часть леммы есть следствие первой и Toro факта, что произвольный цикл [аl ... Qk] есть супеРПОЗIIЦИЯ k......... 1 транспо.. зиций: [аl ... ak] == [аl а2] [а2 а з] ... [ak....l ak]. 11 Лемма 1.8. Знак произвольной перестйновки f типа lAl ... n]'1& определяется формулой Ln/2J L 'Л 2 / sgn (f) == (.......1) /==1 · 
1.3. ПересrаНО8КИ 23 Доказательство. Если f имеет в разложении На ЦИКЛЫ ТОЧНО Лi циклов длины i, ТО по предыдущим леммам п А LJ sgn (f) == п [(  l)iI] l  11 (1)21 === (........I)А2+А4+.... tl 11 11 Заметим, что о числе инверсий перестановки множества Х мы можем rоворить только в случае Х === {l, ..., п}, более общо: коrда на множестве Х определен линейный порядок. Однако знак перестановки зависит только от ее типа и, следовательно, не зависит от Toro, как упорядочено MHO}l{eCTBO х. Обещанный эффективный метод определения знака переста.. новки основан на знании типа этой перестановки и на использо- вании леммы 1.8. Алrоритм 1.9. (Определение знака перестановки) Данные: Произвольная перестановка f Е Sn, заданная в виде последовательности Р (1 J, ..., Р [п] (Р [i] == f (i) ). Результат: IIo завершении работы алrоритма s  sgn (f). 1 begin 2 s :== 1; 3 for i:=== 1 to n do Н авы й [i]:== истина; 4 fo r i: === 1 to п do 5 if новый [i] then (* найден цикл, содержащий i *) 6 begin j:== Р [i]; 7 while j =1= i do 8 begin новый [j]:=== ложь; s:==...... s; j:== Р [j] 9 end 10 end 11 end Этот алrоритм просматривает последовательно позиции 1, ..., n перестановки (цикл 4) и каждый раз, коrда элемент P[i] не был еще проанализирован (НОВЫй [i] :== истина), выявляется цикл, к которому этот элемент принадлежит (блок 6). Заметим, что если этот цикл имеет длину k, то цикл 7 исполняется k........ 1 раз. I1ри последовательных исполнениях этоrо цикла знак перемен- u u нои s изменяется на противоположныи тоrда и только тоrда, коrда k четно. Первоначальное значение переменной s равно единице, и, следовательно, после обнаружения всех циклов s == (.......I)P, rде р есть число циклов четной длины. По лемме 1.8 имеем s == sgn (f) . Леrко также убедиться, что число шаrов алrоритма в точ-- насти равно n для произвольной перестановки f Е Sn. Чтобы это доказать, заметим, что суммарное число шаrов, исполняемых в цикле 4 , не считая шаrов ВО внутреннем блоке 6, есть О (п). 
24 1. 8веден.ие 8 комбинаторику Суммарное число marOB, исполняемых в блоке 6 в процессе ра- боты алrоритма, равно сумме длин всех циклов, что в свою оче- редь равно О (п). Это дает общую сложность О (п). 1.4. r енерирование перестановок Займемся алrоритмом rенерирования всех п! перестановок п-элементноrо множества. Этой проблеме посвящено MHoro пуб- ликаций (см., например, статью [60]). Она имеет давнюю исто- рию, ее возникновение можно отнести к началу XVII века, коrда в Анrлии зародилось особое искусство КОЛОl<ольноrо боя, осно- BaHHoro, если rоворить упрощенно, на выбивании на п разных колоколах всех п! перестановок [14], [74]. Перестановки эти сле- довало выбивать «по памяти, что способствовало разработке сторонниками этоrо искусства первых простых методов система- тическоrо перечисления всех перестановок (без повторений). Не- которые из этих незаслуженно забытых методов были переот- крыты в настоящее время в связи с появлением цифровых машин. Это искусство  хотя и мало известное в Польше........ про- существовало до наших дней, поскольку знаменитая «Книrа ре- кордов rиннеса» [29] содержит упоминание о выбивании всех 8! == 40 320 перестановок на 8 колоколах в 1963 rоду; установ- ление этоrо рекорда потребовало 17 часов 58 1/2 минут! Конечно, использование цифровых машин позволяет rенерировать пере- становки значительно быстрее, однако разница не так уж ве- лика, как можно было бы подумать  за 18 часов даже самая быстрая машина не сможет получить все перестановки пэле- MeIlTHoro множества, если п > 13 (с друrой стороны, переста- IIОВКИ 8-элементноrо множества можно получить в течение доли секунды). Это простое следствие Toro факта, что п! растет весь- ма быстро с ростом п. В этом разделе мы опишем три разных метода rенерирования последовательности всех п! перестановок п-элементноrо множе- ства. Будем предполаrать, что элементы нашеrо множества за- поминаются в виде элементов массива P[l],..., P[nj. Во всех трех методах элементарной операцией, которая применяется к массиву Р, является поэлементная транспозиция, т. е. обмен зна- чениями переменных Ри] и P[j], rде 1  i, j  п. Эту операцию будем обозначать через Р [i] : ==: Р [j]. Очевидно, что она экви- валентна последовательности команд рот :== Р [i]; Р [i] :== Р [j]; Р [j] :=== рот, rде рот есть некоторая вспомоrательная переменная. Первый из методов, который мы опишем, леrче Bcero понять, если в качестве переставляемых элементов взять числа 1, 2, ... 
1.4. rенеРИРОВ8ние перестаНОБОК  . . ., п. На множетве всех перестановок  более общо: на МНО" жестве всех последовательностей длины п с элементами из мно" жества Х == {1 t ,. 1, п}  определяется лексикоrрафический по.. рядок: (х 1 , Х2, ..., Х n ) < (Уl, ..., Уn) <=> существует k  1, такое что Xk  Yk И XI == Yl для каждоrо 1 < k. Заметим, что если вместо чисел 1, 2, ..., n взять буквы а, Ь, ..., z с естественным порядком а < ь < с < . . . < z, то лексикоrрафический порядок определяет стандартную последова- тельность, в которой слова длины п появляются в словаре. По.. добным же образом определяется антилексикоrрафический по.. рядок, обозначаемый через <', с той разницей, что как очеред" ность позиций в последовательности, так и упорядочение эле.. ментов множества Х обратны по отношению к исходным: (X 1 , ..., Х n ) <' (Yl, ..., Уn) <=> существует такое k  n, что Xk > Yk И XI == Yl для каждоrо 1 > k. Для примера приведем перестановки множества Х == {1, 2, 3} в лексикоrрафическом ,(а) и антилексикоrрафическом (б) по.. рядке: (а) 123 132 213 2 3 1 312 321 (6) 1 2 3 213 132 312 231 321 Алrоритм rенерирования перестановок в антилексикоrрафи ческом порядке сформулировать HeMHoro удобнее. Заметим с этой целью, что последовательность перестановок множества {1, ..., п} в этом случае имеет следующие свойства, вытеКаю- щие непосредственно из определения: (А 1) В первой перестановке элементы идут в растущей по- следовательности, в последней......... в убывающей; друrими слова.. МИ, последняя перестановка  обращение первой. (А2) Нашу последовательность можно разделить на n бло- ков длины (п  1) 1, соответствующих убывающим значениям элемента в последней позиции. Первые п....... 1 позиций блока, содержащеrо элемент р в последней позиции, определяют после- 
26 1. Введение в комбинаторику довательность перестаНОБQК множества {l, .. I J п}"{р} в анти- лексикоrрафическом порядке. Эти свейства определяют следующий простой рекурсивный 8лrоритм: Алrоритм 1.10. "(rенерирование всех последовательностей в антилексикоrрафическом порядке.) Данные: п. Результат: Последовательность перестановок множества {1, ..., п} в антилексикоrрафическом порядке. 1 procedure REV ERSE (т); (* обращение последовательности P[l], ..., Р[т]; массив Р........rлобальНый*) 2 begi n i: == 1; j:== т; 3 while i < j do 4 begln Р [i] :==: Р [j]; i:== i + 1; j:== j ........ 1 5 end 6 end; (* REV ERSE *) 7 procedure ANTY LEX (т); (* массив Р....... rлобальный *) 8 begin 9 if т==1 then (*Р[I], .,., Р[п] содержит новую пере- становку *) 10 write (P[l], ..., Р[п]) 11 else 12 for i:== 1 to т do 13 begin ANTY LEX (т ........ 1); 14 if i < т then 15 begin Р [i] :==: Р [т]; REV ERSE (т  1) 16 end 17 end 18 end; (*ANTYLEX*) 19 begin (* rлавная проrрамма *) 20 for i:== 1 to n do Р [i] :==: i; 21 ANTY LEX (n) 22 end Чтобы понять, как работает этот алrоритм, отметим прежде Bcero, что выполнение процедуры RE V ERSE (т) приводит К обращению очередности в последовательности элементов Р[I], "" Р[т]. Чтобы доказать правильность алrоритма, доста- точно показать индукцией по т, что если P[l] < . . . < Р[т], то вызов ANTYLEX(m) приводит к rенерированию всех перестано- вок множества {Р[I], ..., Р[т]} в антилексикоrрафическом по- рядке (при неизменных значениях Р [т + 1], ..., Р [п]). Предпо- ложим, что P[i] == ai, 1  i  т, йl < . . . < йm, И рассмотрим икл 12, Эффект выполнения первой итерации этоrо цикла будет 
1.4. rенерироsание nepecTaHOBoI( 27 следующий: Р [1] Р [2] ... Р [fn  2] Р [т ........ 1] Р [т] аl а2 aт2 а m ....l aп aт1 aт2 а2 аl aп (после выполнения ANTY LEX (т ....... 1) а т aт2 а 2 йl aтl (после транспозиции р [1] :==: Р [т]) аl а2 aт2 а т aтl (после выполнения REVERSE(m ---- 1) (Мы воспользовались здесь индуктивным предположением о том, что ANTY LEX (т  1) корректно rенерирует все перестановки элементов al. ..., aтl В антилексикоrрафическом порядке.) Аналоrичным способом, индукцией по i, доказываем, что i-я яте.. рация цикла 12 приводит к rенерированию всех перестановак элементов al, ..., aтi, aтi+2, ..., а т при Р[т] == aтi+l. Со.. rласно свойству А2 это означает, что ANTY LEX (т) rенерирует Все перестановки элементов аl, ..., ат в антилексикоrрафиче.. ском порядке. " Следует отметить, что условие Ри] == i, 1  i  п, в начале работы проrраммы (см. CTpOI(a 20) было существенно только для облеrчения пони мания работы алrОРllтма. Сам алrоритм с,ормулирован в терминах позиций, значения которых подвер- rаются изменениям, и в нем ни в коей мере не используется со- держание переменных Р[ 1], . . ., Р[п]. Рассмотрим теперь, сколько транспозиций выполняет алrо. ритм 1.1 О при rенерировании каждой следующей перестановки. Леrко отметить, что это число есть величина переменная: каждая вторая перестаповка получилась за счет ОДНОЙ транспозиции P[l] :==: Р[2]; но наряду с НИМII имеются и такие, которые тре.. буют L (п  1) /2 J + 1 == 1. (п + 1) /2 J транспозиций. Хотя сред- нее число транспозиций, ПРIIХОДЯЩИХСЯ на ка)I{ДУЮ перестановку, невелико (см. задачу 1.13), однако в некоторых ПРИЛО)l{ениях лучшим был бы алrоритм, в котором каждая следующая пере.. становка образуется из предыдущеЙ с помощью выполнения только одной транспозиции. Это может оказаться существенным в ситуации, коrда с каждой перестановкой связаны некоторые вычисления и коrда существует возможность использования ча.. стичных результатов, полученных для предыдущей перестанов.. ки, если последовательные перестановки мало отличаются друr от друrа. Покажем сейчас, что такой алrоритм действительно возмо. жен. Ero основную схему можно описать с помощью следующей 
28 1. Введение в комбинаторику рекурсивной процедуры: 1 procedure PERM (т); (* массив Р........ r лобальный *) 2 begin 3 if т == 1 then (* Р [1], ..., Р [п] содержит новую пере.. становку *) write (Р[I], ..., Р[п]) else for i:== 1 to т do begin PERM (т  1); if i < т then Р [В [т, i]] :==: Р [т] end 4 5 6 7 8 9 10 end Задачей этой процедуры является rенерирование всех пере- становок элементов P[l], ..., Р[п] через последовательное reHe- рирование всех перестановок элементов P[l], ..., Р[п........ 1] и за- мену элемента Р[п] на один из элементов P[l], ..., Р[п  1], определяемый из массива В[m, ,"], 1  i < т  п. Очевидно, что для Toro чтобы эта схема работала пр(\вильно, мы должны определить массив В так, чтобы rарантировать, что каждая транс.. позиция Р[В[т, i]]: ==: Р[т] в строке 8 вводила бы новый эле- мент в Р[т]. Представим теперь алrоритм, в котором значение В[т, i] вычисляется динамически как функция от т и i [44] АлrоРитм 1.11. (rенерирование всех перестановок за мини- мальное число транспозиций.), Данные: n. Результат: Последовательность перестаповок множества {1, . .., п}, в котором каждая последующая пере- становка образуется из предыдущей путем выпол- неНIIЯ одной транспозиции_ 1 procedure В (т, i); 2 begin 3 if (т mod 2 == О) and (т > 2) then 4 j f i < т........ 1 then В:=== i 5 else В:== т ........ 2 6 else В:== т ........ 1 7 end; (*В*) 8 procedure PERM (т); (* массив Р........ rлобальный *) 9 begin 1 О if т == 1 then (* р [1], ..., Р [п] ........ новая пересrаНQБка *) 11 wrlte (P[l], ..., Р[п]) 12 else 13 for i:== 1 to т do 
1.4. rснерировзние перестэновок 29 14 begin Р ERM (т ........ 1); 15 if i < т then Р [8 (т, i)] :==: Р [т] 16 end 17 end; (*РЕРМ*) 18 bcgin (* rлавная проrрамма *) 19 for i:== 1 to п do Р [i] ::::=:: i; 20 PERM (п) 21 end Отметим, что для нечетноrо т транспозиция в строке 15 сво- дится к Р[т  1] : ==: Р[т], для каждоrо i < lп для четноrо т значение Р[т] меняется последовательно на значения Р[I], Р[2], ..., Р[т  3], Р[т......... 2], Р[т  1] (Р[ 1] для т == 2). Для каждоrо т  1 определим перестановку q>m следующим образом: <Рт (i) === индеl{С j, такой что Р [jJ содержит начальное значение переменной Р [i] после выполнения PERM (т). Например, если сначала переменные Р[I], ..., Р[4] содержат последовательность 1 2 3 4, то леrl{О убедиться, что после вы- полнения PERM (4) эта последовательность изменится на 4 1 2 3. Это означает, что q>4 является циклом 1 2 3 4. Покажем теперь, что алrоритм 1.11 корректен; точнее, дока- жем для каждоrо т  1 выполнимость следующеrо условия: Условие W т. Выполнение PERM (т) вызывает rенерирование всех перестановок элементов Р[I], ..., Р[т], причем <рт есть транспозиция [т т  1], если т нечетное (т > 1), или цикл [1 2 ... т], если т четно. Доказательство осуществляется индукцией по т так, как это обычно делается при доказательстве корректности рекурсивных алrоритмов. Леrко убедиться непосредственно, что условия W 1 И W 2 выполняются. Предположим, что т  з. Докажем выпол- нимость W т, предполаrая истинность W тl. Доказательство ра- зобьем на две части в заВИСIIМОСТИ от Toro, четное т или не- четное. Случай 1, т нечетное. В силу lIндуктивноrо предположения выполнение PERM (т ......... 1) в строке 14 приводит каждый раз к сдвиrу значений Р[I], ..., Р[т  1] вдоль цикла [1 2 ... т  1]. Таким образом, транспозиция Р[т] :==: Р[т  1) в строке 15 вы- бирает каждый раз различные элементы в Р[т]. Если вначале P[i] === а;, 1  i  т, то в Р[т] помещаются поочередно элемен- ты ат, ат....2, Gт....з, ..., аl, а т ....l. Следовательно, PERM (т) reHC- рирует все перестановки элементов P[l], ..., Р[т]. Заметим, что сдвиr P[l], ..., Р[т......... 1] вдоль цикла [1 2 ... ... ,п  lJ, а затем выполнение транспозиции Р[т] :==: Р[т  1] эквивалентно сдвиrу Р [1], ... J Р [т] вдоль цикла [1 2 ... т.......з 
ЗА 1. Введение в комбинаторику Таблица 1./. Изменение значений переменных Р [1], ..., Р [т] во время выполнения процедуры PERM (т) при т четном Ч пело выполненных р [1] Р [21 Р [т31 Р [т2) Р 1т.... 1] Р [т] н9ераций цикла 13 О йl й2 йт.... з йт....2 йт....l йт 1 йт й2 йm....з йт....1 йт....2 йl 2 йт йl ат....з йт....2 йт....l а2 . . . т3 йт аl йm....' йт....! йт--2 ат....з т ..... 2 йт йl йm....4 йт....з а т ....l йт....1 т ..... 1 йт аl йт...4 йт...2 аm....з йт....а 'n йт йl а т .... .. йт....з йт--2 ат...l т  2 т т  1] длины т. Если бы транспозиция в строке 15 выполнялась для каждоrо i  т, то выполнение цикла 13 вы- звало бы возвращение всех элементов на свои исходные места. В действительности же последняя транспозиция для i == п Не вы- полняется. Следовательно, <рт == [т, т  1] . Случай 2, т четное. Проследим за содержанием массива Р во время исполнения PERM (т). Изменения, которым подвер" rается он, представлены в табл. 1.1. Из этой таблицы следует, что каждый элемент появляется в Р[т], следовательно, PERM (т) rенерирует все перестановки, и что <рт является циклом [1 2 ... т]. Доказательство правильно- ти алrоритма тем самым закончено. Алrоритм 1.11 обладает одним свойством, которое может ока- заться полезным в некоторых приложениях. Представим себе, что мы ищем перестановку, удовлетворяющую определенным ,условиям. В такой ситуации, если для HeKoToporo т значения Р[т + 1] ... Р[п] не удовлетворяют требуемым оrраничениям, то нет необходимости в вызове PERM (т) и в прохождении всех тl перестановок элементов Р[I], ..., Р[т]. Эти переста- новки мы можем опустить, выполняя перестановку элементов Р[I], ..., Р[т], обозначаемую через q>m. Заметим, что переста- новки q>m имеют в нашем случае очень простую форму. ПоследниЙ алrоритм rенерирования перестановок, которыЙ мы здесь представляем, строит последовательность, в которой разница между двумя последовательными перестановками еще меньше: каждая следующая образуется из предыдущей с по мощью однократной транспозиции соседних элементов. Этот ал- rоритм обычно приписывается Джонсону [38] и Троттеру [68]. Ero идею леrче Bcero проиллюстрировать на примере. Предпо.. ложим, что уже построена последовательность перестановок эле 
1.4. rенерНрОВ8ние переста НОВОК 31 ментов 2, 3, . , . , n, обладающая ЭТИМ свойством, например: 2 3, 3 2 для n == з. Тоrда требуемую послеJlOвательность перестано.. вак элементов 1, 2, ..., п получим, вставляя элемент 1 всеми возможными способами в каждую перестановку элементов 2, з, . . . , n. В нашем случае получаем 1 2 3 213 231 321 312 1 3 2 в общем виде элемент 1 перемещается между первой и послед" неи ПОЗИIIИЯМИ попеременно вперед и назад (п..... 1) 1 раз. На основе этой конструкции можно леrко получить рекурсив.. ный алrоритм, rенерирующий требуемую последовательность пе" рестановок для произвольноrо n. Однако этот метод, применен ный непосредственно, имеет недостаток: последовательность перестановок строится «целиком» И только после окончания Bcero построения ее можно считывать. Очевидно, что решение TaKoro типа потребовало бы orpoMHoro объема памяти. Поэтому мы сейчас покажем нерекурсивный вариант этоrо алrоритма_ В этом варианте для ка)кдоrо i, 1  i < n, булева переменная PR[tl содержит информацию о том, переносится ли элемент i вперед (РR[i]==истина) или же назад (РR[i]==ложь) , перемен ная же C[tl показывает, какую из возможных n....... i + 1 позиций элемент i занимает относительно элементов i  1, ..., п на своем пути вперед или назад. Позицию элемента. i в таблице р определяем на основании ero позиции в блоке, содержащем i, i + 1, ". , п, а так}ке на основании числа элементов из 1, 2, .,. . . ., i  1, которые находятся слева от этоrо блока. Это число, будучи значением переменной х, вычисляется как число элемен.. тов J < i, которые, двиrаясь назад, достиrли бы cBoero крайнеrо левоrо положения (C[j] == п  j + 1, PR[j] == ложь). Каждая но.. вая перестановка образуется транспозицией caMoro меньшеrо из элементов 1, который не находится в rраничном положении (т. е. C[j] < п ....... / + 1) с ero левым или правым соседом. Это реали- зует приведенный ниже алrоритм. Доказательство ero праВИЛЬ 4 ности предоставляется читателю. Алrоритм 1.12. :< rенерирование всех перестановок с мини- мальным числом транспозиций соседних эле.. ментов.) . Данные: n. 
82 1. Введение 8 комбинаторику Результат: Последовательность перестановок множества {l, .. . , п}', в которой каждая последующая обра- зуется в результате выполнения однократной транспозиции соседних элементов. 1 2 3 4 5 begin fOT i: 1 to n do begin Р [i] :== i; С [i] :== 1; PR [i] :== истина; end; С [п] :== о; (* так, чтобы С [i] =1= п ........ i + 1 в строке 10 для i == n *) wrife (P[l], ..., Р[п]); i :== 1; while i < n do begin i:=== 1; х:== о; while С [i] == n ........ i + 1 do begin PR [i] :== not PR [i]; С [i] :== 1: if PR [i] then х:== х + 1; i :== i + 1 end; if i < n then begin (* выполнение транспозиции *) if PR [i] then k:=== С [i] + Х else k:=== n  i + 1  С [i] + х; Р [k] :==: Р [k + 1]; write (Р [1], ..., Р [п]); С [i] :==с [i] + 1 end 6 7 8 9 10 1 1 12 13 14 15 16 17 18 19 20 21 22 23 end 24 е nd Отметим, что в этом алrоритме, как и в двух предыдущих, u u не используется ни в какои мере знание значении переменных Р[I], ..., Р[п]. Это очевидно, так как данные переменные появ- ляются только в строке 19 (если не считать инициализации в строке 3 и вывода результатов). На рис. 1.4 представлены последовательности перестановок, полученные для п == 4 при помощи алrоритмов 1.10, 1.11 и 1.12. Укажем в заключение одну любопытную интерпретацию по- следовательности, полученной с помощью алrоритма 1.12. Рас- смотрим с этой целью rраф Оп, вершины KOToporo соответствуют всем перестановкам множества {1, .. ., п} и в котором две вер- шины, соответствующие перестановкам f и g, соединены ребром тоrда и только тоrда, коrда g образуется из f однократной транс.. позицией соседних элементов (таким образом, каждая вершина соединена в точности сп......... 1 друrими вершинами). Нетру дно заметить. что последовательность перестановок, полученная при 
1.4. rенерироваllие перестановок ЗЗ (а) (d) (в) 12.34 1 2 3 4 1 2. 3 4 21 3 4 2 1 3 4 2 1 3 4 1 32.4 2. :3 1 4 231 4 3 1 2 4 321 4 2341 2. 3 1 4 3 1 2 4 3 241 3 2 1 4 1 324 321 4 1 '2. 4 3 4 3 2 1 3 1 '2. 4 2. 1 4 3 3 4 '2. 1 l' 3 2 4 1 42.3 3 2. 4 1 1 342 4 1 2. 3 2341 3 1 4 2 241 3 2431 3 4 1 2. 4- 2. 1 3  231 342.1 1. 3 4 '2. 4 1 3 '2. 4321 3 1 4 2. 1 432. 4 3 1 2. 1 432 1 342. 4 1 3 2 4. 1 3 2 3 1 4 2- 14:3 2 3 4 1 2 3412- 1 423 '+ 3 1 2. 4312. 4 1 '2. 3 234 1 4 2. 1 3 4 Z 1 3 3241 241 3 4231 2431 2 1 4 3 243 1 4231 1 243 241 3 3 4 2 1 142.3 '2..143 432.1 4 1 2 3 1 2. 4 3 Рис. 1.4. Последооатльности переста ({опок. ПОЛУ1IСНlfЫС с помоutыо а) алrо" ритма 1.1 О, 6) алrоритма 1.11, в) алrоr нтма 1.12. 4321 312 321 123 213 4123 321 Z ,. 1234 Рис. 1.5. Интерпретация последовательности перестановок. ПОJIученной с по.. МОЩЬЮ алrоритма 1,12. 
34 1. Введение в комбинаторику помощи алrоритма 1.12, соответствует 2ам.uльтонову пути в Оп, т. е. пути, содержащему каждую вершину rрафа в точности один раз. Это проиллюстрировано на рис. 1.5 для n === Зип == 4. 1.5. Подмножества множества, множества с повторениями, rенерирование подмножеств множества Каждое n..элементное множество Х == {Хl. .... Х n } имеет в точности 2 п подмножеств. Чтобы убедиться в этом, достаточно каждому подмножеству У s; Х сопоставить бинарную последова- тельность (Т. е. с членами О или 1) b 1 b 2 ... Ь п , определяемую следующим образом: { о, если Xl Ф У, Ь, == 1. если Х, Е У. Тем самым мы устанавливаем взаимно однозначное соответствие между элементами множества 9J(X) всех подмножеств множе- ства Х и всеми бинарными последовательностями длины n. Чис- ло таких последовательностей в точности равно 2 n , а значит в силу r становленноrо соответствия имеет место равенство 19'(X) == 2 n . Определенная нами последовательность b 1 b 2 . . . Ь п становится удобным машинным представлением подмножества У, особенно в ситуации, коrда мощность множества Хневелика и последо- вательность b 1 b 2 ... Ь п может быть закодирована в виде одноrо машинноrо слова. Такое представление подсказывает простой метод rенерирования всех подмножеств. Достаточно заметить, что каждая бинарная последовательность bn)bп....2 ... Ь О соответ- ствует взаимно однозначному целому qислу из интервала nl О  ,  2 п ....... 1, а именно числу r === L b , 2 l , для KOToporo i==U bnlbn2 . . . Ь о есть двоичное представление. ЭТО ЧIIСЛО будем обозначать через [bпlbп2. . .Ь О ]. Таким образом, мы можем no следовательно получать все qисла из интервала О  r  2 п  J (начиная, например, с О и добавляя 1 на каждом шаrе), а их двоичные представления дадут все подмножества п-элементноrо множества. Этот метод особенно выrоден для реализации на вну- треннем языке машины. В некоторых ситуациях нам важно, чтобы каждое последую- щее полученное подмножество наименьшим образом отличалось от предыдущеrо. Объяснение полезности алrоритма TaKoro типа совершенно аналоrично случаю алrоритмов 1.11 и 1.12 rенериро- 
1.5. Подмножества множества 35 е вания перестановок: при проведении реальных вычислении, свя" занных с каждым полученным подмножеством, имеется возмож- ность использовать частичные результаты, полученные для пр дыдущеrо подмно}кества. Заметим, что в случае описанноrо выше алrоритма, oCHoBaHHoro на двоичном представлении чисел, последовательно получаемые подмножества MorYT сильно отли" чаться друr от друrа: например, после (п  1) -элементноrо мно- жества, отвечающеrо числу 011 ... 1, идет одноэлементное мно" жество, отвечающее числу 1 00 . . . О. Опишем теперь друrой метод, при котором каждое последую.. щее подмножество получается из предыдущеrо добавлением или удалением одноrо элемента. Опирается он на слеД)'lощее простое наблюдение. Если последовательность C 1 , С 2 , ..., С т содержит все т === 2 k бинарных последовательностей длины k, причем C l отличается от C i + 1 В точности В одной координате (i == 1, .. с . , ., т  1), то последовательность C10, С 2 О, ..., СтО' С т l, C m .... t l, ..., С 1 1 содержит все бинарные последовательности длины k + 1, причем каждые две соседние последовательности будут отличаться в точности в одной координате. Этим непосредственно определяет.. ся некоторый алrоритм peKyppeHTHoro построения последова.. тельности всех подмножеств. Получаемая этим способом после- довательность C 1 , ..., С 2п называется бинарным кодом rрэя порядка п. Опишем теперь нерекуррентную версию этоrо алrо ритма. Алrоритм 1.1 з. (r енерирование всех подмножеств п..эле- MeHTHoro множества.) Данные: n. Результат: Последовательность всех подмножеств п..элемент.. Horo множества, в которой каждое последующее подмножество получается из предыдущеrо добав- лением или удалением единственноrо элемента. Каждое подмножество представляется бинарной последовательностью 8 [1 J, ..., 8 [п].. 1 begin 2 for i: === 1 to n do В [i] : == о; (* пустое множество *) 3 i:== о; (* i == числу сrенерированных до эrоrо момента подмножеств *) 4 repeat 5 write (8 [i], ..., в [п] ); 6 i :=== i + 1; р:== 1; j:== i; 7 while j mod 2 == О do 8 begin (* j2P1 == i *) 
36 1. Введение в комбинаторику 9 i :== i/2: р:== р + 1 10 end;(*pQ(i)+I*) 11 if р  n then В [р] :== 1 ....... В [р] (* смена позиции р *) 12 until р > n ] 3 end Докажем теперь, что описанныЙ а.пrоритм деЙСТВlIтельно re- нерирует все бинарные последовательности ДЛИНЫ n. Пусть Q (i) обозначает наибольшую степень ДВОЙI{И, которая дслит i. Если мы представим i в двоичном виде как i == [bпbn1 . . . b 1 ], то, оче- видно, имеем Q (i) + 1  min{j: Ь ! == 1}. Покажем вначале, что после выхода из BHYTpeHHero цикла 7 будем иметь р == Q (i) + 1. с этой целью заметим, что до входа в цикл j2 p .... 1 == i (rде р == 1, i == i) и каждая итерация цикла не нарушает этоrо равенства (так как (j/2) 2(p+1)....1 == j2 p .... 1 ). После выхода из цикла j нечетно, следовательно, Q (i) == Р  1, т. е. действительно р == Q (i) + 1. Предположим теперь, что k < n и что в первых 2 k итерациях цикла 3 были получены все 2 k бинарные последовательности b 1 b 2 ... Ь п , такие что b k + 1 == ... == Ь п == О (это очевидно спра- ведливо для k == О). В последней из этих 2 k итераций перемен.. ная i принимает значение 2 k (строка 7). Переменная р получает значение Q (2kJ + 1 == k + 1, и, следовательно, наступает измене.. нне значения переменной B[k + 1] с О на 1. Рассмотрим теперь последовательность Q(2 k + 1)+ 1, Q(2 k +2)+ 1, ..., Q(2 k + 1 )+ 1 (1.9) ::sначений переменной р, сrенерированных в последующих 2 k ите- рациях цикла з. Отметим, что Q (2 k + т) == Q (2 k ....... т) для О  т  2 k  1 (этот факт становится особенно очевидным, если рассматривать сложение чисел 2 k + т и 2 k  т, записан.. ных в двоичной форме). Последовательность (1.9) является зер- кальным отображением последовательности значений пере мен.. ной р, полученных в первых 2 k итерациях цикла з. Отсюда сле.. дует, что и последовательности 8[1], 8[2], ..., B[k], полученные в первых 2 k итерациях, появляются в обратном порядке в по- следующих 2 k итерациях. Это дает все бинарные последователь.. ности b 1 b 2 . . . Ь п , такие, у которых b k + 1 == . . . == Ь п == О, получен.. ные в первых 2k+l итерациях. Отсюда становится ясно, что наш алrоритм rенерирует все бинарные последовательности длины п в таком же порядке, что и предыдущий рекурсивный алrоритм. Последовательность подмножеств, полученных при ПОМОЩII алrоритма для n == 4, представлена на рис. 1.6. Можно показать, что среднее число шаrов, необходимых для rенерирования каждоrо следующеrо подмножества (не считая процедуры написания этоrо подмножества), оrраничено констан- той, не зависящей от n (см. задачу 1.21). Последовательность 
1.5.. Подмножества множества 37 подмножеств, полученных с помощью алrоритма 1.13, можно так же, как мы это делали для последовательности перестановок, полученных с помощью алrоритма 1.12, проиллюстрировать на rрафе, вершины KOToporo соответствуют бинарным последова.. тельностям ДЛИНЫ n и две вершины KOToporo соединены ребром, если соответствующие последовательности отличаются в точ- ности в одной позиции. Такой rраф будем называть (двОИЧНbl.А-f) пMepHЫM кубом. Очевидно, что последовательность, полученная О О О О 1 О О О 1 1 О О О 1 О О О 1 1 О 1 1 1 О 1 О 1 О О О 1 О О О 1 1 1 О 1 1 111 1 О 1 1 1 О 1 О 1 1 1 О 1 1 О О 1 О О О 1 РИС. 1.6. Последовательность ПОДМ ножеств. порО}l(ДСНIILI х злrОРIlТМОМ 1.13 для n == 4. с помощью нашеrо алrоритма, соответствует rаМИЛЬТОIIОВУ пути в этом rрафе. На рис. 1.7 это продемонстрировано для п == 1, 2, 3, 4. В некоторых приложениях более естественным, нежели поня" тие множества, является множество с повторениями. Каждый элемент множества с повторениями может появляться в этом множестве несколько раз, число этих вхождений является суще.. ственным и носит название кратности элемента в множестве. Множество с повторениями, содержащее, например, элемент а кратности 2, элемент Ь кратности 3 и элемент с кратности 1, будем обозначать (а, а, Ь, Ь, Ь, с) или (2 * а, 3 * Ь, 1 * с). Поря- док элементов не существен: (а. а, Ь. Ь, Ь, с)==(Ь, а, Ь, а, с, Ь)=== ... существенна только кратность каждоrо элемента  имеем (а, а, Ь, Ь, Ь, с) =1= (а, Ь, с) в отличие от равенства множеств {а, а, Ь, Ь, Ь, с} === {а, Ь, с}. 
38 1. Введение в комбинаторику Если в некотором множестве с повторениями кратность каж.. доrо элемента равна единице, то, очевидно, мы можем отожде- ствлять ero с обычным множеством. Пусть А, В......... два множе- ства с повторениями. Будем rоворить, что А есть подмножество В (обозначение А с::: В), если кратность каждоrо элемента в А не больше кратности этоrо элемента в В. Пусть Х ......... множество 01  11 о . ::- 8 1 J , п=1 00  10 п=2. (1= 3. 0100 1011 010 п=4 .000 0000 Рис. 1.7. rамильтоновы пути в nMepHЫX кубах. с повторениями, содержащее r разных элементов XI,..., Х" с кратностями kI, ..., k, соответственно. Число I Х 1== k l + ... . .. + k, будем называть МОЩНОСТЬЮ х. Каждому подмножеству А  Х однозначно соответствует последовательность (ml' ..., т,), Omlkl' ..., oт,<k" (l.lO) rде пZi обозначает кратность элемента Xi в А. Отсюда сразу же следует, что число всех подмножеств А с:: Х равно (k 1 + 1) (/l2 + 1) . .. (k r + 1) (1.11) Эти подмножества, а точнее соответствующие 11М последова тельности (1.1 О), можно rенерировать способом, подобным тому, который был использован в алrоритме 1.13. Для этоrо доста.. точно заметить, что если последовательность C 1 , С 2 , ..., С т со- держит все р == (kl + 1) ... (ks +. 1) последовательностей 
1.6. k-элементные подмножества 39 mI, ..., пz s , О  тl  k 1 , ..., о  пls  ks, то последователь ность C10, С 2 О, ..., СрО, С р l, Cp....ll, ..., C 1 l, C I 2, С 2 2, .,., С р 2, С р 3, ... ( 1.12) ДЛИНЫ Р (kS+l + 1) содержит все последовательности (тI, ... . . ., m S +l), О  тl  k 1 , ..., о  т s +l  kS+l. Очевидно, что последовательность подмножеств, полученная с помощью та.. 212. 211 001 010' 110 2.10 000 Рис. 1.8. rамильтонов путь в rрафс, соответствующем ПОДМНОiкествам множе- ства с повторениями (Xl. Xl, Х2, Хз, хз). Koro построения, будет обладать таким свойством, что каждое последующее подмножество образуется из предыдущеrо добав- лением или удалением одноrо элемента. Предоставляя читателю исключить рекурсию из этоrо алrоритма, проиллюстрируем ero с помощью rамильтонова пути внекотором rрафе (рис. 1.8). Этот РIlСУНОК IIнтерпретнруется так же, как и рис. 1.7. 1.6. k..элементные подмножества, биномиальные коэффициенты Число всех k-элементных подмножеств n-элемеНТlIоrо мно. жества будем обозначать (). Символ () называется бuно" .мuаЛЬНblМ коэффициентом, исходя из следующей формулы для n-й степени бинома х + у: п (х + у)fI === I ( п ) xkyпk. (1.13) k ==0 k 
40 1. Введение в комбинаторику Чтобы убедиться в истинности этой формулы, достаточно за.. метить, что коэффициент при xkyпk равен числу способов, кото.. phIMII из п сомножителей (х + у) 11.. (х + у) можно выбрать k сомножителей. Очевидно, () == о для k > п. Напомним, что k-элементные подмножества n-элементноrо множества назывались в старой литературе по комбинаторике k-членными комбинациями для n-элементноrо множества без повторений. С биномиальными коэффициентами связано MHoro интерес ных тождеств. Вот некоторые из них. t, (; ) == 2 n . Эта формула следует из Toro, что сумма слева выражает число всех подмножеств п-элсментноrо множества. ( 1.14) п L (  ) i == п2 n .... 1 . ;==0 t ( 1.15) Для доказательства этой формулы составим список, содер" жащий по порядку все подмножества п-элементноrо множества х. Этот список содержит (;) i-элементных подмножеств для i == 1, ..., п; таким образом, ero длина (так называемое число появлений элементов множества Х) выражается суммой в ле.. вой части формулы (1.15). С друrой стороны, каждый элемент х Е Х появляется в списке 2п1 раз, так как таково число под.. множеств, содержащих х (их столько, сколько имеется всех подмножеств множества Х,", {х} ). Поэтому длина нашеrо списка равна п2 п .... 1 . Доказательство тем самым закончено. ( )==(nk). ( 1 .16) Это прямое следствие Toro факта, что каждому k-элемеыт" ному подмножеству у  Х однозначно соответствует (п  k).. элементное подмножество Х,", У множества х. ()==(n 1 )+(= ;). ( 1. 17) Эта формула получается из следующих рассуждений. Зафик- сируем некоторый элемент х п-элементноrо множества Х. Мно" жество всех k-элементных подмножеств множества Х распа дается на два непересекающихся класса: класс подмножеств. 
1.б. k-элементные подмножества 41 которые не содержат элемент х, и класс подмножеств, которые ero содержат. Мощность nepBoro класса составляет (n;l), а BToporo (=), т. е. столько, сколько имеется (k  1) -элемент ных подмножеств у множества Х"" {х}. Тождество (1.17) тесно связано со следующим треуrольни... ком Паскаля: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Если перенумеровать по порядку строки этоrо треуrольника числами О, 1,2, ..., то i-я строка окажется состоящей из чисел ()Cl)...() в силу формулы (1.17) каждое из них, кроме крайних, рав- ных единице, можно получить как сумму чисел, lIаходящихся над ним в предыдущем ряду. Это дает простой метод построе- ния треуrольника Паскаля, а тем самым нахождения коэффи- циентов разложения (х + у) i  они задаются i-й строкой тре- уrольника (ср. с (1.13». Докажем еще одно тождество, связанное с биномиальными коэффициентами, а именно тождество Коши: (mtn)==t,(:)(kS). ( 1.18) Для этоrо представим себе, что из rруппы, состоящей из т мужчин и n женщин мы хотим выбрать k человек. Мы можем сделать это (тп) способами (левая часть тождества). Все k-элемеНТllые подмножества нашеrо множества можно класси- фицировать по числу мужчин в подмножестве. k-элементное подмножество, содержащее s мужчин, можно получить, выбирая сначала s мужчин одним из (:) возможных способов, а затем (k  s) женщин ОДНИМ из (kS) способов, Таким образом, чис.. 
42 1. Введение в комбинаторику ло всех возможных подмножеств из k человек, включающих s мужчин, равно (: ) (kS). Отсюда непосредственно следует фор- мула (1.18). ОТ1\1етим, что для т == k == n данная формула приобретает вид ( 2: ) == t, ( ; у · ( 1.19) Мы хотим доказать еще одно тождество: () ()=== (:) (: =:). ( 1.20) Для доказательства подсчитаем число таких пар (К, М) под- множеств п..элементноrо множества Х, что К с::: М, I К I == k, 1М 1== т. С одной стороны, подмножество К можно выбрать (;) способами, а подмножество М  К можно выбрать () спосо.. бами, что дает () () возможных пар <К, М) (левая часть (1.20) ). с друrой стороны, для каждоrо из (:) подмножеств М  Х можно выбрать (:=:) способами подмножество К с::: М, так как такое подмножество К однозначно определяется через (k  т) ..элементное подмножество Х"",К (п  т) ..элементноrо множества Х""М. Искомое число пар (К, М) равно, таким обра.. 30м, (:) (:=:) (правая часть (1.20)). Дадим теперь формулу, позволяющую вычислять () непо- средственно. Теорема 1.14. ()=== [n]k  nl kl  k!(nk)l n(n1) ... (nk+l) 1.2. ....k . ( 1.21 ) Доказательство. Каждая из [п] k инъективных последователь- ностей длины k определяет k..элементное подмножество, состоя- щее из элементов, появляющихся в этой последовательности, причем одно и то же подмножество S получаем в точности из kt последовательностей, соответствующих всем перестановкам множества s. Отсюда () == [n]k/kl. Теперь достаточно восполь- зоваться теоремой 1.2. Отметим, что эта теорема леrко позволяет доказать Все тож- дeCTBa рассмотренные в этом разделе. Например, для .( 1.17) 
1.6. k..эпеыентные ПОДмножества 43 имеем ( : ) == k!(: k)! == k!(: k)! ( n :- k + + ) == (n ...... 1) r (n ...... 1) r ( n ........ 1 ) ( п....... 1 ) == kl (п.....l..... k)! + (k .....1)1 (n...... k)1 == k + k....... 1 · Однако такое «алrебраическое» доказательство, основанное на механическом преобразовании выражений, rораздо менее по. нятно, чем «комбинаторное» доказательство, данное выше. С друrой стороны, формула (1.21) позволяет леrко доказать следующее свойство биномиальных коэффициеНТОВI ( ) < ( ) < ... < (Ln72J) == ::= ( r n721) > (r n/2; + 1 ) > ... > ( : ) ( 1.22) (n > 1). Достаточно заметить, что ( N ) n (n ..... 1) ... (n...... i) n ..... i i + 1 == 1. 2. ... · i (i + 1) === i + 1 == ni ( п ) ;+1 i · n (n..... 1) ... (п..... i + 1) === 1.2. ... .j Имеем (n  i) / (i + 1) > 1 для i < (n  1) /2, т. е. для i < < ln/2 J , аналоrично (n  i) / (i + 1) < 1 для i > (n......... 1) /2 т. е. для i  rn/21, и (n ln/2J )/( Ln/2J + 1)== rn/21 / Ln/J == === 1, если n нечетно (для четноrо n имеем ln/2 J == r n/21 и среднее равенство в (1.22), очевидно, выполняется),. Займемся теперь отысканием числа k-элементных подмно. жест в множества с повторениями (k * XI, ..., k * Х n ). Друrими словами, зададимся вопросом, сколькими способами можно по- родить k-элементное множество с повторениями, имея в распоря- жении n разных элементов, скажем 1, ..., n, из которых каж.. дый может использоваться произвольное число раз. Следует OT метить, что это число равно числу неубывающих последователь- ностей длины k с элементами из множества {l, ..., п}. Это вы- текает из Toro факта, что элементы каждоrо подмножества мож но однозначно расставить в неубывающую последовательность. Очевидно, что подмножествам без повторений соответствуют ВОЗ растающие последовательности. 
44 1. Введение в комбинаторику Теорема 1.15. Число k..элеJlеНТНblХ подмножеств множества (k*Xl, ..., k*x п ) равно (n+: 1). (1.23) Доказательство. Мы ДОЛЖНЫ определить число убываюших последовательностей (al, ..., ak) с элементами из множества {1, ..., п}. Каждую такую последовательность можно разделить на п частей, rде i-я часть содержит некоторое, быть может HY левое, число следующих друr за друrом элементов i. Если мы отделим эти части одну от друrой п..... 1 нулями, I1спользован ными в качестве разделителей, то получим последовательность длины k + n  1. Iiапример, для n == 5, k === 4 последователь НОСТII (2, 2, 4, 5) соответствует последовательность (О, 2, 2, О, О, 4, О, 5). Последняя последовательность однозначно определяется размещенпем появляющихся в ней нулей. Действительно, мы можем восстановить ее, заполняя часть до первоrо нуля экземп- лярами эле1ента 1, часть от первоrо до BToporo нуля........ экземп ляра1\111 эле1\1ента 2 11 т. д. А число размещений n  1 нулей на k + п  1 ПОЗIfЦIIЯХ равно ( k+n........l ) === ( n+k.......l ) == ( n+k.......l ) . n  1 (n + k  1)  n  1 k · Полученное таким образом число подмножеств с повторе.. ниями можно записать несколько иначе: ( n + k  1 ) == п (п + 1) ... (п + k  1) == [n]k k kl kJ · ( 1.24) Дадим комбинаторную интерпретацию этоrо тождества. На.. помним с этой целью, что [п] k есть число упорядоченных раз.. мещений k элементов Xl, ..., Xk В п ячейках. Отметим, что каж... дому такому размещению, содеР)I{ащему rt элеlvlентов в i.й ячей.. ке, соответствует k-элементное подмножество (rl * Уl, ..., r n * Уп) MHO)l{eCTBa с повторениями (k * Yl, ..., k * Уп). в этом упорядо- чении существенно только число элементов в каждой из ячеек. Таким образом, размещениям ячейка 1 ячейка 2 ячейка 3 ХЗ Х 2 Xs Хl Х" Х4 Хl Х2 Ха Xs соответствует одно и то же подмножество 2 * Yl, 3 * Уз. ЯСНО, что каждые два размещения, соответствующие одному и тому же подмножеству, отличаются перестановкой объектов Xt, ..., Xk. В результа:rе исло всех k-элементных подмножеств множества 
1.7. rенериропзние kэлеМСIIТНЫХ подмножеств 45 с повторениями (k * Уl, ..., k * Уп) равно [п] k jk!. Очевидно, что это раССУ)l{дение вместе с формулой (1.24) представляет собой друrое доказательство теореМЫ 1.15. 1.7. r енеРИРОВQние k-элементных подмножеств Опишем сейчас два алrОРllтма rенерирования всех k-элемент- НЫХ подмножеств п-элементноrо множества Х. Без оrраничения общности можно принять Х =={1, ..., п}. Тоrда каждому k-эле- ментному подмножеству взаимно однозначно соответствует воз- растающая последовательность длины k с элементами из Х: на 04 пример, подмножеству {З, 5, 1} соответствует последовательность (1,3,5). Можно леrко указа!fЬ алrоритм, с помощью KOToporo reHe.. рируются все такие последовательности в лексикоrрафическом порядке. Достаточно с этой целью заметить, что при таком по- рядке последовательностью, непосредственно следующей за по.. следовательностью (al, ..., ak), является (Ь 1 , ..., b k ) == (aI, .. ., apl' ар + 1, ар + 2, ..., ар + k  р + 1), rде р == пlax {i: a l < n ........ k + l}. Более Toro, последовательностью, непосредственно следую- щей за (Ь 1 , ..., b k ), является (C 1f ..., Ck)=== == (Ь 1, . . ., ь р'  I , Ь р' + 1, Ь р' + 2, ..., ь р' + k  р' + 1), rде , { PI, р== k, если b k == n, если b k < n (будем предполаrать, что последовательности (aI, ..., ak) и < ь 1, ..., ь k ) отличаются от (п......... k + 1, ..., п)......... последн ей по.. следовательности в нашем порядке). Это приводит К следую щему простому алrоритму. АлrоРитм 1.1{). (rенерироваllие всех k-элемеllТНЫХ подмно. жеств множества {1, ..., п} в лексикоrрафll ческом порядке.) Данные: п, k. 
46 1. Введение в комбинаторику Результат! последовательность всех k-элементных подмно- жеств множества {IJ ... J п} в лексикоrрафиче- ском порядке. 1 2 3 4 5 6 7 8 9 end 1 О end begin for i:== 1 to k do А [i] :== i; (. первое подмножество *) р :== k; while р  1 do begin write (А [1], ..., А [k]); if А [k] == п then р:=== р  1 else р:=== k; jf р  1 then for i:== k downto р do А [i] :=== А [р] + i ....... р + 1 Последовательность всех 4-элементных подмножеств множе- ства {l, ..., 6}, полученная с помощью этоrо а.пrоритма, пред- ставлена на рис. 1 9. 1 2- 3  1 'l. 3 5 1 2- 3 6 1 2 4 5 1 2 4 6 1 2 5 6 1 3 4 5 1 3 4 6 1 3 5 6 1 4 5 6 2- 3 4 5 2 :3 4 6 2 3 5 6 2 4 5 6 3 4 5 6 Рис. 1.9. Последовательность 4-элементных под множеств множества {l, ..., 6}, построенная при помощи алrоритма 1.16. Друrой алrоритм, который мы опишем ниже, rенерирует все k-элементные подмножества таким обраЗОI, что каждое после- дующее подмножество образуется из предыдущеrо удалением одноrо элемента и добавлением друrоrо. Этот алrоритм предста.. вим в рекурсивной форме. Обозначим с этой целью через G (п, k) список, содержащий все k-элементные подмножества множества {l, 11.., п}, в котором первым подмножеством является {1, ..., k}, последним {1, 2, ..., k......... 1, п} и каждое следую- щее подмножество образуется из предыдущеrо удалением неко.. 'foporo элемента и добавлением друrоrо. Отметим, что если О (п ......... 1, k) и G (п ......... 1, k ......... 1) уже построены, то G (п, k) можно рпределить следующим образом: G (п, k) == G (п  lJ k), а* (п....... 1, k ---- 1) U {п}, ( 1.25) 
1.7. rенерироnание k-элементных подмножеств 47 rде О. (п........ 1, k  1) U {п} обозначает список, образованный из G (п...... 1, k...... 1) изменением порядка элементов списка на обрат... ный и последующим добавлением элемента n к каждому множе- ству. Действительно, О (п....... 1, k) содержит все k-элементные подмножества множества {1, ..., n}, не содержащие n, О. (п....... 1, С( 4,2) С(3,2) O.3, 1) u{ 4 } / /  0(2,2) G*(2 t 1)U{3} G(2,O)U{3,4} C"'(2 t 1)U{4} CX1,O)U C)U{3} C(1'O)} )и{4} I I I l' {1,2.} {2,3} {1,з} {3,4} {2,4} {1,4} Рис. 1.10. Построение списка G (4. 2). k....... 1) U {п}......... все k-элементные подмножества, содержащие п, причем последним подмножеством в списке G (п.... 1, k) является {l, 2, .., k...... 1, n....... l}, а первым подмножеством в списке {з,4} {l,4} {1,4} {2,з}' { 1,3 } {1,2} Рис. 1.11. rаМIIЛЬТОIIОВ путь в rрафе, соответствующем всем ДВУХЭ.7IемеI1I'НЫМ подможесrвам множества {I, 2, 3. 4}. 0* (п........ 1, k ......... 1) U {п} является {1, 2, ..., k......... 1, n}. На рис. 1.1 О показан процесс построения списка 0(4, 2) . Списку О(п, k) мы можем так же, как и в с.лучае rенериро.. . вания всех подмножеств, поставить в соответствие некоторыи rамильтонов путь в rрафе, вершины KOToporo соответствуют. 
48 1. Введение в комбинаторику двухэлементным подмножествам множества {1, 2, 3, 4}, причем вершины, соответствующие подмножествам А и В, соединены ребром тоrда и только тоrда, коrда IAnBI==kl===l. Это проиллюстрнровано на рис. 1.11. Предоставляем читателю самому IIзбаВIIТЬСЯ от рекурсии в ОПllсанном алrоритме (см. задачу 1.29). 1.8. Разбиения множества Под разбиением n-элементноrо множества Х lIа k блоков бу.. дем понимать произвольное семейство л == {Bl, ..., B k }, TaK() что В 1 U ... U Bk == Х, В ; n В, == 0 для 1  i < j  k н B i =1= е5 для 1  i  k. Подмножества Вl, ..., Bk будем называть бло.. ками семейства л. Множество всех разбиений множества Х на k блоков будем обозначать Пk(Х), а множество всех разбиеНIIЙ через П(Х). Очевидно, что П(Х)==П 1 (Х)U ... UПп(Х) (более Toro, {П 1 (Х), ..., П п (Х)} является разбиением МIIо,кества П(Х)). . с разбиением связано понятие отношения эквивалентности. Каждому разбиению л мы можем постаВIIТЬ в соответствие от. ношение эквивалентности Е(л) == u (В х В) B€f=п ( 1.26) (элементы х, у Е Х находятся в отношеНlI1I Е(п) тоrда и только тоrда, коrда они принадлежат одному и тому же блоку разбие- ния л). И наоборот, каждому отношению эквивалентности Е на множестве Х мы можем поставить в соответствие разбиение Х/Е=={х/Е:ХЕХ}, (1.27) rде х/ Е обозначает класс эквивалентности элемента х, т. е. 1\-1110- жество всех элементов, находящихся в ОТНОШСНIIИ Е К эле 4 менту х: х / Е -== {у Е Х : хЕу}. ( 1.28) Нетрудно заметить, что формулы (1.26) и (1.27) определяют взаимно однозначное соответствие между разбиениями и ОТIIО4 шениями эквивалентности на множестве Х. Если л, (J Е П (Х) И каждый блок В Е (J является суммой не- KOToporo числа блоков разбиения л, то будем rоворить, что n есть измельчение разбиения а, и будем писать л  о. Например: {{1}, {2,5}, {4,6}, {З}}  {{l, 2, З, 5}, {4,6}}. Леrко проверить, ЧТО 1t  а тоrда и только тоrда, коrда для отношений ЭКВ !Jва лентносrи. соответствую щ их данным р'азбие 
1.8. Разбиения множества 49 ниям, выполняется соотношение Е (11)  Е (а). Очевидно, что 0004 ределенное таким образом отношение  является частичныМ упорядочением на мно}кестве П (Х). Некоторые свойства Мllоже ства П (Х), упорядочеНllоrо с помощью отношения измельчения, напоминают аналоrllЧIlые свойства множества !fJ(X), упорядо- ченноrо на основе включения. Остановимся сейчас на одном из TaKIIX свойств. ЧаСТIIЧНО упорядоченное множество (A,) будем называть реULеткой, если для проIIзволыlхx элементов Х, у Е А суще.. ствуют такие элементы а, Ь Е А, что (а) а  Х, а  у и для произвольноrо Э.пемента С, TaKoro что CX, cy, имеСl\1 ca, (б) Ь  х, Ь  у и для ОРОИЗВО"ТIьноrо элемента С, TaKoro что с  Х, с  у, имеем с  Ь. Такие элементы, еСЛII они существуют, однозначно опреде- ляются через х и у. Действительно, для произвольных элементов al, а2, отвечающих УСЛОВIIЮ (а), имеем а2  al 11 al  а2, т. е. Ql == а2; аналоrИЧIlО доказывается (б). Элемент а будем назы вать нижней ераницей элементов Х, у и обозначать х А у, а эле" мент Ь будем называть. верхней ераницей и обозначать х V у. Примером решетки является (!!' (Х), с: ). Очевидно, что в этом случае имеем А 1\ в == А n в и А V В == А U В. Теорема 1.17. Множество П (Х), упорядоченное на основе OT НОluения измельчения , образует решетку, причем Т. е. пЛа == {А n в : (А е: п)Л(В Е а)Л(А n B=F 0)}, Е (11Л а) == Е (11) n Е (а), ( 1.29) (1.30) а раз6иение n V а определяется следующим образом: (х, У)ЕЕ(1tVа)СУlцествует k1 и такая последователь- ность X 1 , ... , Xk, ЧТО Х == Хl' Y==Xk и (XI, хt+1)е:Е(п) или (1.31) ( Х 1, Х 1 + 1 ) Е Е ( а) д ля i === 1, 2, ... ...., k.......l. Доказательство. Отметим прежде Bcero, что простым следствием определения отношения эквивалентности является тот факт, что пересечение двух отношений эквивалентности есть отношение эквивалентности. Таким образом, Е (11) n Е (а) есть отношение эквивалентности, которое в свою очередь однозначно определяет некоторое разбиение а, такое что Е (п) n Е (а)  Е (а) (ер. (1.27)). Очевидно, что Е(а) с Е(11), Е(а,) с: Е(а), а, следовательно, а  л, а :s:;;; о. БОJlее Toro, для ка,кдоrо разбиения а'. TaKoro что 
50 1. Ввеllепие в комбинаторику а,'  л;, а,'  (1, имеем Е (а') с= Е (п), Е (а') с:::: Е (а) и в резуль. тате Е(а')Е(п)ПЕ(а)==Е(а), т. е. a/a. Следовательно, а == " ts 0', что доказывает формулу (1.30). Отметим, что х, у Е еЕ(пЛ а)== Е(п)ПЕ(а) тоrда и только тоrда, коrда х и у при- надлежат к одному и тому же блоку разбиения n и к одному блоку разбиения о, Т. е. х, у Е А n В, rде А Е n В Е а. Послед. Нее и доказывает формулу (1.29). Предположим теперь, что R ---- бинарное отношение, апреде. ленное правой qастью формулы (I.З 1 ). Нетрудно проверить, что R ....... отношение эквивалентности. Действительно, xRx (доста. точно принять k == 1), xRy влечет за собой yRx (достатоqно рас. смотреть последовательность Xk, Xk.....l, ..., Хl) и xRy, yRz влекут за собой xRz (достаточно рассмотреть конкатенацию соответ. ствующих последовательностей). Отношение R однозначно опре. деляет разбиение, такое что E()==R. Очевидно, что Е(п) R::::::E(P) и E(a) c: R===E(), т. е. пp и O'. Предполо. ЖИМ теперь, что '  произвольное разбиение, такое что п  р', о  Р', и пусть (х, у) Е E(). Тоrда существует последователь- ность х === хl, Х2, ..., Xk == у, удовлетворяющая правой части фор. мулы (1.31), и, следовательно, (XI,Xk+l)eE(n)UE(a)s;E(p')t 1  i  k. Вследствие транзитивности отношения Е (р'), имеем (х, у) е Е <Р'). Таким образом, мы доказали, что   /, а сле- довательно, н Р == п V о. 11 1.9. Числа Стирлинrа BToporo и nepBoro рода Число СтuрлиН2а вТОрО20 рода 8 (n, k)" определяется как число разбиений n-элементноrо множества на k блоков: S (n, k) == I П k (Х) 1, rде J Х I == n. (1.32) Например, 8(4,2) === 7, так как существуют в точности 7 раз. биений множества {l, ..., 4} на два блока; {{l, 2, 3}, {4}} {{1, 2, 4}, {3}} {{1, 3, 4}, {2}} {{l, 2}, {З, 4}} {{I, З}, {2, 4}} {{l, 4}, {2, 3}} {{1}, {2, 3, 4}} Очевидно, что 8 (n, k) == О для k > n. Примем также 8(0,0)== 1, так как пустое семейство блоков является в COOT 
1.9. Числа Стирлинrа BToporo n nepBoro рода 51 ветствни с определением разбиением пустоrо множества. С чнс ламп Стирлинrа BToporo порядка связано, как и с биномиаль- ными коэффициентами, MHoro любопытных тождеств. Докажем сначала тождество, напоминаlощее тождество (1.17), связанное с треуrольником Паскаля: S(n, k)==S(n.......l, k......l)+kS(nl, k) S(n, п}=== 1 S (п, О) == О для О < k < n, (1.33) для п  О, (1.34) для п > о. (1.35) Формулы (1.34) и (1.35) очевидны. Для доказательства фор мулы (1.33) рассмотрим множество всех разбиений множества {1, ..., n} на k блоков. Это множество распадается на два раз личных класса: тех разбнений, которые содержат одноэлемент- ный блок {п}, и тех разбиений, для которых п является элемен- том большеrо (по крайней мере двухэлеl\lентноrо) блока. Мощ.. ность первоrо класса равна S(n 1, k 1), т. е. такова, каково число разбиений множества {1, ..., п......... 1} на k......... 1 блоков. Мощность друrоrо класса составляет kS (п......... 1, k), так как каж.. дому разбиению множества {1, ..., п......... 1} на k блоков COOTBeT ствует D этом классе в точности k разбиений, образованных До.. бавлением элемента п поочередно к каждому блоку. Формулы (1.33), (1.34) 11 (1.35) позволяют леrко вычислять значения S (п, k) даже для больших зна чений n 11 k. В табл. 1.2 представлены числа S (п, k) для О  п, k  10. Отметим, что эту таблицу можно трактовать как «треуrоль.. ник Стирлннrа», в котором каждое значение, кроме крайних, равных единице, можно получить как сумму чисел, находящихся над ним, а именно числа, расположенноrо в точности над ним и умноженноrо на k, и числа над ним с левой стороны. Таблuца 1.2. Числа Стирлинrа BToporo ряда ;Zo 1 2 3 4 5 6 7 8 9 10 О 1 О О О О О О О О О О 1 О 1 О О О О О О О О О 2 О 1 1 О О О О О О О О 3 О 1 3 1 О О О О О О О 4 О 1 7 6 1 О О О О О О 5 О 1 15 25 10 1 О О О О О 6 О 1 31 90 65 15 1 О О О О 7 О 1 63 301 350 140 21 1 О О О 8 О 1 127 966 1 701 1050 266 28 1 О О 9 О 1 255 3025 7770 6951 2646 462 36 1 О 10 О 1 511 9330 34 105 42525 22 827 5880 750 45 1 
62 1. Введение в комбинаторику Вот пример друrой рекуррентноЙ зависимости, связанной с числами Стирлннrа BToporo рода: n1 ( п 1 ) S(n, k) == 2: . S(i, k  1) для k2. ic=kl t ( 1 .36) Для доказательства тождества рассмотрим мно)кество всех разбиений S(n,k) множества Х=={I,..., п}. Это множество распадается на различные классы, соответствующие разным под.. множествам множества Х, которые являются блоками, содержа.. щими элемент n. Отметим, что для каждоrо Ь-элемеllтноrо ПОД" множества В  Х, содержащеrо элемент п, существует в точно.. сти S (п  Ь, k......... 1) разбиений множества Х на k блоков, содер" жащих В в качестве блока. Действительно, каждое такое раз.. (jllение однозначно соответствует разбиению множества Х,,",В на k ......... 1 блоков. Ь-элементное множество В  Х, содержащее эле.. мент n, можно выбрать (:=) способами; таким образом, n(k.... J) ( n  1 ) S (п, k):== b ь  1 S (п  Ь, k  1) == tl....(kJ) ( n  1 )  2: S(nb, k 1)== b=-I nb пl ( n  1 ) == 2: . S (i, k  1). i=:;kl t Число Белла В п определяется как число всех разбиений n..элементноrо множества Вп==IП(Х)I, rде IXJ===n. ( 1.37) Друrими словами, n В п == 2: S (п, k). (1.38) ku Докажем теперь следующую ПрОСТУIО рекуррентную зависи.. мость, связанную с числами Белла: В n +\ == r. (  ) BI (1.39) I==U t (принимаем Во == 1). Доказательство ПРОВОДIIТСЯ аналоrично доказательству тождества (1.36)., Множество всех разбиений MHO)l{eCTBa Х == {l, ..., п + 1} можно разбить на различные классы в зависимости от блока В, содеР)l{ащеrо элемент п + 1, или  что равнозначно......... в зависимости от множества Х,,",В. ДЛЯ каждоrо множества Х,,",В  {1, ..., п} существует в точ" 
.53 1.9. Числа СТИРЛlfнrа BToporo и nepBoro рода ности 111 (Х" В) 1=== BI Х" в 1 разбиеНIIЙ мно}кества Х, содержа- ЩИХ В в качестве блока. rруппируя наши классы в зависимо- сти от мощности множества Х"В, получаем формулу (1.39). Числа В п для О  11  20 представлены в табл. 1.3. Существует строrая зависимость между числами S (n, k) IJ числом всех функциЙ из n-элементноrо MHO)l(eCTBa на k-эле- ментнос множество, т. е. функций f: XY, f(X)== у дЛЯ IXI== == n, I у 1=== k. Каждой такой функ- Таблица 1.3. Числа Белла В п ции f можно поставить в соответ- ствие следующее разбиение множе.. п В п ства Х на k блоков: О 1 2 3 4 5 б 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 1 2 5 15 52 2О3 877 4 140 21 147 115975 678570 4213597 27 644 437 190 899 322 1 382 958 545 1 О 480 142 147 82 864 869 804 682 076 806 159 5832742205057 51 724 158 235 372 Л' (f) == {f....l (у) : у Е У}, ( 1.40) называе10е ядрОАt функции f (усло... вие f (Х) == У дает rарантию Toro, что подмножества f....1 (у) непустые). С друrой стороны, нетрудно заме.. тить, что каждому разбиению 11 Е Е П k (Х) соответствует в точности k! функций из Х на У, таких что N (f) == л. Каждая такая функция взаимно однозна чно соответствует соотнесению блоков разбиения 1t элементам множества У. Обозна- чая через Sn, k число функций из Х на у, получаем, следовательно, Sn k === k! S (n, k). , Пользуясь этой формулой, мы мо}кем доказать еще одно свойство чисел Стирлинrа BToporo рода, которое касается связи между мноrочлеllами Xk и мноrочленами [X]k == Х (х  1) ... (х....... k + 1). Произвольный мноrочлен Р(х) от неизвестноrо Х степени n n МЫ можем однозначно представить как Р (х) == :Е ak [X]k. Это k==O существует одно.. (1.41) ( 1.42) частный случаЙ Toro очевидноrо факта, что n значное разложеНllе Р (Х) == :Е akPk (х) для произвольной по- k==u следовательности мноrочлеllОВ Ро (х), Pl (х), ..., такой что Pk (х) есть мноrочлен степени k для каждоrо k  о. Друrими словами, ка}l{дая такая последовательность образует базис 8 линейном пространстве Мllоrочленов. Оказывается, что числа Стирлинrа BToporo рода в точности равны коэффициентам пе.. рехода от базиса 1, Х, х 2 , ... к' базису 1, (XJ.l. [х] 2, ... ! 
54 1. Введение в комбинаторику Теорема 1.18. Для каждО20 n  О n x'=== L S(n, k)[X]k. (1.43) k..O Доказательство. Предположим сначала, что Х....... неотрица- тельное целое число. Подсчитаем двумя способами число всех функций ': А --+ В, r де I А 1== n, I в I === Х. С одной стороны, оно равно х" (см. теорему 1.1). с друrой стороны, множество таких функций f мы можем классифицировать относительно множе- ства f (А). Очевидно, что каждая функция f является отобра- жением множества А на множество f (А), таким образом, ДJlЯ произвольноrо подмножества У с::: В, rде I у 1== k, число всех функций ': А --+8, таких что f(A) == У, равно Sn, k, т. е. в со- ответствии с формулой (1.41) k!S (n, k). Учитывая тот факт, что подмножество У мощности k можно выбрать (:) способами. получаем в конечном итоrе х n == i: ( X k ) kl S (п, k) == t [х]" S (п, k) (1.44) kO kO (верхний индекс суммирования можно заменить с Х на n, так как S (n, k) == О для k > n и [х] k == О для k < х). Поскольку равенство мноrочленов выполняется для произвольноrо целоrо числа Х  О, эти мноrочлены тождественно равны (так как их разность либо является тождественно равной нулю, либо имеет бесконечное число нулей). 11 Числа СТUРЛUН,2а первО20 рода S (n, k) определяются как ко- эффициенты при последовательных степенях переменной х в мноrочлене [x]: п [Х]п == L S (п, k) x k . (1.45) k==O Друrими словами, числа S (п, k) иrрают обратную роль в от- ношении к числам S (n, k) ......... позволяют перейти от базиса 1, [х] 1, [х] 2, ..., к базису 1 Х, х 2 , ... . Очевидно, что s(n, k) === О для k > n. Числа S (n, k) удобно вычислять, пользуясь следую- щими рекуррентными зависимостями: S (n, k) == s (п ---- 1, k  1)  (n ...... 1) s (п ---- 1, k) Д1Я О < k < п, (1.46) s(n, n)=== 1 ДЛЯ nO, (1.47) s(n,O)==O для n>О. (1.48) Формулы (1.47) и (1.48) очевидны, формулу (1.46) полу- .чаем, сравнивая коэффициенты при Xk с обеих частей равенства [х]n == [х]n....l (х ..... п + 1). (1.49) 
1.1 о. rенерировзние разбиений множества 55 То есть имеем n nl L s (n, k) Xk == (х ---- п + 1) L S (n........ 1, k) Xk == kO kO пl nl == L S (n ........ 1, k) Xk+ 1 ....... (п...... 1) L s (п, k) х' == k==O k..O nl == L (S (n  1, k........ 1) ........ (n ....... 1) S (п ........ 1, k » Xk + k=-1 + s (п ...... 1, f1,  1) х n  (п....... 1) S (п  1, О). В табл. 1.4 представлены числа s(n,k) для Oп, k10. т аблu ца 1.4. Числа СТИРЛИllrа nepBoro рода  О 2 3 4 5 6 7 8 9 10 О 1 О О О О О О О О О О 1 О 1 О О О О О О О О О 2 О ....1 1 О О О О О О О О Э О 2 ....3 1 О О О О О О О 4 О 6 11 ....6 1 О О О О О О 5 О 24 50 35 10 1 О О О О О 6 О 120 274 225 85 J5 1 О О О О 7 О 720  1 764 1 624 735 175 21 1 О О О 8 О  5 040 J 3 068 lЗI32 6769  1 960 322 28 1 О О 9 О 40 3?О ....109 584 118 124  67 284 22 449 .... 4 5зб 546 З6 1 О 10 О Э62 880 L1 026576  1 172 700 723680  269 325 63 273 9 450 870  45 О 1.10. rенерирование разбиений множества Опишем теперь алrоритм rенерирования всех разбиений мно- жества. Идею этоrо алrоритма леrче Bcero объяснить, сФорму- Jlировав ero в рекуррентной форме. Отметим сначала, что Ка- ждое разбиение n множества {l, ..., п} однозначно определяет разбиение пп....} множества {l, ..., п  I}, возникшее из л; пос- ле удаления элемента п из соответствующеrо блока (и удале- ния образовавшеrося пустоrо блока, если элемент п образовы- вал одноэлементный блок). Напротив, если дано разбиение о == {Bl, ..., Bk} множества {l,..., n  1}, леrко найти все разбиения п множества {1, ..., п}, такие что Л;пl == 0', Т. е. следующие разбиения: . В 1 U {п}, 82, ..., Bk' Вl' 82 U {n}, ..., Bk' . . (1.50) Вl' 82' ..., BkU{n}, В 1 , 82, i . . , в k, {п}. 
56 1. Введение в комбинаторику Это подсказывает следующий простой рекуррентный метод rенерирования всех разбиений: если нам дан список Lп1 всех разбиений множества {1, ..., n........ 1}, то список L n всех раз- биений множества {l, ..., п} будем создавать, заменяя каждое разбиение (J в списке Lп1 на соотвеТСТВУIОЩУЮ ему последова- тельность (1.50). Отметим, что при этом мы можем rарантиро- вать, что разбиения, идущие друr за друrом, будут мало от- личаться друr от друrа, точнее rоворя, мы можем принять, что каждое следующее разбиение в списке образуется из предыду- щеrо посредством удаления HeKoToporo элемента из HeKoToporo блока (это может повлечь за собой удалсние одноэлементноrо L, . (1) (1 1. ) ( 1) (2) /\ /1  (123) (12)(3) (1)(2)(3) (1)(2 3) (1 3)(2) L 2: L.1 : Рис. 1.12. Построение списков L 1 , L2' L з . блока) и добавления ero в друrой блок либо создания из HerQ одноэлементноrо блока. Действительно, ПОСJIедовательные раз- биения последовательности (1.50) отвечают этому условию. Если обратить порядок последовательности (1.50) для каждоrо BToporo разбиения списка Lnl, то элемент n будет двиrаться попеременно вперед и назад, и разбиения «на стыке» последо- вательностей, образованных из соседних разбиений списка L п -- 1 , будут мало отличаться друr от друrа (при условии, что сосед- ние разбиения списка Lпl мало отличаются один от друrоrо). На рис. 1.12 показано построение списка L n для п == 1, 2, 3 (разбиения представлены в несколько упрощенной записи, на.. пример (1 2) (3) означает {{ 1, 2}, {3}}). Дадим сейчас нерекуррентную реализацию этоrо алrоритма (это измененная версия алrоритма, описанноrо в [39]). Раз- биение множества {l,..., п} мы будем представлять с по- мощью последовательности блоков, упорядоченной по возра- станию caMoro маленькоrо элемента в блоке. Этот наименьший элемент блока мы будем называть номером блока. Отметим, что номера соседних блоков, вообще rоворя, Не являются со- седними натуральными числами. В этом алrоритме мы будем использовать переменные ПРЕД [i], ел ЕД [i], 1  i  n, со- держащие соответственно номер предыдущеrо и номер следую.. щеrо блока для блока с номером i (СЛЕД [i] == О, если блок с номером i является последним блоком разбиения): Для каждоrо 
1:10. rенерирование .рззбиепий множества 57 элемента i, 1  i  n, номер блока, содержащеrо элемент i, будет храниться в переменной БЛОК [i], направление, в кото- ром «движется» элемент i, будет закодировано в булевской пе- ременной ВПЕР [i] (ВПЕР [i] == true, если i движется вперед; здесь можно заметить некоторое подобие алrоритму 1.12). Алrоритм 1.19. (rенерирование всех разбиений множества 1, ..., n.) Данные: n. Результат: Последовательность всех разбиений мно}кества {1, ..., п}, в которой каждое следующее разбиение образуется из предыдущеrо путем перенесения един- cTBeHHoro элемента в друrой блок. 1 begin 2 for i: == 1 to n do (* поместить i в первый блок *) 3 begin БЛО/( [i]: ===1; ВПЕР [i]: ==истина; 4 end; 5 СЛЕД [1]: == о; 6 выписать разбиение; 7 j: == n; (* j == активный элемент *) 8 while j > 1 do 9 begin k: === БЛОК [j]; 10 if ВПЕР [j] then (* j движется вперед *) 11 begin 12 if СЛЕД [k] == О then (* k есть последний блок *) 13 begin СЛЕД [k]: ==j;ПРЕД[j]: ==k;СЛЕД[j]:==О 14 end; 15 if СЛЕД [k] > j then (. j образует новый блок *) 16 begin ПРЕД [j]: == k; СЛЕД [j]: == СЛЕД [k] 17 ПРЕД [СЛЕД [11]: == j; СЛЕД [k]: == j 18 end; 19 БЛОК [j]: == СЛЕД [k] 20 end 21 eIse (* j движется назад *) 22 begin БЛОК [j]: == ПРЕД [k]; 23 if k == j then (* j образует одноэлементный блок *) 24 if СЛЕД [k]==O then СЛЕД [ПРЕД [k]]:==O 25 else begin СЛЕД [ПРЕД [k]]:==СЛЕД [k]; 26 ПРЕД [СЛЕД [k]]: == ПРЕД [k] 27 end 28 end; 29 выписать разбиение; 30 j: === n; 31 while (j > .1) end 32 ((ВПЕР [j] and (БЛО! [j] == j) or (not ВПЕР [j] and (БЛОК [j] == 1))) do 
58 J. Введение в комбинаторику 33 34 35 end 36 end begin В ПЕР [j]  not ВЛ ЕР [j]: j: == j  1 end Этот алrоритм строит сначала разбиение {{ 1, '.', п}} (ЦИКЛ 2)........ отметим, что это первое разбиение в списке L п , соз- данном при помощи описанноrо нами peKyppeHTHoro метода. Задача OCHoBHoro цикла 8  перемещение «активноrо» элемен- та j в соседний блок  предыдущий или последующий (в по- следнем случае может возникнуть необходимость создания но- Boro блока вида {j}), а затем определение активноrо элемента во вновь образованном разбиеНIIИ. Из ОПllсанноrо рекуррент- Horo построения следует, что данный элемент перемещается только тоrда, коrда все элементы, большие ero, достиrают сво- ero крайнеrо левоrо или правоrо положеНIIЯ; точнее, активныЙ элемент j* является таким наименьшим элементом, что для ка- ждоrо большеrо элемента j выполняется одно из двух следую- щих условий: (1) ВПЕР[j]апd(БЛОК[j]==j), т. е. элемент движется впе- ред и достиrает cBoero крайнеrо правоrо положения (очевидно, j не может быть элементом блока с наименьшим элементом, большим j). (2) поtВПЕР[j]апd(БЛОК[j]== 1), Т. е. элемент j движет- ся назад и достиrает cBoero краЙнеrо левоrо положения (в пер- вом блоке). Этот принцип реализуется в строках 30 -+- 34. Заодно ме- няется направление движения элементов j > j*. ДОПОЛНlIтель- ным условием цикла 31 является j > 1, так как из caMoro представления разбиения следует, что j == 1 не может быть активным элементом (очевидно, что элемент 1 всеrда является элементом блока с номером 1). Если ка)l{ДЫЙ из элементов j > 1 отвечает условию (1) или (2), то леrко убедиться, что уже порождены все разбиения. В таком случае на выходе цик- ла 31 имеем j == 1 и следует выход из OCHoBHoro цикла 8, Т. е. имеем окончание работы алrоритма. Из peKyppeHTHocTII алrо.. ритма вытекает также, что активным элементом для первоrо разбиения списка L п , Т. е. для {{ 1, ..., п}}, является элемент n. Такое же значение приписывается переменной j перед вхо- дом в цикл 8 (строка 7). Проанализируем теперь процесс переноса актпвноrо эле- мента (строки 9 + 28). Сначала отыскивается номер блока, со- держащеrо активный элемент; пусть это будет k. Если этот элемент движется вперед, достаточно перенести ero в блок с номером СЛЕД [k], (см. строку 19) r а в двух остальных случаях 
1.10. rенерирование раз биений множества 59 переменную СЛЕД [k] нужно сначала модифицировать. Пер- вый случай имеет место, коrда СЛЕД [k] == О, т. е. коrда k есть номер последнеrо блока разбиения. Тоrда j образует одно- элементный блок; при этом достаточно принять СЛЕД [k]:== j и соответственно изменить значения переменных СЛЕД [j] и ПРЕД [j] (см. строку 13). Второй случай имеет место, коrда СЛЕД [k] > j, он рассматривается аналоrично. Условие СЛЕД [k] > j означает, что все блоки справа от блока с но- мером k содержат элементы, большие j (все эти элементы за- нимают свои крайние правые позиции, в противном случае j не был бы активным элементом). Из рекуррентности алrоритма Рис. 1.13. Последовательность разбиений множе- ства {I, 2, 3, 4}, порожденная алrоритмом 1.19. < 1 2 3 4 ) (123)(4) (12)(3)(4) (12.)(34) (124)(3) (14)(2)(3) (1)( 24)(3) (1 )(2)(34) (1)( 2)(3)(4) (1)( 23)( 4) (1 )(2.34) ( 14)(23) (134)(2) (13)(2.4) (13)(2)(4) леrко вытекает, что в этом случае нужно создать одноэлемент. ный блок, содержащий j. Это выполняется в строках 16 --7- 17 (единственная разница с первым случаем состоит в том, что в данном случае вновь созданный блок не является последним блоком разбиения). В ситуации, коrда элемент j движется назад (см. строку 21), достаточно поместить ero в предыдущий блок (см. строку 22) и выполнить соответствующее изменение значений переменных СЛЕД и ПРЕД, если j создавал одноэлементный блок...... это имеет место. в точности тоrда, коrда Б,,70К [j] == k == j, так как каждый элемент т > j блока с номером j был бы выбран активным элементом в цикле 31. На рис. 1.13 представлены все разбиения множества {1, ... . . ., 4}, порожденные алrоритмом. Можно показать, что сред- нее число шаrов, необходимых для построения каждоrо следую- щеrо разбиения, оrраничено постоянной, не зависящей от п (ср. с задачей 1.38; конечно, здесь не учитывается число шаrов, неоБХОДIIМЫХ для написания разбиения) { 
60 1. Введение в комбинаторику 1.11. Разбиения чисел Займемся теперь следующей задачей: сколькими способами можно записать данное натуральное число п в виде суммы n == Ь 1 + . . . + b k , (1.51) r де k, Ь 1, ..., ь k > О. Пр 11 это М б У де м с ч 11 Т а т ь су М М Ы Э ({ в и в а - леНТНЫII, если они отличаются только порядком слаrаемых. Класс эквивалентных сумм вида (1.51) мы можем однозначно предстаВIIТЬ последовательностями аl,..., ak, rде al  ... . ..  а k и ч И сл а а 1 , ..., а /l я вл Я ю те я ч и сл а м и Ь 1 , ..., ь k, упорядоченными по невозрастанию (аналоrичным образом мы представляли подмножества множества возрастающими после- довательностями и подмно}кества мно}кества с повтореНИЯМII неубываlОЩИМИ последовательностями). КаЖДУIО такую после- довательность al, ..., ak будем называть разбиением числа п на k слаrаемых. Число разбlIениЙ числа п на k слаrаемых бу- дем обозначать Р(п, k), а число всех разбиеНIIЙ числа п (на ПРОlIзвольное число слаrаемых)  через Р (п). Очевидно, что n Р (п) == L (Р (п, k), п > О k:: I (1.52) (принимаем Р (О, О) == Р (О) === 1). Например, Р (7) == 15, а все разбиения числа 7 представлены на pllC. 1.14. Используя очень простоЙ способ представления разбиения числа, называемый дllаzрам.lИОЙ Феррерса, можно доказать MHoro любопытных свойств чисел Р (п). Диаrрамма Феррерса для разбиения п === аl + ... + ak состоит из k строк, COOTBeT ствующих слаrаемым разбиения, причем i-я строка содеРiКИТ последовательность из ai точек (рIlС. 1.15). Каждому разбиеНИIО числа п однозначно соответствует co пряженное разбиение этоrо числа, которое получается транс- позицией диаrраммы Феррерса (перемена ролями строк и столбцов) ( см. задачу 1.15). Леrко заметить, что транспозиция диаrраммы Феррерса определяет взаимно однозначное соответ- ствие между разбиениями числа п на k слаrаемых и разбиения- ми числа п с наибольшим слаrаемым, равным k. Отметим этот факт: Теорема 1.20. Ч иСАО разбиенuй числа п на k слаzаеМblХ рав" но числу разбиений числа п с наиБОАЬUlим слааеМblМ, рав- НЫМ k. 11 Докажем еще одну теорему этоrо типа. 
1.11. Разбиения чисел 61 Теорема 1.21. Число разбиенuй числа n на попарно разли- чимые слаzаемые равно числу разбuений числа n на нечетные слаzаеМblе. Доказательство. Установим взаимно однозначное соответ" ствие между разбиениями, о !{ОТОРЫХ идет речь в теореме, Рас.. Рис. 1.14. Последовательность разбиениЙ числа ", построенная с помощью алrОРllтма 1.22. 7 6 1 5 2 5 1 1 4 3 4 2 1 4- 1 1 3 3 1 3 2. 2. з 2. 1 3 1 1 '2. 2. 2 2 2- 1 2. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 смотрим разбиение числа n на нечетные слаrаемые Ь 1 , ..., Ь р , rде слаrаемое Ь ; появляется вразбиении rl раз, 1  i  р. Пусть 'l==2 QI +2 Q ,+... (ql>q2>...) есть двоичное представление числа 'ё. Произведем теперь за- мену 'l слаrаемых bi на попарно различимые слаrаемые b/,2 Q " bj,2 Q z,. . . (эта замена сохраняет сумму слаrаемых разбиения). Повторяя эту операЦИlО для каждоrо i, 1  i  р, и упорядочивая ела- . . . . . . . . о . . . . . . . . . . . . . . . . . . . . . . . 16=4+4+3+3+1+1 16=6+4+4+2. Рис. 1.15. Дllзrрамма Феррсрса для разбиения числа и сопряженноrо ему раз- биения. 
62 1. Введение в комбинаторику raeMbIe по невозрастанию, получаем в результате разбиения числа n на попарно различимые слаrаемые. Это следует из Toro факта, что каждое натуральное ЧIIСЛО можно однозначно пред- ставить в виде произведения нечетноrо числа на степень двой- ки. В качестве примера проведем описанное преобразование для разбиения 26 == 7 + 5 + 5 + 3+ 3 + 1 + 1 + 1: 7 + 5 + 5 + 3 + 3 + 1 + 1 + 1 == 7 · 2 а + 5 · 21 + 3 · 21 + + 1 (21 + 20) == 7 + 1 о + 6 + 2 + 1 == 1 О + 7 + 6 + 2 + 1. Леrко заметить, что можно выполнить обратное преобразо- вание для произвольноrо разбиения на попарно различимые слаrаемые, представляя каждое слаrаемое как p2 Q , rде р не- четное, rруппируя затем слаrаемые в зависимости от «нечетно- ro множителя» р и заменяя каждую такую rруппу p2 QL , p2 Q2 . . . на r == 2 qL + 2 Q2 . . . слаrаемых, равных р. Таким образом, описанное преобразование определяет взаимно однозначное со- ответствие между разбиениями на нечетные слаrаемые и раз- биениями на попарно различимые слаrаемые. _ Друrие теоремы этоrо типа сформулированы в задачах 1.39 -7- 1.41. Покажем теперь простой алrоритм rенерирования всех раз- биений числа. Он будет rенерировать разбиения в порядке, об- ратном лексикоrрафическому, т. е. разбиение п == C 1 + . . . + Cl ( 1.53) будет порождено......... необязательно непосредственно......... после раз- биения n === a 1 + . . . + ak ( 1 . 54) тоrда и только тоrда, коrда существует индекс р  min (k, [), такой что С р < ар и Ст == а т для 1  'n < р (ер. с рис. 1.14). Очевидно, что первым разбиением в этом порядке является разбиение, содержащее" одно слаrаемое, равное n, а послед- ним......... разбиение на п слаrаемых, равных единице. Зададимся вопросом, как выrлЯДИТ разбиение, непосредственно следующее за разбиением (1.54). Будем искать разбиение, которое имеет самое большое число начальных слаrаемых, равных начальным слаrаемым разбиения (1.54)......... обозначим эти слаrаемые аl, ... _ . ., atI,......... и оставшиеся слаrаемые KOToporo определяются разбиением, непосредственно идущим за разбиением s == at + + at+l + ... .+ ak. Леrко заметить, что эти условия однозначно определяют tmax{i:al > 1}. 
1.11. Разбиения чисел 6з Таким образом, задача сводится к нахождению разбиения, непосредственно идущеrо за разбиением s == at + 1 + . . . + 1, at > 1. \. 1   k t раз Нетрудно заметить. что такое разбиение имеет вид s == 1 + . . . + 1 + (s mod 1), \.  , ..,. L $/ l J раз rде 1 == Qt  1. В алrоритме, который мы сейчас опишем, разбиение будет представлено переменными S (1], ..., S [d], содержащими по.. парио различимые cпaraeMbIe разбиения (S [1] > ... > S [d]), а также переменными R [1], ..., R [d], rде R [i] содержит ии.. формацию о том, сколько раз слаrаемое S [i] появляется в раз- биении (R [i] > О). Это позволяет находить каждое следующее разбиение за ЧИCJIо шаrов, оrраниченное неКО10роА постоянной, не зависящей от n. Алrоритм 1.22 (Нахождение всех разбиений числа.I Данные: n. Результат: последовательность разбиений числа п в поrя]- Ке, обратном леrсикоrрафическому. 1 begin 2 S [1]: == п; R [1): == 1; d: == 1; (. первое разбиение *) 3 выписать разбиение; 4 while S [1] > 1 do (* нахождение следующеrо разбиения .) 5 begln sum: == о; (. sum == сумма устраненных слаrае- мых .) 6 if S (d] == 1 then (. удаление слаrаемых, равных еди- нице *) 7 begin sum: == sum + R [d]; d: == d  1 8 end; 9 sum: == sum + S [d]; R [d]: == R [d] ....... 1; 1: == S [d] ...... 1; 10 IfR[d]>Othend:==d+l; 11 S [d): == 1; R [d]: == sum div 1; 12 1: == sum mod [; 13 if 1+0 then (. добавить последнее слаrаемое, ран! ное 1 .) 14 begin d: == d + 1; S [d]: == 1; R [d]: == 1 15 end: 16 выписать разбиение 17 end 18 end 
м 1. Введение в комбинаторику 1.12. Производящие функции в комбинаторных задачах на подсчет числа объектов при наличии некоторых оrраничений искомым решением часто яв" ляется последовательность ао, al, а2, ..., rде ak  ЧIIСЛО иско- мых объектов «размерности» k. Например, если мы ищем ЧIIСЛО разбиений числа, то можем принять Qk == P(k), еСЛII IIщем ЧIIС- ло подмножеств n-элементноrо множества, то ak == () и т. д. В этом случае удобно последовательности ао, Q 1, й2, .. t поста- вить в соответствие формальный ряд 00 А (х) == L akx't, k==O (1.55) называемый производящей функцией для даННОli пос.педова- тельности. Название «формальный ряд» означает, что (1.55I мы трактуем только как удобную запись нашеЙ последователь- НОСТИ  в данном случае несущеетвенно, для каких (действи.. тельных или комплексных) значений переменной х он сходится. Поэтому мы никоrда не будем вычислять значение TaKoro ряда для KOHKpeTHoro значения переменной х, мы будем только вы- полнять некоторые операции на таких рядах, а затем опреде- лять коэффициенты при отдельных степенях переменной х. ДЛЯ ЛРОIIЗВОЛЬНЫХ рядов 00 00 А (х) == L ak xk , k==O в (х) == L bkx k k==O мы определим операцию сложения: 00 А (х) + в (х) == L (ak + b k ) Xk, k==O (1.56 ) операцию умножения на ЧИСЛО (действительное или комплекс- ное) : 00 рА (х) == L pak xk k==O ( 1.57) ti nроuзведенuе Коши (коротко: проuзведенuе): 00 А (х) · В (х) == L Ck Xk , k==O (1.58) rде k Ck == aobk, + albkl + · . . + akbO == L aibkIJ i--O ( 1.59) 
1.12. Проиэводящие функции 65 Если ak == О для k > n, то рЯД (1.55) будем отождествлять с мноrочленом апх n + ... + ао. Из математическоrо анализа известно (см., например, [41]), что если ряд (1.55) сходится в некоторой окрестности нуля, то ero сумма А (х) является аналитической функцией в этой окрестности и (1.60) {A(k) (О) обозначает значение k-й производной функции А (х), для х == о; ряд (1.55)  это не что иное, как ряд Маклорена функции А (х) ). Более Toro, если А (х), В (х) являются анали- тическими ФУllКЦИЯМИ в окрестности нуля, то формулы (1.56)"';'" ...;.- (1.59) будут справедливы, если А (х) и В (х) трактовать как значеНIIЯ функций А и В D точке Х, а ряды понимать в обычном смысле, т. е. так, как в математическом анализе. Это сохра 04 няющее операции взаИ1НО однозначное соответствие между ря.. дами, схоДящимися в окрестности нуля, и функциями, анали... тическими в окрестности нуля, позволяет отождествить фор.. мальный ряд (1.55) с определенной через Hero аналитической фУНКЦllей в случае рядов, сходящихея в окрестности нуля (не... смотря на то, что ряды мы будем трактовать всеrда как фор- мальные ряды, Т. е. только как формальную запись их коэф", фициентов). Таким образом, будем писать, например, ak === A(k) (O)/k!, k==O, 1,2, . . . 00  k 1 L..J х == (1 ........ х) , k==O 00 " ......!.... Xk == е Х  k! k==O и т. д. НаЙдем теперь производящие функции для некоторых про- стых посдедовательностеЙ. В соответствии с (1.13) имеем f ( n ) Xk === I ( n ) Xk == (1 + х)n, k===O k k==O k таким образом, для заданноrо n производящая функция после" Довательности (;), (7), (;), ... есть (1 + х)n. Иlеем (1.61 ) 00 00 L 2kXk == L (2X)k == (1  2X)1, k==O k-=O и, следовательно, производящая функция последовательности 1, 2, 4, 8, ..., 2 k I ... есть (1  2х) 1. Пользуясь тем, что ана.. 
66 1. Введение D комбинаторику литическую функцию можно дифференцировать почленно, мож- но написать со 00 00 tkxk==X!kxkl==x :X Ixk==x d: (lx)I==x(1x)2, kO kO kO и, следовательно, производящая функция для последовательно- сти О, 1, 2, 3, ... есть х (1 ....... х) 2. Познакомимся поближе с формулоЙ (1.61). Каждый мно- житель (1 + х) мы можем трактовать как соответствующий некоторому элементу ai множества Х == {al, ..., ап} и как представляющий Два возможных числа появлений этоrо эле- мента в подмножестве: нуль раз (слаrаемое х О == 1) и один раз (слаrаемое Xl == х). Очевидно, что каждое подмножество мно- жества Х однозначно определяется указанием числа появлений в нем каждоrо из элементов, т. е. выбором одноrо из слаrае 4 мых из каждоrо МНОЖlIтеля произведений (1 + х) .,. (1 + х)'. Определенное таКИi\1 образом слаrаемое разложения этоrо про- изведеНIIЯ дает ВК.пад в коэффициент при Xk, rде k  мощность нашеrо подмножества, равный единице. Это раССУ)l{дение есте- ственным образом переносится на ситуацию, в которой число появлений элемента может быть ббльшим единицы, т. е. на множества с повторениями. ПреДПОЛОЖIIМ, например, что Х == == (2*al, 3*а2, l*аз, 4.х.а4), 11 обозначим через Ck число k-эле- ментных подмножеств этоrо множества с повторениями. В силу рассуждения, аналоrllчноrо приведенному выше, произподящая функция для последовательности Со, Cl, С2, ... равна 00 L Ck xk == .o == (1 + х + х 2 ) (1 + х + х 2 + х 3 ) (1 + х) (1 + х + х 2 + х 3 + х 4 ) == == 1 + 4х + 9х 2 + 15х 3 + 20х 4 + 22х 5 + 20х 6 + + 15х 7 + 9х 8 + 4х 9 + x lO . Соответствующим подбором i-ro множителя можно наклады- вать произвольные оrраничения на число вхождений элемента Qi. Например, этот множитель имеет вид ] + х 3 + х 7 , если i-й элемент может появляться О, 3 или 7 раз, 1 + х 2 + х 4 + ... ... J:::::(I........X2)1, если этот элемент может появляться произ- Больное четное число раз и т. д. В частности, если мы не на- пaraeM никаких оrраничений на число вхождений элемента al, I  i.E:;; n, то производящая функция имеет вид (1 + х + х 2 + . . .). , . (1 + х + х 2 + .. .) == (1  х).... 1 . . . (1 ....... х)....1 ==- == (1 ....... х).... п  
1.12. ПРОИЗВОllящие функции 67 Если вспомнить, что kя производная функции (1  х)....n равна d/t.. (1  x)п == (п)(  n  1) ... (n  k + 1}(1  x)п" Х dx'" Х ( ........ l)k == [n] k (1 ........ х)  n  k, И раЗЛОЖIIТЬ (1........ х) n В ряд Маклорена, то получим 00 00 (1  x)п == I [I/t x/t == I (n +:  1) xk, k==O k==O что дает еще ОДНо независимое доказательство теоремы 1.15. Производящие функции являются так}ке удобным инстру- ментом для доказательства ТО)l{деств, связанных с биномиаль- ными коэффициентами. НаПрIlмер, (1.18) можно получить, сравнивая коэффициенты n обеих частях равенства т+n I (пt t n) x/t == (1 + х)т+n === (1 + х)т (1 + х)n == k=-O т n m+n k ==  (7)x i .  (;)х/ == 6 t; (7) (k  s)xk (мы воспользовались здесь формулой произведения Коши двух рядов, в нашем случае это q)ормула произведения мноrочле нов) . Покажем теперь, I{aK производящие функции можно приме- нять в некоторых задачах, связанных с разбиением чисел. От- метим сначала, что каждое разбиение n == al + ... + ak мож но однозначно представить последовательностью (Лl, ..., Ап), rде А; обозначает число слаrаемых, равных i, т. е. Ai == I {j aj == i /\ 1  j  k}. Имеем, очевидно, n L iЛ l == n, i == I и каждая последовательность (А1,..., Аn) (AI,. . ., Аn  О). отвечающая этому условию, однозначно определяет разбиение числа n, содержащее Ai слаrаемых, равных i, 1  i  n. Обозначим чrрез Ph(n) число разбиений числа n на слаrае. мые, не превышающие h. Теорема 1.23. П роuзводящая функция для последовательно- сти Ph(O), P h (I), Ph(2), ... равна (1 + Xh + х 2 + х3 + . . .) (1 + х 2 + х4 + х 6 + . . .) . . . .. . (1 + Xh + x2h + x 3h + . . .) == (1 .... x)l(l .... х2)....1. .. (1 ...... Xh)I. 
68 1. Введение в комбинаторику Доказательство. Cor ласно определеНИIО произведение h ря- дов с правой стороны является суммой слаrаемых вида хА! х 2 'Л 2 . . . XhAh (Л l  номер члена, выбранноrо из i-ro ряда). Та.. (им обраЗО1, коэффициент при х п равен числу последователь- h IIостей (Лl, ..., Лh), таких что L iЛi == n, а, следовательно, в i =::1 1 соответствии с нашими предыдущими замечаНlIЯIИ 011 равен P h (п). Аналоrичным образом доказывается следующая теорема: Теорема 1.24. Производящая функция для последовательно- сти р (О), р (1), Р (2), ... равна (1 + х + х 2 + х 3 + . . .) (1 + х 2 + х 4 + х 6 + . . .) . . . 00 . . . (1 + Xh + X2h + х Зh + . . .) . . . == п (1  Xh) ....1. . h==1 Замечание. В этом месте следовало бы CTporo опре- делить ряд, являющийся бесконечным произведением рядов Р 1 (х) · Р 2 (х). ... . Обозначим через 1 п (х) «частичное произве- дение» Р 1 (х) .Р2(Х). ... .Рп(Х) И через РпнаимеНЬШУIО не- нулевую степень с ненулевым коэффициентом в F п (х) (для про- изведения (1.62) имеем Рп === п). Положим, что коэффициент при нулевой степени в каждом из рядов F п (х) равен единице и. что lim Рn == 00 (оба этих предположения выполнены для n+оо произведения (1.62». Тоrда коэффициент при х n В /п& (х) один и тот же для всех т, больших HeKoToporo числа nzп (TaKoro, что Рт. > п для т > m п ). Именно этот коэффициент мы при- lIимаем как коэффициент при х n В ряде, определенном беско- нечным произведением Р 1 (х) . Р 2 (х). ... . Техника производящих функциЙ позволяет провеСТII простые доказательства некоторых своЙств разбиеНIIЙ числа. Приведем в качестве примера дрУI'ое доказательство теоремы 1.21. От- метим в этой связи, что производящая функция для разбиений на попарно различимые слаrаемые (т. е. для последовательно- сти '1, '2, ..., rде 'п......... число разбllений числа n на попарно различимые слаrаемые) равна R (Х) == (1 + х) (1 + х 2 ) (1 + х З ) . . . (1 + Xk) . . . , а производящая функция для разбиений на нечетные слаrаемые равна N (х) == (1 ..... х)  1 (1 ........ х 3 )  1 . . . (1 ........ X2k  1 )  1 . .. . 
1.12. Производящие функции 69 Пользуясь зависимостью 1 + xk === (1 ........ X2k) / (1 ........ xk), полу'" чаем 1  х 2 1..... х 4 1  х 6 R (х)  1  х · 1  х 2 · 1  х З · · · · == 1 1 1 == 1 · 1 3 · 1 5 · · · ·  N (х). (1.62) ..... х ..... х  х ПРlIведем еще два примера применения производящих функциЙ. Первый относится к так называемым числам Фибо.. наччu F п. Эти числа являются решением peKyppeHTHoro урав- нения F n+ 1 == F n + F n....l' n  1, с начальными УСЛОВИЯМII ( 1 .63) РО==Р.==1. ( 1.61) Производящая функция F (х) для последовательности р о . Е!, Р2, ... удовлетворяет уравнению 00 00 F (х) == L F kXk === 1 + х + L (Р k....2 + F k.....) Xk == kO k ==2 00 00 == 1 + х + х 2 L F k....2 Xk .... 2 + Х L F k....l Xk .... 1 == k=-=2 k=:}, == 1 + х + х 2 р (х) + х (F (х)  1) === 1 + (х + х 2 ) F (х). Отсюда получаем ПРОIIЗВОДЯЩУЮ фУНКЦIIЮ для чисел ФиБОllаччи F (х) == (1 ........ Х ........ х 2 )  I . Найдя корни уравнения 1 ---- х ........ х 2 == О, получаем раЗЛО)l{ение 1 ---- х  х 2 == (1 ........ ах) (1  Ьх), r де а == (1 +  5 )/2, Ь == (1 ........  5 )/2. Теперь, используя метод IIсопределенных коэффициентов, най дем 1 (1  ах) (1  Ьх) А В А + n  (АЬ + Ба) х  1  ах + 1  Ьх == (1  ах) (1  Ьх) · Сравнивая коэффициенты в ЧlIслителе, получаем А + в  1, Т. е. B==lA, а далее Ab+(IA)a==O, что дает A == а / (а  Ь), в == ........ ь / (а  Ь); т а к 11 1 О б раз о м, F (х) == А (1  ах)....1 + в (1 ........ Ьх)....1 == 00 00 00 I k k I k k I ak+l  b k + 1 k ==А ах+В Ьх=== ь Х а.... kO ka kO 
70 1. Введение в комбинаторику и окончательно F k == )5 [( 1 +245 У+I  ( 1 245 Y+I]. (1 .65) Этот метод мо}кно перенести на произвольные линейные рекуррентные уравнения с постоянными коэф(Рllциента1Н (СМ. задачу 1.46). В качестве последнеrо примера применения производящих функций вычислим число бинарных деревьев с n вершинаrvIII. Под бинарным деревом с n вершинами мы понимаем пустое дерево Т == 0, если n == о, или троЙку Т  <L, "Р), rде ,....... вершина, называемая корнем дерева, L (левое поддерево) ......... бинарное дерево с l вершинами, Р (правое поддерево) ........ би- нарное дерево с р веРШIlнами и 1 + р + 1 == n. Будем rоворить, что бинарные деревья Т 1 и Т 2 изоморфны, И писать Т 1  Т 2 , если Т 1  Т 2 == SZ5 или Т 1 == (L 1 , '1, Р 1 ), Т 2 == (L 2 , '2, Р 2 ), rде L 1  L 2 И P 1  Р 2 . Обозначим через Ck число неизоморфных бинарных деревьев с k вершинами (рис. 1.16). Из данноrо рекурсивноrо определения следует, что Со == 1 и если О  s  k, то существует в точности CsCkls неизоморф- ных деревьев вида (L,', Р), rде L....... бинарное дерево с s вер- шинами. Число s может принимать любое из значений между О и k  1, следовательно, Ck === COCk1 + CICk2 + ... + CkICO, k > о. (1 .66) Неизоморфные бинарные деревья для k == О, 1, 2, 3 представ- лены на рис. 1.16. 00 Рассмотрим производящую функцию С (х) === L Ckxk. Р авен- kO ство (1.66) весьма напоминает формулу для коэффи!(иентов с = 1 о с == 1 . 1 с = 2. 2. / ". с =s J 3 л < Рис, 1.16, Бинарные деревья с k еРЦlинами, k ;= О) 1) 2) 3, 
1.12. ПРО:lзводящие функции 71 ПРОlIзведения Коши С (х) С (х) == С 2 (х), точнее rоворя, имеет 1eCTO уравнение С(х)==хС2(х) + 1 или хС2(х)  С(х) + 1 == о. ( 1.67) Пока)l(ем теперь, что существует функция С(х)', аналитиче- ская в окрестности нуля, удовлетворяющая этому уравнению. В силу упомянутоrо выше взаимно однозначноrо соответствия между рядами и аналитическими функциями коэффициенты этоrо решения опредеJlЯЮТ формальный ряд, удовлетворяющиЙ уравнению (1.67). Рассматривая (1.67) как квадратное урав.. нение с неизвестноЙ С (х) (значение искомой аналитической ФУНКЦIIII в точке х), получаем для х * О С(х)== 1 :::f=-V l 4x . (I.G8) 2х  / 1/2 Р аз.пОЖНl\{ 'v 1 ........ 4х == (1  4х) n ряд Маклорена. Для k > О имее1 d k (lx k ) 1/2 1 ( 1 ) ( 1 ) (1  4х == 2. 2...... 1 2........ 2 ... . .. (+  /l + I ) (l  4X)1/2k (4)k == == 2 k ( ........ 1) . 1 · 3 · 5 · . . . . (2/l ........ 3) (1 ........ 4 х ) 1/2.... k и, следовательно, 00 k.  1 4 1 I 2 · 1 · 3 · 5. ... · (2k  3) k 1  Х === ...... х == kl k == 1 00 00 -= 1 ....... " 2 k · (2k  2)! Xk == 1 ....... 2 " (2k  2)' х'" === f...J kl. 2. 4. . .. · (2k  2) i..J k! (k ...... 1)1 k..l k..l 00 == 1 ...... 2 " ..!.. ( 2k  2 ) Xk .  k k ....... 1 k1 Отсюда видно, что для получения решения с ПОЛОЖlIтеЛh. ными коэффициентами следует выбрать знак минус в (1.68). Таким образом, имеем 00 00 с ( ) == l......yl  4х ......... "  ( 2k  2 ) k....l ==" 1 ( 2k ) tt х 2.\;   k k ....... 1 х f...J k + 1 k Х. k..l k..Q 
72 1. Введение в комбинаторику Отсюда окончательно получаем' 1 ( 2k ) Ck == k + 1 k. ( 1.69) Числа Ck называются числами Каталана; они часто появ- ляются в контексте целоrо ряда друrих комбинаторных задач (см. задачи 1.47, 1.48). 1.13. Принцип включения и исключения Основная теорема, KOTOpYIO мы докажем в этом разделе, есть обобщение очевидной формулы I А U В 1==1 А 1+1 в 1.......1 А n в 1. которая справедлива для произвольных множеств А, В (рис. 1.17). IAu81;;lAI+181 lAn81 (AU8UC(::: (А( + \8\ +{01 .... lAп81 .... 18nО( .... IAncl+IAn8nc[ Рис 1.17. Простые частные случаи ПРlIнципа DК.rJЮ4НИЯ и исключения. Предположим, что даны ПОДl\fIlожества А 1 , ..., А п (необя- зательно различные) HeKoToporo конечноrо множества Х, н мы ищем мощность их объединения А 1 U ... U А п . В качестве пер- Boro «приближения» этоЙ МОЩНОСТII мы можем принять 1 А 1 1 + .. · + I А п 1, (1.70) однаl{О это число в общем случае слишком большое, так как если A i n А ! =1= 0, то элементы пересечения A i n AJ считаются дважды. Попробуем исправить ситуаЦltlО, ВЫЧlIтая из (1.70). сумму L IAlпAjl. li<l<п (1.71) Но в таком случае мы получим слишком маленькое число, так как если А, п А } n Ak =1= {О, то элеlенты пересечения A i n А, ПА,. 
1.1 з. ПРИIIЦНП включения и исключсния 73 считаются в (1.71) ТРИ)l{ДЫ. Следующим ш.аrом может БыIьь ДО" бавление суммы L I A i n А, n Ak 1, но по причине, по- l{<J<kn добной предыдущему случаlО, получим слишком большое чис- ло. Все )I{e оказывается, что через n шаrов мы всеrда получаем праВIIЛЬНЫЙ результат. То есть имеет место следующая теорема. Теорема 1.25 (ПРНIIЦIIП включения и исключения),. I iQl А 1 == tl I А 1 I  1 os;; ij < п I А i n А J I + + L IAinAJnAkl ... +(--_._I)п....l(А 1 п ... ПАп 1. li<j<kn Доказательство. Применим индукцию по n. Для n == 1 тео.. рема очеВИДIlО справеДJIlIва. Предположим, что для произволь"! НЫХ подмножеств А 1, ..., А п ..... 1 n .... 1 п .... 1 U Al == L I All  L I Al n А! I + · · · i==l l==l 1  i<i n....l п....2' ... +(......1) )А 1 П ... nAn....11. Прllменяя эту формулу к сумме п .... 1 (А 1 U . · · U A n .... 1 ) n А п == U (A l ПАп), i == 1 получаем n .... 1 n .... 1 U Al n А п == L I АI n А п I  L 1 A i n AJ n А п I + · · · {..l il Ii<jпl . . . + (-.......1 )n....21 А 1 n . . . n А п 1, а отсюда IQl Аl  OI Al) U А п == gll Аl + I А п I  ы: Аl n А п :::::::1 n == LIAnl L IAinAjl+ ... +(-__._l)nIIAln ... nAnl.. i==l li</n Пока}l(ем теперь несколько применений принципа включе.. иия и исключения. Теорема 1.26. Если I Х I == n, I У 1== т, то число всех функции из Х на У (Т. е. функций f: Х ---+ У, таких что f(X) == У), равно т....} ( т ) Sn m == L (........I)l . (т  i)'l. J iU l (1.72) 
74 1. Введение в комбинаторику Доказательство. Пусть У =={YI, ..., Ут}. Обозначим через Al мно)кество таких функций ': Х --+ У, дЛЯ которых Yi Ф f(X). Тоrда очевидно, что т f (Х):рУ <=> f Е U Al. i-==l Мы Зllае1, что число всех функций ': Х --+ У равно т n (тео" рема 1.1), дост аточно, таким образом, определить мощность объединения А 1 U ... U Аm. Отметим сначала, что для произ.. вольной последовательности 1  Рl < ... < Р;  т пересече.. ине Ар! n · . . n A pl есть множество всех функциЙ ': Х --+ У, таких что YP 1 , ... , YPi Ф. f (Х), .а, следова тельно, мощность этоrо пере.. сечения составляет (т  Р) п столько, сколько имеется функций f: Х  у '" {УР1' ..., YPl}. i-элеlеllтное множество {YP 1 '. · · · · ., YPl}  у мы можем выбрать () способами, и, следова- телыI,, cOr,,'IaCHO принципу ВКЛlочения и исключения имеем n пl тl. ( /n ) Sn,т === т  ЫО AI === т n  i (I)"1 i (т  i)n == тl . ( т ) == L (l)L . (т........ i)n. iO l IJ Стоит отметить, что в CIIJIY фОр1УЛЫ (1.41) теорема дает про.. стую формулу для вычислеНIlЯ ЧIlсел Стирлинrа BToporo рода: kl S n, k === * S n. k === * I (l) 1 (  ) (/l ........ i) n . ( 1 .73) . О l t C8 Друrим прнменением принципа включения и исключения мо- жет служить определение числа подмножеств из k элементов множества с повторениями Х == (k 1 * al, ..., k n -к. а п ) (пока на- помним только, что таких подмножеств насчитывается (), если k 1 === ... == k n == 1, и (n+:l), если k l , ..., k n ;::: k). Заметим, что эта проблема равносильна проблеме определения числа це. ЛОЧIlсленных решений системы Xl+...+xn==k, Oxlkl для i===l, ..., n. Метод решения этой задачи проиллюстрируем на примере. Пусть Х  (4 * al, 3 * а2, 7 .х- аз), k  11. Создадим множества А === множество всех k..элементных подмножеств множества с повторениями (k * а., k * а2, k * аз), А 1 == множество таких У Е А, которые содержат более чем 4 вхождения элемента аl, 
1.13. ПРИНUИП включения и ИСКЛЮLJСНИЯ 7.5 А 2 == l\-IНО}кествО таких У Е А, I{OTOpbIe содср)кат более чем 3 ВХО}l{дения элсмента а2, Аз == fHOjKeCTBO таких У Е А, которые содержат более чем 7 вхождений эле1\1(нта aJ. Имеем I А 1== (п+:1 ) == ( 3+1\1 1 ) === ( ) == 78, очевидно, что I А 11 составляет столько, СI(ОЛЫ<О IIмеется 6-э.пСlVIСНТIIЫХ (k......... 5 == 6) ПОДМНО)l(еств множества с повторениями (11 * аl, 11 * а2, 11 .х- аз), Т. е. (3+1) == (:) === 28, анаи10rИЧIlО I А 2 1 === (З+:I ) === () == 36, I Азl  ( З+l ) == () === 10. ТаК)I(С леrко за l\'lCTIITb, что I Аl n А 2 1 == == (З+""J ) === () === 6 столько, сколько ИI\.1естся двухэлементных (k......... 5......... 4 == 2) подмножеств множества с повторениями (11 .» al, 11 .a2, 11 *аз), и А 2 ПА з ==А 1 пАз == 0. Подмно}кество У Е А является подмножеством MHO}I(eCTB3 с повтореНИЯМII Х тоrда и только тоrда, ]<оrда ОIIО не принадле- жит А 1, А 2 И Аз, а следовательно, по ПРИНllИПУ включения и I1сключения искомое ЧIIСЛО k-элементных подмножеств множе ства с повторениями Х равно I А I  I А) 1........1 А 2 1  I Азl + I Аl n А 2 1 + I А 2 n 113 I + I А 1 n Аз 1........  I А 1 n А 2 n Аз I == 78 ........ 2'8 ........ 36 ...... 1 О + 6 + о + о ........ о == 10. Наконец мы остановимся еще на одном применеllИИ прин- ципа включения и IIсключения: на определении числа инверсий на n-элемеllТIIОМ множестве. Под инверсией на множестве {l, ..., п} мы будем ПОНlIмать произвольную перестаllОВКУ f этоrо множества, такую что f(i) =1= i для 1  i  n. Обозначим через D n множество всех инверсий на множестве {1, ..., n} и Al == {! Е Sn: f (i) == i}, i === 1, ... , n (наПОМНIfМ, что Sn означает множество всех перестановок мно- жества {l, ..., п}). Перестановка f является инверсией тоrда и только тоrда, коrда она не принадлежит ни к одному ИЗ мно- жеств A i , а, следовательно, соrласно принципу включения и исо( I(лючения п 1 D n 1==1 Sn f ........ L I All + L I At n AJ 1........ · · . ;o::al 1  i<Jn . . . + (........1 )n I I А 1 n . . . n А п ,. Для произвольной последовательности 1  Рl < ... < Pi  п пересечение Ар! n . . . n A pi является множеством таких переста новок f, для которых f(pj) == pj для 1  j  i, и значит, I Ар! n · · · n A pi J == (п ...... i)!. Заметив, что последовательность 
76 1. Введение в комбинаiорику 1  Рl < ... < Р;  n можно выбрать (7) способами, получаем в итоrе n n I D n 1== L (o' () (п  i)1 == L (l)t 71' :-== iO iO == пl ( 1  i +   I + .. . + (l)IJ ! ). Стоит отметить, что сумма в скобках является начаЛЬНЫf 00 членом ряда еI=-==L(I)t*. Это означает, что инверсии со' [:::0 ставляют el == 0.36788 ... всех перестановок. 1.14. Задачи 1.1. В соревновании принимают участие 8 спортсменов. Сколь. КИl\1И способами MorYT быть разделены медали (золотые, се- ребряные и бронзовые?) 1.2. Доказать, что число способов, сколькими МО}l{НО рассадить n человек среди т человек за круrлым столом, равно [т] п/n. (Размещения, отличающиеся только циклическим перемещением людей BOKpyr стола, считаем равными.) 1.3. Сколько чисел между 1000 и 1 О 000 состоят из нечетных цифр, сколько из различных цифр? 1.4. СI(ОЛЬКО существует возможных результатов, I{ОТОРЫМИ мо. rYT закончиться соревнования, в которых стартует 10 чело. век в трех видах спорта, если каждый человек стартует в одном, произвольно выбранном виде спорта? (Под резуль- татом соревнования мы будем понимать распределение мест для всех спортсменов, стартующих в каждом виде.) 1.5. Сколы(о палиндромов длины п можно образовать, исполь- зуя 26 букв алфавита? (ПалиндРОМО.Аt называется ПрОIlЗ вольное выражение, которое ЧlIтается одинаково как слева направо, так и в обратном направлении, например, топот.) 1.6. Доказать, что порядок произвольной rруппы G с:: Sn яв ляется делителем порядка Sn. (Указание: показать, что мно" жества вида fG == {fg: g Е а, f Е Sn} составляют разбиеНIIС rруппы Sn на непересекающиеся I G I элементные блоки.) 1.7. Доказать, что число перестановок f Е Sn типа 1 Л12"'2 ... n лn равно пl/(l А 1 ... пАnЛl1 ... Л n !). 1.8. Доказать, что перестановки " g Е Sn являются перестанов- ками одноrо и Toro же типа тоrда и только тоrда, KorAa существует перестановка h Е Sn, такая что g == hfh.l 
1.14. Задачи 71 }.9. Перестановка f Е Sn называется UНВОАl0цией, если " === е. Доказать, что f Е Sn является инволюцией тоrда и только тоrда, коrда она имеет тип 1 ЛI2Л:! (Л 1 + 2л'2 == n), и что ПРОИ3" вольная перестаltовка является суперпозицией двух инво- люций. 1.10. Для перестановки (aI, "" а п ) определим инверсивный вектор как (d 1 , ..., d n ), rде di == 1 {j < i: а! > ai} 1. Дока- зать, что инверсивный вектор однозначно определяет пере.. становку. 1.11. Доказать, что множество всех четных перестановок обра.. зует rруппу. 1.12. ДОI{азать, что алrоритм 1.1 О будет rенерировать все пере.. становки (в несколько иной очередности), если убрать команду P[i] :==: Р[т] в строке 15. Пусть '1,'2, ..., fnl бу.. дет последова тельностью перестановок, полученных с по" мощью TaKoro модифицированноrо алrоритма. Доказать, что последовательность п! элементов /11 (l), f;1 (i), ... , .. ., f( (i) является для каждоrо i (1  i  п)" одинаковой с точностью до циклическоrо сдвиrа (ср. [45]). 1.13. Доказать, что асимптотическое значение (для п  00) сред" Hero числа транспозиций, приходящихся на каждую пере.. становку, полученную при помощи алrоритма 1.1 О, равно ch 1 === 1,543 ... ( Ch Х == i: X 2k /(2k) 1 ) , если же алrоритм k ;о:: О модифицироnан так, как в предыдущей задачс, то это зна.. чение составляет sh 1 == 1,175 ...( sh Х == kO x2k+I/(2k+l)I ). 1.14. Доказать, что каждое из чисел о, ..., п!  1 можно одно.. n .... 1 знаЧIlО представить в виде j == L dkkt, rде О  d i  i, при.. k1 чем последовательности dkl, ..., d(, соответствующие оче... редным числам, появляются в леКСИКОI'рафическом по.. рядке. Предложите алrОРIIТМ построения последовательно.. сти <dkl, ..., d 1 ), соответствующей числу j. 1.15. Удалить рекурсию из ал("'оритма 1.11. Описать такую реа.. лизацию, в которой число шаrов, необходимых для по.. строения каждой последующей перестановки (не только среднее значение числа шаrов!) оrраничено константой, не заВllсящей от п. (Указание: рассмотрим лекснкоrрафически упорядоченный список L n всех последовательностей (Сп, ... . . ., С2), rде 1  Ci  i. Доказать, что j-я транспозиция, проведенная алrоритмом 1.11, имеет вид Р [В [р, С р ] ] ::;:::J :==: Р[р], rде р == min{i: Cl < i}, а (Сп, ..., С2) есть j-я последовательность в списке L n . Дальнейшие последова.. 
18 1. Введение в комбинаторику тельности в списке L 11 можно эффективно rенерировать, представляя последовательность (сп,..., С2) последова- тльностью (ё п , ..., ё 2 ), rде ё; == 1, если С; == i и Ci == Cl В ПрОТIIВНОМ случае, или же, используя буфер, фактическим содержанием KOToporo всеrда является последовательность йl, b l , а2, Ь2, ..., as, b s , такая ЧТО s U {i: a q  i  b q } === {i: Cl < i}. q...1 Наибольший элемент буфера определяет ранее упомянутый индекс. 1.16. Написать проrрамму, реаЛИЗУЮЩУIО «обычную» нерекур'" сивную версию алrоритма 1.11, а также версию, предло- женную в предыдущей задаче. Проверить эмпирически, вы- полнив nporpaMMY, сильнее ли последняя версия в смысле среднеrо времени, неоБХОДllмоrо для построения каjJ{ДОЙ следующей перестаНОВКII. 1.17. Предположим, что для каждоrо нечетноrо т имеет место соотношение В [т, 1] == .. == В [т, rn  1] == ь(т), и что для произвольноrо четноrо т  4 последовательность В [т, 1], ..., в [т, т  1 ] удовлетворяет одному из слс. ДУЮIЦИХ условий: (i) Каждый из элементов 1, ..., т  1 появляется в ней в ТОЧНОСТII одив раз, причем расстояние ме)кду ПОЗllUIIЯМJf, содержащими т  1 и b(т....l) четное (расстояния ме}l{ДУ по- з И Ц 11 Я М И Ё, j п о н и 1\1 а е м к а к I i ......... j I ) . (ii) Ка)l{ДЫЙ из элементов множества {l, ..., т......... 1}" {т........  1 t b(тl)} появляется в нем в ТОЧНОСТII один раз, и элс- мент т  1 или b(ml) появляется дважды, причем расстоя- ние между этими вхождениями нечетное. Доказать, что в этом случае процедура PERM (п) reHe- Рllрует все перестановки элементов Р [1], ..., Р [п], приче1 п (СМ. доказательство корректности алrоритма 1.11) яв. ляется транспозицией для каЖДоrо нечетноrо n  3 и ЦИК. лом длины 11 для каждоrо четноrо п (ср. [44]). 1.18. Пользуясь преДЫДУU1ИМ заданием, доказать, что следующие варианты процедуры В (т, i) в алrоритме 1.11 приводят к правнльному алrоритму rенерироваНIIЯ всех лерестановок (1) if (т tnod 2 == О) and (т > 2) then if i > 1 then В: == т ....... i else В: ==т  2 еl se В: == т........ 1 (2) if т mod 2 === О then i f (i ж:: 1) or (i == т ........ 1) then В: == т ........ i else В: == i else В: == 1 
(3) (4) (5) 1.14. Задачи 79 if (т mod 2 == О) and (i > 2) then else В: == т  1 (* Wells [71] *) if т mod 2 == О then В: == i else В: == 1 (* Неар [32] *) if т mod 2 == О then В: == i else В: == т ...... 2 Какой ВИД имеет перестаповка <рп В каждом из этих слу.. чаев? Дать друrие возможные варианты этой процеДУРЫr 1.19. Доказать, что среднее число шаrов, необходимое для reHe.. рllроваllllЯ каждой следующей перестановки в алrоритме 1.12, оrраНИЧено константой, не зависящей от n. Предста- вить вариант алrоритма, в котором это замечание справед- ливо так}ке для числа шаrов для каждой конкретной по.. лученной перестановки (ср. с задачей 1.15). 1.20. АлrОрIlТМЫ 1.11 и 1.12 rенернруют последовательности, со- держащие попеременно четные инечетные перестановки (почему?). Верно ли это для алrоритма 1.10? 1.21. Доказать, что среднее число marOB, необходимое для reHe.. рирования каждоrо следующеrо подмножества с помощью алrоритма 1.13, оrраничено константой, не зависящей от п. Предложить вариант алrоритма, в котором это верно также для каждоrо KOHKpeTHoro подмножества (см. задачу 1.15). 1.22. Предложить нереКУРСИВIlУЮ версию алrоритма, rенерирую-- щеrо все подмножества с повторениями. 1.23. Использовать алrоритм 1.13 для решения следующей за.. дачи: Даны п + 1 d"мериых векторов al, ..., а п , S с це- лыми координатами. Проверить, существует ЛIl подмно" жест во J с:= {1, ..., п}, такое что L aJ == s. jeJ 1.24. Доказать тождества В .  т ........ ; . ......... '" .,. (пtl)==(:)+(:=)+(:=)+ ...+(пk). (::)==(:)+(п1)+(п2)+ ...+() двумя способами: MHoroKpaTHo используя формулу (1.17)' и придавая правой части некоторую комбинаторную ин.. терпретацию (например, в первом тождестве (=:) есть число k-элементных подмножеств А с:= {О, ..., п}, таких что min{i: iA}j). .1.25. Доказать то}кдество п(:=)==k(;). 
80 1. Введение в комбинаторику подсчитав двумя способами пары (а, К), rде а Е К и К является k-элементным подмножествам фиксированноrо пэлемеllтноrо множества х. Использовать это тождество для вывода' формулы (I.ZI). 1.26. Доказать, что произведение k произвольных последователь ных натуральных чисел делится на kt. (Указание: paCCMOT реть биномиальный коэффициент (п; k ).) .1.27. Доказать, что для произвольных натуральных чисел р, q, n n [р + q]n == L ( ) [P]k [qJnkl k:=O n [Р + q]n == L ( n ) [p]k [q]n....k. k..O k (Указание: для доказательства первоrо тождества подсчи.. тайте двумя способами число всех взаимно однозначных функций f: X--+PUQ, rде IXI==n, IPI==p, IQI==q, РП n Q == 0. Для BToporo тождества найти подобную интер- претацию в терминах размещений, упорядоченных в р + q ячейках.) 1.28. Доказать, что (X j +Х 2 +... +хр)n== L ( n ) х7 1 ... х;Р. n 1 п2 ... Пр пl +... +nр==n rде ( n ) == n!/(п 1 !n2 ! ... Пр!). Дайте комбинатор n 1 n2 . . . Пр ную интерпретацию коэффициентов. Чему равно (kn  k) ? 1.29. Дать нерекурсивную версию алrоритма rенерироваНIIИ k..элементных подмножеств, oCHonaHHYlo на формуле (1.25). Показать, что рекуррентная зависимость О(п, k}==G(n........l, k), О (n ...... 2, k........ 2) U {n ...... 1, п} , 0* (n ...... 2, k........ 1) U {п} определяет также некоторый список k-элементных ПОДМIIО" жеств, в котором соседние подмножества мало ОТЛllчаются друr от друrа. Дать нерекурсивныЙ алrоритм, основанный на этой зависимости. 1.30. Показать, что решетка разбиений не является дистрибу.. тивной, т. е. 1т L\ (й V () =F= (п /\ о) V (п !\ fl). Указать COOT ветствующие разбиения 11:, а, .. 
1.14. Задачи 81 1.31. Доказать, что число последовательностей длины n с эле.. ментами из k-элементноrо множества, содержащих ка ж... дый элемент этоrо множества по крайней мере один раз, равно ktS (п, k). 1.32. РазбиеНlfе n n-элемеНТllоrо множества Х имеет тип 1 "'12"'2 .Н . . . п Лn (rде Лl + 2Л2 + ... + nЛп == n), если оно содеР04 ЖIlТ Лi i-элементных блоков для i == 1, 2, ..., n. Доказать, что число разбиений типа 1 "'12"'2 . .. n'Л n равно п!/(Аl t ... . . . Аn! (1 !)"-1 ... (п!)л n ). 1.33. Обозначим для каждоrо k  О (k) d k f (k) dk f ) g == dx k g (х), == dyk (у IUg (х)' Доказать, что п dd x : 1 (g (х» == L L jJ;;;O kl+k2+...+kn==/ k 1 +2k 2 +. .. +nkn..n kl' k 2t . .., k n O 1(/) n' {g( 1)". ... {in»"n k 1 ! (11) k 1 ... knl (nl)k n · Показать, что сумма коэффициентов при всех слаrаемых вида {и) (g(l»)k 1 ... (g(n»)k n равна числу Белла В п . 1.34. Доказать, что для каждоrо т  О матрица чисел Стир.с линrа первоrо рода [s (п, k)]oпt k<.m есть обратная мат. рица для матрицы чисел Стирлинrа BToporo рода [S (n, k)]oп. k т. 1.35. Доказать, что n [х] n == L I s (n, k) I x k . k==O 1.36. ДОI<азать, что I s (п, k) I есть число тех перестановок n-эле- MCHTHoro MHO)l{eCTBa, которые имеют в разбиении на циклы в точности k ЦIIКЛОВ. 1.37. Рассмотрим следующую проrрамму: тin :=== 00; for i:=== 1 to n do i f Р [i] < 11lin then l1zin:=== Р [i]; Доказать, что вероятность Toro, что дЛЯ ПРОIIЗВОЛЬНО вы- бранной перестановки Р [1], ..., Р [п] команда min: == :== Р [i] будет выполняться в точности k раз, составляет Is(n, k) I/n!. (Указание: воспользоваться предыдущей зада- чей или наЙти взаимно однозначное соответствие между перестановками, IIмеющими k циклов в каноническом пред- ставлении, и персстаllовкаМlI, для которых эта команда BЫ 
82 1. Введение в комбинаторику полняется k раз.) Доказать, что среднее число выполнений указанной команды для произвольно выбранной переста.. n HOBКll есть О (Iog п), точное значение равно I ,h-. (Указа- k::s( ние: подсчитать число циклов во всех п! псрестановках.) 1.38. ДОI<азать, что среднее число шаrов, необходиых для по- строения каждоrо следующеrо разбиения в алrОРlIтме 1.19, оrраничено константой, не завнсящей от n. Дать модифи- кацию алrорнтма, rарантирующую оrраннченность этоrо числа константой для I{а}l{доrо ПОРО)l{денноrо разбиения (ер. с задачей 1.15). 1.39. Доказать, что число разбнсний числа n, в котором ни одно IIЗ слаrаемых не превосходнт k, равно числу разбнений числа п + k на k слаrаемых, т. е. Р (п + k, k). 1.40. Доказать, что число саАtосопряжеННblХ разбиеннй числа n (т. е. равных сопря}кенному разбиеНIIЮ) равно числу раз- биений числа n на попарно различные lIечеТllые слаrаемые. 1.41. ОбознаЧИ1 через Е(п) 11 О(п) соответственно число раз- биений числа п на попарно различимые четные слаrаемые и на попарно различимые нечетные слаrаемые. Доказать, что { (1 )k, если n Иfеет вид (3k 2 ::f: k)/2, Е(п)  О (п) == О в противном случае. 1.42. Разработать алrоритм rенерирования всех Р (п, k) разбне.. ний числа п на k слаrаемых в порядке, обратном лексико- rрафическому, такой что число шаrов, необходимое для построения каждоrо следующеrо разбиения, оrраничено константой, не зависящей от n. 1.43. Ряд " c k k  kfX k==o будем называть экспоненцuальной проuзводящей функцией для последовательности Со, Cl, ... . Пусть Ck  число раз- личных последовательностей длины k с элементами из мно- жества У === {Yl, ..., Уп}, В которых число появлений эле- мента У; принадлежит множеству {тil, тi2, ...} (тil < < тi2 < ...). Доказать, что экспоненциальная производя- щая функция для последовательности со, СI, С2, ... есть ( хт1l х тl2 ) С (х) ==  r + ............... ! + ... х та! тl2 Х ( хт2\ + хт22 + ... ) ... ( хтnl + х тn2 + ... ) . nl 21 1 т22 1 mnl! т n 2 1 
1.14. Задачи 83 1.44. ДОI(азать, что  n ( n  k + 1 )  L(n+1)!2J ( п  k + 1 ) F n+l  L k  I k · KO kO 1.45. Доказать, что число бинарных последовательностей ДЛIIIIЫ n, не содеР)I{ащих единиц НII на каких двух соседних ПОЗ1l" ЦIlЯХ, раВIIО числу Фllбоначчи F п+l. 1.46. Описать метод решения возвраlНЫХ уравнений вида Соа п + Claпl + . . . + C,aпT == О (е начаЛЬНЫМII УСЛОВИЯМII, определяющпми значения ао, а 1, ..., arl) при ПОМОЩII производящих функций, анало.. rИЧIIЫЙ методу, использованному для нахождения формулы (1.65), определяющей числа Фнбоначчи. 1.47. Пусть Рп  ЧIlСЛО всевозможных расположевпй скобок в ПРОlIзведеНIIJI Ха, ..., Х п (например, Р2 == 2, так как имеет.. ся два способа расстановки скобок: «ХОХl) Х2), (хо (XIX2)). ДОl{азать, что р" равно ЧIIСЛУ Каталана Сп. 1.48. Доказать, что ЧIIСЛО способов, которыми можно разбить плоский ВЫПУI{ЛЫЙ (п + 2) -уrОЛЬIlИК на раЗЛlIчные треуrоль.. lJIIJ\JI е no:\tOUlbIO п  1 диаrоналей, не пересекающихся внутри этоrо (п + 2) ..уrольника, равно ЧIIСЛУ Каталаllа Сп- 1.49. Обозначим через л(х) количество простых чисел, не пре.. восходящих Х. Доказать, что n (n)  n ( -У n ) == n  1  I l ; J + lik l + " l n 1 ....... · · + (l)k l n J .  PiPJ Р1 Р 2 ... Pk l<;t<l<;k  r де k === n (-V n ). 1.50. Обозначим через ср(п) !{ОЛllчество натуральных чисел, не преВОСХОДЯIЦIIХ п и взаимно простых с n (Т. е. не имеющих общеrо делителя, большеrо единицы). Доказать, что q>(n)==n ( l  I т+ I q.  l<;iт 1 l<:I</<:m l. I т  . . . + (1)т 1 ) == n П ( 1 ......  ) , ql q 2 ... qm 1..1 ql rде ql, ..., qm являются различными простыми делителями числа n. 
2. Алrоритмы на rрафах 2.1. Машинное представление rрафов ОчеВИДIIО, что наиболее ПОНЯТIIЫЙ 11 полезный для человека С1l0соб представления rрафа  изображение rрафа lIа плоскости в виде точек и соединяющих их ЛIlНИЙ  будет совершенно бес.. полезным, если мы захотим решать с помощью ЭВМ задачи, свя" эанные с rрафами. Выбор соответствующей структуры данных ,f{ля представления rрафов имеет принцlIпналыIеe влияние на эффективность алrоритмов, поэтому мы подробнее остановимся на этой проблеме. Мы покажем несколько различных способов представления и кратко разберем IIХ основные достоинства и не.. достатки. Мы будем рассматривать как ориентированные, так и нео.. риентированные rрафы. rраф l\fbl будем всеrда обозначать G == (V, Е), rде V обозначает множество вершин, а Е  мно- жество ребер *), причем Е с= V Х V для ориеНТllрованноrо rрафа и Е с: { {х, у}: х, у Е V /\ х =t= у} для неориеllтнрованноrо rрафа. Будем таl{же использовать обозначеНIIЯ I V 1== п 11 I Е 1=== т. В теории rрафов классичеСКIIf способом представления rpa.. фа служит матрица uнцuденцuй. Это матрица А с п строками, соответствующими вершинам, и m столбцами, соответствующими ребрам. Для ориентированноrо rрафа столбец, соответствующий дуrе (х, у) Е Е, содеРЖIIТ l в строке, соотвеТСТВУlощей вер.. шине х, 1 в строке, соответствующей веРШlIне у, и нули во всех остальных строках (петлю, т. е. дуrу вида (х, х), удобно пред- ставлять иным значением в строке х, например, 2). В случае неориентированноrо rрафа столбец, соответствующий ребру {х, у}, содержит 1 в строках, соответствующих х и у, и нули в остальных строках. Это проиллюстрировано на рис. 2.1. С ал- rоритмической точки зрения матрица IIнциденций является, ве- роятно, самым худшим способом представления rрафа, который только можно себе предстаВIIТЬ. Во-первых, 011 требует nт ячеек *) в отечественной литературе ребра ориентированноrо rрафа принято называть ayzaMU. В дальнейшем мы будем употреблять этот термин везде, rде речь идет об орrрафах, используя термин «ребро» как более общиii,  П рим. перев. 
2.1. l\\ЗIIlннное представление rрафов 85 паМЯТII, причем большинство этих ячеек вообще занято пулями. Неудобен так}ке доступ к IIнформации. Ответ на элементарные вопросы типа «существует ЛИ дуrа (х, у)?», «к каким вершинаf ведут ребра из х?» требует в худшем случае перебора всех столб.. цав матрицы, а следовательно, т шаrов. Лучшим способом представления rрафа является матрица смежности, определяемая как 1\1атрIlца В == [b' / ] размера n Х n, л ЛЛАЛЛЛ N t'.f) C'J ..;t  \о LJ') .... .. .... .... .. .. --. 'r""" ...... t') tI') Ln 1.1'I  v. V v V V V V 1 1 1 О О О О О 2 1 О 1 О О О О 3 О 1 1 1 О О О 4 О О О 1 1 О О 5 О О О О 1 1 1 6 О О О О О 1 1 (а) 2. 5 3 6 (6') . N М Ln        ....     .      N N     ........,.., 6 1 1 1 1 О О О О О О 2 1 О О 1 1 О О О О 3 О 1 О 1 О 1 О О О 4 О О О О О 1 110 5 О О 1 О 1 О 1 О 1 6 О О О О О О О 1 1 з 4 Рис. 2.1. а) Ориентированный rраф и ero матрица инциденций; б) Неориентн- ровзнный rраф и ero матраца инцидеНЦIIЙ. rде Ьо == 1, еСЛIl существует ребро, идущее IIЗ вершины х в вер" шину у, и bij == О В противном случае. Здесь мы подразумеваем, что ребро {х, у} неориентированноrо rрафа идет как от Х к у, так и от у к х, так что матрица смежности TaKoro rрафа всеrда является симметричной. Это проиллюстрировано нз рис. 2.2. Основным преимуществом матрицы смежности является тот факт, что за один шаr можно получить ответ на вопрос «су- ществует ли ребро из х в у?». Недостатком же является т6т факт, что независимо от числа ребер объем занятой памяти составляет п 2 . На практике это неудобство можно иноrДG уменьшить, храня цеЛУIО строку (столбец) матрицы в одном машинном слове......... это возможно для малых n. В качестве еще одноrо aprYMeHTa против использоваНfЯ матрицы смежности пр и ведем теорему о числе шаrов, которое 
86 2. Алrоритмы на rрафах должен выполнить алrоритм, проверяющий на основе fатрицы смежности некоторое свойство rрафа. Пусть PHeKOTopoe свойство rрафа (P(G)==O или Р(О)=== 1:::: 1 в зависимости от Toro, обладает или не обладает О на- шим свойством. Предположим, что свойство Р удовлетворяет следующим трем условиям: (а) Р(О)===Р(О'), если rрафы О и О' изоморфны; (б) Р(О)==О дЛЯ произвольноrо пустоrо rрафа (V,0) и р (О) === 1 для произвольноrо полноrо rрафа < V, Р 2 (V» с до.. статочно большим числом вершин; (а) (6) 1 2 3 4 5 6 1 О 1 1 О О О 2 О О О О О О 3 О 1 О 1 О О 4 О О О О О О 5 О О О 1 О 1 6 О О О О 1 О 1 234 5 6 101 101 О 21 О 1 О 1 о 311 О 1 О О 4 О О 1 011 5 1 101 О 1 6 О О О 1 1 о Рис. 2.2. Матрицы ИНЦИДНЦИЙ для rрафов на рис. 2.1. (в)' добавление ребра не нарушает свойства Р, т. е. Р(О)   Р (О') дЛЯ произвольных rрафов G == (V, Е) 11 G' == (V, Е'), таких что Е с:: Е'. Примером TaKoro свойства Р является существование цикла (в rрафе, имеющем по крайней мере три вершины). Теорема 2.1. Если Р  свойство 2рафа, отвеtlаюu{ее условиям. (а), (б), (в), ТО каждый аЛ20рUТА1, проверяющиЙ свойство Р (Т. е. вычисляющий значение Р(О) для aaHHOZO zрафа О) на основе матрицы смежности, выполняет в xyauleJA. случае Q (п 2 ) ша208, 2де n  число вершин 2рафа. 11 Эта теорема справедлива также для ориентированных rpa фов и для свойств, не зависящих от петель rрафа, т. е. отве.. чающих дополнительному условию (r) Р (О) == Р (О') дЛЯ произвольных ориентированных rpa.. фОВ G == (V, Е), О' === <v, Е U (и, и», v Е V. Доказательство теоремы читатель MO}l(eT найти в работах [5] и [59]. Более экономным в отношении памяти (особенно в случае неплотных rрафов, коrда т rораздо меньше п 2 ) является ме 04 тод представления rрафа с помощью списка пар, соответствую.. 
2.1. Машинное представление rрафов 87 щих ero ребрам. Пара (х, у) соответствует дуrе (х, у), если rраф ориентированный, и ребру {х, у} в случае неориентиро- BaHHoro rрафа (рис. 2.3). Очевидно, что объем памяти в этом случае составляет 2т. Неудобством является большое qисло шаrов  порядка т в худшем случае,  необходимое для по- лучения множества вершин, к которым ведут ребра из данной вершины. Ситуацию MO)l{1I0 значительно улучшить, упорядочив мно- 1!{ество пар лексикоrрафически и применяя двоичный поиск, но (а) 1 2- 1 3 3 2 3 4 5 4 5 6 6 5 Рие. 2.3. Списки ребер, соответствующие rрафам на рис. 2.1. (6) 1 2. 1 3 1 5 2. 3 2 5 3 4 4 5 4 6 5 6 пУЧШИ1 решением во мноrих случаях оказывается структура данных, которую мы будем называть списками инцидентностu. Она содержит для каждой вершины v Е V список вершин и, таких что v --+ и (или v ---- и в случае неориентированноrо rpa... фа). Точнее, каждый элемент TaKoro списка является записью " содержащеЙ вершину '. строка и указатель r. след на еле- ДУЮЩУIО запись в списке (r. след === nil для последней записи в списке). Начало каждоrо списка хранится в таблице НА ЧА. ло; точнее, НА ЧАЛО [и] является указателем на начало спи.. ска, содержащеrо вершины из множества {и: v --+ и} ({и: v ........ и} для неориентированноrо rрафа). Весь такой список обычно не. форtwtЗЛЬНО будем обозначать ЗАПИСЬ [v], а цикл, выполняю.. щий определенную операцию для каждоrо элемента и из этоrо списка в произвольной, но четко установленной последователь.. ности, соответствующей очередности элементов в списке, будем записывать «for u Е ЗАПИСЬ [и] do .. .». Отметим, что для неориентированных rрафов каждое ребро {и, v} представлено дважды: через вершину v в списке ЗАПИСЬ [и]. и через вершину и в списке ЗАПИСЬ [vJ., Во МНО. 
rих алrоритмах структура rрафа динамически МОДИфIlцируется добавлением и удалением ребер. В таКIIХ случаях полаrаем, что в наших списках инцидентности элемент списка ЗАПИСЬ lu] , содержащий вершину v, снабжен указателем на элемент спи- ска ЗАПИСЬ [и], содержащий вершину и, 11 что каждый эле- мент списка содержит указатель не только к слеДУlощему эле менту, но и к предыдущему. Тоrда удаляя некоторыЙ элемент (а) (5) НДЧАЛО ндчдло 1 2 3 88 1 L п] t 3 It niL 5 6 'r . 4 5 6 2. Ллrоритмы на rрафах Рис. 2.4. Списки ИНЦlfДСН!1I0СТИ ЗАПИСЬ [и], v Е У, соотвеТСТDУlощне rрафам на рис. 2.1. из списка, мы можем леrl{О за число шаrов, оrраниченное кон" стантой, удалить друrой элемент, представляющий то же са.. мое ребро, не просматривая СПIIСОК, содержащий этот элемент (см. задачу 2.3). Аналоrичным способом опредеЛЯС1 для каждоii веРШIlНЫ v неориентированноrо rрафа список ПРЕД Ш [и] t содержащий вершины из множества {и: и--+и}. Число ячеек памяти, необходимое для представлеНlIЯ rрафа с помощью списков инцидентности, будет, очевидно, иметь по.. рядок т + n. На рис. 2.4 представлены списки ИНЦllдентности, соответствующие rрафам на рис. 2.1. 2.2. Поиск в rлубину в rрафе Существует MHoro алrоритмов на rрафах, в основе которых лежит систематический перебор веРШIIН rрафа, такоЙ что ка- ждая вершина просматривается в точности один раз. Поэтому важной задачей является наХО}l{дение хороших методов поиска в rрафе. Вообще rоворя, метод поиска «хорош», если (а) он позволяет алrоритму решения интересующей нас за- дачи леrко «поrрузиться» В этот метод и (б) каждое ребро rрафа анализируется не более одноrо раза (или, что существенно не меняет ситуации, число раз, оrраниченное константой). 
2.2. Поиск в rлубину в rрафе 89 Опишем теперь такой метод поиска в неориентировнном rрафе, который стал одной из основных методик проектиро" вания rрафовых алrоритмов. Этот метод называется поиском в zлубину (анrл. depth first search [66]) по причинам, КОТО" рые, как мы надеемся, вскоре станут ясными. Общая идея этоrо метода состоит в следующем. Мы начи.. наем попек с не которой фиксированной вершины vo. Затем вы- бираем произвольную вершину и, смежную с vo, и повторяем наш процесс от и. В общем случае предположим, что мы на.. ходимея в вершине и. Если существует новая (еще непросмот- ренная) вершина и, и....... v, то мы рассматриваем эту вершину, (она перестает быть новой) и, начиная с нее, продолжаем по- иск. Если же не существует ни одной новой вершины, смежной с v, то мы rоворим, что вершина v использована, возвращаемся в вершину, из которой мы попали в и, и продолжаем процесс (если v == ио, то поиск закончен). Друrими словами, поиск в rлубину из вершины v основывается на поиске в rлубину из всех новых вершин, сме}кных с v. Это можно леrко записать с помощью следующей рекур.... сипной процедуры: 1 procedure WG (и) (* поиск в rлубину из вершины v; переменные НОВЫй, ЗАЛ ИСЬ rлобальные *) 2 begin рассмотреть v; НОВЫ й[v] : JIОЖЬ; 3 'от и ЕЗАП ИСЬ[v] do 4 if НОВЫ й[u] then WG (и) 5 end (* вершина v использована *) ПОIIСК В rлубнну в произвольном, необязательно связном I'рафе проводится соrласно следующему алrОрИТМуj 1 begin 2 fOT ve:V do fIОВbJй[v]:==истина; (*инициализация*) 3 fOT v Е V do 4 if НОВЫ й[v] thеп WG (и) 5 end Покаjкем теперь, что этот алrоритм просматривает каждую першину в точности один раз и ero сложность порядка О (n+т):. Отметим сначала, что вызов WG (и) влечет за собой просмотр всех вершин связной компоненты rрафа, содержащей V (если НОВЫй [и] == истина для каждой вершины и этой компонеН4. ты). Это непосредственно следует из структуры процедуры WG после посещения вершины (строка 2) следует вызов процедуры WG дЛЯ всех ее новых соседей. Отметим также, что каждая 
90 2. Алrоритмы на rрафах вершина просматривается не более одноrо раза, так как про- сматриваться может только вершина v, для KOTOpOJul НОВblй[v] == истина, сразу же после посещения этой вершины исполняется команда НОВblЙ(v]:==ложь (строка 2). Наш алrоритм начинает поиск поочередно от каждой еще не просмотренной вершины, следовательно, просматриваются все вершины rрафа (необязательно связноrо). Чтобы оценить вычислительную сложность алrоритма, от- метим сначала, что число шаrов в обоих циклах (строки 2 и 3) порядка n, не счита я шаrов, выполнение которых инициировано вызовом процедуры WG. Эта процедура выполняется не 60" лее п раз во втором цикле сразу после посещения каждой из вершин для каждоrо из ее новых соседей, итоrо суммарно О (п + т) раз. Полное число шаrов, выполняемых циклом в строке 3 процедуры WG (не считая шаrов, выполняемых \WG (п)), для всех вызовов этой процедуры будет порядка т, rде т......... число ребер. Это дает общую сложность алrоритма О(п+т). . Отметим, что алrоритм поиска в rлубину в произвольном rрафе можно леrко модифицировать так, чтобы он вычислял связные компоненты этоrо rрафа. Зафиксируем этот факт: Следствие 2.2. Связные KO.AtпOHeHTbt проuзвольноzо zрафа, представленноzо списками инцидентности, можно вычислить за время О(п + т). 11 в связи с тем что ПОИСК в rлубину иrрает ваЖНУIО роль в проектировании алrоритмов на rрафах, представим также не- рекурсивную версию процедуры WG. Рекурсия устраняется стан.. дартным способом при помощи стека (см., например, [1]). Ка.. ждая просмотренная вершина помещается в стек и удаляется из стека после использования. 1 procedure WGl [и]; (* поиск в rлубину в rрафе, начиная с вершины v....... неркурсивная версия процедуры WG; предполаrаеl\f, что в начале процесса поиска Р [и] == УI<азатель на первую запись списка ЗАЛ ИСЬ[u] для каждой вершины и; массивы Р, НОВЫй ---- rлобальные *) 2 begin СТЕК:== 0; СТЕК <= v; рассмотреть v; НОВЫ й [v]:== JIОЖЬ; 3 whlle СТЕК =t= (2) do 4 beglo t:== 'ор (СТЕК); (* t ........ верхний элемент стека *) (* найти первую новую вершину в списке ЗАЛ ИСЬ[t] *) 5 if Р [t] == 011 then Ь:== пожь 
2.2. Поиск в rлубину в rрафс 91 6 7 8 9 10 1 1 12 13 14 15 16 17 18 19 end else Ь:=== not НОВЫ J1 [Р [/) t. строка]; while Ь do begin Р [1] :=== Р [1] t след; if р [1] === nil then b: ложь else Ь:=== not НОВЫй [Р [/] t. строка] end; if Р [/] =1= пil then (* найдена новая вершина *, begin (: Р [/] t. строка; СТЕК  t; рассмотреть t; НОВЫ й [/]:== ложь end else (* BCprl11fHCl t использована *) , -<= СТЕК (* у даТIИТЬ верхний элемент стека *) end Корректность этой процедуры fОЖНО доказать путем незна.. чительноЙ МОДlJфикации анализа процедуры WG. Мы оставляем 1 (1) 8(6) 10 (12) Рис. 2.5. Нумерация вершин rрафа (в скобках), соответствующая очередности, в которой они просматриваются в проu.ессе поиска в rлубину. это читателю. На рис. 2.5 показан rраф, вершины KOToporo перенумерованы в соответствии с тем порядком, в котором они просматриваются в процессе поиска в rлубину (мы отождеств- ляем эти вершины с числами 1, ..., 10 и полаrаем, что в спи.. ске ЗАЛ ИСЬ [и) вершины упорядочены по возрастанию). Методика поиска в rлубину очевидным образом переносится на ориентированные rрафы. Нетрудно проверить. что в случае ориентированноrо rрафа результатом вызова процедуры WQ(v), а также WGl (и) будет посещение за О (п + т) шаrов всех вершин и, таких что существует путь из v в и {см. задачу 2.11}. 
92 2. Алrоритмы на rрафах 2.3. Поиск в ширину в rрафе Теперь рассмотрим несколько иноЙ метод поиска в rрафе, Rазываемый поиском в ширину (aHr л.: breadth first search). Прежде чем описать ero, отметим, что при поиске в rлубину чем позднее будет посещена вершина, тем раньше она будет использована........ точнее, так будет при допущении, что вторая вершина посещается перед использованием первой. Это ПРЯ10е следствие Toro факта, что просмотреНI-Iые, но еще не исполь- зованные вершины скапливаются в стеке. Поиск в ширину, rрубо rоворя, основывается на замене стека очередью. После такой модификации чем раньше посещается вершина (поме- щается в очередь), тем раньше она используется (удаляется 113 очереди). Использование вершины ПРОIIСХОДИТ с помощью про- MOTpa сразу всех еще непросмотренных соседей этоЙ вершиныI. Вся процедура представлена ниже 1 procedure WS (и); (* поиск в ширину в rрафе с началом в вершине v; переменные НОВЫй, ЗАПИСЬ  rлобальные *) 2 begin 3 ОЧЕРЕДЬ:==0; ОЧЕРЕДЬ<=:v; НОВЫй [V]:===JIОЖЬ 4 while ОЧЕРЕДЬ =1= (о do 5 begln р<r=ОЧЕРЕДЬ; посетить р; 6 for u Е ЗАП IICb [р] do 7 if НОВЫ й [и] then 8 begin ОЧЕРЕДЬ -<== и; НОВЫй [и]:=== JIОЖЬ 9 end 10 end 11 end Способом, аналоrичным тому, какоЙ был ПРllменен для по- иска в r лубину, можно леrко показать, что вызов процедуры WS (и) приводит К посещеНИIО всех веРШIIН связноЙ компоненты rрафа, содержащей вершину и, причем каждая вершина IlРО- сматривается в точности ОДIIН раз. Вычислительная сложност}) поиска в ширину также имеет порядок т + n, так как каждая веРШlIна помещается в очередь и удаляется 113 очереди в точ- ности один раз, а число итераций цикла 6, очевидно, будет иметь порядок числа ребер rрафа. Оба вида поиска в rрафе  в rлубllНУ и в ШИРИНУ MorYT быть использованы Д.пя наХО)l(дения пути между фиксироваlI ными вершинами v и и. Достаточно начать поиск в rрафе с вершины v и вести ero до момента посеu{еllИЯ вершины и. Преимуществом поиска в rлубину является тот факт, что в MO 'Мент посещения вершины и стек содер}кит последовательность 
2.3. Поиск в ширину в rрафс 93 вершин, определяющую путь из V в и. Это становится очевид- ным, если отметить, что каждая вершина, помещаемая в стек, является соседом BepxHero элемента в стеке. Однако недостат- ком поиска в rлубину является то, ЧТО полученный таким об.. разом путь в общем случае не будет краТЧаЙШИМ путем из v в и. От этоrо недостатка свободен метод нахождения пути, ос но" ванныЙ на поиске в ширину. Модифицируем лроцедуру WS, заменяя строки 7 -7 9 на if НОВЫй [и] then tein ОЧЕРЕДЬ-<=u; НОВЫй [U]:==J10ЖЬ; JJРЕДblДУUИй [и] :===р end По окончании работы МОДИфlluированной таким образом процедуры таблица ПРЕДЫДУЩИй содержит для каждой просмотренной вершины U вершину ПРЕДЫДУЩИй [и], из которой мы попали в и. ОтмеТIIМ, что кратчайший путь из u в v обозначается последовательностью вершин u == иl, и2, ... ..., Uk==V, rде Ui+l==ПРЕДЫДУЩИЙ[Ui] для Ii<k и k является первым индексом i, для KOToporo и, == v. Действи- тельно, в очереди помещены сначала вершины, находящиеся на расстоянии О от V (т. е. сама вершина и), затем поочередно' все новые вершины, ДОСТИ)l(имые из и, Т. е. вершины, находя щиеся на раССТОНIlИ 1 от и, и Т. д. Под расстоянием здесь мы ПОНII1аем длину кратчайшеrо ПУТII. Предположим теперь, что мы уже рассмотрели все вершины, находящиеся на расстоянии, не превосходящем " от v, что очередь содержит все вершины, находящиеся от v на расстоянии " 11 только эти вершины и что таблица ПРЕДЫДУЩИй правильно определяет кратчайший путь от каждой, уже ПрОС10тренной вершины до V способом, описанным выше. Использовав каждую вершину р, находящую- ся в очереди, наша проuедура просмаТРI!вает некоторые новые вершины, и ка)кдая такая новая вершина u находится, оче- видно, на расстоянии r + 1 от v, причем, определяя ПРЕДЫ.. ДУЩИй[u]:== р, мы продлеваем кратчайший путь от р до v до кратчайшеrо пути ОТ U до и. После использования всех вер- шин из очереди, находящихся на расстоянии r от и, она (оче- редь) , очевидно, содержит множество вершин, находящихся на расстоянии r + 1 от и, и леrко заметить, что условие индукции выполняется и для расстояния r + 1. На рис. 2.6 представлен rраф, вершины KOToporo зануме- рованы cor ласно очередности, в которой они посещаются в про- цессе поиска в r лубину . Как и в случае поиска в rлубину, процедуру WS можно использовать без всяких модификаций и тоrДа, коrда списки 
94 2. Алrоритмы на rрафах 1 (1) 8(13) 10 (7) Рис. 2.6. Нумерация першин .'рафа на рвс. 2.5 (В скобках). соответствующая очередности, в которой они просматриваlоrся в процессе поиска в ШНРННУ. инцидентности ЗАПИСЬ [и], V Е V опредеЛЯIОТ нскоторыЙ ориентированный rраф. Очевидно, что тоrда посещаlОТСЯ толь- ко те вершины, до которых существует путь от вершины, с ко- торой IЫ Ilачинаеl поиск (CI. задачу 2.12). 2.4. Стяrивающие деревья (каркасы) ДеревО1ft называется пронзвольный неОРllентированный связ ный rраф без ЦИКJlОВ. Для произвольноrо связноrо неориеНТIf- pOBaHHoro rрафа G == (V, Е) ]{а)l(дое дерево (V, Т), rде Т с:: Е, будеIvl называть СТЯ2uвающим aepeBOAt)) rрафа а. Ребра та- Koro дерева будем называть ветвями, а все остальные ребра rрафа будем называть хордами (очевидно, что о ветвях и хор- дах в rрафе мы можем rоворить только в контексте фиксиро- BaHHoro стяrивающеrо дерева). Отметим, что каждое дерево с n вершинами имеет n  1 ребер. Этот факт можно просто доказать, применяя ИНДУКЦИЮ относительно n. Очевидно, что это справедливо для n == 1. Если n > 1, то отметим сначала, что в каждом дереве с n верши- нами существует «висячая» вершина, Т. е. вершина степени 1. Действительно, рассмотрим в таком дереве произвольный путь и! ---- и2......... ...  Vk С максимальной длиной (Vi =t= Vj) для i =1= i.. Вершины Vl, Vk «висячие», так как ни от одной из них нельзя провести BToporo ребра ни к одной из вершин иl, ..., Vk (де- рево Не содержит циклов), ни к любой друrой вершине (путь максимальный). Удаляя из нашеrо дерева вершину Vk и ребро {Vk.....l, Vk} (либо вершину Vl и ребро {Vl, и2}), получаем, оче- 1) в литературе по теории 1 рафоо широко распространены также rеРМИllLJ каркас и Ос100...... П рим. пepeв 
2.4. Стяrивающне деревья 95 видно, дерево с n  1 вершина:vIИ, которое в СIlЛУ индуктивно- ro предположения имеет n ........ 2 ребер. Следовательно, наше пер- вона.,чальное дерево вмело n  2 + 1 === n  1 ребер. Процедуры поиска в rлубину И в ширину можно простым способом использовать для нахождения стяrнваюl.ЦИХ деревьев. В оБОIlХ случаях дости}кение 1I0I30i"I вершины u из вершины v вызывает включение в дерево ребра {и, и}. АлrОРИТ1 2.3. (НаХО)l(дение стяrиоающсrо дерева связноrо rрафа методом поиска в r.пубнну.) Данные: Связный rраф G == (V, Е), заданный СПlIска:\.II1 ин- цидентности ЗАП ИСЬ [и], v Е V. Результаты: Стяrиваlощсе дерево (V, Т) rрафа о. 1 procedure 1VGD (и); (* поиск в rлубину, соединенныЙ с нахождением ребра дерева; переменные НОВЫй, ЗАЛ ИСЬ, Т  rll105альные *) 2 begin НОВЫй [и]:=== JlОЖЬ; 3 for u Е ЗАПИСЬ [и] do 4 if НОВЫй [и] then (* {и, и}  новая ветвь *) 5 begin T:===TU{v, и}; WGD(u) 6 end 7 end; (* \VGD *) 8 begin (* rлавная проrрамма *) 9 for UEV do НОВЫй [u]:===истина; (* инициализация *) 1 О Т : 0; (* т === l\IHO)l(CCTBO наЙденных I{ этому '10.\leHTY ветвей *) 11 WGD (r) (* r ........ произвольная вершина rрафа *) 12 end Для доказательства Toro, что алrоритм 2.3 корректно строит стяrивающее дерево произвольноrо связноrо rраф достаточно ОТ1етить следующие три факта. Во-первых, в момент добавле- ния к множеству Т новой ветви {и, и} (строка 5) в (V, Т) су- ществует путь из , в v (этот факт мы доказываем по индукции). Таким образом, алrоритм строит связный rраф. Во-вторых, ка- ждая новая ветвь {и, и}, добавляемая к множеству Т, соеди- няет уже рассмотренную вершину v (Т. е. НОВЫй [иJ == ложь) с новой вершиной и. Отсюда следует, что построенный rраф < У, Т) не содержит циклов. Действительно, последняя ветвь, «замыкающая» цикл, должна была бы соединить две уже рас- смотренные вершины. И наконец, в-третьих, из свойства поиска в rлубину сле.I!Yет, что процедура WGD просматривает все вер- шины связноrо rрафа. Следовательно, rраф (V, Т), построен- ный нашим алrоритмом, есть стяrивающее дерево rрафа о. Вычислительная сложность алrоритма есть, очевидно, О (n+т), (1'. . Toro же порядка, что и поиск в rлубину. Пример стяrи- 
96 2. Алrоритмы на rрафах вающеrо дерева, построенноrо алrоритмом 2.3, приведен на рис. 2.7, а. Каждое стяrивающее дерево, построенное указан- НЫм алrоритмом, имеет любопытное свойство, кот.орое мы сей- час опишем. Вершину " с которой мы начинаем поиск в rpa- фе, назовем корнем стяrивающеrо дерева (V, Т). Очевидно, что в дереве < V, Т) существует в ТОЧНОСТIf один путь от произволь- ной вершины к корню (см. задачу 10). (а) 8 9 1 (6') 8 9 7 4 7 4 1 Рис. 2.7. Стяrивающне дсревья, построенные с помощыо алrоритма 2.3 (а) и алrоритма 2.5 (6). Для двух различных вершин v и и дерева (V, Т) будем ro- ворить, что u является потомком вершины и, если v лежит на пути (в дереве (V, Т») из u в корень. Если при этом имеет место v  и, то будем rоворить, что и......... сын вершины и, а и......... отец вершины и. Теорема 2.4. Пусть (V, Т)  стяzиваЮlцее дерево связноzо zрафа G === (V, Е), построенное аЛёОрUТМОМ 2.3, u пусть Ju, и} Е Е. Tozaa либо и......... потомок и, либо и......... потомок и. Доказательство. Предполо}ким без оrраничения общности, что вершина v будет просмотрена раньше, чем и. РаССМОТРIIМ процесс ПОlIска в rлуБIfНУ, начиная с вершины и. Очевидно, что по окончании ero должно быть НОВЫй [и] === ложь, ибо и........ и. Но это означает, что ребра, добавленные в множество Т в те- чение этоrо процесса, содержат путь из v в и, откуда следует, что v лежит на ПУТII из U в корень. 11 Подобным же способом можно построить стяrивающее дe рево, используя метод поиска в ширину. 
2.4. Стяrивающие деревья 97 Алrоритм 2.5. (Нахождение стяrllвающсrо дерева связноrо rрафа методом поиска в ширину.) Данные: СвязныЙ rраф G == (V, Е), представленный списка- ми IIнцидентности ЗАПИСЬ [и], v Е v. Результаты: Стяrивающее дерево (V, Т) rрафа о. 1 begin 2 for и Е V do flОВЫ й [и]:== истина; (* инициализация *) 3 Т :==0; (* Т-множество наЙденных к этому моменту ветвей *) 4 ОЧЕРЕДЬ===0; ОЧЕРЕДЬ,; 5 НОВЫй [,]:== ложь; (* '-корень стяrивающеrо дерева *] 6 while ОЧЕРЕДЬ =1= 0 do 7 begin vОЧЕРЕДЬ; 8 for и Е ЗАПИСЬ [v] do 9 if НОВЫй [и] then (* {и, и} == новая ветвь *) 10 begin ОЧЕРЕДЬu; НОВЫй[u]:==ложь; Т :=== Т U {и, и} 11 end 12 end 13 end Способом, аналоrичным использованному для алrоритма 2.3, можно доказать, что данный алrоритм корректно строит стяrи- вающее дерево для ПРОIlзвольноrо связноrо rрафа за О (п + т) шаrов. На рис. 2.7, 6 дан пример стяrивающеrо дерева, построенно- rQ алrоритмом 2.5. РаССУ)l{дения разд. 2.3 приводят непосредственно к следую- щей теореме: Теорема 2.6. Пусть (V, Т)  стяzивающее дерево связноzо 2рафа G === (V, Е), построенное при помощи алzоритма 2.5. То.. zaa путь в (V, Т) из произвольной вершины v до корня , Я8" ляется кратчайшим путем из v в , в zрафе о. 11 в rл. 3 особо обсуждается более общая задача отыскания кратчайших путей в rрафе, ребрам KOToporo приписаны «дли- ны», не обязательно равные единице. Рассуждения данноrо раздела леrко переносятся на произ- вольные rрафы, не обязательно связные. Максимальный под- rраф без циклов произвольноrо rрафа G называется стяzиваю- щuм лесом rрафа о. Очевидно, что стяrиваlОЩЙ лес rрафа с k компонентами связности определяется через стяrивающие дe ревья этих компонент и а следовательно. содержит п...... k ...... 1 ребер. 
98 2. Алrоритмы на rрафах 2.5. Отыскание Фундаментапьноrо множества ЦИКЛОВ в rрафе Тесно связана с задачей нахождения стяrивающеrо дерева задача построения фундаментальноrо множества циклов. Если к стяrивающему дереву (V, Т) rрафа G === (V, Е) мы добавим произвольную хорду е Е Е""Т, то нетрудно отметить, что воз никший при этом подrраф (V, TU{e}) содержит в точности один цикл 1), который мы будем обозначать через Се. Очевидно, что Се содержит ребро е. Множество св ==={С е : е Е Е"Т} будем называть фундаментальным ;\tножеством циклов rрафа G (от- носительно стяrивающеrо дерева (V, Т»). Название «фундамен- 1 альный» связано с тем фактом, что, как мы докажем позднее, J<аждый цикл rрафа G можно некоторым eCTecTBeHHbIl\f спосо- бом получить из циклов множества <&. Введем для произволыIхx множеств А и В операцию А Е9 В === (А U В) "" (А n В). Множество А ЕВ В буде'М называть симметрической разностью множеств А и В. Отметим, что симметрическая разность множеств А 1 , ..., Ak содержит независимо от расстановки скобок в точности те эле- менты, которые появляются в нечстном числе множества A i . Действительно, это неТРУДIIО доказать I1ндукцией по k. Для k === 1 и k === 2 это, ОЧСВIfДНО, так. Для k > 2 наша СIIlметри- ческая разность имеет вид А ЕВ В, rде А является симметриче- ской разностью множеств А 1, ..., Ар, и В......... симметрической разностью множеств A p + 1 , ..., A p + q , rде р, q < k и р + q == k. Множество А Е9 В содержит в точности те элементы, которые появляются только в одном из MHO)l(eCTB А или В. Пользуясь индуктивным предположением, сделаем вывод, что А ЕВ В яв- ляется множеством тех элементов, которые ПОЯВЛЯIОТСЯ в He четном числе множеств IIЗ А 1, ..., Ар и в четном Чllсле из 'A P + I ' ..., A p + q , или же в нечетном числе множеств из A p + 1 , ... . . ., A p + q и в четном числе MHO)l(eCTB из А 1, ..., Ар. А это в 'fочности множество тех элементов, которые появляются в не- четном числе множеств из А 1, ..., А k. Из доказанноrо выше свойства следует, что мы можем опу- стить скобки в симметрическоЙ разности произвольноrо числа множеств и писать Al ЕВ А 2 Е9 ... ЕВ Ak. Множество С ребер rрафа называется псевдОЦllКЛОМ, если каждая вершина rрафа < V, С) имеет четную степень. Приме- 1) В этом разделе под циклом мы всеrда будем понимать элементарный ЦИКЛ, 
2.5. Отыскание Фундаментальноrо множества циклов в rрафе 99 ром псеВДОЦИI{ла является пустое множество и произвольный цикл rрафа. Лемма 2.7. Симметрическая разность произвольноzо числа псевдоциклов является Ilсевдоциклом. Доказательство. Очевидно, что достаточно рассмотреть слу" чай двух псевДОЦИКЛОВ С 1 и С 2 . Обозначим для произвольной вершины v через Sl (и) и 5 2 (и) множество ребер соответствен- но из С. и С 2 , инцидентных с и. Множества 51 (и) и 52 (и) имеют четную мощность, четной является также мощность множества ребер из С 1 ЕВ С 2 , инцидентных с и, так как (S 1 (и) ЕВ S2 (и) 1=== ===I S l(V) 1+15 2 (v) I 2(5 1 (v)П 5 2 (и) 1. 11 Теперь мы можем доказать теорему о фундаментальном MHO)l{eCTBe ЦIfI(ЛОВ. Теорема 2.8. Пусть G === < V, Е) ......... связный неориентирован.. ный zраф, а < V, Т)  ezo стяzивающее дерево. П роизвольный цикл zрафа G .IИОЖНО однозначно представить как симметри.. ческую разность HeKOTOpoZO числа фундаtентальных циклов. В общем случае проиЗВОЛЬНЫLl псевдоцикл С zрафа G МОЖНО однозначно выразить как С  ЕВ Се. eC "Т (2.1 ) Доказательство. Симметрнческзя разность Е9 Се являю- е е С"Т щаяся псевдоциклом в СIIЛУ предыдущей леммы, состоит из множества хорд С""Т и некоторых ветвей. Это вытекает из Toro факта, что каждая хорда е Е С"""Т принадлежит в точ- ности к одному фундаментальному циклу, а именно к Се- Мно- жество С ЕВ Е9 Се ееС"Т (2.2) является также в силу предыдущей леммы псевдоциклом, при.. чем он может содержать только ветви. Однако ни один непу.. стой псевдоцикл не может содержаться в Т, так как каждый непустой подrраф без циклов содержит вершину степени 1 (<<вн" сячую»). Отсюда следует, что множество (2.2) пустое, что экви.. валентно равенству (2.1). Однозначность представления (2.1 >: леrко следует из Toro, что цикл Се является единственным фун- даментальным циклом, содержащим хорду е (е Е E Т). 11 Теорема, которую мы доказали, имеет очень простую ин.. терпретацию в терминах линейных пространств. Пусть Е ==: :=== {el, ...  ет}. и каждому псев,цо.циклу С поставлен в coor.. 
100 2. Алrоритмы на rрафаж ветствие вектор <al, . . . , а т ), rде { 1, al=== О если ei Е С, в противном случае. Сумме таких векторов в предположении, что суммы координат берутся по модулю 2, соответствует симметрическая разность некоторых псевдоциклов. Лемма 2.7 утверждает, что векторы, поставленные в соответствие псевдоциклам, образуют подпро- странство m-мерноrо линейноrо пространства над двухэлемент- ным полем (состоящим из О и 1 с операциями сложения по мо- дулю 2 и умножения). OTl\1eTIfM, что ПРОllзвольная ЛIlнейная комбинация в пространстве над двухэлементным полем соот- ветствует симметрической разности, так как единственным не- нулевым элементом (коэффициентом) может быть только 1. В свою очередь теорема 2.8 rоворит, что фундаментальные ЦIIК- лы определяют базис нашеrо подпространства. Нахождение Фундамента.пьноrо множества циклов имеет су- u.{ecTBeHHoe значение при анализе электричеСКIIХ цепей. Точнее rоворя, каждому фундаментальному циклу в rрафе, соответ- ствующему данной электрическоЙ цепи, мы можем сопоставить уравнение, определяющее закон Кирхzофа для напряжений (см., например, [61]): сумма падеfIИя напряжений вдоль цикла рав- на нулю. Тоrда ни одно из этих уравнений не зависит от осталь- ны.х, от них же зависит произвольное уравнение, опредеЛЯlощее закон Кнрхrофа для произвольноrо цикла rрафа. Опишем теперь простой алrоритм нахождения множества фундаментальных циклов. Этот алrоритм основывается на по иске в rлубину и имеет структуру, аналоrичную рекурсивному алrоритму нахождения стяrивающеrо дерева (алrоритм 2.3). Каждая новая вершина, встречающаяся в процессе поиска, по- мещается в стек, представленный таблицей СТЕК, и удаляется из стека после использования. Очевидно, что стек всеrда со- держит последовательность верШIIН с рассматриваемой в дан- ный момент вершины v до корня. Поэтому же если анализируе- мое нами ребро {и, и} замыкает цикл (Т. е. WGN [и] > > WGN [и] > О и и не находится непосредственно под верхним элементом стека), то вершина и  также в силу теоремы 2.4  находится в стеке и цикл, замыкаемый ребром {и, и} представ- лен верхней rруппой элементов стека, начиная с v и кончая вершиной и. Алrоритм 2.9. (Нахождение множества элементарных цик- лов rрафа.) Данные: rраф G == (V, Е), представленный списками инци" Дентности ЗАП ИСЬ [и], v Е v. 
2.5. Отыскание Фундаментальноrо МПО}l{f:'стпа uиклоп n rрафе 101 Результаты: Множество элементарных циклов rрафа о. 1 procedure ЦИКЛ (и); (* нахождение фундаментальноrо мно)кества ЦИI{ЛОВ ДЛЯ компоненты СВЯЗНОСТII, содержащей вершину и; пере мен.. ные d, пит, СТЕК, ЗАПИСЬ, WGN........ rлобалыlеe *) 2 begin d:=== d + 1; СТЕК [d] :::=: и; nит: nuпl + 1; WGN [v] :=== nuпl; 3 for и Е ЗАП ИСЬ [v] do 4 if WGN [и] === О then /1. И КЛ (и) 5 е I se i f (и =1= СТЕК [{[ ........ 1] а nd ( W G N [v] > W G N [и]) then (* {v, и} заfыкает новый ЦIIКЛ *) 6 выписать ЦИКЛ с вершинами 7 СТЕК [d], СТЕК [d  1 ..., СТЕК[с], rдс ('ТЕК [с] == и; 8 d :d.......... 1 (* использованная вершина v удаляется из стека *) 9 end; (* ЦИКЛ *) 10 begin (* rлавная nporpaMMa *) 11 'от v Е V do WGN [и] :==0; пит:=== о; (* инициализация *) 12 d : о; СТ Е!( [о] :== о; (* d  число элементов в стеке *) 13 for v Е V do 14 if WGN [и] == О then ЦИКЛ (и) 15 end Оценим теперь вычислительную сло}{{ность этоrо алrоритма. Отметим сначала, что общее число шаrов, не считая выписы- вания циклов (строки 6, 7)  как и во всех аЛI"оритмах, осно- ванных на поиске в rлубину,  имеет порядок О (п + т). к это- му следует прибавить суммарную длину всех циклов. Эта дли- на не превосходит (т........ n + 1) n, что дает общую сложность алrоритма О(пт + п) (или О(пт), если отбросить вырожден.. ный случай т === О). 2.6. Нахождение компонент двусвязности Вершину а неориентированноrо rрафа G == (V, Е) будем называть точкой сочленения, если удаление этой вершины и всех инцидентных ей ребер ведет к увеличению числа компо- нент связности rрафа. Равнозначное утверждение состоит в том, что а является точкой сочленения, если существуют вершины v и и. отличные от а, такие, что каждый путь из и в и, а мы предполаrаем, что существует по крайней мере один такой путь, проходит через вершину а. Неориентированный rраф называет... ся двусвЯЗНblМ а если он связный и не содержит точек сочлене 
102 2. Алrоритмьt на rрафах (о) 11 (6)    .... :'\ .I': lJ 7 Q О 11 11'V 12 \ / I I и 12 \ / I I lJ 1 CJ 4 '\J/V B L)v 1з  1(;;11 V 8 (M) V 13 I I I I \ / ;'\и I 02 -V s I  \j9 :1: 13 "J V2. 05 12JI 11 и 14 I I 1,)U 14  ..... " I I / , I I . ( . из ) \:   .....  :J " / и 6 и 1о V 3 и 6 V 10 ..... ..... ..... Рис. 2.8. а). rраф с точками сочленения; б) Б.поки этоrо rрафа. ния. Произвольный максимальный ДI3усвязный подrраф rрафа G называется компоненТОЙ двусвязностu или БЛОКО.А,t этоrо rpa.. фа. Двусвязность rрафа  очень )I(елательный прпзнак для не.. которых при.пожениЙ. Представим себе, что вершины rрафа Ifзобра}l{ают узлы некоторой информационной сети, а ребра со- ответствуют линиям передачи. Если наш rраф двусвязный, ТО выход из строя отдельноrо узла w никоrда не приведет к по- тере соединения между любыми двумя узлами, отличными от w. Знание блоков rрафа таI(же очень Ba}l{HO, если принять во вни- мание то, что мноrие rрафовые задачн. такие как нахождение всех элементарных циклов или установление факта планаРНО4 сти rрафа (rраф называется планарным, если ero можно так начертить на плоскости. чтобы никакие два ребра не пересе- кались) , приводят естественным путем к аналоrичным задачам для блоков данноrо rрафа. Отметим, что t:СЛИ (V 1 .B 1 ), (V 2 ,В 2 )........дВа разных блока rрафа О. то V 1 n V 2  0 или V 1 n V 2 {a}, rде Q точка со- членения rрафа о. Действительно, рассмотрим подrраф (V 1 U V 2 , В 1 U В 2 ). Если было бы I Vl n V 2 1  2, то этот подrраф был бы двусвязным вопреки предположеНИIО о l\1аксимально- сти (V 1 , 81) И (V 2 , 82). Невозможен также случай V 1 n V2 =={а}. rде а не является точкой сочленения rрафа о. Ибо тоrда в G существует путь между вершинами и Е V 1 , и =1= а и v Е V 2 , V =1= а, не включающий вершину а. Нетрудно отметить, что под.. rраф, возникающий из (Vl U V2, В 1 U 82) добавлением вершин н ребер этоrо пути, будет двусвязным, что противоречит предположению о максимальности (V 1 , 81) и (V 2 , 82). На рис. 2.8 дэн пример. rрафа, имеющеrо точки сочленения и блоки. 
2.6. Нахождение компонент двусвязности 103 Нахождение точек сочленения и блоков rрафа является классическоЙ задачей. которую можно эффективно решить по- rружением в процедуру поиска в rлубину (см. Тарьян [66]). Прежде чем представить частный алrоритм, сделаем предва.. рительно несколько замечаний. Теорема 2.10. Пусть D == (V, Т) ......... СТЯ2иваЮlцее дерево с корнем r свЯЗНОёО zрафа G == (V, Е), построенное с nомощыо поиска в zлубину (аЛZОРllТМ 2.3). Вершина v Е V является точ" кой сочленения ёрафа G ТОёда и только ТОёда, КОёда либо v == r и r имеет по крайней мере двух сыновей в D, либо v =t= r и существует сын w BeplUUHbl v, такой что ни w, ни какойлибо е20 потомок не связаны ребром ни с одним npeaKO.At вершины и. Доказательство. Рассмотрим сначала случай v == '. Если вершина v имеет только одноrо сына (либо является изолиро- ванной вершиной), то ее устранение не увеличит числа компо- нент связности, ибо это не нарушает связности дерева. Если она IIмеет по меньшей мере двух сыновей, то после удаления вершины v эти сыновья лежат в разных компонентах связно- сти. ДеЙствительно, из теоремы 2.4 вытекает. что каждый путь между двумя различными сыновьями должен проходить через корень  в противном случае он содержал бы хорду {и, t}, rде ни и не является потомком t, ни t не является потомком и. Ава- лоrично, для случая v =1= (. Если после устранения вершины v существует путь от ее сына w до корня, то, как и в предыду- щем случае из теоремы 2.4, следует, что этот путь ДОЛ)l(ен со- дер)l(ать ребро, соединяющее w или HeKoToporo потомка вер.. шины w с некоторым предком вершины v. 11 Идея алrоритма следующая: ведем поиск в rлубllНУ в rpa.. фе, начиная снекоторой I!ершины (, вычисляя для каждой вер.. шины v два па раметр а: W G N [v] и L [v]. Первый из нllх......... это просто номер вершины v в порядке, в котором вершины посе щаются при поиске в rлубину, начиная с веРШIIНЫ '. Если че- рез D == (V, Т) мы обознаЧИJ\1 дерево, соотвеТСТВУЮlцее нашему поиску в rлубину, то ДРУI'ОЙ параметр определяет наименьшее значение WGN [и], rде и == v или вершина и связана хордой с вершиной v или ее произвольным потомком в D. Параметр L [v] леrко вычислить по индукции относительно дерева D, если мы знаем L [w] для всех сыновей w вершины v. Обозначив А == min {L [ш]: w....... сын вершины v}, В == min [WGN [и]: {u,v} Е Е'\. Т}, имеем L [v] == min {WGN [v], А, В}. Из теор.емы 2! 1 О следует) что р. является точкой сочленения 
104 2. Алrоритмьt на rрафах или корнем тоrда и только тоrда, коrда L(w]  WGN[v] для HeKOToporo сына u вершины v (полаrаем. что п > 1). Алrоритм 2.11. (НаХО}l{дение компонент двусвязности rpa.. фа) . Данные: [раф G === < v, Е) без изолированных вершин, пред- ставленный списками инцидеНТНОСТII ЗАЛ ИСЬ [о]. о Е v. Результаты: Множества ребер всех компонент двусвязности. 1 procedure ДВJlСВ (о, р); * поиск в rлубину, начиная с вершины v и полаrая, что р является отцом вершины о в этом процессе; параллельно выписываются ребра найденных компонент двусвязности; переменные пит, L, W G N, СТЕК......... r лобальные *) 2 begin пит:== пит + 1; WGN [0]:== пит; 3 L [v] :== WGN [v]; 4 и forE ЗАЛ ИСЬ [v] do 5 if WGN [и] === О then (* вершина п......... новая, {v, и}..... ветвь *) 6 begin СТЕК <= {v, и}; ДВУСВ (и, v); 7 L [v] :== min (L [v), L [и]); 8 if L [и]  WGN [v] then (*v есть корень или точка сочленения, а верхняя часть стека до {v, и} включительно содеР}l{ИТ компоненту ДВУСВЯЗНОСТИ *) 9 begin (* выписать ребра компоненты двусвязности *) 1 о repeat е <;:::: СТЕК; u'rite (е) 11 untll е == {о, и}; 12 write (';') (* знак конца компоненты Дву. связности .) 13 end ]4 end 15 else (* WGN [и] > о, Т. е. и Y)I{e была посещена.) 16 if (и =1: р) and (WGN [и] < WGN [и]) then (* ребро {а. и} ......... хорда и не включается в стек.) 17 begin СТЕК <;:::: {v, и}, 18 L[v]:==min(L[v]. WGN[u]) 19 end 20 end; (. ДВУСВ *) 21 begin (* rлавная проrрамма *) 22 for u е V do WGN [и] :== о; (* инициализация *) 23 CTEK:==(2J; пит:-==О; 24 for и е V do 25 if WGN [и] == О then ДВУСВ (и, О) 26 end 
2.6. Нахождение компонент двусвязности 105 Покажем теперь, что вызов процедуры ДВJlСВ(v, О) (строка 25) для еще не рассматривавшейся вершины v влечет за собой выделение и фиксирование всех блоков компоненты связности rрафа, содержащей вершину v. Доказательство ПРОВОДIIТСЯ ме... тодом индукции по ЧIIСЛУ блоков этой компоненты. Если ком- понента связности не содержит точек сочленения, то нетрудно отметить, что вызов ДВJlСВ (v, О) приводит К засылке в стек всех ребер этой компоненты, а затем (cc цикл 10) запись этих ребер. Предположим теперь, что наша компонента содержит k > 1 блоков и что алrОРIIТМ работает I(OppeKTHo для ПрОIlЗ- вольной компоненты, содеР)I<ащей менее k блоков. Рассмотрим первое I3стретившееся ребро {и, и}, такое что L[u]  WGN[v] в строке 8. Соrласно нашим предыдущим рассуждениям это не- равенство означает, что v......... ](орень ИЛII точка сочленения. Ни один из потомков вершины v (в дереве поиска в rлубину, реа- лизованном соответствующим алrоритмом) не является точкой сочленения, и в результате ребра верхней части стека до {v,u} включительно ЯВЛЯIОТСЯ ребрами rрафа, соединяющими потом- ков вершины v вместе с самой v, и тем самым создают блок, который выписывается в цикле 10. Модифицируем теперь нашу компоненту, удалив описанный выше блок (не удаляя верши- ну v). Модифицированная таким образом компонента имеет k  1 блок, и выполненение для нее процедуры ДВУСВ (v, О) вызывает в силу индуктивноrо предположения корректную запись этих блоков. Действия алrоритма для модифицирован- u u u U нои компоненты отличаются от деиствии в случае с исходнои компонентой только тем, что для первой встреченной точки со- членения (исходной компоненты) v цикл 4 не выполняется для вершин и. принадлежащих удаленному блоку. Отсюда леrко следует, что ДВУСВ (v, О) корректно определяет все k блоков нашей компоненты связности, а тем самым весь алrОРIIТМ кор- ректно определяет все блоки rрафа. Оценим теперь вычислительную сложность алrОРllтма. Цик- лы 22 и 25 треБУIОТ О (п) шаrов, причем для BToporo цикла не учитываются шаrи, выполняемые при вызове ДВУСВ (v, О) дЛЯ каждой еще нерассмотренной вершины. Такой вызов для ком- поненты связности с n; вершинами и т; ребрами требует О (n; + т,.) шаrов, не считая шаrов в цикле 10, так как такая процедура ведет в компоненте поиск в rлубину, требуя число шаrов, оrраниченное константой для каждоrо просматривае- Moro ребра. Каждое ребро удаляется из стека и попадает в список ребер блока в точности один раз, что дает в сумме О(т) шаrое, совершаемых циклом 10 во время ero выполнения Bcero алrоритма. Суммируя все эти слаrаемые, получаем в итоrе 06- шую сложность алrоритма 1 равную О(п + т). 
106 2. Алrоритмы на rрафаж 2.7. Эйлеровы пути Эйлеровым путем в rрафе называется произвольный путь, проходящий через каждое ребро rрафа в точности один раз. Т. е. путь Vl, ..., Vт+l, такой что ка}кдое ребро е Е Е появляется в последовательности Vl, ..., Vт+l В точности один раз как е == === {Vi, Vi+l} для HeKoToporo i. Если Vl === Vm+l, то такой путь на.. зывается эйлеРОВЫЛ,t цикло.lИ. Задача существования эйлеров а пути в заданном rрафе была решена Эйлером в 1736 r., и пред.. ставленное им необходимое и достаточное условие существова ния TaKoro пути (см. теорему 2.12) считается первой в истории теоремой теории rрафов. Теорема 2.12. Эйлеров путь в ёрафе существует ТОсда и толь- Ко ТОсда, КО2да ёраф связный и содержит не более чем две вер.. шины нечетной степена. Доказательство. Доказательство достаточности условия Teo ремы будет следствием анализа алrоритма нахождения эйлерова пути, который мы опишем в данном разделе. Необходимость условия очеВlIдна, так как если вершина v, отличная от Vl и Vт+l, появляется в эйлеровом пути Vl, ..., Vm+l k раз, то это означает, что степень этой вершины в rрафе составляет 2.. Отсюда следует, что вершины нечеТIIОЙ степени, если они cy ществуют, являются концами эЙлеров а пути. Здесь следует от... метить, что не суп!ествует rрафов с одной только вершиной не.. четной степени. ДеЙСТВlIтельно, обозначая степень вершины  через d(v), имеем L d (v) === 2т, veV ибо в указанной выше СУ1\1ме каждое ребро {и, v} считается дважды: один раз в d(u) и один раз в d(v). Отсюда следует, что число вершин нечетной степени всеrда четно. _ Если в связном rрафе нет вершин нечетной степени, то каж u u U дыи эилеров путь является циклом, так как концы эилерова u пути, не являющеrося циклом, всеrда вершины нечетнои CTe пени. Предположим, что и и v........ единственные вершины нечет ной степени связноrо rрафа G == < V, Е), и образуем rраф О* дО.. бавлением дополнительной вершины t и ребер {и, t} и {v. t} (или просто {и, v}, если {и, v} Ф. Е). Тоrда о*......... связный rраф. без вершин нечетной степени, а эйлеровы пути в G будут в оче... видно взаимно однозначном соответствии с эйлеровыми ЦИК'" лами в О*. В силу этоrо в оставшейся части данноrо раздела мы будем заниматься только эйлеровыми циклами.. 
2.7. Эй",еров ы пути 107 Алrоритм 2.13 (Нахо}кдение эйлеровоrо цикла). Данные: Связный rраф G  < V, Е) без вершин нечетной CTe пени, представленный списками ЗАПИСЬ [v], v Е v. Результаты: Эйлеров цикл, представленный последователь.. ностью вершин в стеке СЕ. 1 begin 2 СТЕК:=== 0; СЕ:=== 0; 3 v :=== произвольная вершина rрафа; 4 СТЕК <;= v; 5 while СТЕК =F g do 6 begin v:=== 'ор (СТЕК): (* v === верхний элеlент стека *) 7 if ЗJtпиеь[v] =1= 0 then 8 begin u:== первая вершина списка ЗАП НСЬ [v]; 9 СТ ЕК -*= и; (* удалить ребро {v, и} из rрафа *) 10 ЗАП не ь [v] :=== ЗАЛ l1СЬ [v] " {и}; ЗАП НСЬ [и] :== ЗАП НС Ь [и] " {v}; 11 v :=== и 12 end 13 else (*ЗАПИСЬ[v]==0*) 14 begin v-*=CTEK; CE<;=v 15 end 16 end 17 end Принципы действия алrОрIlТlа МО}КIIО оБЪЯСНIIТЬ следующим об разом: пусть Vo......... вершина, выбранная в строке 3. ЦIIКЛ 5 начи- нает строить путь с IIачаЛО:Vl в vo, причем вершины этоrо пути помещаются в СТЕК. а ребра удаляются из rрафа. ЭТII действия продолжаются вплоть до Toro момента, коrда путь нельзя удли- нить, включив в Hero новую вершину, Т. е. коrда ЗАПИСЬ[v]=== === е5 в строке 7. Отметим, что тоrда ДОЛ}l{НО быть v  vo, так как в любом друrом случае это означало бы, что степень вер-- шины v нечетная. Таким оuразом, нз нашеrо rрафа UЫЛ удален цикл, а веРШlIlIЫ этоrо цикла находятся в стеке CTEJ\. Отметим, что в rрафе, модифицированном таКIIМ способом, степень произ- вольной вершины останется четной. Вершина v === Vo переносит... ся теперь из стека СТ Е К в стек СЕ, а «очередной» веРШlIlIОЙ и становится верхний элемент стека СТЕК. Процесс повторяется, начиная с этой вершины (еСЛIl ЗАПИСЬ [v] =1= е5), I3 результате чеrо вследствие четности степени всех вершин находится и по... мещается в стек СТЕК некоторый цикл, проходяuиЙ через вер... шину v. Это продолжается до Toro момента, коrда СТЕК не станет пустым. Очевидно, что вершины, помещаеМbIе в стек СЬ", образуют некоторый путь, причем вершина v переносится в стек .СЕ только тоrда, коrда ЗАПИСЬ[v]==fO. Т. е. коrда все ребра, 
108 2. Алrоритмы на rрафах инцидентные с этой вершиной, представлеllЫ (парами соседних вершин) в одном из стеков. Отсюда леrко следует, что по окон- чании алrоритма стек СЕ содержит эйлеров ЦИI{Л. Оценим теперь вычислительную сложность нашеrо алrорит- Ма. Для этоrо отметим, что каждая итерация rлавноrо цикла (строка 5) либо помещает вершину в стек СТЕК и удаляет ребро нз rрафа, либо переносит вершину из стека СТ Е К в стек СЕ. Таким обраЗОl\I, число итераций этоrо цикла....... О (т). В CBOIO очередь число шаrов в каждой итерации оrраничено константоЙ. 4 1 9 7 1, 2, 3, 4, S, 6, 7, 2, 8, 6J 9, 7, 8; 5, 3, 1 . Рис. 2.9. rраф и эйлеров ЦИКЛ D ЭТОМ rрафе, наiiденный с ПОМОЩЬЮ алrорит- м а 2.13. Мы предполаrаем здесь. что каждый из списков инцидеllТНОСТII ЗАПИСЬ [v], v Е V, реализован таким образом, что каждая вершина в этом списке содержит указатели на предыдущую и последующую вершины, и вершина и в списке ЗАПИСЬ[v] со- держит указатель на вершину v в списке ЗАПИСЬ [и]. Это дает возможность устранить ребро {v. и} (строка 10) за время, orpa.. ничеlll-lое константой (см. разд. 2.1). Из приведенных выше рас.. суждений можно сделать вывод, что общая сложность алrоритма есть О (т). Очевидно, что этот алrОРИТl\1 оптимальный, так как уже одно выписывание эйлерова цикла требует Q (т) ШаrоВ. На рис. 2.9 представлен rраф и некоторый эйлеров цикл. наЙ денный алrоритмом 2.13. 2.8. Алrоритмы с возвратом Рассмотрим теперь задачу, рассмотренную в предыдущем параrрафе, с той разницей, что на этот раз нас будут интере.. совать пути. проходящие в точности один раз через каждую вершину (a не каждое ребро)... данноrо rрафа. Эта небольшая, 
2.8. Алrоритмы с возвратом 109 I(aK моrло бы показаться, модификация приводит, как мы убе.. димся, к значительному изменению характера проблемы. ВСПОМ ним, что путь с указанным свойством называется rамильтоновым путем (rамильтонов цикл определяется очевидным образом)" Пример rамильтонова пути в rрафе и rрафа, в котором TaKoro пути не существует, показан на рис. 2.10. (а) (6) Рис. 2.10. а) rаМИЛЬТОIIОВ ПУ-ТЬ в rрафе; 6) [раф, в котором не существует rамильтонова ПУТИ. в отличие от эйлеровых путей не известно ни одноrо про- cToro необходимоrо и достаточноrо условия для существования rамилыоновых путей и это несмотря на то, что эта задача........ одна из центральных в теории rрафов. Не известен также алrо.. ритм, который проверял бы существование rамильтонова пути в произвольном rрафе, используя число шаrов, оrраниченное мноrочленом от переменной п (числа вершин в rрафе). Имеются некоторые основания, но нет мате1аТllческоrо доказательства Toro, чтобы предполаrать, что такое положение вещей вызваНо не столько нашим незнанием, а скорее тем фактом, что TaKoro алrоритма не существует. Проблема существования rамильто- нова пути принадлежит к классу так называемых N РпОЛНblХ эадач [27]. Детальное обсуждение этих задач выходит за рамки этой книrи. Отметим здесь только, что это........ широкий класс за- дач, включающий фундаментальные задачи из теории rрафов, лоrИI{И, теории чисел, дискретной оптимизации и друrих дисцип- u u лин, ни для одном из которых неизвестен полиномиальныи алrо.. ритм (т. е. с числом шаrов, оrраниченным полиномом от размер- ности задачи), причем существование полиномиальноrо алrорит- ма для хотя бы одной из них автоматически влекло бы за собой существование полиномиальных алrоритмов для всех этих задач. Именно факт фундаментальности мноrих N Р-полных задач в различных областях и то, что, несмотря на незаВlIсимые друr от друrа усилия специалистов в этих областях, не удалось найти полиномиальноrо алrоритма ни для одной из этих задач, скло- няет к предположению, что TaKoro алrоритма не существует. Вернемся к конкретной задаче существования rамильтонова .пути. Очевидный алrоритм, который мы можем применить, это 
110 2. Алrоритмы на rрафах <полный перебор всех возможностей»: rенерируем все пl раз. u u ЛИЧНЫХ последовательностеи вершин и для каждои из них про.. веряем, определяет ли она rамильтонов ПУТЬ. Такие действия треБУIОТ по меньшей мере п!п шаrов, но функция от n подобноrо вида растет быстрее, чем произволыlйй мноrочлен, и даже бы.. стрее, чем произвольная экспоненциальная функция вида а п . а> 1, ибо 1l!п > Ln/2J Lп / 2J == a Ln / 2J log a Ln/2J. Опишем теперь общий метод, позволяющий значительно со. KpaTIITb число Ulзrов 13 з.пrОРlIтмах Тllпа по.пноrо псrебора всех возмо)кностей. Чтобы ПРlIменить этот 1eTOД, IIскомое решеllllе ДОЛ)l{НО иметь I3ИД последоватеЛЬНОСТII (Xl, ..., Х п ). Основная идея метода состоит в том, что мы строим наше решение после... довате.пьно, начиная с пустой последовательности е (длины О). Вообще, имея данное частичное решение (Xl, ..., Xi), мы ста.. раемся найти такое ДОПУСТIIмое значение Xi+l, ОТНОСlIтельно ко... Toporo мы не можеi\f сразу заКЛЮЧIIТЬ, что (Xl, ..., Xi. Xi+l) IОЖIIО расширить ДО HeKoToporo решения (либо (Xl, ..., Xi+l) уже является решением). Если такое предполаrаемое, но еще не использованное значение Xi+l существует, то мы добавляем ero к нашему частичному решеllИIО и продолжаем процесс для последовательности (Xl, ..., Xi, Xi+l). Если ero не существует, то мы возвращасмся к нашему частичному решению (Xl, ... . . ., Xil) И продолжаем lIаш процесс, отыскивая IIовое, еще не , ИСПОЛЬЗОI3анное ДОПУСТllмое значеНllе X i ........ отсюда название «алrОРIlТМ С возвратом» (анrл.: backtracking). Точнее rоворя, мы предполаrаем, что для каждоrо k > О су... ществует некоторое множество A k , из KOToporo мы будем вы... бирать кандидатов для k-й координаты частичноrо решения. Очевидно, что множества Ak должны быть определены таким образом, что для каждоrо целочисленноrо решения (XI, ..., Х n ) нашей задачи и для каждоrо k  п множество Ak содержало элемент Xk (на практике мь! не можем вообще исключить си... туацию, I{оrда множество Ak содержит некоторые «лишние» эле... MeHTbI, не появляющиеся в k-й координате ни одноrо целочис.. ленноrо решения). Мы предполаrаем также, что существует He которая простая функция, которая произвольному частичному решению (Xl, ..., Xi) ставит в соотвеТСТВllе значение Р (Xl, ... .. о, Xt) (истина либо ЛОЖЬ) таким образом, что если Р (Xl, ... . . ., Xi) == ЛОЖЬ, то последовательность (Xl, ..., Xi) несомнен.. o нельзя расширить до решения. Если Р (XI, ..., Xi) == истина то мы rоворим, что значение Xi допустимо (для частичноrо реше- нИЯ (XI, ..., Xi.....l». но это отнюдь не означает, что (Ха, ... J Xil) 
2.8. Алrоритмы с возвратом 111 обязательно расширяется до полноrо решения. Этот процесс можно записать в виде следующей схемы: 1 2 3 4 5 6 begin k :== 1 ; while k > О do if существует еще неиспользованный элемент у Е A k , такой что Р (Х [1], ..., Х [k  1], у) then begin Х [k] :== у; (* элемент у использован *) if(X[I], ..., X[k]) является целочисленным реше.. нием then write(X[I], ..., X[k]); k :== k + 1 end else (* возврат на более короткое Ч1СТИЧНО решение; все элементы множества Ak вновь становятся неиспользованными *) k :=== k  1 7 8 9 10 1 1 12 end Этот злrоритм находит все решения в предположении, что множества Ak конечные и что существует n, такое что Р (Хl, ... . . ., Х n ) == ложь для всех Xl Е А 1 , ..., Х п Е А п (последнее усло- вие означает, что псе решения имеют длину меньше n). Пока... жем наличие более общеrо свойства: Пусть 5 > О, 1I пусть (Хl, ..., XSl>  некоторое частичное решение, построенное а.пrоритмом. Рассмотрим первую итера- цию цикла 3, для которой k == 5, Х [i] == Xi, 1  i  5. Начиная с этой итерации, алrоритм rенерирует все целочисленные реше- ния, являющиеся расширением последовательности (Хl, ..., XSl), И приходит к состоянию, коrда k === 5  1. Очевидно, что для s == 1 приведенное выше свойство ознз", чает просто корректность алrоритма. Доказательство этоrо свой.. ства в общем виде проводится по индукции «назад» относитель- но 5. Оно имеет место для s === n, потому что не существует ни одноrо допустимоrо элемента для (Хl, ..., XSl> И сразу же вы- полняется второе условие условноrо оператора в строке 10, т. е. переменная k принимает значение s  1. Предположим теперь праВIIЛЬНОСТЬ нашеrо свойства для HeKoToporo 5 > 1. Покажем ero правильность для 5  1. Пусть (Хl, ..., XS2>  произволь- ное частичное решение, построенное нашим алrоритмом; рас- смотрим первую итерацию цикла 3, для которой k == 5  1, Х [i] === Xi, 1  i  5  1. Если существует элемент у, допусти- мый для (Xl, ..., XS2>, то построение дает частичное решение (Xl, ..., Xs2, у) (строка 5) и переменная k принимает значение s (строка 8). Затем соrласно нашему индуктивному предполо.. жению будут сrенерированы все решения, являющиеся расши... 
112 2. Алrоритмы на rрафах рением последовательности (Хl, ..., Xs....2, и), и мы приходи м К состоянию, коrда k == s......... 1, после чеrо процесс повторяется для следующеrо неиспользоваНIIоrо элемента у, допустимоrо для (Хl, ..., X s ....2) , пока не будут использованы все такие элементы (такая ситуация может появиться сразу с caMoro начала). Пе 4 ременная k уменьшается тоrда на 1 и принимает значение s  2 (строка 11). Из приведенных выше рассуждений следует, что алrОРIIТМ правильно порождает все решения, являющиеся рас.. ширеllием последовательности (Хl, ..., Xs....2) , что завершает до" казательство шаrа индукции. Доказанное нами свойство приводит непосредственно к еле.. дующему простому и очевидному рекурсивному варианту схемы алrоритма с возвратом: 1 procedure АР (k); (* rенерирование всех решений, являющихся расширением последовательности Х [1], ..., Х [k ......... 1]; массив Х  rлобальный *) 2 begln 3 for у Е Ak TaKoro, что Р (Х [1], ..., Х [k ......... 1], у) do 4 begin Х [k] :== у; 5 If Х [1], ..., Х [k] есть целочисленное решение then 6 write(X [1], ..., Х [k]); 7 АР (k + 1) 8 end 9 end rенерирование всех uелочисленных решений можно вызваТlJ вызовом АР(I). Представление алrоритма с возвратом мы на 4 чали с несколько более сложноrо нерекурсивноrо варианта толь.. Ко потому, что в рекурсивном варианте «возврат» не появляется в явном виде, будучи частью реализации механизма рекурсии. Применим теперь алrоритм с возвратом для нахождения ra. мильтонова цикла в rрафе G === (V, Е). Каждый такой цикл можно представить последовательностью (Хl, Х2, ..., Х п +l), при. чем Хl === Х п +l == VO, rде Vo  некоторая фиксированная вершина rрафа, Xi........ Xi+l для 1  i  n и Xi =t= Х/ дЛЯ 1  i < j  n. СО4 rласно этим условиям мы можем положить: Ak == V J Р (Хl' ... J Xk....l' у)  у Е ЗАПИСЬ [Xk--l] Л у Е {Xl, '." Xk--l}. Алrоритм 2.14. (Нахождение всех rамильтоновых циклов в rрафе.) Данные: rраф G == (V, Е). представлеНIIЫЙ списками ИНЦll деНТlIОСТИ 3АПИGЬ[v], v Е V& 
2.8. Алrоритмы с возвратом 113 Результаты: СПIIСОК всех rаМIIЛЬТОНОВЫХ циклов rрафа а.. 1 procedure r АМИЛ ьт (k); (* rенерирование всех rаМИЛЬТОIIОВЫХ циклов, являющихся расширением последовательности (Х [1], ... J Х [k ......... 1 ]); массив Х  rлобальный *) 2 begin 3 for УЕ3АПИСЬ[Х[k 1]] do 4 if (k == n + 1) and (у == vO) then write (Х [1], ..., х [1Z], vO) 5 else if DOP [у] then 6 begin Х [k] :== у; DOP [у] :== ложь; 7 rАМJ1ЛЬТ(k+ 1); 8 DOP [у] :== истина 9 end 10 end; (*rАМИЛЬТ*) 11 begin (* rлавная проrрамма *) 12 for v Е V do DOP [v] :== истина: -(* инициализация *) 13 Х [1]:== vO; (* vO === произвольная фиксированная вершина rрафа *) 14 DOP [vO] :=== ложь; 15 rАМИЛЬТ(2) 16 end Работу этоrо алrоритма, так же как и произвольноrо алrо. ритма с возвратом, можно ПРОlfллюстрировать процессом поиска в некотором дереве. Каждая веРШlIна дерева естественным об. разом соответствует некоторой последовательности (Xl, ... t Xk)1 причем вершины, соответствующие последовательностям вида (Xl, ..., Xk, у), являются сыновьями этой вершины (корень со.. ответствует пустой последовательности е). Рассмотрим полное дерево D. состоящее из всех возможных последовательностей вида (Хl, ..., Xk), rде О  k  n и Xi Е A i для 1  i  k, и вре. менно допустим, что каждый элемент у Е Ak является допусти мым для (Xl, ..., Xk.....I), если k  п, и ни один элемент не яо.. ляется допустимым для (Xl, ..., Xkl), если k > п; друrими ело... вами, { истина, р (х 1 , ..., Xk__l' Xk) === lIОЖЬ, если k  n, если k > n (Xi Е A i для 1  i  k). Тоrда нетрудно отметить, что вызов АР (1) вызывает поиск в rлубину во всем дереве D (начиная от корня е). Для случая менее тривиальной функции Р, определяю.. щей допустимость вершин, процесс поиска «опускает» paCCMOT рение вершин поддерева с корнем в каждой встреченной «Недо.... пустимой» вершине (т. е. вершине, соответствующей последова... :rельности (XI,. . ., Xk), для которой Р (Xl, ... J Xk).=== J10ЖЬ). 
11 . 2. Алrоритмы на rрафзХ! 1 2 1 3 4 1 1 1 1 1 Рис. 2.11. [раф и дерево, иллюстрирующие алrоритм С возвратом наХО)l{дения всех rамильтоновых циклов в эТ-ом rрафе. в этом, собственно rоворя, заключается эффективность алrо ритма с возвратом в отношении полноrо перебора всех возмож- ностей. Для алrоритма 2.14 это иллюстрируется рис. 2.11. Следует отметить, что для большинства приложений число шаrов алrоритма с возвратом хотя и будет меньше, чем в слу.. чае полноrо перебора, однако же в наихудшем случае растет по экспоненте с возрастанием размерности задачи. Это справед- ливо и для случая, коrда мы ищем только одно, а не все ре.. шения (тоrда мы просто прерываем выполнение алrоритма после получения первоrо решения; отметим, что, коrда задача не имеет решения, эта модификация Не влияет на ход выполне.. ния алrоритма). 2.9. Задачи 2.1. Доказать, что для произвольноrо неориентированноrо rpa фа матрица смежности В выражается через матриuу инци" дентности А следующим образом: В  АА т ......... diag [d 1 , ..., d n ], rде А т есть транспонированная матрица А, di......... степень i-й вершины, diag [d I , ..., d n ]  матрица размера п Х n с элементами dl, . ..., d n на rлавной диаrонаЛlI. 2.2. Для произвольноrо неОрllентированноrо rрафа определим .матрицу соседства ребер С  [Cij], rде Cij === 1, если i..e и и j-e ребра инцидентны с общей вершиной, 11 Со  О в про... тивном с.пучае (ПрИНИl\1аем Си === О). Как можно .выразить ы1трицуy С через матрицу IIнцидентности? Определяет ли 
2.9. Задачи 115 laTpllua соседства ребер rраф с точностью до изомор- физма? 2.3. Представить детальную реализаЦИIО списков ИНЦИДент" ности и процедур удалеНIIЯ и добавления ребер за время, оrраничеВllое константой (следует помнить, что при удале- НIIИ ребра {и, и} необходимо удалить соответствующие эле- менты из обоих списков ЗАПИСЬ [и] и ЗАПИСЬ [v]; мы предполаrаем у что указатель на ОДИН из этих элементов представ.пеll как параметр процедуры). 2.4. НаПllсать проuедуры перехода между каждыми двумя спо.. собаМII представлеНIIЯ rрафа, описанными в разд. 2.1, и оце- нить ВЫЧIIСЛIlТСЛЫIУЮ сложность указанных процедур. 2.5. Некоторые rрафовые аJlrоритмы используют только О (п) или О (п + ,п) из п 2 элементов матрицы смежности В. В то )I{e время в начале алrоритма следует инициализация всех э.пеIентов матрицы В, в результате чеrо сложность аЛIОрllтма автомаТIJчеСКII становится равноЙ Q (п 2 ). Пред... ложить способ, позволяющий избежать столь дороrую ини'" ЦllализаЦIlIО. Указание: для ка}кдоrо элемента bij, использо.. BaHHoro алrОРllТМОМ первый раз, помещаем в стек указа... тель на этот элеrvlент, а при bij размещаем указатель на соз... данный TaI{I1M образом новый элемент стека. Чтобы прове рIIТЬ, был Лll данный элемент инициализирован ранее, до- статочно посмотреть, ведет ли указатель при bii к указа... телю в стеке, определяющему возврат к Ьи) [1]. 2.6. Пред.пожить алrОРIIТМ СЛО)l(НОСТИ О (п) проверки, содержит ЛII данный ОРllентированный rраф, заданный Iатрицей смежности, вершину, к которой примыкают дуrи от осталь.. ных п........ 1 вершин и из I{ОТОРОЙ не исходит ни одна дуrа (такой алrоритм показывает, что условие (в) в теореме 2.1 существенно) . 2.7. Исследовать метод, отличающийся от поиска в ШIIРИНУ только тем, что вновь достиrнутая вершина помещается в стек (такоЙ алrорвтм описывается в точности процедурой \\75, в которой ОЧЕРЕДЬ заменена на СТЕК) [35]. 2.8. Исследовать метод поиска в rрафе, при котором посещен... ные, но еще неиспользованные вершины помещаются в оче-4 редь, и I(ОТОРЫЙ точнее можно описать следующим спосо.. бом: рассматриваем последнюю (позже всех помещенную): вершину v из очереди (вначале это будет произвольная вер... шина rрафа). Если существует новая вершина и Е Е ЗАПИСЬ [v], то мы помещаем ее в конце очереди-и повто.. ряем процесс до тех пор, пока помещенная в очередь вер.. шина не имеет новых соседей (этот фраrмент напоминает поиск в rлубину). Затем исследуем первую (раньше Bcero помещенную) вершину из очереди. Если У. этой вершины . - 
116 2. Алrоритмы на rрафаz о существует новыи сосед, то мы ставим ero в конец очереди и повторяем для этой вершины описанный выше процесс поиска в rлубину. В противном случае первая вершина из очереди использована, и мы убираем ее из очереди, а затем рассматриваем следующую за ней вершину. Весь процесс повторяется до тех пор, пока очередь не будет пустой. Представить детальную реализацию даНllоrо метода. 2.9. Доказать, что приведенная ниже процедура просматривает каждую вершину rрафа в ТОЧНОСТII один раз. procedure Л оиск (r); (* вначале СТАТУС [v] == новый для каждой v Е V *) begin посетить '; СТ АТJlС [r] :== посещенный; while СУIцествует в V посещенная вершина do begin v:== произвольная посещенная вершина; if существует новая и Е ЗАЛ ись [v] then begin u:== первая новая вершина списка ЗАПИСЬ [v]; посетить и; СТ АТJlС [и] :=== посещенная end els(. СТАТУС [v] :=== использованная end end Показать, что поиск в rлубину и в ширину, а также ме- тоды, описанные в задачах 2.7 и 2.8, можно рассматривать как частные случаи этой процедуры. 2.10. Пусть D == (V, Т) ......... подrраф связноrо rрафа G == (V, Е). Доказать, что следующие условия эквивалентны: (а) D является стяrивающим деревом rрафа о. (б) I т 1== 1 V 1......... 1 и D не содержит циклов. (в) Для каждой пары вершин и, v Е V существует в D точности один путь из и в v. (r) I т 1== I V 1......... 1 и для каждой пары вершин и. v Е V су" ществует в D хотя бы один путь из и в v. (д) I Т 1== 1 v 1......... 1 и для каждой пары вершин и, v Е V су- ществует в D не более чем один путь из и в v. 2.11. Рассмотреть детальнее метод поиска в rлубину для ориен", тированных rрафов, упомянутый в конце параrрафа 2.2. Показать, что если в ориентированном rрафе G существует путь из вершины r к каждой друrой вершине, то алrоритм 2.3 (измененный так, что в строке 5 добавляется дуrа (v, и») строит подrраф < V, Т), который при иrнорировании ориентации дуr является стяrивающим деревом rрафа о. Показать, что в (V, Т) существует в точности один путь из , к каждой вершине v Е v. Можно ли перенести теорему  
2.9. Задачи 117 2.4 на ОРllентированные rрафы? Как следовало бы ее тоrда IIзменить? 2.12. Рассмотреть детальнее метод поиска в ширину в ориенти- рованном rрафе. Показать, что если в ориентированном rрафе G существует путь нз вершины , к каждой друrой вершине, то алrоритм 2.5 находит подrраф (V, Т), содер- жащиЙ в точности однн путь из r к каждой друrой вер- ШlIне, причем это кратчайшнй путь в о. 2.13. Используйте поис}( в rлубину для нахождения в связном rрафе неОРllентиропанноrо цикла (с повторяющимися реб.. рамп и вершинами), проходящеrо каждое ребро в каждом направлеНИJt в ТОЧНОСТII один раз. 2.14. Мостом rрафа G наЗЫDается каждое ребро, удаление ко- Toporo приводит к увеличению числа связных компонент rрафа. Представить алrоритм нахождения всех мостов rрафа за время О (т + п). (Указание: используйте поиск в rлубину как в случае ОТЫСI(ания точек сочленения.) 2.15. rраф G  (V, Е) называется двудольным, если существует разбиение V == А U В, А n В === }О, такое что каждое ребро е Е Е имеет вид е ==={а, Ь}, а Е А, Ь Е В. Доказать, что rраф является двудольным тоrда и только тоrда, коrда он не содержит простых циклов нечетной длины. Предложить два алrоритма, проверяющих, будет ли данный rраф дву" дольным, за время О(т + п)......один, основанный на по.. иске в rлубину, друrой  на поиске в ширину. 2.16. Написать алrорИТМ, проверяющий за время О(т + п) ацикличность данноrо ориентированноrо rрафа. 2.17. Ориентированный rраф называется сильно связным, если для каждой пары вершин и и v существует путь из и в и. Под КОАtnонентой сильной связности понимается произволь.. ный максимальный сильно связный подrраф. Показать, что компоненты сильной связности определяют разбиение MHO жества вершин lIа непересекающиеся непустые подмноже.. ства. Написать алrорнтм нахождения компонент сильной связности за время О (т + п). (Указание: использовать поиск в rлубину.) 2.18. Написать алrоритм нахождения за время О(с(т + n»' всех простых контуров ориентированноrо rрафа, rде с  число контуров. (Указание: использовать поиск в rлубину.) 2.19. Предложить необходимое и достаточное условие существо- вания эйлеровых контуров в ориентированном rрафе (иден- тичное условию для неориентированных rрафов). Показать, что алrоритм 2.13 (после удаления строки 9) правильно строит эйлеров контур для ориентированноrо rрафа. 2.20. Циклом де Брёйна порядка п называется циклическая БИ<4 нарная последовательность длины 2 n , в которой каждая из . 
118 2. Алrоритмы на rрафа 2 n бинарных последовательностей длины n выступает как подпоследовательность п последовательных членов. ДOKa зать существование цикла де Брёйна порядка n для каж. доrо n  1. (Указание: рассмотреть rраф, вершины кото.. poro соответствуют бинарным последовательностям длины п....... 1. а каждое ребро соответствует БIlна рной последова.. тельности длины п, причем ребро bl ... Ь п ведет от b 1 ... . .. bпl к Ь 2 ... Ь п . Доказать существование эйлерова пути в таком rрафе [8].) 2.21. Изменить представленную в  2.8 схему алrоритма с воз" вратом так, чтобы он определял только ОДIIО решение, а не Все. 2.22. Доказать, представив соответствующие rрафы, что число шаrов в алrоритме 2.14 (в наихудшем случае), pacTer экспоненциально с ростом n. 2.23. Использовать алrоритм с возвратом для решения следую. щих задач: (а) Нахождение размещения 8 взаимно не нападающих друr На друrа ферзей на шахматной доске. (б) НахождеНllе клики наибольшей мощности в неорпенти" рованном rрафе. (Кликой называется произвольное ПОД" множество вершин, в котором каждая пара различных вер" шин соеДlIнена ребром rрафа.) (в) Нахождение paCJ{paCKII вершин rрафа минимаЛЬНЫf числом цветов так, чтобы НII одно ребро не соединяло двух вершин одноrо цвета. (r) Для данных целых чисел аl,"., а п , Ь нахождение множества индексов J  {1, ..., n}, TaKoro что L aJ === Ь, /е' если такое множество J существует. (д). Установление изоморфизма двух rрафов. 
з. Нахождение кратчайших в rрафе  путеи 3.1. Начальные понятия в этой rлаве мы будем рассматривать ориентированные rрафы G == (V, Е), дуrам которых приписаны веса. Это озна чает, что каждой дуrе (и, v) Е Е поставлено в соответствие не.. которое вещественное число а (и, v), называемое весом данной дуrн. Полаrаем, кроме Toro, что а (и, v) === 00, если и --;.. v. Если последовательность вершин V o , V 1, ... J V Р (3.1 ) определяет путь в а, то ero длина определяется как сумма р L а (Vl-- 1 , Vt). i с:;; 1 :(Отметим. что если в произвольном rрафе мы примем вес каж.. дой дуrи равным единице, то мы получим обычное определение длины пути как числа дуr; как ирансе, принимаем, что длина пути равна О при р  о.) Нас будет интересовать нахождение кратчайшеrо пути между фиксированными вершинами 5, t Е У.. Длину TaKoro кратчайшеrо пути мы будем обозначать d(s, t) и называть расстоянием от s до t (расстояние, определенное та.. ким образом. MO)l(eT быть отрицательным). Если не существует ни одноrо пути из s в t, то полаrаем d(s, t) == 00. Отметим, что если каждый контур нашеrо rрафа имеет положительную длину, то кратчайший путь будет всеrда элеIентарным путем, т. е. в последовательности (3.1) не будет повторов. С друrой стороны, если в rрафе существует контур отрицательной длины, то pac стояние между некоторыми парами вершин становится неопреде ленным, потому что, обходя этот контур достаточное число раз. мы можем показать путь между этими вершинами с длиной, меньшей ПРОlIзвольноrо вещественноrо числа. В таком случае можно было бы rоворить о длине кратчайшеrо элементарноrо пути, однако задача, поставленная таким образом, вероятно бу.. дет значительно более сложной, так как, в частности, она содер.. ЖIIТ в себе задачу существования rамильтонова пути (см. за дачу 3.1), 
120 3. Нахождение кратчайших путей в rрафе Можно дать MHoro практичеСКIIХ IIнтерпретациЙ задачи о кратчайших путях. Например, вершины MorYT соответствовать rородам, а каждая дуrа......... некоторому пути, длина KOToporo представлена весом дуrи. Мы ищем затем кратчайшие пути ме.. )кду rородами. Вес дуrи также может соответствовать стоимости (или времени) передаЧII информации ме)l(ДУ веРШlIнами. В та.. ком случае мы ищем самый дешевый (или самыЙ СI{ОРЫЙ) путь передачи информации. Еще одну ситуацию мы получаем, коrда вес дуrи (u,v) равен веРОЯТНОСТII p(u,v) безаварийной работы канала передачи информаЦIlII. ЕСЛIl предположить, что аварии каналов не зависят друr от друrа, то вероятность IIсправности пути передаЧII информации равна ПРОIlзведению вероятностей составляющих ero дуr. Задачу нахождения наиболее надежноrо пути леrко .10ЖНО свести к задаче о кратчайшеl\'1 пути, заменяя веса р (и, v) на а (и, v) == .........log р(и, и). Еще с одним приложением задачи о кратчайшем пути мы познакомимся в разд. 3.4. В данном разделе мы даДIIМ алrоритмы нахождения расстоя ния между веРШlIнами, а не самих путей. Однако, зная расстоя- НИе, мы можем при условии положительной длины всех контуров леrко определить кратчайшие пути. Для этоrо достаточно отме- тить, что для произвольных 5, t Е V (s =1= t) существует вершина v, такая что d(s, t) == d(s, и) + a(v, '). Действительно, таким свойством обладает предпоследняя вер... шина произвольноrо кратчайшеrо пути из s в t. Далее мы мо- жем найти вершину и, для которой d(s,v)==d(s,u)+a(u,v). н Т. д. Из положительности длины всех контуров леrко следует, что созданная таким образом последовательность t, v, и, ... не содержит повторений и оканчивается вершиной s. Очевидно, что она определяет (при обращении очередности) кратчайший путь из s в t. LТаким образом, мы получаем следующий алrоритм: АлrоРитм 3.1. (Нахождение кратчайшеrо пути). Данные: Расстояния D [v] от фиксированной вершины s до всех остальных вершин v Е V, фиксированная вер- шина t, матрица весов ребер А [и, v], и, v Е V. Результаты: СТЕК содеРЖIIТ последовательность вершин, оп. ределяющую кратчайший путь нз s в t. 1 begin 2 СТЕК:===0; CTEKt; v:==I; 3 while v :р s do 4 begin 
3.2. Кратчайшие пути от фиксированной вершины 121 5 u :== вершина, для которой D [v] == D [и] + А [и, v]; 6 СТЕК <= и; 7 v :=== и; 8 end 9 end Пусть (V, Е)  ориентированный rраф, I У] == n t I Е 1== т, Если выбор вершины u в строке 5 ПРОIIСХОДИТ в результате про смотра всех верШIIН, то сложность нашеrо алrоритма  О (п 2 ) 4 Если мы просматриваем только список П РЕДШ [и], содержа... щиЙ все вершины и. такие что u --+ V t то В этом случае СЛОЖ" ность будет О (т). ОтмеТJlМ, что в случае ПОЛОЖlfтельных весов ребер задача о кратчайшем пути в неориеНТllроваllНОМ rрафе леrко сводится к анаЛОI'ИЧНОЙ задаче для HCKoToporo ориентированноrо rрафа. С этой целью достаточно заменить каждое ребро {и. v} двумя дуrаМIf (и, и) JI (и, и), ка)l(дая с таким же BecoM t что и {u t v} Однако в случае неполо)кительных весов это приводит К 80З" lIикновению контуров с неПОЛОЖlIтельной длиной. В данной rлаве мы всеrда будем предполаrать, что G =:2 === (V, Е) является ор иентированным rрафом, n === I V 1, т == I Е 1_ в целях упрощения изложения и избежания вырожденных CJIy чаев при оценке сложности алrоритмов будем принимать т == === Q (п) (т. е. n === О (т». Это исключает ситуации, при которых «большинство» вершин изолированные. Будем предполаrать так... Же, что веса дуr запоминаются в массиве А [и, v], U t V е Е V(A [и, и] содержит вес а(и, и». 3.2. Кратчайшие от СРИКСИРОВQННОЙ пути вершины Большинство IIзвестных алrоритмов нахождения расстояния между двумя фиксированными вершинами s и t опирается на действия, которые в общих чертах мо}кно представить следую.. щим образом: ПрlI данной матриuе весов дуr А [и, v], и, v Е V, вычисляет некоторые верхние оrраничения D [и] на расстояния от s до всех вершин v Е v. КаждыЙ раз, коrда мы устанавли. ваем, что D[u]+A[u, v]<D[v], оценку D[v] улучшаем: D[v):==D[uJ+A[u, v]. Процесс прерывается, коrда дальнейшее улучшение ни од.. lIoro из оrраничениЙ невозможно. Леrко можно ПОI{азаТЬ t что Jначение каждой из переменных D [и] равно тоrда d(s, v) рас.. стоянию от s до v. Заметим, что, для Toro чтобы определить (3.2) 
122 з. Нахождение кратчайших путей 8 rрафе расстояние от 5 до t, мы вычисляем здесь расстояния от 5 до всех вершин rрафа. Не известен ни один алrоритм нахождения расстояния между двумя фиксироваННЫМII вершинами, которыЙ был бы существенным образом более эффективным, нежели из.. BeCTHЫ алrоритмы определения расстояния от фиксированной вершины до всех остальных. Описанная нами общая схема является неполной, так как она не определяет очередности, в которой выбираIОТСЯ вершины и и v для проверки условия (3.2). Эта очередность оказывает, как будет доказано, очень сильное влияние на эффективность алrоритма. Опишем теперь более детально методы нахождения расстояния от фиксированной веРШIIНЫ, называемоЙ источни- ком, ero всеrда будем обозначать через 5, до всех остальных вершин rрафа. Сначала представиl'.1 а.пrоритм для общеrо случая, в котором предполаrаем только отсутствие контуров с отрицательной дли.. ной. С этим алrоритмом обычно связывают имена л. Р. Форда .122] и Р. Е. Беллмана [3]. Алrоритм 3.2. (Нахождение расстояния от источника до всех вершин  метод Форда  Беллмана.) Данные: Ориентированный rраф < V, Е) с n вершинами с вы.. деленным источником s Е V, матрица весов дуr А [и, v], и, v Е V (rраф не содержит контуров отри.. цате.пьной длины). Результаты: Расстояния от источника ДО всех вершин rрафа: D [v] === d (5, и), v Е V 1 2 3 4 5 б end Докажем правильность этоrо алrоритма. Для этоrо обозна.. чим через d(m) (v) длину кратчайшеrо из путей из 5 в V, содер... жащих не более т дуr (d(т) (v) === 00, если не существует ни одноrо TaKoro пути). Тоrда имеем d(m+l) (v) == min {d(т) (и) + а (и, v): и Е У}, v Е v. (3.3) В самом деле, для каждоrо и Е V очевидно имеем .d(m+l)(V) d(т)(u)+ а(и, v), причем равенство появляется, ко.. rда и. является предпоследней вершиной произвольноrо крат.. .чайшеrо пути из s в v. Покажем теперi>, что если при входе в очередную итерацию цикла 3 d (5, v)  D [v]  d(т) (v) для всех v Е V, begin for V Е: V do D [v] :== А [S, v]; D [s] :== о; for k:== 1 to n  2 do for ve:V'\{s} do for UEV do D[v]:==min(D[v], D[u]+A[u, v]) (3.4) 
3.3. Случай неотрица те.льных весов.... алrоритм Дейкстры 123 то по окончании этой итерации d (5, v)  D [v]  d(m+l) (v) ДЛЯ всех v Е v. (3.5) В самом деле, предполаrая выполнение условия (3.4) и ана. ЛИЗИРУЯ действие оператора в строке 5, мы видим, что по окон- чании нашей IIтерации цикла 3 имеем d(s, v)D[v]min{d(т)(u)+a(u, v):ueV}, что, принимая во внимание равенство (3.3), дает условие (З.б}. Отметим, что при входе в цикл 3 имеем D [v] == d 1 (v), V Е V. следовательно, после выполнения п  2 итераЦIIЙ этоrо цикла будут выполняться неравенства d (5, v)  D [v]  d(n....l).(v), 2 (3) 3 1 с>с  е1О З! 00 00 з з 8 .s .:: 1 (1) А== CX::J 00 00 1 ...5 00 ос 2, 00 00 00 00 OQ 4 00 5 (4) 4 k D [1] п[2] ])[зJ л [4] .D [5] о 1 с>о с::><:) 3 1 О 1 4 4 1 2 О 1 4 3 ....1 3 О 1 '-i 3 ....1 Рис. 3.1. Работа 3J1rоритма Форда  Беллмзна. v Е v. Теперь достаточно ПОI(азать, что d(nl)(V)== d(s, v). Это справедливо, поскольку каждый путь более чем сп....... 1 дуrа- ми содержит контур, устранение KOToporo не увеличивает дли... ны пути (ведь мы предполаrаем отсутствие контуров отрица тельной длины). Тем самым закончено ДОI{азательство кор- ректности алrоритма. Очевидно, что временная сложность алrоритма есть О (п З )'. Мы можем, конечно, закончить вычисления, коrда выполнение цикла 4 не вызывает изменения ни одной из переменных D [v) I V Е У. Это может наступить для k < n ...... 2, однако такая МО" дификация алrоритма не изменяет существенным образом ero сложности. Для редких rрафов ,(т  п 2 ) удобнее представлять 
124 3. Нахождение кратчайших путей в rрафе rраф списками инцидентности ПРЕДШ [v], v Е v. Заменяя етроку 5 на for u Е П РЕ Д Ш [ v J do D [ v] : === m i n (D [v ] , D [и] + А [и, v] ) , получаем алrоритм со сложностью О (fltn). Работа алrоритма Форда  Беллмана проиллюстрирована На рис. 3.1 (V{l, ..., 5}, веса дуr даны числами в скобках циклы 4 и 5 выполняются в порядке возрастания номеров вер- шин) . 3.3. Случай неОТРИЦQтельных весов  алrоритм Дейкстры Известны более эффективные алrоритмы для двух важных случаев, а именно: коrда веса всех дуr неотрицательны или ко- rда rраф бесконтурный. Сначала опишем алrоритм для первоrо случая ---- алrоритм Дейкстры [11]. Вторым случаем займемся в следующем параrрафе. Алrоритм 3.3. (Нахождение расстояния от источника до всех остальных вершин в rрафе с неотрица- тельными весами дуr  метод Дейкстры.) Данные: Ориентированный rраф (V, Е) с выделенным ис- точником 5 Е V, матрица весов дуr А [и. v] , и. v Е V (все веса неотрицательны). Результаты: Расстояния от ИСТОЧНИI<а до всех вершин rрафа D [и] === d (5, v), v Е V. 1 begin 2 for v Е V do D [v] :=== А [s, v]; D [s] :== о; 3 T:==V'{s}; 4 while Т =F= 0 do 5 begin 6 и :== произвольная вершина 'Е Т, такая. что D [r]  min {D [р] : р Е Т}; 7 Т::== Т, {и}; 8 for VET do D[v]:==min(D[v]. D[a]+A[u, v]) 9 end 10 end Чтобы понять действие алrоритма, покажем. что следую.. щее условие является инвариантом цикла 4: ДЛЯ каждой v Е V "Т D [v] === d (s, v), для каждой v Е Т D [v] == длине кратчайшеrо из тех путей из s в V, дЛЯ которых пред- последняя вершина принадлежит множеству V" Т. (3.6) 
3.3. Случай неотрица тельных весов  алrоритм Дейкстры 125 в самом деле, в строке 5 мы находим вершину u Е Т, такую что значение D [и] является минимальным (из всех) значением D[t], для tE Т. Покажем, что D[u]==d(5,u). Это именно так, потому что если кратчайший путь из s в u имеет длину меньше D [и], то в силу второЙ части условия (3.6) ero предпоследняя вершина принадлежит множеству Т. Пусть t будет первой вер- шиной пути, принадлежащей множеству Т (см. рис. 3.2). На- чальный отрезок нашеrо пути из s в t составляет кратчайший Рис. 3.2. Обоснование алrоритмз Дейк<':тры. путь из s в t, причем ero предпоследняя вершина не принад.. лежит множеству Т. По второй части условия (3.6) имеем D [t] == d (5, t). Используя предположение о неотрицательности весов, получаем D [t] == d (s, t)  d (s, и) < D [и] вопреки прннципу, по которому была выбрана вершина и. Таким образом. D [и] == d (s, и) и мы можем в строке 7 уда- лить u из множества Т, не нарушая первой части условия (3.3). Чтобы обеспечить выполнение также и второй части этоrо условия, следует еще проверить пути из 5 В V Е Т, предпослед- няя вершина в которых есть и, и выполнить актуализаЦlIlО пе- ременных D [v] J V Е Т. Именно это выплняет цикл 8. Очевидно, что условие (3.6) выполняется при входе в цикл 4. По окончании действия алrоритма Т == 0, а следова- тельно, соrласно условию (3.6), D[v]==d(5,V), VE v. Перейдем теперь к оценке сложности алrоритма Дейкстры. Цикл 4 выполняется n  1 раз, причем каждое ero выполнение требует О(п) шаrов: О(п) шаrов для нахождения вершины и в строке 6 (предполаrаем, что множество Т представлено спи- ском) и О(п) шаrов для выполнеНIIЯ ЦlIкла 8. Таким образом, сложность алrоритма есть О (п 2 ). Тщательно подбирая структуры данных, можно получить вариант алrоритма со сложностью О (т log п). Для этоrо мно- жество Т нужно представить бинарным деревом с высотоЙ 
126 3. Нахождение кратчайших путей в rрафе о (log п) и с таким свойством, что для произвольных ero вер- шин u и  если II  СЫН v, то D [и]  D [v] (3.7) (подобная структура данных используется в алrоритме сорти ровки Heapsort, см. [21], [1]). Вершина и. для которой значе.. ние D [и] минимально, является тоrда корнем дерева. Этот ко- рень можно устранить за О (log п) шаrов, сохраняя свойство уменьшения значения D [j] на каждом пути до корня. Доста- точно сместить на место корня ero сына s с большим (или равным) значением D [j], затем на освободившееся место пе- редвинуть сына вершины s с БОЛЬШIIМ значением D [j] и Т. Д. Если rраф представлен списками ЗАПИСЬ Iu], u Е V, то стро" J{Y 8 можно заменить на for VЕЗАПИСЬ[и] do ifD[u]+A[u, v]<D[v] then begin D [v]:== D [и] + А [и, v]; передвинуть вершину в дереве в направлении корня так, чтобы сохранить условие (3.7) end Если предполо)кить существование таблицы указателей на вершины нашеrо дерева, то передвижение вершины v, о которой идет речь в данной части раздела, 10H(eT быть осуществлено за О (log п) шаrов. Достаточно заменять v поочередно верши.. нами, наХОДЯЩИI\1IlСЯ непосредственно над нсй. (7) {С П[1] D [2] .D [з] 1J [4] n[sJ J} [6] о G) е е е е о 1 @ Q) е ф а 1 Ф 3 Ф @ () 1 '. 3 Ф Ф о 1 4- 3 Ф 5 (3) Рис. 3.3. Работа а.пrоритма Дейкстры. в алrоритме, модифицированном таким способом, каждая дуrа rрафа анализируется в точности один раз, причем с этим связано О (log п) шаrов на передвижение соответствующей Bep шины в дереве, представляющем множество Т. Это дает в CYM ме О (т log п) шаrов. Сюда нужно добавить О (п log п) шаrов, цеобходимых длц построения нашеrо дерева и для УСТр'анени 
3.4. Пути в бесконтурном rрафе 121 п  1 раз из HerO корня. Общая сложность алrоритма есть О (т 10g п) (см. задачу 3.6). Неизвестно, существует ли алrоритм СЛО)l(I10СТИ О (т) на- хождения расстояния от (l)иксированной веРШIIНЫ до всех осталь- ных вершин rрафа с неотрицательными весами всех дуr. Можно показать, что существует константа С, таI(ая что эта за- дача для произво.пьноrо k > О 10}KeT быть решена за время Ck(т+п 1 + 1 / k ) (см. [37]). Работа алrоритма ДеЙкстры про иллюстрирована на рис. 3.3 (V=={l, ..., 6}, веса дуr даны в скобках, значения D[v), v Е Т, обозначены КРУ)l(ками, 1инимальные значения  двойны- ми кружками). 3.4. Пути в беСКQНТУРНQМ rрафе Займемся теперь вторым случаем, для KOToporo известен алrоритм нахождения расстояний от фиксированной вершины за время О (п 2 ), а именно случаем, коrда rраф является бес- контурным (веса дуr MorYT быть ПРОИЗВОЛЬНЫМII). Сначала дo ка}l{ем следующую леrvlМУ. Лемма 3.4. В nроuзвольном бесконтурном zрафе вершины можно перенумеровать так, что каждая дуёа будет иметь вид (Vi, Vj), ёде i < j. 11 Пример такой нумерации приведен на рис. 3.4. 7 ( 3) 8 J=1 t=9 2 (2) з Рис. 3.4. Самый ДЛИННЫЙ путь в бесконтурном rрафе. Для доказательства преДЛО)l(ИМ алrоритм, который кон- струирует такую нумерацию. Алrоритм 3.5. (Нумерация вершин бесконтурноrо rрафа.)' Данные: Ориентированный бесконтурный rраф < V, Е), опре- деляемый списками инцидентности ЗАЛ И СЬ [v]. v Е v. 
128 3. Нахо}кдсние кратчайших путей в rрафе Результаты: Для каждой вершины v Е V номер NR [v]', таI(ОЙ что для произвольной дуrи (и, v) Е Е выполняется неравенство NR[и] < NR[v]. 1 2 3 4 5 6 7 8 9 10 1 1 12 13 14 15 16 17 begin for v Е V do Ч3АХ [и] :== о; (* Ч3АХ [и] == число дуr, заходящих в v *) for и Е V do for v Е ЗАЛ ИСЬ [и] do Ч3АХ [и] :=== ЧЗАХ [v] + 1; СТЕК:==0; for v Е V do if ЧЗАХ[v] ==0 then CTEK*=v; пит:== о; while СТЕК =1= 0 do begin и <= СТЕК; пит :=== пит + 1; N R [и] :== flllпl; for v Е ЗАП ИСЬ [и] do begin Ч ЗАХ [v] : Ч ЗАХ [v] ........ 1; if ЧЗАХ[v] ==0 then CTEKТ) end end cnd Алrоритм основывается на следующем простом факте: в произвольном (не пустом) бес контурном rрафе сущсствует' вер- шина, в которую не заходит ни одна дуrа. Чтобы убедиться в этом, выберем произво.пьную вершину WI rрафа, затем неко-- торую вершину W2, такую что W2  WI, затем вер.шину Wз", та- кую что Wз --+ W2, И т. д. Через конечное число шаrов мы долж- НЫ дойти до некоторой вершины Wi, в которую не заходит ни одна дуrа, ибо в силу бесконтурности ни одна вершина не мо- жет повторяться в ПОС.педовательности Wl, W2, Wз, ... . в нашем алrоритме вершины, в которые не заходит ни одна дуrа, накапливаются в стеке. В строке 10 выбирается перхний элемент стека и (это Mor бы быть произвольный элемент сте- ка), и этой вершине присваивается самый маленький из еще неиспользованных номеров. Таким образом, мы rарантируем, то что все дуrи, выходящие из этой вершины, ведут 1{ верши- нам с большими номерами. З.зтем вершина и вместе с выходя- щими нз нее дуrами удаляется из rрафа. Это приводит к умень- шению на единицу числа дуr, заХОДЯЩIIХ в каждую вершину и, такую что и  и; это число запоминается в ЧЗАХ [и]. Если для какой"нибудь из вершин v это число сводится к нулю. то v помещается в стек. В силу бесконтурнасти rрафа и наших пре- дыдущих замечаний полное опустошение стека, вызываlощее окончание выполнения алrоритма (см. цикл 9), наступает не раньше, чем после присвоения номеров всем веРШlIнам rрафа. 
3.4. Пути в бескоltТУРНQМ rрафе 129 Леrко заметить, что каждая дуrа анализируется алrорит- мом один раз в строке 4 11 один раз в строке 12. Таким об.. разом, сложность алrоритма есть О (т) (вспомним, что остает- ся в силе предположение т == Q (п)), в противном случае сле- довало бы написать О(т + п). Соrласно алrОРIIТМУ 3.5 при описании алrоритма нахожде- ния путеЙ в бесконтурном rрафе мы можем преДПОЛОЖIlТЬ, что кая{дая дуrа идет из вершины с меньшим номером в вершину с БОЛЬШIIМ номером. Алrоритм 3.6. (Нахождение расстояний от источника ДО всех вершин в бесконтурном rрафе.) Данные: Ориентированный rраф (V, Е), rде V == {VI, ... ..., v,,}, и для произвольной дуrи (Vi, Vi) Е Е имеем i < j. Этот rраф определен списками инци- деНТНОСТII ПРЕДШ[v], V Е v. Результаты: Расстояния от Vl до всех вершин rрафа: D [v i ] == d (VI' v t ), i== 1, ..., n. begin D[Vl] :==0; for j:=== 2 to n do D [v J] :== 00; for j:== 2 to n do . for v,ЕПРЕДШ[v,] do D[vj]:==min(D[vf], D [v,] + А [Vl' V j]) 6 end Нетрудно доказать индукциеЙ по j, что после выполнения цикла 4 для HeKoToporo значения j выполняется равенство D [Vi] === d (Vl, Vi), i == 1, ..., j. Достаточно воспользоваться тем фактом, что все промеЖУТОЧllые вершины кратчайшеrо пути из VI В VJ имеют номера меньше j. Сложность алrоритма есть О (т), так как каждая дуrа (Vi, V J ) анализируется в строке 5 в точности один раз. Алrоритмы 3.5 11 3.6 MorYT найти применение в методах управления выполнеНllем проекта, называемых PERT {Project Evaluation and Re\'ie\v Technique или СРМ (Critical Path Method). Эти методы основываются на построеНИII rрафа (сети PERT или сети СРМ), дуrll KOToporo соответствуют He которым элементарным задачам, составляющим проект, а их веса указывают на время, необходимое для решеНIIЯ отдель- ных задач. Кроме этоrо, мы предполаrаем, что для произ- вольных дуr этоrо rрафа (и, v) и (V t t) задача, IIзображаемая дуrой (и, v), должна быть закончена перед началом решения .задачи, изображаемоЙ дуrоЙ (v, t). Леrко заметить, что такой rраф должен быть беСI(ОНТУРНЫМ. Нашей задачей является на- хождение caMoro ДЛlIнноrо пути из вершины 5, соответствую- щей началу проекта, до вершины t, соответствующей ero окон- 1 2 3 4 5 
lЗО 3. Нахождение кратчайших путеА в rрафе чанию (СМ. рис. 3.4). Такой путь называется критическим пу.. тем. Ero длина 'определяет время, необходимое для реализа- ции Bcero проекта. Очевидно, что эта задача сводится к за- даче о кратчайшем пути путем изменения знака каждоrо веса а (и, v), rде и --+ V, на обратный. 3.5. Кратчайшие пути между всеми парами вершин, транзитивное замыкание отношения Очевидно, что задачу определения расстояния между все- ми парами вершин можно решить, используя п раз (пооче- редно для каждой вершины) один из описанных ранее мето- дов нахождения расстояний от фиксированной вершины. Та- ким образом, мы получаем алrоритм со сложностью О (п 4 ) (при использовании метода Форда......... Веллмана) или О (п З ) для бесконтурных rрафов или неотрицательных весов. Однако оказывается. что в общем случае п-кратное использование ме- тода Форда  Веллмана не является наилучшим методом. По- кажем теперь два более эффективных метода. Для этоrо рассмотрим ориентированный rраф G == < v, Е), r де V === {VI, ..., v n }, И предположим, что А == [аи] есть матри- ца весов (aij == а (Vi, Vj) ). Обозначив через dT) длину кратчай- шеrо пути из Vi И Vj, содержащеrо не более т дуr, получаем слс- дующие очевидные уравнения (ср. с (3.3»: d(O) == { О, если i == j, 1/ 00. если i =1= j. (3.8) di+l) == min {dk) + akj: 1  k  п}. (3.9) Отметим, что уравнение (3.9) обнаруживает некоторое сход- ство с определением произведеНIIЯ двух квадратных матриц. Если операцию min трактовать как «сумму», операцию «+»........ как «произведение», то матрица [di+l)] является «произведе. ннем» матриц [dj)] и А === [ац]. Обозначим такое «произведе- нне» двух матриц А и В через А*В и отметим, что для этой операции единичным элементом служит матрица ..... О 00 00 ...00 00 о 00 . . . 00 и== 00 00 о . . . 00 . . . . . 00 00 00 . . . о 
3.5. Кратчайшие пути между всеми парами вершин 131 Из уравнений (3.8) и (3.9) теперь леrко следует, что [d)] === и и dtj) === {{. . . « А * А) * А) . . .) * А) . (т  1). (3.1 О) ----. т раз Возмо)кен однн из двух следующих случаев: (1) d'il)==d'P и в реЗУJIьтате dJ)===d:7""1) для каждоrо m?3 п. 'ror да очевидно d'j....l) === d (v i, V j). (2) dfi....l) =1= d'j). Это означает, что существует контур отри- цательной длины. Произведение А*В дпух матриц размерности п Х п можно вычислить за время О (п 3 ) (п сложений и n...... 1 сравнений на каждыЙ из п 2 элементов произведения А*В). Следовательно, 1 атрицу [d(л.... 1 )] и Te1 ca1ыM расстояние между всеми парами nерШIlН можно вычислить за время О (п 4 ). Пока сложность этоrо алrоритма такая }I{e, как и для слу- чая nKpaTHoro использования алrОрlIтма Форда........ Беллмана. Однако 1Ы IO)l(eM ее снизить, если заметим, что операция * ассоциативна (т. е. (А*В) "1.' С === А* (В*С), см. задачу 3.8). Этот факт позволяет вычислять произведение (3.1 О) , поочередно возводя матрицу А в квадрат и тем самым заменяя n  1 умно}кение матрицы rlog п 1 умножениями. Таким образом, мы получаем алrоритм сложности О (1l 3 log п), отыскиваlОЩИЙ расстояния ме))(ду всеми парам и вершин в rрафе без конту"" ров отрицате.ПЬНОЙ длины. Авторами еще более эффективноrо алrоритма являются Уоршалл [70] и Флойд [20]. Идея этоrо алrоритма следующая. Обозначим через dj) длину кратчайшеrо из путей из Vi в VJ С лромежуточными вершинами в множестве {Vl...., Vm}. Тоrда имеем слеДУlощие уравнения: d (O) ij === ai/, d (m+ 1) · (d (m) d (m) + d ( т) ) 1/ == mlП 11, lm тJ. (3.11 ) (3.12) Обоснование BToporo уравнения достаточно простое. Рас- . v смотрим кратчаишии путь из Vi В VJ С промежуточными вер- шинами из множества {Vl, ..., vт, Vт+l}. Если этот путь не .(т+ 1) d (т) Е содержит V т +l, то aij == l/. ели же он содержит Vт+l, то, деля путь на отрезки от Vi до Vm+l И от vт+l до Vj, получаем равенство di+1) == d) + d). Уравнения (3.11) и (3.12) дают возможность леrко вычис... лить расстояния d (Vl, VJ) == dj), 1  i, j  n. 
132 3. Нахождение кратчайших путей в rрафс Алrоритм 3.7. (Вычисление растояннй между всеМII парам н вершин......... метод ФлоЙда.) Данные: Матрица весов дуr А [i, jJ, 1  i, j  n, ориентн- pOBaHHoro rрафа без контуров отрицательной длины. Результаты: Расстояния между всеми парами вершив D [i, j] == d(Vi, Vj). 1 begin 2 for i:== 1 to п do 3 for j:== 1 to n do D [i, j]:== А [i, j]; 4 for i:== 1 to п do D [i, j] :=== о; 5 for m:=== 1 to п do 6 for i: 1 to п do 7 for j:=== 1 to п do 8 D [i, j]:== min (D [i, j), D [i, т] + D [nl. j) 9 end Обоснование корреКТНОСТII алrоритма предоставляе1 чита.. Телю. Очевидно, что сложность этоrо алrоритма есть О (п З ). Стоит отметить, что такую же сложность имел алrоритм Форда....... Беллмана нахождения расстояний от фиксированной вершины до всех остальных вершин. Любопытно, что для общеrо слу.. чая (т. е. без предположения о неотрицательности весов либо о бесконтурности rрафа) не известен ни один алrоритм на.. хождения расстояния ме)J(ДУ одноЙ фИКСllрованной пароЙ вер- ШIIН, который был бы знаЧlIтельно эqJфективнее алrОРllтма на- хождения расстояний между всеми парами вершин. С задачей определения кратчайших путей в rрафе тесно связана задача транзитивноrо замыкания бинарноrо отноше- ния. Вспомним, что под БИllаРНЫf отношением на множестве V мы понимаем произвольное ПОДМНО)l(ество Е <= V Х v. Такое отношение является транзитивным, если удовлетворяется условие если (х, у) Е Е и (у, z) Е Е, то (х, z) Е Е для произвольных Х, у, Z Е Е. Отметим, что бинарное отно- шение Е s V Х v можно однозначно представить ориентиро- ванным rрафом G == < V, Е). ДЛЯ ПРОllзвольноrо TaKoro отно- шения мы определяем в- == {(х, у): в (v, Е) существует путь lIенулевоЙ длины из х в у}. Нетрудно заметить, что Е*  транзитивное отношение на множестве V и Е <= Е.. Более Toro, Е* является наименьшим транзитивным отношением, содержащим Е, т. е. для произ.. вольноrо траНЗlIтивноrо отношения F  Е' выполняется ВКЛIО. 
3.5. Кратчайшие пути мея{ду всеми парами вершин 133 чение Е* <= Р. Отношение Е* называется транзитивным замы.. канuем отношения Е. Если отношение Е представить в виде rрафа (V, Е), в ко- тором каждая дуrа имеет вес lt то транзитивное замыкание В* можно вычислить с помощью алrоритма 3.7 за время О (п З ) ; после завершения работы алrоритма имеем (VI' V/) Е Е*  D [i, j] < 00. При вычислении транзитивноrо замыкания удобно . { 0t если (VI' V 1) Ф. Е (вместо (0), А [1, JJ == 1 , е ел и (t/" t/ f) ЕЕ. Тоrда строку 7 алrоритма 3.7 мы можем заменить на D [it j] :== D [i, j] V (D [i, т] Л D [т, j]), принять (3.13) rде V и Л ......... обычные булевы операции: V/Ol лlОl 001000 1 1 1 1 О 1 После завершения работы алrоритма t модифицированноrо таким образом (принадлежащеrо Уоршаллу [70]), очевидно, имеем .. { 1, если (VI' V / ) Е Е*. D [t, J] == ( )  Е . О, если 'Vl' 'V J "F . Здесь следует отметить, что известен алrоритм построения транзитивноrо замыкания, более эффективный, чем алrоритм Уоршалла (см. (53]). Он использует связь этой задачи с YMHO жением матриц, обсуждавшуюся в начале этоrо параrрафа, эта связь для матриц А, опрделяемых paBeHCTBO' (3.13), при- водит к обычному умножению булевых матриц по формуле п C'j == V (alk Л b kJ ). kl Оказывается (см. [64]), что такое умножение можно вы- полнить за время О (n 1og 7) 1), что дает алrоритм построени.SI транзитивноrо замыкания, имеющеrо сложность О (n 1og 7 log n). Такой алrоритм имеет скорее теоретическое значение, посколь- ку метод умножения матриц за время О (n log 7) является до- вольно сложным и, следовательно, обнаруживает свое преиму- щества перед обычным «школьным» методом только при очень 1) Показатель log 7 может быть иемноrо уменьшен (см. [55])  
134 3. Нахождение кратчаliших путей n rрафе больших значениях n. На практике обычно самым эффектив- НЫМ оказывается алrоритм Уоршалла, соответствующим обра 30М запроrраммированный (см. [65] и задачу 3.9). Друrим способом построения тра нзитивноrо замыкания от- ношения Е является применение поиска в r лубину (или В ши- рину) в rрафе (V, Е). Этот способ особенно выrоден, коrда отношение Е симметрично; очевидно, что тоrда транзитивное замыкание строится отдельно для каждой связной компонен- ты, на которые разбивается неориентированный rраф, опреде ляемый отношением Е, и это построение может быть получено за время О(т + п). Детали оставляеl\1 читателю (см. зада- чу 3.12). 3.6. Задачи 3.1. Пусть G === (V, Е)  произвольный ориентированный rраф. Зафиксируем некоторую вершину s Е V, добавим новую вершину t, заменим каждую дуrу (tJ s) Е Е на дуrу (v t t) И поставим в соответствие каждой дуrе полученноrо rрафа вес ........1. Доказать, что кратчайший элементарныЙ путь из s в t имеет длину n тоrда и TO"ТIbKO тоrда, коrда в G су- ществует rамильтонов контур. 3.2. Модифицировать алrоритм 3.1. так, чтобы он определял (а) кратчайший элементарный путь IIЗ s В t; (б) все кратчайшие пути из s в t в предположении, что rраф не содержит контуров отрицательной длины (может содержать контуры нулевой длины). Провести анализ предложенных алrоритмов. 3.3. Изменить алrоритмы 3.2, 3.3 и 3.6 так, чтобы они опреде- ляли кратчайшие пути из s до остальных вершин, не ис- пользуя алrоритм 3.1. (Указание: для каждой вершины v Е V следует запоминать и активизировать во время ра- боты алrоритма такую вершину PRE [tJ], что D [v] === D [PRE [}]] + А [PRE [v], v].) 3.4. Можно ли условия (3.4) и (3.5) заменить равенствами D [v] === d(m) (v), D [v] === d(т+l) (v)? 3.5. Доказать, что в rрафе без контуров снеположительной длиной уравнения d(s, s)==O, d(s, v)==min{d(s, u)+а(u, v): UEV"{V}} однозначно определяют расстояния d(s, v), v Е v. Дать пример rрафа с циклом (контуром) длины О, дЛЯ KOToporo эта система уравнений имеет бесконечно MHoro решений. 
3.6. Задачи 133 3.6. Дополнить дстали описания и анализа nарианта алrорит ма Дейкстры со сложностью О(т log п). 3.7. Определить кратчайший путь из s в t в rрафе на рис. 3.4. 3.8. Доказать, что операция *, определенная для квадратных матриц А == [aij] и 8 == [Ьи] размерности пХ п формулоil А :.:-8 == [Со], rде Cij == min{aik + b kj : 1  k  п}, является ассоциативной. 3.9. Доказать, что следующая модификация алrоритма Yop шалла стоит транзитивное замыкание отношения [65]: 1 begin (. отношение Е определено матрицей А, см. (3.13) *) 2 for 111:=== 1 to 11, do 3 for i:=== 1 to п do 4 if А [i, т] == 1 then 5 for j:=== 1 to п do А [i, j] :== А [i, j] V А [пl, j] 6 end (* А [i, j] == 1 <=> (v i' '() J) Е Е* *) ПреДПОЛО}l(IIМ, что строка fатрицы А помещается в ма.. ШIIННОМ слове 11 цикл 5 мы трактуем как одну элементар ную операЦИlО (.лоrIIчеСI(ое сложение тй СТРОI(И с i..й). Ка- I(OBa тоrда сложность алrоритма? 3.10. МОДllфицировать алrоритм ФлоЙда так, чтобы кроме pac СТОЯНIIЙ D [i, j] он определял fvtатрицу М [i, j], rде М [i t j] есть наибольший номер вершины HeKoToporo кратчайше.. ro пути из Vi В Vj (М [i, j] == о, если этот путь не содержит проме)куточных вершин). Доказать, что рекурсивная про- цедура procedure ВЫПf/САТЬПJlТЬ(i, j); begin if М [i, j] == о then if i === j then write (i) else write (i, j) else begin ВblПИСАТЬПJ1ТЬ (i, М [i, j]); ВЫПИСАТЬПУТЬ (М [i, j], j) end end выписывает кратчайший путь из Vi В VJ за время О (п). Написать нерекурсивный вариант этой процедуры. 3.11. ПОД пропускной способностью пути будем понимать наи меньший вес дуrи этоrо пути. Написать алrоритм, опрс деляющий наибольшие пропускные способности путей Me жду (а) фиксированной парой вершин; (б) всеми парами вершин. 3.12. Опираясь на метод поиска в rлубину, написать алrоритм. строящий транзитивное замыкание произвольноrо ОТНО" шения Е  V Х V за время О (п 2 + nт), и алrоритм сложности О (п 2 ) для симметричных отношений. 
4. ПОТОКИ в сетях и родственные задачи 4.1. Максимальный поток в сети Под сетыо мы будем понимать пару S == (О, с). rде G == == < V t Е) ......... произвольный ориентированный rраф, а с: Е  R ........ функция, которая каждой дуrе (и, и) ставит в соответствие н.е- отрица тельное вещественное число с (и, v), н азываемое про.. пускн.ой способностью этой дуrи. Множества V и Е называются соответственно множеством вершин и множеством дус сети s. Для произвольноЙ функции f:ER (4.1) и произвольной вершины v сети S раССМОТРИf величину DiVf (v) == L f (U t V)...... L f (u t v). и:и-+и и:и-+и Если '(и, v) мы интерпретируем как поток из и в v, то вели... чина DiVf (v) определяет «количество потока», ВЫХОДЯUlеrо из вершины v. Эта величина мо}кет быть положительной (если из вершины v больше ВЫХОДIIТ, чеI входит в нее) t отрицатель- ной (если в вершину входит больше, чем выходит из Hee t т. е. наступает «накопление» потока в вершине v) и, наконец, рав" НОЙ нулю. Последний случаЙ нас будет интересовать более Bcero. Выделим в нашей сети две вершIlны......... источник s и сто1\, t (s =1= t). Под потоком из s в t в сети S мы будем пони- мать произвольную функцию Вllда (4.1), для которой выпол- няются условия О  f (u t v)  с (и. v) для каждой дуrи (и, v) Е Е (4.2) (4.3) 11 Divf (v) == О для каждой вершины v Е V "{s, '}. Величину W (f) == Divf (s) будем называть величиной потока f. Соrласно описанному выше, мы имеем здесь дело с потоком, КОТОрЫЙ не возникает и не накапливается ни в одной из вершин. отличных от 5, t, и который удовлетворяет следующему усло.. 
4.1. Максимальный поток в сети 137 вню: через дуrу (и, v) мы можем пропустить не более чем с (и, v) единиц потока. Такой поток может описывать поведение rаза нлн жидкости В трубопроводе, потоки автомобилей в сети авто- страДt пересылку товаров по железной дороrе (без хранения их на промежуточных станциях) t передачу информации в инфор- мационной сети II т. д. Мы будем IIнтересоваться rлавным образом нахождением маКСlfмальноrо потока (т. е. потока с максимальной величиной) в заданной сети. Докажеf сначала несколько ПРОСТЫХ 11 интуи- тивно очевидных фактов. Под разрезом Р (А) сети S, соответ- ствующим подмножеству А с: V (А =1= О, А =t= V), мы понимаем множество дуr (и, v) Е Е, таких что и Е А и v Е V"At т. е. р (А) === Е n (А х (V " А)). Для произвольноrо потока f в сети S .поток через разрез Р(А) определяется естественным образом: f (/1, V " А) === L f (е). е Е Р (А) Лемма 4.1. Если s Е А и t Е V",A, то для произвОЛЬН020 по.. тока f из s в t W (f) === f (А, V" А)........ f (V "At А). (4.4) Доказательство. Суммируем уравнения DiVf (v) === О (4.3) для всех v Е А. Эта сумма складывается из HeKoToporo числа сла.. raeMblX f (и, v), снабжеНIIЫХ знаком плюс II минус, Прllче хотя бы одна из вершин и, v принадлежит множеству А. ЕСЛIf обе вершины принадлежат А. то f (и, v) появляется со знаком плюс в DiVf (и) и со знаком минус в DiVf (v) (и не появляется в вы- ражении DiVf (r) ни для одноrо " отличноrо от и и v), ЧТО В сум- ме дает о. Каждое из слаrаемых f (и, v), и Е А, v Е v",A появ- ляется в ТОЧНОСТII один раз со знаком плюс в DiVf (и), что в сум... ме дает f (А, V"'A). АllалоrIlЧllые слаrае1ые f (и, v) t U Е V""-A, v Е А отвечают за сла raeMoe f (V""A, А) в (4.4). с друrой сто- роны наша сумма равна DiVf (s) === W (f), ибо Divf (v) === О для каждоrо v Е А". {s}. 11 Принимая А === V" {t}t получаем в этом частном случае из леммы 4.1 Divf (s) === W (f) == f (V ,,{t}t {t})  f ({t}, V" {t}) === ===  (f ({t}t V '\ {t})  f (V ,,{t}, {t}) ===  Divf (/), что выражает интуитивно ПОIIЯТНЫЙ факт: в сток входит в точ" ности такое количество потока, какое выходит из источника. В общем виде лемма 4.1 rОI:JОрИТ, что общее количество потока можно измерить в ПРОИЗВО.1ьном разрезе, отделяющем s от t. 
138 4. ПОТОКИ 8 сетях 11 родственные зада ЧII Определим пропускную способность разреза Р(А) следую- щим образом: с (А, V '\ А) === L с (е). е Е Р (А) Под минимальным разрезом, разделяющим s и t, мы будем по- нимать произвольный разрез Р(А), s Е А, t Е V""A с мини- мальной пропускной способностью. Одним из фундаментаJJЬНЫХ фактов теории потоков в сетях является классическая теорема о максимальном потоке и мини- мальном разрезе. Теорема 4.2 (Форд и Фалкерсон [23]). Величtlна каждО20 потока из s в t не превосходит пропускной способности мини- .мальноzо разреза, разделяющеао s и t, причем существует поток, достиzа/ощий эТоZо значения. Доказательство. Пусть Р (А)......... минимальный разрез. В СIIЛУ леммы 4.1 для произвольноrо потока f имеем W (f) === f (А, V" А)  f (V "А, А)  f (А, V '\ А) === ......... L f (е)  L с (е) === с (А, V "А). (4.5) е Е Р(А) с с= Р{А) Существование потока, для KOToporo указанное lIepaBeHcTBo пс реходит в равенство (такой поток, очеВIIДIIО, l\1аксIIМален),......... более rлубокий факт. Мы получаем ero как следствие анализа алrоритма, представленноrо в следующем разделе. 11 Все известные алrОРIIТМЫ построеНIIЯ максимальноrо nOTOJ\a Jсновываюrся на последовательном увеличении потока, причсм модификация потока, увеличивающая ero величину, чаще Bcero опирается на метод увеличивающих цепей. Будем rоворить, что дуrа е сети S является допустимой дуzоЙ из 11 rJ V относительно потока f, если е === (и, v) и f (е) < с (е) е === (v, и) и f (е) > о. или (4.6) (4.7) В зависимости от Toro, какое из приведенных условий имеет место. первое или второе, будем rоворить соответственно о со- 2ласованной или несоzласованной допустимой дуrе из и в а. Уве- личивающей цепью (длины l) для данноrо потока f из s в t на- зывается произвольная знакопеременная последовательность .(попарно различных) вершин и дуr а й , е 1 , Оl, е2' а2' ..., V'I' е" О" (4.8) такая что Vo == S, а, == t, и для каждоrо i  1 Ayra et допустима из 0;.....1 в О; относительно потока [.. 
4.1. Максимальный поток в сети 139 ЗнаНlIе увеличивающей цепи вида (4.8) позволяет леrко уве... .,lИЧИТЬ величину потока f на 6 == min {(ei): 1  i  [}, rде { С (e i ) ........ f (ei), если дуrа el соrласована,  (е.) == t f (е;), если дуrа ei не соrласована. Для этоrо достаточно увеличить на б поток по каждой соrласо- ванной дуrе ei: " (е;) == f (ei) + б, а также уменьшить на 6 поток по каждой несоrласованной дуrе ei: f' (е;) == f (е;)  б. Определенная таким образом функция " (мы полаrаем {'(е) === '(е) для дуr е, не принадлежащих цепи (4.8)) является потоком. Действительно, изменение величины DiVf (Vi), 1  i   [......... 1, основывается на ее увеличении на 6, связанном с из.. менением потока по ei+l, и уменьшении ее на 6, связанном с из... менением потока по ei......... это не зависит от типа дуrи ei, ei+l. В сумме эти изменения компенсируются и в результате DiVf' (Vi) == Divf (Vi) == О (1  i  1  1). Выполняется также ус- ловие О  f' (е)  с (е) для каждой дуrи е. Величина же потока увеличивается на б: W (f') === Divf' (s) == Divf (s) + б === W (/) + б. На рис. 4.1 показан процесс увеличения потока вдоль уве", личивающейся цепи. Поток l(е) по каждой дуrе е указан возле соответствующих дуr, в скобках указана пропускная способность дуr с(е). Увеличивающая цепь имеет вид V 1 , (v 1 , vз), Vз, (V2, Vз), V2, (vs, V2)' VS, (vs, V6)' V6, (V 7 , V6) V 7 , (V 7 , vs), V s . что дает увеличение потока на б ==  (V4t и5) == 1 с 1 О до 11. Теорема 4.3. Следующие три условия эквивалентны: (а) Пото1\, из s в t максимален. (6) Не существует увеличивающей цепи для f. (в) W{f)==c(A,V""A) для некоторосо A c: V,TaKOZO ЧТО S Е А, t  А. Доказательство. (а) => (6). Если поток максимален, то оче. видно, что для Hero не существует увеличивающей цепи, ибо существование такой цепи делало бы возможным увеличение по тока. 
140 4. ПОТОКИ в сетях и родственные задачи s ... () ... 1 о =t 8 (а) 0з 10(10) 05 4( 4) и 7 6(6) $=и 1 v 8 =t (6') О 3 10 (10) и 5 4(4) v 7 Рис. 4.1. Увеличение потока вдоль увеличивающей цепи: а) перед модифика- цией, б) после модификации. (6) => (в). Предположим, что для I1eKOTOporo потока f не су- ществует увеличивающей цепи. Определим множество А s;; V как множество вершин V, дЛЯ I(OTOPblX существует цепь Vo, е}, [)}) е2, V2, . · ., Vkl' ek, Vk, такая что k  О, Vo === 5, Vk === V И ei......... дуrа. допустимая из Vil в Vi, 1  i  k. Очевидно, что 5 Е А, а t Ф. А, поскольку это озна.. чало бы существование увеличивающей цепи для f. Рассмотрим разрез р (А). ДЛЯ каждой дуrи е Е Р (А) должно выполняться равенство f(e) === с(е) соrласно определению множества А (СМ. условие (4.6)), таким образом, f(A,V"A)==c(A,A). Поль- зуясь определением множества А, аналоrИЧIIЫМ образом полу- чаем f(V"A,A)==O (см. условие (4.7)). В силу леммы 4.1 от- сюда вытекает, что W(f).==f(A, V"A).........f(VA. А)==с(А, У""А). 
4.2. А.'Jrоритм постросния маl{симаЛЬJlоrо потока -141 (в) => (а) следует из уже доказаllноrо факта, что величина nроизвольноrо потока не превосходит с(А, A) (см. (4.5».11 .Нетрудно проверlIТЬ, что поток на рис. 4.1, б  максимальный. «НасыщенныЙ» разрсз Р (А), появляющийся в доказательстве Teope1Ы 4.3, обозначен через А ==={VI, V2, Vз, VS}. ДЛЯ Toro чтобы JIЗ теоремы 4.3 вывести теорему о макси- мальном потоке и минимальном разрезе, нам еще не хватает одноЙ, довольно ТОНl{ОЙ детали. (Прежде чем читать дальше, предлаrаем ЧlIтателю доrадаться, какоЙ именно.) Этим ведо- стаlОЩИМ фактом является просто существование максимальноrо потока в произвольной сети. Друrими словами, нужно показать, что lIевозможна ситуация, в которой, например, для каждоrо 8 > О существует поток с величиной, превосходящей 7  8, но не существует потока с величиной, равноЙ 7 (стоит отметить, что подобной проблемы для минима.I1ыlrоo разреза не существует  ЧIIСЛО раЗЛIIЧНЫХ разрезов в ОТЛllчие от числа различных пото- ков является конечным). Этот простой факт, являющийся в сущ- ности следствием нестроrости lIеравенства в условии (4.2), мож", но доказать МIIоrими способами. Мы докажем ero в следующем разделе путем анализа HeKoToporo алrоритма построения макси... малыIrоo потока. 4.2. Алrоритм построения максимальноrо потока Рассуждения предыдущеrо раздела подсказывают идею сле.. дующеrо простоrо алrоритма построения максималыlrоo потока. Начиная с ПРОlIзвольноrо потока (например, {(е) === о для каж- дой дуrв е Е Е), мы ищем увеличивающие цеПII и увеличиваем вдоль них фактический поток. Однако здесь ВОЗНlIкают два вопроса. Во-первых, закончится ЛJl работа TaKoro алrоритма через конечное число шаrов И, во- вторых, будет ли полученный поток максимальным. Ответ lIа второЙ вопрос в предположении, что алrоритм остановится через конечное число шаrов из-за невозможности отыскать новые уве- личивающие цеПII, будет утвердительным, что непосредственно следует из теоремы 4.3. С друrой стороны, Форд и Фалкерсон в работе [23] дали в lIекотором смысле ОТРllцательный ответ на первыЙ вопрос. А IIменно, они привели пример сети, в которой можно так «злоумышленно» подбирать очередные рассматривае- мые увеличивающие цепи, что процесс НlIкоrда не кончится; бо лес Toro, величина потока в течение Bcero времени будет меньше ОДIIОЙ четверти величины максималыlrоo потока. 
142 4. Потоки 8 сетях и родственные задачи Эдмондс И Карп (см. [17]) показали, что если мы увеличи- ваем фактический поток всеrда вдоль кратчайшей увеличиваю- щей цепи, то максимальный поток ст r оится с использованием не более тп/2 цепей (как обычно, п == vt и т IEI). Отыскание u v кратчаишеи цепи леrко реализовать при помощи алrоритма, ан а.. лоrичноrо поиску в ширину (см. разд. 2.3). Точнее rоворя, начи- ная от источника s, мы ведем поиск в ширину в rрафе Gf, со- стоящем из дуr (и, v), таких что в нашей сети существует дуrа, допустимая от и до v относительноrо фактическоrо потока f, вплоть до момента достижения стока t. Очевидно, что найден- ный в результате этоrо процесса кратчайший путь из s в t соот- ветствует кратчайшей увеличивающей цепи из s в t в исходной сети. Принимая во внимание, что процесс поиска в ширину мы можем выполнить за время О (т + п), мы можем оценить слож ность Bcero алrоритма построения максимаЛЫlоrо потока KaI{ О (тп (т + п)). Не будем заниматься здесь деталями этоrо алrо- ритма, так как ниже в данном параrрафе мы представим более эффективныЙ метод, имеющий сложность О (п 2 ). ЛIобопытныЙ метод использовал для построения максималь- tIoro потока Днниц в работе [13]. Этот метод основан на по- строении некоторой вспомоrательной бесконтурной сети (т. е. с rрафом, не содержаЩII1 I{UHTYPOB), структура котороЙ точно отображает все кратчайшие увеЛlIчивающие цепи IIЗ s 13 t OT 1I0сителыlo фаI(Тllческоrо потока f. Обозначим такую ссть через S,. Мы строим ее при помощи поиска в ширину в уже упомя- нутом rрафе О, с дуrаМII, опредеЛЯСМЫ1I ДОПУСТIIМЫМII относи- тельно фаКТllческоrо потока f дуrаМII в исходноЙ ceTII. Сеть Sf содержит источник s, сток t и дуrи rрафа О, вида (и, v). rде и находится на расстоянии d, а v на расстоянии d + 1 от s, О   d < 1, rде 1 есть длина сети S" т. е. расстояние от s до t в rрафе Gf. Пропускную способность С, (и, v) мы определяем как с (и, v)......... f (и, v) или как f (v, и) в заВIIСИМОСТИ от Toro, представ- ляет ли дуrа (и, v) соrласованную дуrу или нет (или сумму этих значений), если одновременно существуют соrласованная и Несо- rласованная дуrи, допустимые от и к v. Ниже представлена процедура PSA, строящая сеть Sf. Ис- ходная сеть S представлена списками инцидентности ЗАПИСЬ [v], ПРЕДШ[v] , v Е V, И массивом пропускных спо- собностей дуr С [и, v], и, v Е V, а фактический поток f опреде- ляется массивом F [и, v] , и, v Е V. Переменные, относяшиеся к построенной вспомоrательной сети Sf, отличаются от перемен- ных, относящихся к исходной сети S, первой буквой Х: имеем множество вершин XV, списки инцидентности ХЗАПИСЬ [v], ХПРЕДШ [v], v E.XV, И массивы пропускных способностей ХС и потоков ХР. Расстояние до вершины от источника в сети S, запоминается в массиве ДЛИНА. Структура процедуры PSA 
4.2. Алrоритм построения максимальноrо потока 143 следующая: за инициализацией в строках 37 следует ПОIIСК в ширину в rрафе а" начиная от источника s (см. rлавныЙ ЦIII{,'I в строке 1 О). Вершины v, последовательно посещаемые в про- иессе поиска, помещаются в очередь (строки 13 и 21), каждая. вершина и, выбираемая из очереди (строка 11), используется в двух циклах (строки 12 11 20). fIервый из HIIX ищет соrласо- ванные допустимые дуrи (и, v), вТорой......... несоrласоваНllые до- пустимые дуrll (v, и). Отметим, что сеть может одновременно содержать соrласованную допустимую дуrу (и, v) JI несоrласо- ванную допустимую дуrу (v, и). Дуrа (и, v), включаемая в S" имеет в таком случае пропускную способность, равную сумме ПРОПУСКНЫХ способностей, ВНОСИМЫХ ЭТIIМII дуrами (см. строки 24 и 28). 1 procedure PSA; (* построение вспомоrательнои бесконтурной сети Sf; переменные V, XV, ПРЕДШ, ЗАПИСЬ, ХПРЕДШ, ХЗАПИСЬ, ДЛИНА, С, Р, ХС, ХР, s, (........ rлобальные *) 2 begin 3 for u Е V do (* инициализация *) 4 begin ДЛИНА [и]:=== 00; ХПРЕДШ [и]:=== (2); ХЗАПИСЬ [и]:=== 0; 5 for v Е V do ХС[и, v] :===0; 6 for v Е V do ХР [и, v]:=== О (* инициализация нулеnоrо потока*) 7 end; 8 ОЧЕРЕДЬ:==0; XV:==0; ДЛИНА[s]:===О; (* поиск в ширину, начиная от источника s *) 9 ОЧЕРЕДЬs; 10 while ОЧЕРЕДЬ =1= 0 do 11 begln uОЧЕРЕДЬ; XV:==XVU{u}; 12 for v Е ЗА!! ИСЬ [и] do (* поиск соrласованных дуr *) 13 if (ДЛИНА [и] < ДЛИНА [v] ДЛИНА [t]) and (Р [и, v] < С [и, v]) then 14 begin if ДЛИНА[v]===оо then ОЧЕРЕДЬ<i=V; (* v ........ новая *) 15 ДЛJf Н А [v] :=== ДЛ И Н А [и] + 1; (* добавить (и, v) к сети Sf *) 16 ХЗАП ИСЬ [и] :== ХЗАП ИСЬ [и] U {v}; 17 ХПРЕД Ш [v] :== ХПРЕДШ [v] U {и}; 18 ХС [и, v]:=== С [и, v]........ F [и, v] 19 end; 20 for VE ПРЕДШ [и] do (* поиск несоrласованных дуr *) 21 if (ДЛИНА [и] < ДЛИНА [v] ДЛИНА [1]) and (Р [v, и] > О) then 
144 22 23 24 25 6 27 28 29 30 end 31 end 4. ПОТОКИ в сетях и родственные задачи begin if ДЛf/НА[v]===оо then ОЧЕРЕДЬ*=v; (* новый *) ДЛИНА [v] :===ДЛИНА [и] + 1; if ХС [и, v] === О then (* добавить (и, v) к сети 81 *) begin ХЗАП ИСЬ [и] : == ХЗАП ИСЬ [и] U {v}; ХПРЕДШ [v]:== ХПРЕД Ш [v] U {и} end; ХС [и, v]:=== ХС [и, v] + F [v, и] end Пусть по окончании работы процедуры ДЛИНА [t] == 1. Если 1 === 00, ТО это означает, что мы в нашем процессе не достиrли стока t, т. е. в нашей сети не существует увеличивающей цепи от s к t. В силу теоремы 4.3 фактический поток в сети S макси- мальный. Если 1 < 00, то кратчайшая увеличивающая цепь из s в t имеет длину 1, более Toro, леrко отметить, что пути из s в t во вспомоrателыlйй сети взаимно однозначно соответствуют уве- личивающим цепям длины 1 в исходной сети (cTporo rоворя, не- которые из этих «увеличивающих цепей» MorYT использовать одновременно соrласованную и несоrласованные дуrи, допусти- мые от и до v). CTOIIT отметить, что после достижения стока, коrда ДЛИНА [t] < 00, вновь встречаемые вершины уже не рас- сматриваются в процедуре PSA (см. условия в строках 13 и 21), так как ни одна такая вершина, находясь на расстоянии 1 от s, не может быть вершиноЙ цепи длины 1 из s в t. Нетрудно оценить сложность процедуры PSA. Каждая вер- шина v помещается в очередь и удаляется из нее не более од- Horo раза. Каждая дуrа, инцидентная с v, анализируется в точ- ности один раз (в циклах 12 или 20), причем число шаrов для каждоЙ такой дуrн оrраничено константой. Такнм образом, об- щее число Пlаrов будет иметь ПОРЯДОК п + nz, что ДОМI1Нllруется п 2 шаrами инициализации массивов ХС и ХР (строки 5 и 6). Таким образом, вспомоrателыlюю бесконтурную сеть можно по- строить за время О (п 2 ) (можно было бы избежать дороrостоя- щей инициализации массивов ХС и XF, однако применение та- кой модифицированной процедуры со СЛО)КIIОСТЬЮ О (п + nz) не изменило бы оценки О (п 3 ) для Bcero алrоритма построения мак- симальноrо потока). Идея Диница основывается на разбиеllJlИ процесса увеличе- ния потока вдоль увеличивающих цепей на фазы, соответствую.. щие использованию кратчайших цепей определенной длины. Фаза .начинается с построения вспомоrательной бесконтурной сети, затем 80 вспомоrателыIйй сети находится так называемый псевдомаксимальный поток. ПсевдомаксuмальныМ, пOTOKO' 
4.2. Алrоритм построения максималt>ноrо потока 143 n сеТII S, ДЛИНЫ l мы называем произвольный поток r в S" ТИ- кой что в 5, не существует увеличивающей цепи ДЛИНЫ 1 отно- сительно потока [*; друrими словами, для произвольноrо ПУТII из S В t в S" определенноrо последовательностью вершин vo, Vl, ..., Vl (Vo==St [}l==i)t существует дуrа (Vi, Vi+l), О  i < [, такая что r (Vi, [}i+l) === === Cf (Vi, Vi+l). Псепдомаксимальный поток затем «переносится» из вспомоrатеЛЬflОЙ сети в первоначальную сеть: поток {. (и, v) складывается с f (и, v), а еСЛII это вызывает переполнение дуrll, т. е. преВЫUJение потока над пропускной способностью дуrи c{u,v), то этот «избыток» ликвидируется соответствующим умеllbluением потока f{v, и) (таким образом, результатом на- шей модификации всеrда является увеличение DiVf (и) на f* (и, v) If уменьшеНllе DiVf (v) на f* (и. v) ). Нетру дно проверить, что такая МОДИфlIкация потока, проведенная для всех дуr (и, v) вспомоrатеЛЫIОЙ сеТJI, определяет некоторый новый поток {f, та 4 кой что W (f') == W (f) + W ({*). Фазу считаем законченной. Ме- тод Диница основывается lIа выполнении последовательных фаз, начиная с нулевоrо потока, вплоть до MOMeHTa t пока поток D v нашеи сети не станет максимальным. Это показано на рllС. 4.2 (как обычно, при каждой дуrе ука.. заны поток по этой дуrе и в скобках ее пропускная способ- ность). Начиная с нулевсrо п()тока 10 в сети S, мы получаем (а) lJ2. (.1) =V 1 Vz. [= О 1 8V.  1 i=D/ Фаза 1 ., r; V s 2(2) LJ4 (О) V s 0(2.) V 6 J'=V 1 t=lJ 1 St.: о tpl/Jfl Z St;; 1 (2) V 5 O(Z) V4 31: z. Рис 4.2. а) Сеть S и максимальный поток D этой сети; б). в). 2) Вспомоrа.. тельные бесконтурные сети, соотвеТСТВУlощие последовательным фазам алrо- ритма Диница с псеDдомаксимальными лотоками в каждой из них. 2(2) 2(2) 2(2) 2(2) 2(2) tS'=lJ 1 8  8  8  8 » .  . t=V r "5 lJ 4 "J lJ6 Ф(/Jа 3 
146 4. ПОТОКИ в сетях н родственные задачи вспомоrательную бесконтурную сеть S, (рис. 4.2, б). Мы нахо'" дим в ней пссвдомаксимальный поток (метод эффеКТljвноrо по- строения TaKoro nOTOI{a будет разобран далее) и П,ерносим ero в сеть S, получая поток /1. . Затем мы строим сеть Sfl (рис. 4.2, в) и найденный в ней псевдомаксимальный поток переносим в сеть S, что дает поток 12. В последней фазе мы строим сеть Sf'l (рис. 4.2, z). После пе ренесения псевдомаксимальноrо потока из Sf2 в S получаем в S поток f (показанный на рис. 4.2, а), который является макси- мальным, ибо W(f)4c({s},{s}) (см. теорему 4.3). Рис. 4.2, в хорошо иллюстрирует тот факт, что псевдомакси- мальный поток не должен быть максимальным. Действительно IIсевдомаксимальный поток, показанный на этом рисунке, мы можем увеличить вдоль следующей увеличивающей цепи длины 5: VI' (аl, vs), 05, (Vs, (4)' 01, (V з , ( 4 ), VЗt (0з, Vб), Vб, (Vб, ( 7 ). V 7 . Отметим еще, что дуrа (V4, Vз) сети Sf2 (рис. 4.2, z) возникла из двух противоположно направленных дуr сети S. Метод Диницо эффективен в основном изза Toro, что неза- висимо от пропускной способности дуr число фаз не превышает n. Для доказательства этоrо факта обозначим через Sk вспомо- rательную бесконтурную сеть, построенную в k-й фазе, а через lk ......... длину этой сети. (Внимание: последний вызов процедуры PSA., в котором не достиrается сток, за фазу не считается.) Лемма 4.4. Если число фаз превышает k, ТО lk < lk+l. Доказательство. Обозначим через dk(v) расстояние в Sk от S до v. Нужно доказать, что d k + 1 (t) > d k (t). Рассмотрим в Sk+l произвольный путь VO, VI, ..., Vl k + 1 из S === VJ в t === Vl k + l . Предположим, что для HeKoToporo р  lk+l все вершины Vi, О  i  р, принадлежаr сети Sk. Покажем сначала, что тоrда dk(Vi+I)dk(VI)+ 1, Oip. (4.9) Допустим, что это не так, т. е. что d k (Vi+l) > d k (Vi) + 1 ДJIЯ не... KOToporo i. Соrласно правилам построения сети Sk это означает, что Sk не содержит дуr (Vi, Vi+l) (и, очевидно, не содеРЖIIТ также дуr (Vi+I, Vi». Таким образом, во время k-й фазы в S не модифицируется HII поток из Vi В Vi+l, ни из Vi+l В Vi. Однако это противоречит существованию в начале (k + 1) -й фазы дуrн в S, допустимой от Vi до Vi+l, которой Не было в начале k-й фазы. Это противоречие доказывает неравенства (4.9). Из этих неравенстн. учитывая, что d k (vo) === О, индукцией по i выводим, что d k (Vl)  i === d k + 1 (Vt), О  i  р. (4.1 О) 
4.2. Алrоритм построения максимальноrо потока 147 rде Если все вершины пути Vo, V}, ..., Vl k + 1 принадлежат сети Sk, то отсюда, следует неравенство d k (t)  d k + 1 (t). Равенство d k (t) === dk+l (/) было бы возможно, только коrда dk(Vi) == k+l(Vi), О  i  lk+t, но леrко заметить, что повторение пути Vo,OI, .. . ..., Vl k + 1 В Sk И Sk+l противоречило бы псевдомаксимальности потока, наЙденноrо в Sk. Следовательно, должно быть d1e+l (t) >. > dk(t). Рассмотрим теперь случай, коrда существует вершина пути [10, 01, ..., Vlk+l' не ПРlIнадле}кащая Sk. Пусть Vp+l......... первая такая вершина (очевидно, что 1  р + 1  lk+l  1). Рассуждая аналоrИЧIlО предыдущему, мы мо)кем сделать вывод, что появ- ление в Sk+l дуrн (V p , V p +l), которой не было в Sk, может быть вызвано только тем, что dk(Vp) dk(t) 1, и до вершины Vp+l мы ДОХОДIIМ уже после достижения стока t (так что она не включается в Sk). УЧlIтывая (4.1 О) и тот факт, что вершины [10, Vl, ..., Vp1 ПРllllадлежат сети S/l, получае1 lk===dk(/)===dk(v p ) + 1 dk+l (v p ) + 1 ===р+ 1 lk+l. 11 Принимая ПО ВIIиtаlIне то, что 11  1 и lk  n  1 для про- IIЗВОЛЫlоrо k, получаем Следствие 4.5. Число фаз в .А,tетоде Диница не превышает п 1. Нам осталось только рассмотреть эффективный алrоритм по- строения псеВДОl\lаКСIItа.пьноrо потока 80 вспомоrательной бес- контурной сети. Авторами метода, который мы ОПllшем, являют- ся Малхотри, Кумара и Махешвари [48], метод реализуется в процедуре MAXPSA, описанной ниже. Чтобы описать эту про- цедуру, введем понятие потенциала вершины сети, т. е. макси- мальноrо количества потока, который можно «пропустить» че- рез эту верIUИНУ. Он определяется как минимум двух величин: маКСlIмальноrо возможноrо потока в вершину v (входной по.. тенциал) и максимальноrо возможноrо потока из вершины V (выходной потенциал). Точнее, потенциал вершины V произволь" ной сети S === (О, с) с источником s и стоком t равен П (а) === min {П ВХ (v), П вы х (v)}, { L с (и, v), если v =t= 5, ПВХ(v) === и: иo 00, если v == s и { L с (о, и), ОВЫХ (v) == и: v--+u 00, если v =1= t, если v == t. 
148 4. ПОТОКИ в сетях и родствеlНlые задаЧtl Процедура MAXPSA сначала вычислят потенциалы IЗсех вершин во вспомоrательной бесконтурной сети (crpoКII 3....;..- 12), помещая вершины с нулевым потенциалом в стек СТЕК. Оче- видно, что вершину с нулевым потенциалом можно удалить 1IЗ сети вместе со всеми инцидентными ей дуrами, не оказывая влияния на какой-либо поток в этой сети. Удаление та кой вер- шины, а точнее, инцидентных ей дуr, может вызвать обращение в нуль потенциалов некоторых сосеДlIlIХ вершин, удаление кото.. рых обращает в нуль потенциалы друrих вершин и т. д. Этот процесс реализуется в цикле 17. После выхода из этоrо ЦJlкла (коrда СТЕК === 0) множество XN содержит вершины BcnoMora- тельной бесконтурной сети с ненулевым потенциалом (ВЫЧИС.1яе- мым в сети, модифицированной последовательным уда.пением вершин с нулевым потеJlциа.пом). Если XN ===;0, то наступает важный момент: в XN ищется веРШlIна r с МIIlIимаЛЫIЫМ ПОТСII- циалом р === п (r) (строки 38 --7-- 41). Затем мы наХОДIIl\1 IЗ нашей бесконтурной сети поток из r в t веЛIlЧlIlIЫ р (СТрОКII 42765) и поток из s в r веЛИЧIIНЫ р (строки 66 7 91 ); в сумме это дает поток из s в t веЛIJЧИНЫ р. ОПllшем lIepBYIO часть......... поток из r в t; вторая часть полностью аналоrИЧllа. Наш ПОТОI{ будет ис- пользовать только соrласованные во вспомоrателыlйй беСI\ОН- турной сети допустимые дуrи, а метод этоrо вычисления интуи- тивно лучше Bcero объяснить слеДУЮUIIIМ обра301. ПредстаВIIМ себе, что в вершине r мы помеСТIIЛИ «rруз» величины Q [rJ === р и хотим этот rруз «протолкнуть» до стока t так, чтобы I\ОЛllче- ство rруза, перемещаемое по любой дуrе, не превыIа.nоo ее про- ПУСКIIОЙ способности. Для этоrо мы ведем в нашей ceTII ПОIIСК в ШlIрИНУ, наЧlIная с вершины '. Как обычно ПрlI поиске в ши- рину достиrнутые, но еще не использованные вершины запоми- наются в очереди. Каждая вершина v, выбllраемая из очереди (строка 43) и не являющаяся стоком, «разrружается» (строки 49+64). Это заключается в перенесеНIIИ rруза Q[v] в вер- шины и, к которым ведут дуrи из и. Этот rруз переllОСIIТСЯ в не- сколько первых вершин в списке ХЗАПИСЬ [v], причем rpy3, v перенесенныи в каждую такую вершину, за Jlсключением, может быть, последней, равен пропускной спосоБНОСТII ХС [v, и]. Таким же способом на всех использованных дуrах (v, и), за исключе- нием, может быть, последней, устанавливается поток XF[v, и] === == XC[v, ul, и эти «насыщенные» дуrи мы можем устранить IIЗ сети (строки 57....;-.- 60; вспомним, что мы ищем псевдомаксималь- вый поток, следовательно, можно оrраНIIЧIIТЬСЯ соrласоваНIIЫМII допустимыми дуrаМII вспомоrате.пьной беСI(ОНТУРIIОЙ сети). У стра- HeHlle дуr сопровождается соотвеТСТВУЮЩИ1 уменьшением по" тенциалов (строки 44....;-.- 46). Вершины сеТII посещаются со- r ласно схеме поиска в lIlИрIIНУ, а следовательно, если d ДЛИНА lr], весь rруз из вершины r I1ерСIIОСIlТСЯ в вершины, 
4.2. Алrоритм построения максимальноrо потока 149 находящиеся на расстоянии d + 1 от s, и далее в вершины, на- ходящиеся на расстоянии d + 2 от s и т. д., пока весь rруз не достиrнет стока t. Отметим, что rруз, достиrающий каждой Bep шины v, Не превышает р, и эту вершину мы можем разrрузить (если v =1= t), так как р, будучи- равным минимальному потен- циалу, несомненно не превышает ВЫХОДllоrо потенциала вер... шины v. После построения ана.поrИЧIIЫМ способом потока величины р из s в , закончена первая итерация rлавноrо цикла (строка 15), состоящая в удалении вершин с нулевым потенциалом и в уве- личении потока на веЛllЧИНУ Мlfнимальноrо в данный момент потенциала. Дальнейшие итерации следуют вплоть до момента, коrда уже нет вершин с ненулевым потенциалом (Т. е. XN == 0). Очевидно, что найденный тоrда в нашей сети поток является псевдомаксимальным. 1 procedure MAXPSA; (* построение псевдомаксимальноrо потока во вспомоrательной бесконтурной сети методом Малхотри, I(умара и Махешвари; переменные XV, ХС, XF, ХПРЕДШ, ХЗАПИСЬ, s, t........ rлобальные *) 2 begin 3 СТЕК:=== 0; (* СТЕК будет содержать вершины с нуле- вым потенциалом *) 4 for v Е XV do (* опредслсние потенциала вершины v *) 5 begin ПВХ[v]:==О; ПВЫХ[v]:==О; 6 if v==s then ПВХ[v]:==оо 7 else for и Е ХПРЕДШ [v] do ПВХ[v]:===ПВХ[v]+ХС[u, v]; 8 if v == t then ПВЫХ [v):=== 00 9 else for и Е ХЗАП ИСЬ [v) do П ВЫ Х [v] :== П ВЫ Х [и] + ХС [v, и); 10 П[v] :===пzin(ПВХ[v], пвыхtv]); 11 ifП[v]===О then CTEK=>v 12 end: 13 for v Е XV do Q [и] :== о; (* инициализация rрузов в вер- шинах*) 14 XN:== XV; (* XN будет содержать вершины с нснулевыIM потенциалом *) 15 \vhile XN =1= 0 do (* rлавный цикл *) 16 begin (* удаление вершин с нулевым потенциалом *) 17 while СТЕК =1= 0 do 18 begin v *= СТЕК; XN:=== XN ,,{v}; ( * удаление дуr, входя щих в v *) 19 for и Е ХПРЕДШ [v] do (* удаление дуrи (и, а) *) 
150 4. ПОТОКИ в сетях и родственные задачи 20 begin П ВЫ Х [и] : П ВЫ Х [и] ....... (ХС [и, v]  XF [и, v]); 21 ХЗАПИСЬ[u):ХЗАПИСЬ[u) \{v}; ХПРЕДШ [и]: ХПРЕДШ [v] '\ {и}; 22 if П [и) =1== О then (* модификация П [и) *) 23 begin П [и] :=== min (П ВХ [и], П вы Х [и); 24 if П[u]О then CTEK<i=u 25 end 26 end (* удаление дуr, исходящих из v *) 27 for u Е ХЗАПИСЬ [v] do (* удаление дуrи (о. и)*) 28 Ье g i n П В Х [и] :  П в х [и] ........ (Х с [ v t и] ...... Х F [ о, и]); 29 ХПРЕДШ (и] :=== ХПРЕДlU [и] '\ {v}; ХЗАЛИСЬ (v] :===ХЗАПИСЬ [v] '\ {и}; 30 if П [и] =f..= О then (* модификация П [и] *) 31 begin П[u]:miп(ПВХ[u], ПВЫХ[u]); 32 if П [и]  О then СТЕК <= u 33 end 34 end 35 end; (* XN является множеством вершин с ненулевым потенциалом *) 36 if Х N =1= 0 then (* поток еще не является макси" мальным *) 37 begin (* нахождение вершины r с минимальным потен- циалом *) 38 р :  00; 39 for v Е V N do А' П [а] < р then 40 begin ':=== а; р:== П [r] 4 1 end: (* построение потока величины р ИЗ r в t *) 42 ОЧЕРЕДЬ:==0; ОЧЕРЕДЬ<i=r; Q[r]:===p; 43 repeat v  ОЧЕРЕДЬ; 44 ПВХ[v]:ПВХ[v]Q[v]; 45 ПВЫХ [v]: ПВblХ [v]....... Q[v]; 46 П [v] :== П [v]  Q [v); 47 if П [v] === О then СТЕК *= v; 48 ifv==t then Q[v]:p 49 else 50 begin (* разrрузка вершины v *) 51 и:== первая вершина в списке ХЗАП IICb [v]; 52 while Q [v] > О do 53 begln if Q[u] ===0 then ОЧЕРЕДЬ-<=u; 54 delta:=== min (Q [v], ХС [v, и]  XF [v, и]); 55 ХР [v, и] :== ХР [v, и] + delta; 
4.2. Алrоритм построения максимальноrо потока 151 91 92 93 Q [а] : == Q [а] ---- del t а; Q [и] :== Q [и] + delLa; if ХР[а, u]===ХС[а, и] then (*удале" ние (а, u)*) begin ХЗАП ИСЬ (а]:== ХЗАП ИСЬ [v] '\ {и}; ХПРЕДШ Iu] :===ХЛРЕДШ [и] ,,{v} end; if Q[v] > О then u :=== следующая после и вершина списка ХЗАЛИСЬ [а] end end (* конец разrрузки вершины v *) until v === '; (* поток из r в t наЙден *) (* построение потока величины р .иЗ s в , *) ОЧЕРЕДЬ:== 0; ОЧЕРЕДЬ<i=r; Q[r] :===р; repeat v <i= ОЧЕРЕДЬ; if v =1= r then (* п [v] еще не Уlеньшен *) begin ПВХ [v]:=== ПВХ [v]  Q [v]; ПВЫХ [и]:=== ПВЫХ [и]  Q [v]; П [и] :=== П [v]  Q [и]; if П [а] === О then СТЕК <i= v end; if v === s then Q [а]:== О else begin (* разrрузка вершины v *) и:== первая вершина в списке ХПРЕДШ [и); while Q [и] > О do begin l' Q(u)==O then ОЧЕРЕДЬ..f;=U; delta:== min (Q [а], ХС [и, а] ---- ХР [и, v]); ХР [и, v]:=== ХР [и, а] + delta; Q [а] :=== Q [и]  delta; Q [и] :=== Q [и] + delta; if ХР (и, v] == ХС [и, v] then (* удаление (и, v) *) begin ХПРЕДШ [а] :=== ХПРЕДШ [а] ,,{и}; ХЗАП ИGЬ[u] :===ХЗАП ИСЬ[u] ,,{v} end; if Q[v] > О then и :=== следующая после и вершина в списке ХПРЕДШ [а] end end (. конец разrрузки вершины v *) until v == s (. найден ПОТОК из s в , *) 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 
152 4. ПОТОКИ в сетях и родственные задачи 94 end (* конец увеличения потока вдоль единичной вершины *) 95 end (* конец rлавноrо цикла *) 96 end (* конец процедуры MAXPSA *) Оценим теперь число шаrов, выполняемых процедурой MAXPSA. Определение потенциалов (строки 3 -7- 12) требует О (п + т) шаrов, поскольку каждая дуrа (и, v) анализируется не более двух раз: при вычислении ПВbJХ[u] и ПВХ[v]. Общее число шаrов во всех итерациях rлавноrо цикла, выполняемых фраrментом процедуры, удаЛЯЮЩIIМ вершины с нулевым потен- циалом (строки 17 -7- 35), также порядка О(п + т), так как каждая вершина заносится в СТЕК в ТОЧIIОСТIl один раз, а при удалении этой вершины из стека удаляются все ИlIцидснтные ей дуrи (циклы 19 и 27), так что каждая дуrа удаляется ие более одноrо раза. Каждая итерация r.паВlIоrо цикла вызывает обра- щение в нуль потенциала хотя бы одной верШIIНЫ, а IIменно вер- шины '. Таким образом, число итерацнй этоrо цикла не прево- сходит п. Каждая итерация, кроме проанаЛIlзированноrо уже процесса уда.пения вершин с нулевым потенциалом, содержит две чаСТII, являющиеся в основном процессами ПОlIска в ши- рину  от r до t и от s до '. Сложность этих частей порядка числа анализируемых дуr. Анализ дуrи может быть «уничто- жающим», коrда анализируемая дуrа насыщается потоком и удаляется из сети, ИЛII «неУlIичтожаЮЩIIМ», коrда дуrа остается в сети и может быть проана.пИЗllrована в последующих итера- циях rлавноrо ЦlIкла. ОчеВIIДНО, что в течение всех IIтераций rлаВllоrо ЦlIкла мы аllа.пIlЗllруем УНИЧТОiкающим способом О (т) дуr, а во время каждой итерации неуничтожающим способом анализируем не более n дуr, по одной на каждую посещаемую вершину. В сумме это дает число шаrов во всех итерациях rлав- Horo цикла порядка т + п 2 , т. е. О (п 2 ). Отсюда мы делаем вы- вод, что общая ВЫЧИСЛlIтельная сложность процедуры MAXPSA равна О (п 2 ). Во время нашеrо анализа мы предполаrалн, что удаление дуr из нашей сети (строки 19, 27, 58 и 85) можно выполнить за время, оrраIlичеIlllое константой. Это возможно, если появление вершины v в списке ХЗАПИСЬ [и] и вершины и в списке ХПРЕДШ [и] взаимно связаны указателями 11 каждый элемент списка содерЖIIТ указатель как на предыдущий, Tal( JI на после- дующий элементы списка. Теперь мы можем собрать уже ОПllсанные процедуры PSA и MAXPSA в полный алrоритм построеНIIЯ максlIмалыIrоo потока. Алrоритм 4.6. (Построение максимаЛЬНОIО потока в сети.) Данные: Сеть, представленная списками инцидеНТIIОСТИ ПРЕДШ[v], ЗАПИСЬ(vj, v Е V, пропускные епо.. 
4.2. Алrоритм построения максималыlrоo потока 153 собности С [и, v], и, v Е V, источник s Е V И сток t Е V. Результаты: Маl(симальный ПОТОI{ F [и, v], и, v Е V. 1 begin 2 for u Е V do 3 for v Е V do F [и, v] :== о; (* нулевой начальный поток *) 4 repeat PSA; (* построение вспомоrательной бесконтур- ной сети *) 5 if ДЛИНА [/] =1= 00 then (* поток F не является ма- I(симальным *) 6 begin MAXPSA; (* построение максимальноrо по- тока во вспомоrательной сети *) (* перенести поток из вспомоrательной сети в rлавную *) for II Е XV do (* XV == множество вершин вспо- моrательной сети *) for v Е XV do begin F [и, v]:=== F [и, v] + хр [и, v]; ifF[u, v]>C[u, v] then begin F [v, и] :== F [v, и]  (Р [и, v]  С [и, v]); F [и, v]:== С [и, v] end end end (*КОllец фазы*) until ДЛ /1 Н А [t] == 00 (* поток F  маI(снмальный *) 7 8 9 10 1 1 12 13 ] 1 15 16 17 end Исходя из проведенноrо уже анаЛllза процедур PSA и MAXPSA, а также IIЗ Toro, что число фаз не превышает n (см. следствие 4.5), получаем Следствие 4.7. АЛсОРUТАt 4.6 правильно строит .максималь" ный поток за время О (п З ). Отметим, что анализом этоrо алrоритма мы доказали суще- ствование максима.пьноrо потока в произвольной сети и тем са- мым предоставили недостающий фраrмент для доказательства фундаментальноЙ теоремы о максимальном потоке и МlIнималь ном разрезс (теорема 4.2). Стоит отметить, что алrоритм 4.6 не подходит непосред ственно под схему последовательноrо увеличения потока вдоль увеличивающих цепей, однако метод, использованный в этом алrоритме, можно считать обобщением методики увеличивающих цепей. Увеличение потока (на значение, равное минимальному потенциалу) происходит вдоль несколько более общеЙ СТРУК- 
154 4. ПОТОКИ в сетях и родственные задачи туры, чем единичная увеличивающая цепь от s до t. Эту струк- туру можно было бы назвать «кратной увеличивающей цепью» DT s до t, проходящей через вершину' (с минимальным потен- циалом). Использование такой кратной цепи приводит к удале- НИЮ из сети хотя бы одной вершины, а не одной дуrи, как в случае единичной увеличивающей цепи......... отсюда меньшее число о итерации и тем самым лучшая оценка сложности алrорнтма. В заключение сформулируем следующее очевидное, но важ- ное свойство алrоритма 4.6. Теорема 4.7. Если все пропускные способности дУ2 являются целыми числами, ТО максимальный поток {, построенный аЛ20 рит MOJ.t 4.6, .........целочuСлеННый, Т. е. f (е) является целы,и чиСЛОJL для каждой дуеи е. 11 4.3. Наибольшие паросочетания в двудольных rрафах ПаросочетаниеJИ в неориептнроваНIIОМ rрафе G == (V, Е) на- зывается пронзвольное множество ребер М  Е, такое что нн" какпе два ребра 113 М не lIнцндентны одной вершине. Друrнм 11 словами, М есть паросочетанне, если для кая(дых двух ребер el, е2 Е М имеем либо еl === е2, либо еl n е2 == 0. Для каждоrо ребра {и, v} Е М мы rоворим, что М COfleTaeT и с v, а каЖДУIО вершину, не принадлежаЩУIО ни одному ребру паросочетаНIIЯ, будем называть свободной. ОсобеНIIО интересны задачи, связан- ные с паросочетаНIIЯIИ в двудольных rрафах, т. е. в неориенти" рованных rрафах G ==( V, Е), таких что множества их вершин можно разбить на непересекающиеся множества V === Х U У, Х n у == 0, причем каждое ребро е Е Е имеет вид е === {х, у}, rде ХЕХ, УЕ У (см. задачу 4.15). Двудольный rраф будем обозна.. чать (Х, У, Е) (это обозначение предполаrает фиксацию некото- poro разбиения множества вершин на множества Х и у......... оно не определяется однозна чно через множества V и Е). В этом разделе мы займемся задачей нахождения наиболь шеrо паросочетания в заданном двудольном rрафе. Это класси- ческая задача комбинаторики, известная также под названием сзадачи о супружеских парах». Такое название связано со сле- дующей интерпретацией. Пусть Х и У......... соответственно множе- ства юношей и девушек, и пусть {х, у} Е Е означает, что юноша х знаком с девушкой у. Тоrда каждое паросочетание М соот- ветствует возможному множеству супружеских пар, в котором каждая пара образована из юноши и девушки, знакомых между собой, причем каждый человек участвует не более чем в одной -паре. 
4.3. Наибольшие паросочетания в двудольных rрафах 151 Оказывается, что задачу нахождения наибольшеrо паросоче.. танин в двудольном rрафе можно простым способом свести к построению максимальноrо потока в lIекоторой сети. Пусть Н === (Х, У, Е)  произвольный двудольный rраф. Построим сеть S(H) с источником S, стоком, .(5 =1= t и S, t Ф. Х U У), множеством верШIlН V. == {5, t} U Х U У, множеством дуr Е* == {(5, х): х Е Х} U {(у! f;: у Е У} и {(Х. у): х Е Х Л у Е У Л {x у} Е Е} и пропускной способностью с(и, v) == 1 для каждой дуrи (и, v) Е Е*. У1 .%'4 s t' Х 1 Х 2 Х 3 Ys н .s (Н) Рис. 4.3. Построение сети  (Н) дЛЯ двудольноrо rрафа Н и нульединИЧНЫЙ поток, соответствующий паросочетанию М == {{Xl, У2} t {Хз, УБ}. {Х4. уз}}. На рис. 4.3 показано построение сети S (Н) дЛЯ HeKoToporc двудольноrо rрафа. Отметим, что соrласно теореме 4.7 в S (Н) существует макси- мальный нуль-единичный поток, т. е. максимальный поток " та- кой что '(е) == о или '(е)  1 для каждой дуrи е Е Е*. Теорема 4.8. Существует взаимно однозначное соответствие между nаросочетания.м.u в Н и нуль..единичнымu потоками 8 S(H), при которо.м. nаросочетанию M=={{Xl,Yl}, ..., {Xk,Yk}} .мощности k (Xi Е Х, Yi Е У для 1  i  k) соответствует поток 1м величины k, определяемый следующим обраЗО14: fM(S, xl)==fM(X l , Yi)===fM(YI, t)=== 1, 1 ik, (4.11) 
156 4. ПОТОКИ в сетях и родственные задачи и 'М (е) == О для остальных дУё е сети S (Н); потоку f величины k соответствует паросочетание мт, 1 М, 1  k, определяемое сле- дующим образом: Mf{{X, у}: ХЕХ ЛУЕУ лf(х, y)==l}. (4.12) Доказательство. ЕСЛIl М {{Xl, Yl}, ..., {Xk, Yk}} паросо- четание мощности k, то вершины Xl, ..., Xk, а также Yl, ..., Yk попарно различны. Отсюда сразу же следует, что DiVfM (Xi)  с= DivfM(y,)  о, 1 <: i  k, т. е. функция (М, определяемая фор- мулой (4.11), является потоком из s в t в S(H). Леrко заметить также, что разным паросочетаниям М соответствуют разные по- токи 'М. С друrой стороны, если f  нуль-единичный поток в S (Н), то количество потока, прибывающеrо в (а следовательно, и вытекающеrо из) каждую вершину Х Е Х, не превосходит еди- ницы (единственная дуrа, входящая в х,  это дуrа (5, х) с про- пусквой способностью, равной 1). Отсюда следует, что в мно- жестве М,, определяемом (4.12), нет ребер вида {х, Yl}, {х, У2}, Уl =1= У2. По аналоrичным причинам в М, нет ребер вида {Хl, у}, {Х2, у}, Xl =1= Х2. Следовательно, М , является паросочета- нием в Н. Нетрудно также отметить, что отображение (M, является обратным к отображению М  f м' Т. е. f М! === f и MfMM. 11 Теорема 4.8 позволяет использовать произвольный алrоритм построения максимальноrо потока (цеЛОЧllсленноrо) для опреде- ления максимальноrо паросочетания. Используя алrоритм 4.6, мы находим наибольшее паросочетание за О(п 3 ) шаrов. Ока- зывается, однако, что особая форма сети S (Н) позволяет по- строить более эффективный алrоритм. Этот алrоритм, авторамн KOToporo являются Хопкрофт и Карп [33], использует общую схему Диница, т. е. состоит из фаз, соответствующих увеличе- нию потока вдоль кратчайших увеЛИЧlIвающихся цепей опреде- ленной длины. Особый вид сети позволяет, однако, как оrрани- чить число фаз, так и построить более эффективный алrоритм построения псевдомаксимальноrо потока в каждой фазе. Отметим сначала, что каждая увеличивающая цепь в S (Н) будет Ilечетной ДЛIIНЫ и будет состоять после отбрасывания пер- вой и последней дуr из последовательности попеременно чере- дующихся соrласованных и несоrласованных дуr (начинающей- ся и заканчивающейся соrласованной дуrой). Для данноrо Па- росочетания М мы будем называть чередующейся цепью (длины 1  2k +' 1 из Х в У) относительно М произвольное множество дуr Р с:: Е вида р == {{Ха, YI}, {Yl, Xl}' {Хl, У2}' ..., {Yk, Xk}, {Xk, Yk+l}}' (4.13) 
4.3. I-IЭlluольшие паросочстзния в двудо..']ыIхx rрзфах 157 rде k > О, все вершины Хо,..., Xk, Yl,..., Yk+l раЗЛИЧIIЫ, хо......... свободная вершина в Х, Yk+l  свободная вершина в У, каждая вторая дуrа принадлежит М, т. е. Р n м === {{Yl' Хl}, {У2, Х2}' ..., {Yk, Xk}}. ОчеВIIДНО, что чередующуюся цепь можно однозначно опреде- лить последовательностью Хо, Yl, Xl, У2, ..., Yk, Xk, Yk+J. Разу- меется, что при описанном в теореме 4.8 соответствии ме}l(ДУ паросочетаНIIЯМИ в Н и нуль-еДИНИЧНЫМII потоками в ceTII S(//) чередующаяся цепь (4.13) естествеНIlЫМ образом соответствует неl{ОТОРОЙ увеличивающей цепи относительно потока tM в S (Н), а именно цепи s, (5, хо), Ха, (Ха, У.), Yl (Х 1 , Yl)' Xl' (X 1 , У2)' У2, ... · · ., Yk, (Xk, Yk)' Xk, (Xk, Yk+l), Yk+l' (Yk+l' '), " причем увеличение потока f м вдоль этой цепи дает поток, соот- ветствующий паросочетаНIIЮ, определенному симметрическоЙ разностью М ЕВ Р. Это пронллюстрировано на рис. 4.4. <.. м р Рис. 4.4. 'веЛJlчеНJlе паросочстзння М вдоль черсдующеЙся иепи Р. МЕБР Из приведенных выше раССУ)l{деIlИЙ непосредственно выте... кает следующая теорема. Теорема 4.9 (Берж). Паросочетание М в двудОЛЫ-lОАt 2рафе Н наиБОЛЬULее ТОёда и только ТОсда, КО2да в Н не существуеr чередующейся цепи относительно М. 11 Рассмотрим, как выrлядит псевдомаКСlIмальный поток ВО вспомоrательной бесконтурной сети, построеНIIОЙ для сети S (Н) и HeKoToporo цеЛОЧllслеllllоrо, а следовательно, нуль..еДИНИЧllоrо потока в этой сети. Потенциал каждой верШIIНЫ, отличной от s и " составляет О или 1, так как входной потенциал каждой вершины х Е Х И выходной потенциал каждой вершины у Е 1: 
158 4. ПОТОКИ в сетях и родственные задачи во вспомоrательной сети равен единице. Нетрудно заметить, что «увеличивающая кратная цепь», найденная на каждой итерации I'лавноrо цикла процедуры MAXPSA (СМ. предыдущий раздел), имеет вид один()чной увеличивающей цепи. Более Toro, все про.. межуточные вершины (т. е. отличные от s и t) такой цепи имеют потенциал, равный единице, а, следовательно, при увеличении потока вдоль этой цепи их потенциал убывает до нуля и 01111 удаляются из сети. Теперь ясно, что во вспомоrательной беСI\ОН" турной сети длины l + 2 поток идет вдоль максимальноrо мно" жества путей длины 1 + 2 из s в t с попарно непересекающимися множествами промежуточных вершин. Этому множеству есте.. ственным образом соответствует максимальное множество чере.. дующихся цепей длины 1 с попарно непересекаЮЩIIМИСЯ MIIO)l(e- ствами вершин (под «максимальным» мы подразумеваем такое множество, которое нельзя увеличить на дополнительную че.. редующуюся цепь длины 1 и на lvIHO)l(eCTBO веРШIIН, не содер- жащее IIИ одной верШIlНЫ преЖНIIХ цепей). Ниже детально описан алrоритм 4.1 О, 1I0СЯll!НЙ IIМЯ Хопк.. рофта......... Карпа. В этом алrоритме вспомоrательная бесконтур.. иая сеть, а точнее вспомоrательный беСКОIIТУРНЫЙ rраф, по.. скольку ПРОПУСКllые способности всех ребер равны еДIlIIице, строится при ПОМОЩII процедуры РОА. Чтобы объяснить ее дей- СТВllе, удобно ввести в рассмотрение для даIlноrо двудолыIrоo rрафа Н == (Х, У, Е) 11 паросочетаllllЯ i\1 в Н ОрllеllтированныЙ rраф Н 1\1 посредством ориентации всех ребер е Е М от У к Х 11 всех ребер е Е Е",м от Х к У (nYTII 13 НМ от свободной I3ер- UIИНЫ в Х до свободноЙ вершнны в У в точности соответствуют чередующнмся цепям относительно М). Процедура РОА сначала строит дуrи от источника s до всех свободных вершин х Е Х (строки 6 -+- 1 О). Далее проводится поиск в ширину в rрафе Н м, начиная от свободных вершин в х. При нахождении каждой сво- бодной вершины у Е У добавляем во вспомоrательный бескон- турный rраф дуrу (у, t> (строки 14 -+- 17), причем с момента до- бавления первой такой дуrи MbI уже в процессе поиска не рас- сматриваем вершин, находящихся на расстоянии, большем ИЛIl равном расстоянию ОТ s до t (см. условие в строке 20). Увели- чение существующеrо паросочетания вдоль максимальноrо мно- жества кратчайших увеличивающих цепей с попарно различ- ными множествами вершин реализуется процедурой ФАЗА. Она ведет поиск в rлубину во вспомоrательном бесконтурном rрафе, начиная с s. rлавный цикл в строке 40 напоминает нерекурсив- ную процедуру поиска в r лубину WG 1 (см. 2.2). Каждый раз, коrда в нашем процессе мы достиrаем стока t (см. строку 50)  содержимым стека СТЕК является последовательность вершин, представляющая некоторую чередующуюся цепь (отметим, что сток t не помещается в СТЕК, тем самым все время HO 
4.3. Наибольшие паросочетания в двудольных rрафах 159 ВЫй [t] == истина и, следовательно, t может посещаться MHoro.. кратно). Цикл 52 выполняет МОДИфИI(ацию массава СОЧЕТ, соответствующеrо увеличеНИIО паросочетания вдоль таI{ОЙ цепи. Отметим, что если 80 время выполнения на.шей процедуры некоторой веРШlIне v Е V приписывается значение но- ВЫй[v] :==ложь, то эта процедура либо находит затем чере- дующуюся пепь, проходящую через эту вершину, либо устанав- ливает, что не существует ни одной цепи, проходящей через эту вершину и не пересекающей ни одной из ранее найденных цепей. Отсюда леrко следует, что процедура ФАЗА находит максимальное множеС1 во llепересекаЮllIНХСЯ кратчайших чере- дующихся цепей. Корректность Bcero алrоритма следует из ана- лиза метода Диница, проведенноrо в предыдущем разделе. Алrоритм 4.10. (Нахождение наибольшеrо паросочетаНIIЯ методом Хопкрофта......... Ка рпа.) Данные: Двудольный rраф Н == (Х, У, Е), представленный списками инцидеНТIIОСТИ ЗАПИСЬ [х], х Е х. Результаты: Наибольшее паросочетание, представленное мас- сивом СОЧ ЕТ (СОЧЕТ [v] есть вершина, соче- тающаяся с v или с нулем, если v......... свободная вершина) . 1 procedure РОА; (* построение вспомоrательноrо бесконтурноrо rрафа; пере- менные У, XV, Х, У, СОЧЕТ ЗАПИСЬ, ХЗАЛИСЬ, s, t ........ r лобальные *) 2 begin 3 for и Е V U {s, '} do (* инициализация *) 4 begin длин А [и] :== 00; ХЗАП ИСЬ [и] :== 0 5 end; (* поместить свободные вершины х Е Х В очередь и в спи- сок ХЗАП ИСЬ [s] *) 6 ОЧЕРЕДЬ:==0; XV:=={s}; ДЛИНА [s]:==O; 7 for х Е Х do 8 if СОЧЕТ[х]==О then (*хсвободная*) 9 begin ОЧЕРЕДЬх; ХЗАП ИСЬ [s] :== ХЗАП I1СЬ [s] U {х}; ДЛИН А [х] :== 1 10 end; (* поиск в ширину, начиная со свободных вершин в Х *) 11 while ОЧЕРЕДЬ =1= 0 do 12 begin uОЧЕРЕДЬ; XV:==XVU{u}; 13 lf uе:У then 14 if СОЧЕТ[u]==О then (*и........сВободНая, добавить дуrу (и, ') *) 
160 4. ПОТОКИ в сетях и родственные задачи 15 16 17 18 19 20 21 22 23 24 25 26 27 28 9 begin ХЗАП ИСЬ [и] : ХЗАП ИСЬ [и] U {t}; XV : XV U {t}; ДЛИНА[t]:ДЛИНА[Il]+ 1 end else (*СОЧЕТ[u] =1= 0*) begin х :СОЧЕТ[и]; if ДЛИН А [t]  00 then (* добавить дуrу (и, х) *) begin ОЧЕРЕДЬх; ХЗАП ИСЬ [и] :== ХЗАП у/СЬ [и] U {х}; ДЛИНА[х]==ДЛJfНА[u] + 1 end end else (*ие:Х*) for у Е ЗАП ИСЬ [и] do if ДЛИНА[u] < ДЛИНА [у] then (*ДЛИНА[у]ДЛИНА[u]+l или 00*) begin if ДЛИНА[!I]==ОО then ОЧЕРЕДЬ<i=У; (* у  новая *) ХЗАП ИСЬ [и] :== ХЗАП ИСЬ [и] U {у}; ДЛИНА[у]:==ДЛИНА[u]+ 1 end 30 31 end 32 end; (* РОА *) 33 procedure ФАЗА; (* увеличение сущеСТВУlощеrо паросочетаНIIЯ ВДОЛЬ макси- мальноrо множества путей из s в , с попарно различ- ными множествами ПРО!\1ежуточных вершин во вспомо- rательном бесконтурном rрафе; переr\1енные XV, Н А ЧАЛ О, ХЗАПИСЬ, СО ЧЕТ, S, t..... rлобальные *) 34 begin 35 for u Е XV do (* инициализация *) 36 begin НОВЫ й [и] : истина; 37 Р[u]:==НАЧАЛО[u] (*НАЧАЛО[u]==указатель на начало списка ХЗАП ИСЬ [и]; Р [и] == указа тель на фактически анализируемый элемент списка ХЗАП ИСЬ [и] *) 38 end; (* ПОИСК В rлубину во вспомоrательном беСКОIlТУРНQМ rрафе, начиная с источника s *) 39 СТЕК:==0; CTEKs; НОВЬ/й[s]:==ложь; 40 while СТЕК =1= 0 do (* rлавный цикл *) 41 begin u:==top (СТЕК); (* и=== верХНIIЙ элемент стека*) 42 (* отыскание первой новой вершины в списке ХЗАП ИСЬ [и] *) 43 if Р [и] == nil then Ь:== ложь else Ь:== not НОВЫ й [Р [u]t. oeplU]; 
4.3. Наибольшие паросочетания в двудольных rрафах 161 44 while Ь do 45 begin Р [и] :== Р [u]t. след; 46 if Р [и] === n il then Ь:=== ложь 47 else Ь:== not НОВЫ й [Р [u]t. верш] 48 cnd; 49 if Р [и] =1= nil then (* найдена новая вершина *) 50 if Р [u]t. BepUl == t then (* найдена чередующаяся цепь * ) 51 (* увеличение существующеrо паросочетания вдоль чередующейся цепи, хранящейся в стеке *) 52 while !ор (СТЕК) =1= s do 53 begin y<i=CTEK; xCTEK; 54 СОЧЕТ[х]:===у; СОЧЕТ[у]:==х 55 end 56 (* в стеке остался только источник s *) 57 else (* Р [u]t. верш =1= 1 *) 58 begin v:==:P[u]t. верш; CTEKv; НОВЫ й [vl :== ложь 59 end 60 eIse (* Р [и] === nil, т. е. в списке ХЗАП ИСЬ [и] уже нет новых вершин *) 61 и СТЕК (* удали;rь верхний элемент стека *) 62 end 63 end; (* ФАЗА *) 64 begin (* rлавная проrрамма *) 65 for v Е V do СО ЧЕТ [v]:=== о; (* инициализация; паросо- четание........ пустое *) 66 РОА; (* построение вспомоrательноrо бесконтурноrо rрафа *) 67 repeat ФАЗА; РОА 68 until not XV [/] 69 end Большая эффективность алrоритма Хопкрофта  Карпа объ- ясняется тем, что порядок числа фаз есть ,уп. Для доказатель- ства оrраниченности числа фаз нам будет необходима следую- щая лемма. Лемма 4.11. Пусть М и N........ два nаросочетания в двудольном срафе Н == (Х, У, Е), и пусть 1М 1== r < s == I NI. Тоеда сим- метрическая разность М (f) N содержит не менее s........ r чередую- щихся цепей относительно М с попарно различными множества ми вершин. Доказательство. Рассмотрим rраф н. == (Х, У, М (f) N) и обозначим через С I , ..., С р компоненты связности этоrо rрафа. Каждая вершина rрафа Н* принадлежит не бuлее чем одному 
162 4. ПОТОКИ в сетях и родственные задачи ребру из M"'-N и не более чем одному ребру из N""-M (так как М и N  паросочетания). Отсюда следует, что каждая компо нента связности С ; имеет один из трех следующих видов: (1) изолированная вершина; (2) цикл четной длины с ребрами попеременно из M"N и N""-M; (3) цепь с ребрами попеременно из M"N и N""-M (это не обязательно чередующаяся цепь: оба ее конца MorYT принадле жать Х или оба У). Обозначим через Е ; множество ребер компоненты С ; и pac смотрим величину бi==IЕiПNIIЕ,ПМI. Имеем бtЕ{I,О,I}, причем бi == 1 тоrда и только тоrда, коrда С ;  чередующаяся цепь относительно М. Более Toro. бi === 1 ДЛЯ не менее чем s ......... , указателей, та к ка к р р р р L {)l === L (1 El n N I  1 El n М 1)  L I Е ; n N 1  L 1 E i n М 1== i....l i....l i==l ia21 === I N '" М 1........1 1\1 '" N 1===1 N I  I м 1=== s  '. Этим доказательство леммы закончено. 8 Теперь мы можем приступить к доказательству существова ния объявленноrо оrраничения на число фаз алrоритма Хоп- крофта  Карпа. Теорема 4.12. Число фаз алеорuтма хопКрофТа......... Карпа не превышает 2 L 'V'sJ + 1, еде s  наибольшая МОЩНОСТЬ паросоче.. тания в aaHHOA-t zрафе. Доказательство. Обозначим через Р О , P 1 , ..., PSl последо- вательные чередующиеся цепи, построенные алrоритмом, и оп ределим Мо === О, М ; == Mil ЕВ Pil для 1  i  5. Соrласно алrоритму Р ; является чередующейся цепью относительно Mi, и мы уже знаем, что IPolIPll ... IPSll (см. лемму 4.4). Число фаз  это не что иное, как количество различных чисел в последовательности I РО 1, ..., I Р sll. Обозначим r === Ls ........ 'V'sJ и пусть ,*  такой наименьший индекс, что I Р,. 1=== 1 P,I. СО.. rласно построению вспомоrательноrо бесконтурноrо rрафа Р Т ......... кратчайшая чередующаяся цепь относительно М,. (фак- тически Р ;  это кратчайшая чередующаяся цепь относительно M i для каждоrо i, но этот факт требует доказательства, см. за дачу 4.11). По лемме 4.11 существует по крайней мере 1 Ms 1........1 М,. 1 === s  ,. непересекающихся череДУIОЩИХСЯ цепей OT носительно М,., следовательно, кратчайшая чередующаяся цепь относительно М,. содержит не более чем ,* / (5  ,*) ребер паро- сочетания М,.. 
4.4. иrте\fЫ различных прелставителей 163 Отсюда 2,. 2, 2 Ls  ,\!,sJ I Р, 1==1 Р"I  . + 1  + 1 == r Sl + 1 == s, s, 28  I  r: == r -V s l  1  2 'v s  1  2 L 'V sJ + 1. Длина каждой цепи нечетная, а, следовательно, последова- тельность I РО 1, ..., I Pr I содержит не более чем L,y sJ + 1 раз JIИЧНЫХ чисел. Последовательность I р r+l/' ..., I Р S11 может содержать не более чем (s........ 1)........ (, + 1) + 1 === s  r  1 === === r ,ysl........ 1  L,ySj друrих чисел, что в сумме дает требуемое оrраничение 2 L ,ysJ + 1. . Теперь леrко оценить сложность Bcero алrоритма 4.10. Ка к поиск в ширину в процедуре РОА, так и поиск в rлубину в про цедуре ФАЗА требуют О (т + п) шаrов, что при числе фаз порядка ,уп дает общую сложность О ((т + п) ,у п ) или, если использовать только число вершин в качестве размерности за да чи, О (п 5 / 2 ) . Стоит отметить, что известен алrоритм построения наиболь шеrо паросочетания в произвольном необязательно двудольном rрафе со сложностью О(п 5 / 2 ) (см. [19]). Однако этот алrоритм несравненно более сложный. Алrоритм для двудольноrо rрафа, отличный от представленноrо здесь, предложил rалил в [26]. 4.4. Системы различных представителей Пусть (А 1, ..., Аn)  произвольная последов а тельность мно" жеств (необязательно непересекающихся и необязательно раз- личных). Системой различных представителей дЛЯ (А 1, ..., Аn> будем называть такую произвольную последовательность (al, ..., а n ), что а; Е A i , 1  i  n, и а; =1= aj для i =1= j. Мы бу дем rоворить, что в такой системе различных представителей элемент ai представляет множество Ai. Проблема существова.. ния и построения системы различных представителей известна во мноrих неформальных постановках. Одна из них  это так называемая «задача О комиссиях». Имеется п комиссий, причем A i  множество членов i-й комиссии. НУ)КНО В каждой комиссии выбрать председателя так, чтобы ни один человек не был пред- седателем более чем в одной комиссии. Нетрудно заметить, что задача о комиссиях сводится к част.. НОМУ случаю задачи о супружеских парах. Действительно, соз.. дадим множества Х===А 1 U... U Аn=== {Xl' ..., Х т }, у === {YI, ..., ил} (4.14) ( 4.15) 
164 4. ПОТОКИ в сетях и родственные задачи (элементы XI, ..., Х т , Yl, ... , Уп попарно различны) и Е == {{x i , Yi}: 1  i <: ,n Л 1  j  п /\ XI Е Aj}. (4.16 ) Очевидно, что каждая система различных представителей (al, ..., а п ) однозначно соответствует паросочетанию мощности tl в двудольном rрафе Н == (Х, У, Е), а именно паросочетанию {{al,Yl}, ..., {ап,Уп}}. Принимая во внимание тот факт, что rраф Н имеет т +. n п вершин и L I А} 1 ребер, получаем j == 1 Следствие 4.13. Для данной последовательности множеств <Al, ..., А п ) АLОЖНО найти CUCTeAtY различных представителей или установить, что такой cUCTeAtbl не существует, за врелtЯ O ( -V n t I A!I ) . . )==1 Доказательство. Число фаз в алrоритме Хопкрофта  Kap па, примененном к rрафу Н, не превышает 2l-V n J+ 1 (см. тео- рему 4.12). Отсюда число шаrов алrоритма имеет порядок О ( -vn ( п + ,tl l А! 1) ). Можно предполаrать, что все множе- ства А } непустые, в противном случае очевидно, что системы различных представителей не существует. При таком предпо n n ложении n + L ( А} I  2 L ( А} (, что дает требуемую оценку /==1 /==1 сложности алrоритма. 11 Докажем теперь классичеСКУIО теорему Ф. Холла [30], даю- щую необходимое и достаточное условие существования си стемы различных представителей для данной последовательно сти множеств. Теорема 4.14. Система различных представителей для по- следовательности (A 1 , ..., А п ) существует тоеда и только тоеда, коеда I u А J I  I J I для каждоzо / с:: {1, ..., n}. jeJ ( 4. 17) Доказательство. Если существует система различных пред-- ставителей (al. ..., а n ), то для каждоrо 1 имеем I u Aj l  1 u {а,} I ===1/1. jEJ jE/ Предположим теперь, что для (A 1 , ..., А п ) не существует си- стемы различных представителей, и рассмотрим наибольшее па.. 
4.4. Системы различных представителей 165 росочетание М в rрафе Н === (Х, У, Е), соответствующем после- довательности (A 1 , ..., А п ) (см. формулы (4.14), (4.15), (4.16)). ОчеВIIДНО, что 1М I  n, а следовательно, в У существует сво- бодная вершина, допустим Ь о . Обозначим через Ко множество тех вершин х Е Х, до которых существует «частичная чередую- щаяся цепь» 113 Ь О вида Ь о , al, b l , ..., bkl, ak, rде k  1, ak === Х, {ai, b i } Е М ДvlЯ 1  i  k ........ 1 и {bil, ai} Е Е Е "М дЛЯ 1  i  k. Очевидно, что ХО не содер)кит свобод- ных вершин, поскольку такая вершина соответствовала бы че- редующейся цепи вопреки предположеНИIО, что М ......... наибольшее паросочетание. Пусть У О будет множеством вершин, сочетаемых посредством М с вершинами из Хо. Обозначим J === {j: 1 jn /\Yi Е У О U {Ь о }}. Нетрудно заметить, что U А,===Хо 'Е/ и, С.rIедовательно, I U А ' 1 === I Х о I === 1 у о 1 === ( / (........ 1 < 1 J 1, / Е J т. е. условие (4.17) не выполняется. 11 Очевидно, что теорема Холла не имеет бо.пьшоrо значения с алrоритмической точки зренпя, так как проверка условия (4.17) требует рассмотрения всех 2 n возможных множеств J r= {l, ..., п}. Докажем еще одну теорему, связанную с паросочетаниями в двудольном rрафе. Назовем вершинным покрытием в rрафе G === (V, Е) такое произвольное множество Р s V, что каждое ребро е Е Е инцидентно с некоторой вершиной из множества Р. Отметим, что р является вершинным покрытием тоrда и только тоrда, коrда V,,",p есть независимое множество вершин, т. е. множество вершин, в котором никакие две не связаны ребром. В дальнейшем нас будут интересовать наименьшие по мощности вершинные покрытия в двудольных rрафах. Пусть М........ наибольшее паросочетание в двудольном rрафе Н == (Х, У, Е), и пусть А......... множество вершин а Е Х U У, до- стижимых из свободных вершин в Х при помощи «частичных череДУIОЩИХСЯ цепей», определенных аналоrично тому, как это сделано в доказательстве теоремы Холла. Лемма 4.15. Если zраф Н не содержит изолированных вер- шин, то Р == (Х,,",А) U (У ПА) является минимальным вершин- ным покрытием, а N === (Х n А) U (У"А)....... tаксимальным, неза 8исuмым множество.lИ вершин, 
166 4. ПОТОКИ в сетях и родственныС' задачи Доказательство. Сначала покажем, что Р является вершин.. ным покрытием. ПреДПОЛО}I{ИМ, что некоторое ребро {х, у} Е Е, х Е Х, у Е У, не будет инцидентным ни с одной из вершин MHO жества Р. Это означает, что х Е А II У  А. ВКЛlочение {х, у} Е М не может иметь места, ибо в таком случае l3ершина х может быть достижима только с помощью цепи, проходящей через у, что вызвало бы у Е А. Однако и ситуация, в которой {х, у} Е Е""-М, также неВОЗМО}l{на, так как цепь, достиrаIОЩУЮ Х, можно было бы увеличить на ребро {х, у}, что снова вызы- вало бы у Е А. Полученное противоречие доказывает, что Р является вершинным покрытием. Отметим, что ни одна вершина в Р не является свободной. Для вершин из Х""-А это вытекает непосредственно из определения MIIO}l(eCTBa А, а для вершин из У n А из Toro, что свободная вершина в У n А COOTBeTCTBO вала бы чередующейся цепи относительно М вопреки нашему предположению о максимальности 1М 1. Подобным же образом доказываем, что не более одной вершины произвольноrо ребра {х, у} Е М принадлежит множеству Р: если у Е У n А, то ХЕА и тем самым xf:/=P. Отсюда следует, что IPIIMI. Однако каждое вершинное покрытие по определению должно содержать не менее одной вершины каждоrо ребра, а для ребер паросоче тания очевидно, что эти вершины попарно различны. Следова- тельно, всеrда ДОЛЖНО выполняться I Р I  1М 1, что доказывает минимальность нашеrо вершинноrо покрытия и равенство I Р I ==  1М 1. Вторая часть леммы вытекает из первоЙ в силу наших предыдущих замечаний и из Toro, что N === (Х U У) "Р. 11 Отметим следствие из приведенноrо выше доказательства; заметим, что изолированные вершины не оказывают никакоrо влияния ни на паросочетания, ни на вершинные покрытия. Следствие 4.16. В произвОЛЬНО/tt двудОЛЬНОJt zрафе .AtUHU" .мальная мощность вершинноzо nокрытия равна макси.Л1альноu мощности nаросочетания. _ Следует дать здесь друrую формулировку, эквивалентную приведенной выше, формулировку в терминах О-l-матриu. Под линией такой матрицы мы будем понимать ее строку или столбец. Теорема, приводимая НИ)l{е, часто называется TaK)I(e свенrерской теоремой». Теорема 4.17 (Кениr и Эrервари). Д ля произвольноЙ o 1 /laT" рицы максимальная .Аtощность множества (появлении) единиц, из которых никакие две не лежат на одной линии, равна .л,Lини.. .м.альному числу линий, которыми А-tОЖНО nокрыть все единицы. Доказательство. Для данной Оlматрицы А === [aij] с n стро- ками и т столбцами построим двудольный rраф Н == (Х, У, Е). 
4.4. CJ('Teb) различных (lре,'('Тёll1iI' ('.1С.", 167 r Д е Х  { х 1, . . . , Х п}, у === {у 1, . . . , у т } 11 Е === { {х i, У / }: 1  i  п 1\ I  .i  "l 1\ lL i j ==-= 1;. JIerKo отметить, что множества еДИllIIll в А, НИК31{ие две из которых не ле)кзт на ОДIIОЙ лин И И, в точности соответствуют па росочтан ию в Н, а ка)l{дое MIIO)l{eCTBO 01'111 ний В А, покрыI3a 10- щих все единицы, представляет вершинное ПUhрытне в Н. Сле- довательно, наша теорема является ПрОСТU друrой формули- ровкой следствия 4.16. _ На рнс. 4.5 представлен двудольный rраф с максимальным паросочетанием и минимальным вершинным покрытием, а также представлена соответствующая 0-I-матрица, иллюстрирующая венrерскую теорему. Х 1 У1 У2 УЗ У4 Ys Х 2  1 О 1 О О '"1 У: Х 2 1 О 1 О О Х 3 Л З О О 1 О О Х 4 О 1 1 1 1 )i E . Х 4 Ys Рис. 4.5. Иллюстрация венrерской теоремы. Отметим, что множество А, появляющееся в лемме 4.15. можно найти за время О ( I Х 1+ I у r + I Е 1), используя поиск в rлубину (или в ширину). Если мы воспользуемся алrоритмом Хопкрофта........ Карпа и заметим, что каждую изолированную вер- шину можно удалить из произвольноrо вершинноrо покрытия и можно добавить к каждому независимому множеству вершин, то получим следствие: Следствие 4.18. Как минимальное вершинное nокрытие, так и максиlальное независuмое множество вершин в nроизвольном двудольном ерафе Н === (Х, У, Е) МОёУТ быть найдены за вре,ия О ((т + n) п), еде n === I Х U у I и т === 1 Е 1. - Следует отметить, что для задач, приведенных выше, не из. вестен ни один полиномиальный алrоритм для случая ПрОli3 вольных, не обяательно двуд.ольных rрафов. 
16 4. ПОТОКИ в сетях и родственные задачи в заключение этоrо параrрафа займемся задачей существо вання общей системы различных представитслей для двух по следовательностсй множеств (А 1 , ..., А п ) If (В}, ..., В п ). Рас- смотрение такой системы как просто системы различных пред ставителей как для первой, так и для второй последовательно сти не дает ничеrо интересноrо: ситуация сводится просто к pac смотрению последовательности (A 1 n Bt, ..., Ar n В п ). Поэтому мы опредеtJ1ИМ общую систему различных представителей для наших последовательностей как произвольную последовате...1Ь ность (al, ..., а п ), обладающую тем свойством, что существует перестановка (J множества {l, ..., п}, такая что (аl, ..., а п ) является системой различных представителей для (А 1, ..., А п ) и дЛЯ (В О (1), ..., В(](п». Задача существования и построения такой системы леrко сводится (см. [23]) к построению макси. мальноrо нульединичноrо потока тем же способом, что и для нахождения па росочетания. Соответствующая сеть имеет мно- жество вершин V === {s, {} U {Хl, ..., Х n } U {Ut, ..., и т } U {V 1 , ..., [)т} U {Уl' · · ., Уп}' rде A 1 U ... UA n UB 1 U ... LIB n == {ZI, ..., Zm}. Вершина Xi co ответствует множеству A i , вершина Yi......... множеству B i , а вер- шина Uj, так же как и вершина Vj,......... элементу Zj. Множество дуr сети определяется следующим образом: Е === {(s, X i ): 1 < i < п} U {(Xi, U J ): 1  j  п Л 1  j  т Л Zj Е A 1 } U {(U j , V j): 1  j  т} U U {(Vj,Yi): 1 jmЛ 1 iп Л Zj Е Bt} U {(У/, t): 1  j  п}, причем все дуrи имеют пропускную способность, равную еди нице. Предоставляем читателю доказательство Toro, что общая система различных представителей существует тоrда и только тоrда, коrда в описанной выше сети существует поток величины п, а также уточнение деталей алrоритма нахождения такой си стемы со сложностью о( пlОАII+IВII)) (см. задачу 4.19). Очень прост случай, коrда как (А 1 , ..., А п ), так и (В 1 , ... . . ., В п ) определяет разбиение HeKoToporo множества на блоки одинаковой мощности. Теорема 4.19. ПУСТЬ А 1 U ... UAn == В 1 U ... U ВN == Х, IAil ==  I B i 1== k для 1  i  n и I Х 1== nk. Тоеда существует k об.. щих систем различных представителей, которые в cgMAte исчер- пывают все элементы множества х. 
4.4. Систеы различных представителей 169 Доказательство. Построим двудольный rраф Н == (Х, У, Е). rде Х == {Хl, ..., Х п }, У == {Уl, ..., Уп}, Е === {{x i , YJ}: 1  i, j  n 1\ A i n В, =1= 0}. Покажем, что в rрафе Н существует па росочетание мощности n. ДеЙствительно, для произвольноrо J <= {I, ..., n} сумма U А! содер>кит в точности IJlk элементов и в результате пе- feJ ресекается по крайней мере с I J I из множеств 81, ..., 8 п . Сле- довательно, существование заданноrо паросочетания вытекает из теоремы Холла (см. теорему 4.14). Пусть наше паросочета.. ние сочетает Xi с Уои), 1  i  n. Множества C i  A i n В(]и») 1  i  n, непусты и не пересекаются, а следовательно, выби- рая произвольные элементы а; Е C i , 1  i  n, получаем об.. щую систему различных представителей (аl, ..., а п ). Удалив элементы ai, 1  i  n, из множеств A i и 8 f , 1  i  n, полу.. чаем ситуацию, идентичную первоначальной, с той разницей что мощность всех множеств уменьшена до k......... 1. Повторив приведенное выше построение k раз, получаем k систем раз.. личных представителей, о которых речь идет в теореме. 11 Покажем теперь применение этой теоремы к теории комму.. тационных сетей, используемых в телефонной связи. Предполо- жим, что даны два множества «абонентов» Х и У, и пусть I Х 1=== I У 1== N. Наша задача......... составить проект установки, со.. стоящеЙ из одиночных переключателей, которая моrла бы реа- ..YJизовать систему связей, определенную взаимно однозначным отображением <р: Х  У. Такую установку мы будем называть перестраиваемой сетью размерности N Х N. ПреДПОЛО)l{ИМ, что каждый переключатель MO)l(eT находиться в одном из двух со- стояний: замкнут и разомкнут. Самым простым решением, тре- бующим однако N2 переКЛlочателей, является использование отдельноrо переКЛlочате.пя между каждой парой абонентов (Х, у) Е Х Х У. Рсализация отображения q> основывается на замыкании переключателей для па р (Х, q> (х), Х Е Х, при раз мыкании всех остальных. Такую установку будем называть KOtMYTaTopo.M, размерности N Х N. Отметим, что каждая перестраиваемая сеть может реализо.. Бывать все N! (взаимно однозначных) отображений Х на У, следовательно, она должна иметь не менее чем N! возможных состояний. Поскольку состояние определяется комбинацией частных (с двумя состояниями) переключателей, то число пере ключателей должно быть не менее чем log N! === Q (N log N). Далее будет показано, что существует перестраиваемая сеть, содержащая О (N log N) переключателей. Предположим, что N == nk, rде n и k......... целые числа, боль шве единицы. Трехсекцuонную сеть Клоса (см. [4], [7], [50J) 
170 4. ПОТОКИ в сетях If родственные задачи типа (n, k) мы строим из трех секций: первой, состоящеii из п коммутаторов размерности k Х k, второй, состоящей из k KOM мутаторов размерности n Х п, и третьеЙ, состоящей, как и пер вая, из n коммутаторов размерности k Х k. Эти секции соеди нены между собой следующим образом: iй выход j-ro KOMMY татора первой секции соединен постоянно с jM входом iro KOM мутатора второй секции, а i-й вход j-ro коммутатора третьей скции соединен с jM выходом iro коммутатора второй секuии СеlrЦllН 1 {}екII,I.IЯ 2 С'е/(ЦlJЯ 3 Х 1 ..;t'2. Х.3 4 5 Х 6 Рис. 4.6. ТрехсеКЦИОIIН<1Я сет,.> К.10са типа (3, 2). У1 YZ У3 У4 Y s Уб для 1  i  п, 1  j  k. Трехсекционная сеть Клоса типа (3, 2) показана на рис. 4.6. Теорема 4.20 (Слепян [62], Диrид [1 О] ). Трехсекционная сеть Клоса является пересrраuвае.l1tОЙ сетью. Доказательство. Пусть ер  ПРОIlЗВОЛЬНОС взаимно однознач- ное отобра)кеllие Х на У. Обозначим через А ; множество входов iro коммутатора первой секции, через С ;  множество выхо- дов iro KOtMYTaTopa третьеЙ секции и B i === {х Е Х: <р (х) Е C i }. ()чевидно, что множества А 1 ,. . ., А п, как и множества Вl, ..., В п , опреде&llЯЮТ два разбиения множества Х на блоки мощностью k каждый. В силу теоремы 4.19 :\1но)кество Х можно представить в виде прямой суммы Х === Х 1 U ... U X k , rде каж- дое из множеств X j является множеством элементов некоторой общей системы различных представителей дЛЯ (А 1, ..., А п ) Н (81, ..., В п ). Отметим, что для j === 1, ..., k «абонентов» из 
4.4. Системы различных представителей 171 множества X j мы можем соединить с соответствующими «або- нентами» в У через j-й коммутатор центральной секции. Дей- ствительно, пусть Х } === {al,..., а п }, rде ai Е А ; и aj Е B(](i), Т. е. <р (ai) === С(](о для 1  i  п и некоторой перестановки (J множества {1, ..., п}. Коммутаторы первой секции, содержа- щие аl, ..., а п , как и коммутаторы третьей секции, содержащие <р (а 1), ..., q> (а п ), попарно различны, а следовательно, для i === === 1, ..., п мы можем построить цепь, реализующую соедине .ние а; с ер (Qi), соединяя аl с j-M выходом i-ro коммутатора пер.. вой секции, затем i-й вход с (J (i) -м выходом j-ro коммутатора второй секции и, наконец, j-й вход (J (i) -ro коммутатора третьей секции с ер (ai) . 11 На рис. 4.6 жирной линией показано соединение, реализую- щее следующее соответствие ер: q> (х 1) === У4' q> (Х2) === У2' q> (Х4) === У6, q> (Хs) === Уз, (X 1 === {Xt, хз, Х6}. Х 2 === {Х2, Х4' ХS}). q> (хз) === Уs, ер (Х6) === Уl Предположим теперь, что N имеет вид 2 р (если это не так, увеличиваем N до ближайшей степени двойки, Т. е. до 2 r1og Nl). Построим трехсекционную сеть Клоса типа (N /2, 2). Если каж- дый из двух коммутаторов средней секции мы заменим затем трехсекционной сетью Клоса типа (N /4, 2), то очевидно, что полученная сеть (с пятью секциями) останется перестраивае.. мой. Аналоrичные действия мы може1\f продолжать до тех пор, пока все коммутаторы не будут размерности 2 Х 2. Нетрудно заметить, что полученная перестраиваемая сеть состоит из 2р + 1 секций, каждая из которых включает N /2 коммутаторов размерности 2 Х 2. Следовательно, общее число переключате.. лей равно (2р + 1) · (N /2) · 4 === 2N (2р + 1) === 2N (210g N + 1) === === о (N log N). Друrим применением теоремы 4.19 является задача состав- ления расписания занятий. В простейшей наиболее идеализи- рованной формулировке эта задача представлена некоторым множеством занятий Х мощности nk и двумя разбиениями Х === === W l U ...U W N И Х === SI U ... U Sn, rде W i ......... множество заня- 'Тий, проводимых i-M преподавателем, а Si  множество заня" тий, ПРОВОДИМЫХ В iй аудитории, причем предполаrаем, что I W i 1=== I 5 ; 1=== k, 1  i  п. Построение, проведенное в доказа- тельстве теоремы 4.19, дает k общих систем различных предста- вителей для последовательностей (W l , ..., W n ) И (SI, ..., Sп), 
]72 4. ПОТОКИ в сетях и родственные задачи причем эти системы в сумме исчерпывают все множество заня- тий х. Если, скажем, каждое занятие длится 1 час, то, проводя занятия, определенные j-й системой в течение i-ro часа, j === === 1, ..., k, мы получаем расписание занятий, в котором все занятия проводятся в течение k часов, причем все это время заняты каждая аудитория и каждый преподаватель. На прак- тике составление расписания занятий является более сложным, потому что появляются дополнительные оrраничения (часто противоречивые), возникающие, например, из-за Toro, что неко- торые учащиеся хотят быть слушателями мноrих курсов, кото- рые тем самым не MorYT проходить одновременно. 4.5. Разложение на цепи Семейство  подмножеств конечноrо множества Х называ- ется цепью, если для произвольных А, В Е  имеем А  В или В  А. Друrими словами,  является цепью, если это семейство можно представить как =={Cl, ..., C k }, rде k==I1 и CIC с: С 2 С ... с C k . В данном параrрафе мы займемся разложе- нием семейства ff'(X) всех подмножеств множества Х на мини. мальное число цепей. Пусть n ==, х (. Цепь <& будем называть СUАtметрuчной цепtю в tP(x), если она имеет вид CLпI2JJ С CLnI2JJ+ 1 С . .. с CLп/2J+f, rде Ojln/2J и IC,I==i для ln/2J.......jirn/21+j. Покажем теперь построение, которое из разбиения семей- ства ff'(X) на симметричные цепи строит разбиение семейства [Р(Х U {а}) (а f:/= Х) на симметричные цепи. Для этоrо каждую симметричную цепь Al с: А 2 с: ... с Ak В .9'(Х), принадлежа- щую нашему разбиению, заменим сначала следующими двумя цепями в .9'(Х U {а}): Al С А 2 С .. . Ak' Al U {а} с А 2 U {а} с ... с Ak U {а}. (4. 18) ( 4.19) Очевидно, что таким образом мы получаем некоторое раз.. биение семейства .9'(Х U {а}) на цепи. Цепи (4.18) и (4.19) не будут симметричными в ff' (Х U {а} ), но нетру дно заметить, что их можно сделать такими, перенеся последнее множество из второй цепи в первую: Al С А 2 С ... с Ak С Ak U {а}, Al U {а} с А 2 U {а} с . .. с Akl U {а}. (4.21 ) (4.21) 
4.5. Разложение на uепи 173 Если k == 1, то вторая из приведенных выше цепей исчезает, Т. е. все подмножества, появляющиеся в (4.18) и (4.19), мы по- мещаем в одну симметричную цепь. Начиная с семейства flJ(0)=={0}, которое само является симметричной цепью, и повторяя описанное выше построение п раз, получаем разбиение семейства flJ(X) на симметричные цепи. Антицепью в flJ (Х) будем называть такое произвольное се.. меЙство .st  flJ (Х), что для произвольных А, В E.s4, А =1= В, имеем А $ В и В g; А. Примером антицепи является flJ k (Х), семейство всех k-элемеНТIIЫХ подмножеств множества Х (О  k IXI). Пусть flJ(X)===lU ... Uрпроизвольное раз- биение семейства flJ(X) на непересекающиеся цеПИ t и пусть .s4  произвольная антицепь в PjJ (Х). Ясно, что не более одноrо мно)кества А E.s4 попадает в каждую из цепей Wi и что отсюда вытекает р  1.s41. Следовательно, имеем Следствие 4.21. Мощность каждой антицеnи в flJ (Х) не пре.. 8blluaeT числа блоков в произвольно,и разбиении семейства 9' (Х) на цепи. 11 Если бы нам удалось указать такую антицепь .s4 в !f'(X) и такое разбиение на цепи flJ(X) === l U ... u p, при котором I d 1=== р, то очевидно, что .s4 было бы максимальной антицепью в flJ(X) , а наше разбиение было бы разбиением семейства [Р(Х) на минимальное число цепей. В сущности леrко убе- диться t что такие антицепь и разбиения существуют. Доста.. точно принять .s4 === flJLn/2J (Х) (п === I Х 1), а в качестве разбие- ния рассмотреть произвольное разбиение семейства flJ (Х) на симметричные цепи, например разбиение, полученное примене. ни ем описанноrо рекурсивноrо построения. Это следует из Toro, что каждая симметричная цепь содержит в точности одно L n/2 J элементное множество. Поскольку цепи не пересека... ются и покрывают flJ(X), то их должно быть в точности столько, сколько имеется L п/2 J -элементных подмножеств. Вспомним, что число k-элементных подмножеств п-элементноrо множества равно биномиальному коэффициенту ( ) (см. разд. 1.6), и упо рядочим полученные факты. Теорема 4.22 (Шпернер [63J). Мощность произвольной ан. тицепи в gJ (Х), I Х I ===п, не преВblшает (Ln;2J)' Т. е. flJLnt2J (Х) ....... максимальная антuцепь. 11 Теорема 4.23. Каждое разбиение семейства flJ(X) на сим- метричные цепи состоит из (Ln72J) цепей, еде n === I Х 1, и ЯВЛЯ" ется разбиением се"'tейства flJ (Х) на Аtини"'tалtное возможное число цепей. 11 
174 4. ПОТОКИ в сетях и родственные задачи Опишем теперь детальную реализацию предложенноrо ре- курсивноrо метода построения разбиения семейства .9'(Х) на. цепи. Примем Х === {l, ..., п} и представим каждую симметрич- ную цепь ер в g> (Х) записью, содержащей массив Р [1 ... пJ. и переменные нач и конец, такие что  == {{Р [1], Р [2], ..., Р и]}: нач  i  конец}. Кроме Toro, такая запись содержит указатель след на запись. представляющую следующую цепь разбиения. Алrоритм 4.24. (Нахождение разбиения семейства всех под.. множеств множества {l,..., п} на симмет.. ричные uепи.) Данные: п. Результаты: Список записей, каждая из которых представляет блок разбиения семейства PjJ ( {l, ..., п}) на сим.. метричные цепи (разб является указателем на на- чало этоrо списка). funcion РАЗБИЕНИЕ (k); (* значением этой функции является указатель на начало списка записей, каждая из которых представляет собой сим метричную цепь fJJ (Х), Х  {l, . . ., k}; все записи в списке опредеЛЯIОТ разбиение семейства PjJ (Х) на сим.. метричные цепи *) 2 begin 3 if k == О then (* построение разбиения сеl\fейства 9" (2)) === {а} на симметричные цепи  единст- венной цепью является {0} *) begin новый (ш); (* w === указатель на запись, пред- ставляющую цепь *) with w t do begin нач: о; KOHeц: о; след:== nil end 5 6 7 8 9 }О 1 1 12 13 14 15 1 4 end else (* k > О *) begin w:== Р АЗБИ Е Н иr; (k ........ 1); рр == ш; while рр =1= nil do with рр t do begin (* симметричная цепь Al с ... с А" представленная записью рр t, заменяется ДВУlVlЯ цепями: А) с ... с Ar с Ar U {k} и Al U {k} с ... с Ar) U {k}, причем вторая о.пускается, если r == 1 t Т. е. коrда рр t. нач === рр t · конец *) послед :== след; 
4.5. Разложение на uспи 17Б 16 17 18 19 20 21 22 if нач < конец then (* цепь длины r > 1 *) begin (* добавить новую цепь АI U {k} с ... . .. с A, I U {k} *) новый (рп); ph t. след: след; след: рn; рп t. нач  нач + 1; рп t. KOHeц: конец; рn t. р [1] : k; for i : 2 to конец do рп t . Р и] :  Р [i ........ 1] end; (* добавить А, U {k} к цепи, представ.пенной записью рр t *) конец : конец + 1; р [конец] : k; РfЭ :== пслед end 23 24 25 26 end; 27 РАЗБJIЕНИЕ: w 28 end; (* Р.4ЗБlIЕНИЕ *) 29 begin (* rлавная проrраМhfа *) 30 разб:РАЗБllЕНJfЕ (п) 31 end Рис. 4.7. Список симметричных цепей, по строенных алrоритмом 4.24 для n === 5 (<<[,> пре.дшествует р [нач], а «]» следует З3 Р[конец]; нач === О для первоЙ иепи). Предоставляем читатеЛIО проверить, что число шаrов, вы- полняемых а.пrоритмом, имеет порядок суммы длин всех полу... ченных цепей разбиения, т. е. О (2 n ). На рис. 4.7 показан спи- 1 2 3 4 5] rs 1 2. 3] [4 1 2 5] 5 r 4 1] I 3 1 4 5 [3 1] 4 [3 5] [2 3 4 5 [2 3] 4 [2. 5 ] 5 ] 5 ] сок СИМl\fетричных цепей, полученных при помощи этоrо алrо ритма для n == 5. Отметим, что в каждоЙ из записей списка, составленноrо алrоритмом 4.24, элементы Р [i] для i > конец не определен'ы. Если их определить ПРОИЗвольным способом так, чтобы после... довательность Р [1], ..., Р [п] была перестановкой, то мы по.. лучим список перестановок ер), <р2, ..., ерт, т  ( Ln2J)' С очень любопытным свойством. Для каждоrо подмножества А s;; {1, ..., п} существует такая перестановка epi, что множество первых IA I членов этой перестановки равно А (перестановку мы трактуем здесь как последовательность длlfНЫ п). Отметим, что система меньшеrо числа перестановок с приведенным выше свойством не может существовать, поскольку ка)кдое из т  
176 4. ПОТОКИ в сетях и родственные задачи ===(tn72J ) lп/2Jэлементных подмножеств должно появляться как начальный участок в какой-либо перестановке. Покажем теперь применение такой системы перестаНОВОI{ для орrанизации картотек, автором которой является Лум (см. [47]). Для этоrо рассмотрим ситуацию, коrда запись в некото- рой картотеке описывается с помощью п атрибутов. Предполо- жим, что i-й атрибут для каждой конкретной записи может принимать одно из n; значений; для простоты обозначим эти значения 1, ..., пi. Пусть R будет множеством записей в на- шей картотеке. Тоrда каждая запись r описывается последова- тельностью (ш} (r), ..., Ш п (r), rде Ш; (r)  зна чение i-ro атри- бута для r (1  Ш; (r)  ni). Мы можем рассортировать нашу картотеку «лексикоrрафичсски» мноrими способами, если при- нять во внимание то, что понятие лексикоrрафическоrо порядка предполаrает некоторое упорядочение координатот коорди- нат, значения которых «изменяются медленно», до координат, значения которых «изменяются быстрее Bcero». Точнее, для произвольной перестановки ер множества {l, ..., п} мы опре- деляем порядок <p следующим образом: (a 1 , ..., пn)ф(ыl' ..., bn)(al' ..., an)===(b 1J ..., Ь n ) или существуют числа k, 1  k  п, такие что а ф и) === ЬФ и) для 1  i  k и аф (k) < Ь Ф (k). В методе Лума используется т === ( Ln72J) копий картотек, из которых i-я, обозначим ее Ki, сортируется в соответствии с порядком Фl на последовательностях (Wl (r), ..., wn(r). Предположим, что каждый запрос, направленный в картотеку, имеет вид Q ===(Xl, ..., Х п ), rде каждый член Х; является либо некоторым значением i-ro атрибута, 1  Х;  пi, либо Xf == *, что означает, что запрос не налаrает никаких условий на зна- чение i-ro атрибута. Ответ на запрос (Xl, ..., Х n ) обозначим II<Xt, ..., xn)11 и определим следующим образом: 11 (Хl, ..., Х n ) 11 === {, Е R: Ш; (r) === Х ; или Wi (r) === * для 1  i  п}. Суть метода Лума состоит в том, что для произвольноrо запроса Q существует такое i, что ответ состоит из отрезка по- следовательных (относительно порядка i) записей в карто- теке Ki. Чтобы доказать это свойство, рассмотрим произволь- ный запрос Q ===(Xl, ..., Х п ). Cor ласно основному свойству мно- жества перестановок <Pi, ..., ерт среди них найдется такая пе- рестановка epi, которая переводит в начало Q все координаты Xi, отличные от -:-:., т. е. Х Фi и) =1= * для 1  j  k 11 Xq>i (О === * для 
4.5. Разложение на пепи 177 k < j  n. .ясно, что в К; ответ IIQII есть отрезок последователь- ных записей, начинающийся с записи " такой что (Wфf,(l)(r), ..., W<Рi(n)(r)===(Хфi(l), ..., X<Pt(k), ..., 1, ..., 1), и кончающийся такой записью ,', что < W<Pi (1) (r'), ..., 'Q)i (n) (r') === === < Х <р i (1), ..., Х Ч' i (k), n<р i (k + I ), ..., nч> i (n» (ситуация существенно не меняется, I(оrда в нашей картотеке нет записи r или ,'). Если наши картотеки Ki запоминаются на носителе инфор- мации с .линейной структурой, то тот факт, что все записи, ко- торые мы хотим наЙти, составляют связный отрезок, значи- тельно облеrчает процесс поиска. И очевидно, что rлавным не- удобством, особенно для больших n, является большое число копий нашей картотеки, которые необходимо хранить в памяти. В заключение данноrо раздела стоит отметить, что боль- шинство рассмотренных нами теорем имело AIUHUAtaKcHbtU ха- рактер: в них rоворилось, что минимум некоторой величины равен максимуму некоторой друrой величины. Примерами мо- rYT служить теорема о максимальном потоке и минимальном разрезе, венrерская теорема и теоремы 4.22 и 4.23. Оказыва- ется, что последний пример есть частный случай одной значи- тельно более общей теоремы Дилворта (см. [12]), касающейся частично упорядоченноrо конечноrо множества. Так же как и для случая частично упорядоченноrо множества (.9'(Х) , S), для произвольноrо частично упорядоченноrо множества (Р, ) цепь определяется как такое произвольное подмножество LP, что х  у или у  Х для произвольных х, У Е L, а антицепь определяется как такое произвольное подмножество А s Р. что для произвольных х, У Е А Х  у * Х == у. А это обещанная теорема Дилворта. Теорема 4.25. Для nроuзвольноzо конечноzо частuчно упоря.. доченн.осо множества (Р, > мuнU}rtальное чuсло цепей, КОТО.. рые в cYAI..1te nокрывают Р, равно Аtаксuмальноu мощности aH тuцепи. Доказательство. Для доказательства воспользуемся индук- цией относительно мощности множества Р. Если I Р I  1, то очевидно, что теорема верна. Пусть I Р 1> 1, L........ произвольная максимальная цепь (т. е. цепь, не ЯВЛЯlощаяся ПОДМНО}I{еством никакой большей цепи), и пусть т  максимальная мощность антицепи в (Р, >. Покаllем, что наше l\lножество Р можно 
178 4. ПОТОКИ в сетях и родственные задачи покрыть т цепями. Если максимальная мощность антицепи в (P"'L, > равна т  1 (очевидно, что она не может быть меньше т  1), то в силу индуктивноrо предположения суще- ствует разбиение на цепи P"'L === L 1 U ... u Lтl, а отсюда по- лучаем требуемое разбиение Р === L 1 U ... u Lт1 U L. Предпо- ложим, что в (P"'L,  > существует т-элементная антицепь А ==={аl, .... ат}. Построим множества элементов, находя- щихся «над» А: G === {х Е Р: х > а для HeKOToporo а Е А} и «под» А: D === {х Е Р: х < а для HeKoToporo а Е А}. Предположим, что L имеет вид 11 < ... < lk. Тоrда Ь 1 f:/= а , ибо в противном случае цепь L можно было бы увеличить на некоторый э'лемент а < 11, а Е А, вопреки предположению о максимальности L. Аналоrичным образом доказывается, что lk Ф D. Следовательно, 101 < I Р 1, I D I < I Р I и в силу индук тивноrо предположения, примененноrо к (О, > и (D, >t существуют разбиения на цепи G === 01 U ... u От И D === D 1 U ... U D т . После возможной перенумерации множеств цепей 01, ..., От И Dl, ..., D m мы можем предполаrать, что а; Е G i n D j , 1   i  т. Но G U D === Р, поскольку существование элемента Ь Е р", (О U D) про.тиворечило бы максим альности антицепи А. Следовательно, получаем требуемое разбиение на цепи Р === f 1 U ... lJ Lm, поп ar ая L i == G i U D i, i == 1. .... т. 11 4.6. Задачи 4.1. Доказать, что каждый поток f из s в t можно предста.. вить в виде суммы f===fl+ ... +fk' km (т. е. f(e)== ==fl(e)+ ... +fk(e) для каждой дуrи еЕ Е), rде fi......... поток вдоль отдельноrо пути из s в t, i == 1, ..., k. Выве- сти отсюда, что можно получить максимальный поток, поочередно увеличивая поток вдоль соответственно вы- t>paHHblX увеличивающих цепей со всеми соrласованными дуrами, начав с нулевоrо потока. Построить сеть, в KOTO рой k == Q (т) для ка)кдоrо TaKoro разбиения f === fl+ ... . .. + f k. 4.2. Доказать, что если каждое увеличение потока происходит вдоль кратчайшей увеличивающей цепи относительно су- 
4.6. Задачи 179 щеСТВУIощеrо потока, то длины последовательных цепей образуют неубывающую последовательность. (Следует ОТ- метить, что из этоrо свойства леrко вытекает лемма 4.4, однако обратное следование не является таким оче- видным.) 4.3. Доказать, что если каждое увеличение потока происходит вдоль кратчайшей увеличивающей цепи, то, начиная с произвольноrо потока, мы получаем максимальный поток с использованием не более чем тп/2 увеличиваlОЩИХ цe пей (см. [17]). 4.4. Показать, LJTO дЛЯ сети с пропускной способностыо каж- ДОЙ дуrи, равной нулю или единице, алrоритм Диница MO)l(HO реализовать за время О (п 2 / 3 т) (см. [18J). 4.5. Показать, что если в сети с целочисленными пропускными способностями потенциал I(аждой вершины, отличной от s и t, равен нулю или единице, то алrоритм Диница мо- жет быть реализован за время О (n l / 2 m) (см. [18J). 4.6. Рассмотреть сеть со мноrИlVlИ выделенными источниками SI, ..., Sp 11 стоками t 1 , ..., t q и заданными nродуктивно- СТЯАtU источников а 1, ..., ар  О и спросами стоков Ь 1 , ... ..., b q  О, такими что йl + ... + ар == ы 1 + ... + b q . Представить метод построения в такой сети потока f, для KOToporo Divf (Si) === Qi для 1  i  р, Divf (tj) === bi для 1 jq и Divf(V)===O для всех остальных вершин сети если такой поток существует. (Указание: добавить к сети дополнительные дуrи (s, Si) с пропускными способностями ai для i === 1, ..., р и дуrи (t j , t) с пропускными способно-- стями bj для j === 1, ..., q.) 4.7. Добавить к задаче о потоке в сети дополнительное orpa- ничение, состоящее в том, что для ка)кдой вершины V. ОТЛИЧНОЙ от s и t, количество потока, втекающеrо в v и вытекающеrо из V, не может превышать пропускной способности g(v) этой вершины. Как свести задачу, из... мененную таким способом, к первоначальной задаче без пропускных способностей вершин? (Указание: для каж- ДОЙ вершины V добавить новую вершину и*, дуrу (и, v*) с пропускной способностью g (и) и заменить каждую дуrу вида (v, и) на (v*, и).) 4.8. Пусть G  ориентированныu rраф, не содержащий дуrи (s, t). Доказать, что максимальное число путей в G из s в t с попарно различными промежуточными вершинами (т. е. отличными от s и t) равно минимальному числу промежуточных вершин, после удаления которых в rрафе не найд.ется ни одноrо пути из S в t (см. [52]). (Указа.. нuе: рассмотреть G как сеть с пропускной способностью каждой вершины, равной единице  ер. с предыдущей за.. 
180 4. ПОТОКИ в сетях и родственные зздаqи дачей, ......... и воспользоваться теоремой о максим альном по- токе и минимальном разрезе.) 4.9. Написать алrоритм нахождения дуr с таким свойством, что увеличение пропускной способности дуrи приводит к увеличению потока. Всеrда ли существует такая дуrа? (Указанuе: найти максимальный поток " а затем множе ство А вершин, достижимых с помощью частичных увели- чивающих цепей из s, и множество вершин В, из которых аналоrичным образом можно достичь t. Требуемое мно- жество......... это (А Х В) n Е.) 4.10. Рассмотреть сеть, в которой каждой дуrе е Е Е припи- сана, кроме пропускной способности, CTOU.l1l0CTb h (е) по- сылки единицы потока через е. Определить стоимость уве- личивающей цепи как сумму стоимостей соrласованных дуr минус сумму стоимостей несоrласованных дуr этой цепи. Доказать, что поток f величины w === W (f) имеет стоимость, наименьшую из всех потоков величины ш, то- rда и только тоrда, коrда не существует увеличивающеrо цикла (замкнутой цепи) относительно f с отрицательной стоимостью. Показать, что увеличение на б потока вели- чины w наименьшей стоимости вдоль увеличивающей цепи с наименьшей стоимостью приводит к потоку С наименьшей стоимостью величины w + б. 4.11. Доказать, что если р......... кратчайшая чередующаяся цепь относительно паросочетания М в двудольном rрафе, р'....... кратчайшая чередующаяся цепь относительно М ЕВ Р, то IP'IIPI+IPnp/l см. [33]). 4.12. Доказать, что если М и N......... паросочетания в двудольном rрафе Н, то существует такое паросочетание R, что вер- шина rрафа Н будет свободной относительно R тоrда и только тоrда, коrда она свободна относительно как М, так и N (см. [51], см. также лемму 4.11). 4.13. Двудольный rраф Н ===(Х, У, Е) называется выпуклым на Х, если множество Х можно упорядочить в последователь- ность Xl, ..., Х р так, чтобы для каждоrо у Е У множество А (у) === {х Е Х: Х......... у} образовывало отрезок вида {Хр(у), Xp(y)+l, ..., ХК(У)}. Подобным же образом определяем вы- пуклость на У. Доказать, что если rраф Н выпуклый на Х, то наибольшее паросочетание можно получить, просматри- вая последовательность Xl, ..., Х р и сочетая вершину Х; с той из свободных еще вершин у Е У, Х......... У, дЛЯ которой значение К (у) минимальное (или оставляя вершину Xl свободной, если такой вершины у не существует) (см. [28] ) . 4.14. Показать, что наибольшее паросочетание в двудольном rрафе Н ===(Х, У, Е), выпуклом на Х (C1. предыдущую 
4.6. Задачи 1В' задачу), можно построить за время О ( I Х 1+ I У Ilog I У 1) и за время O(IXI+IYI), если Нвыпуклый как на Х, так и на У. (Внимание: предполаrаем, что rраф представлен массивами значений Р (у) и К (у), у Е У; здесь следует отметить, что оценку O(IXI+IYllogIYI) можно значи- тельно улучшить, как это показано в работе [46j, поль.. зуясь некоторой общей методикой, изложенной в работе [67] и автором которой является Р. Тарьян.) 4.15. Привести пример rрафа (недвудольноrо), для KOToporo не выполнено свойство, выделенное в следствии 4.16. 4.16. Доказать следующую теорему, двойственную по отноше.. нию к венrерской теореме: для произвольной 0-1-матрицы максимальное число единиц в линии равно минимальному числу рассеянных множеств единиц, покрывающих все единицы матрицы (множество единиц называется рассе.. ЯННblJtt, если никакие две единицы не лежат на одной ли.. нии). Сформулировать теорему в терминах паросочетаний в двудольном rрафе. 4.17. Бистохастической матрицей называется матрица размер.. ности п Х п с вещественными неотрицательными элемен.. тами, в которой сумма элементов в каждой строке и в каждом столбце равна единице. Перестановочной ,taTpu.. цей называется произвольная бистохастическая O-l-мат" рица. Доказать, что каждую бистохастическую матрицу В можно представить в виде комбинации В === 111Pt + ... ... + flkPk, rде Р 1 , ..., P k  перестановочные матрицы, 111, ..., Jlk > О И 111 + ... + flk === 1 (см. [6 J ) . 4.18. ПерJtlанент матрицы А === [aij] размерности п Х п опреде.. ляется следующим образом: ре' А === L аl, а (1), а'2. 0(2), ..., а п . а (п), rде суммирование ведется по всем перестаНОБкам (J мно" жества {I, ..., п}. Доказать, что перманент О-l-матри" цы А размерности п Х n равен нулю тоrда и только тоrда, коrда А содержит нулевую подматрицу размерности р Х " rдер+r===n+l (см. [24]). 4.19. Уточнить детали алrоритма нахождения общей системы различных представителей для последовательностей <A 1 , ..., А п > и <В 1 , ..., Вn> со сложностью O ( -V n IOA/I+IB/I) ) , приведенноrо в разд. 4.4 (см. за- /==1 дачу 4.5). 4.20. Привести построение последовательности с элементами из множества {l, ..., п} длины [n  2n с таким свойством. :t 
182 4. П()то]\и В сетях и родственные задачи что каждое подмножество А s;;{1, ..., п} появляется в этой последовательности как подпоследовательность из I А I последовательных членов [43]. (Указание: построить ( Lk2J) перестановок множества {l,..., k}, k == L п/2 J 1, таких что каждое подмножество К <= {1, ..., k} появля- ется как конечный отрезок некоторой из этих последова- тельностей, и (LPf2J)' р == rn/21, перестановок множества {k + 1, ..., п}, таких что каждое подмножество L s <= {k + 1, ..., п} появляется как начальный отрезок неко- торой из этих перестановок. Далее следует соединить эти перестановки соответствующим образом. BHutaHue: в силу формулы Стирлинrа (Lk2J)  --I 2/(nk) 2 k .) 
5. Матроиды 5.1. Жадные алrоритмы решения оптимизационных задач Рассмотрим следующую матрицу с действительными неотри" цательными коэффициентами: .....7 5 1  А== 343 231 Займемся решением следующей оптимизационной задачи. Задача 1. Найти такое подмножество элементов матрицы, что (а) в каждом столбце находится не более одноrо выбран Horo элемента и (б) сумма выбранных элементов является наибольшей из возможных. Попробуем решить эту задачу следующим образом: будем выбирать элементы последовательно, причем каждый раз бу- дем выбирать наибольший из элементов, которые мы можем добаВIIТЬ, не нарушая условия (а). Будем действовать так вплоть до момента, пока добавление произвольноrо элемента не нарушит условия (а). Алrоритм TaKoro типа мы будем на- зывать жадНbl.Аt. Для задачи 1 и матрицы А )каДIlЫЙ алrоритм находит под- множество cv @ 1 3 4  2 3 1 которое действительно дает наибольшую ВОЗМО)l(НУЮ сумму. Нетрудно отметить, что с помощью л(адноrо алrоритма пра вильно находится решение задачи 1 для произвольной веще- ственной матрицы с неОТРlJцательными элеl\lентами. Рассмотрим несколько иную задачу. 
184 5. Ма ТРОИДЫ Задача 2. Найти такое подмножество элементов матрицы, что (а) в каждом столбце и в каждой строке находится не бо- лее одноrо выбранноrо элемента и (б) сумма выбранных элементов является наибольшей из возможных. На этот раз применение жадноrо алrоритма к задаче 2 и матрице А дает подмножество ф 5 1 3 @ 3 2 3 Ф с суммой 12, что не является правильным решением, поскольку подмножество (j) 51 3 4(3) 2 (з) 1 имеет сумму 13. Следовательно, на втором шаrе не следо- вало бы быть жадным, мы выиrрываем в конечном результате, выбирая несколько меньший элемент (3 вместо 4). Возникает вопрос: коrда выrодно быть жадным? Сформули- руем это более CTporo. Мы будем рассматривать оптимизационные задачи следую- щеrо типа. Задача 3. Даны конечное множество Е, семейство ero под- множеств :1 с: gJ (Е) и функция ш: Е --+ R+, r де R+ обозначает множество вещественных неотрицательных чисел. Найти под- множество S Е :1 с наибольшей суммой L w (е). eES Как задача 1, так и задача 2 являются частными случаями задачи 3. В обоих случаях Е есть множество позиций матрицы, а w ставит в соответствие позиции (i, i) матрицы [aij] число aiJ. Для задачи 1 S Е 5 <==> каждый столбец содержит не более одной позиции из мно;кества S, а в случае задачи 2 S Е 5 <==> каждый столбец и каждая строка содержит не более одной позиции из 1\lножества S. 
5.2. МаТРОIIДЫ и их основные своЙства 185 Теперь мы можем сформулировать наш вопрос следующим образом: при каких условиях относительно семейства З жад- ный алrоритм правильно решает задачу 3 для произволыlйй функции ш? Оказывается, что на этот вопрос мо)кно найти простой OT вет. А именно, достаточно, чтобы пара (Е,:1) образовывала так называемый матроид. Следующий раздел данной rлавы посвящен этим Oa)l(llbIM комбинаторным объектам (читателя, заинтересоваННОI'О в более rлубоком изучении теории матрои дов, отсылаем к [42], [72]). 5.2. Матроиды '" и их основные своиства Матроиды были введены Уитни в работе [73] в совершенно ином контексте, нежели )кадные алrоритмы, а именно в иссле доваlllfЯХ абстрактной теории линейной зависимости. Суще ствует MHoro эквивалентных определений матроида. Для нас наиболее удобным будет следующее определение: MatpouaOA-t мы будем называть произвольную пару М == ===(Е,3), rде Е......... конечное множество, а :1 с: [jJ (Е)  семей- ство, удовлеТВОРЯlощее условиям: Ml (3 Е:! и сс.пи АЕ:! и В с= А. то BE:J. М2 ДЛЯ произвольных А, В Е 5, таких что I В 1==1 А 1+ 1, существует элемент е Е В '\ А, такой что А U {е} Е :1. (Условие eJ Е:1 IIсключает вырожденный случай Э' === 0.) Множества семейства :1 мы будем называть незавUСU,ИЫАtU множествамu, а остальные подмножества из [jJ (Е) "'"':1 ......... завu.. симыми лtножествамu матроида М. В этом проявляется уже упомянутая связь матроидов с теорией линейной зависимости: аксиомы матроидов выбраны таким образом, чтобы они OTpa жали наиболее характерные свойства независимых множеств линейноrо пространства, точнее rоворя, независимых подмно жеств, содержащихся в некотором конечном подмножестве этоrо пространства (вспомним, что подмножество {el, ..., е п } линейноrо пространства называется независимым, если не су-- ществует набора скаляров л'l, ..., Л п , не всех равных нуЛIО. TaKoro что л'lеl + ... + л'пеп == О). В самом деле, очевидно, что произвольное подмножество независимоrо множества линеЙ.. Horo пространства независимо. Если I В I === I А 1+ 1 для линейно независимых подмножеств А, В линейноrо пространства, то ,4 порождает пространство размерности I А 1, которое может со- держать не более чем I А I элементов множества В. Следова.. тельно, существует элемент е Е В",",А, не принадлежащий этому подпространству. Множество А U {е} порождает подпространство 
186 5. \a троиды размерности I А 1+ 1 и. следовательно, является линейно неза-4 висимым. Будем rоворить. что два матроида (E,:I) и (E',:J') изо- МОРфНЫ, если существует взаимно однозначное отображение f 11ножества Е на MHO)l(eCTBO Е', такое что А Е;У тоrда и только тоrда, коrда f(A) Е ;У'. Часто мы не будем делать различия между изоморфными матроидами. Для произвольноrо подмножества С с::: Е мы будем изучать ero r,'lаксимальные незаВlIсимые подмножества, т. е. независи- tbIe подмножества А с::: С, обладающие таким свойством: не су- ществует независимоrо подмножества В, TaKoro {TO А С В с::: С. Теорема 5.1. П усть Е......... конечное tножество, :1......... CeAteucT80 CO flод}dножеств, удовлеТВОрЯЮLцих условию Ml. При этих 1:редnоложениях М ===(E,:I) является JlатроидОt ТОёда и толь- ко ТОёда, КОёда удовлетворяется условие Ь13 ДЛЯ пРОUЗВОЛЬНО20 под"н'ножества С с::: Е каждые два "н'аксu маЛЬНblХ подмножества .множества С ll"иеют одинаковую мощность. Доказательство. Предположим, что М ===(Е, Э') является !атроидом и для HeKoToporo С с::: Е существуют два максималь- J:bIX независимых подмно)кества А, В с::: С, такие что (В 1> IA 1. Выберем произвольное подмножество В' с::: В (независимое по условию Ml!), такое что IB'I===IAI+ 1. в силу М2 существует такой элемент е Е В/"А с::: С, что А U {е} Е 3 вопреки макси- м альности множества А. Напротив, предположим, что выполняются условия Ml II ]\'\3. Выберем такие произвольные подмножества А, В E:I. что I в I === IA 1+ 1, и обозначим С === А U В. Допустим, что не суще- ствует TaKoro элемента е Е В"'А, что А U {е} E:I. ЭТО означа- ло бы, что А является 1\1аксимальным независимым ПОДlноже- ством множества С. Расширяя В до максимальноrо независи- Moro подмножества В* с::: С, мы имели бы I А I < I В* I вопреки условию М3. Следовательно, условия Мl и М3 влекут за собой условие М2. 11 Из теоремы 5.1 ,следует, что условия Мl и М3 образуют ЭI<вивалентную систему аксиом для матроидов. Мощность максимальноrо подмножества множества С  Е называется раНёОМ этоrо множества и обозначается через ,( С) : r (С) === тах {I А 1: А Е:I Л А  С}. Очевидно, что подмножество С с::: Е является независимым fоrда и только тоrда, коrда r{C)===ICl. Каждое максимальное lIезависимое множество матроида М === (Е, 3) будем называть 
5.2. Матроиды и их основные свойства 187 (по аналоrии с линейными пространствами) базой этоrо мат.. роида, а paHr ,(Е), являющийся аналоrом размерности линей- Horo пространства. раНёОА! Аfатроида. Отметим важное след- ствие теоремы 5.1. Следствие 5.2. Каждые две базы taTpouaa имеют одинако- вое число элементов. 11 Отметим также, что каждое независимое множество С Е :1 можно расширить до базы В => с; достаточно поочередно до- бавлять в С новые элементы, присоединение которых не нару- шает независимости, ВПJIОТЬ дО момента, коrда таких элемен- тов больше не существует. Полученное множество будет мак- симальным независимым мно)кеством, а следовательно, базой. Аналоrично, произвольное независимое множество А С: С мож- но расширить до максимальноrо независимоrо подмножества множества С. Отмстим некоторые свойства paHroB. Teopel\la 5.3. Для проиЗВОЛЬНbLХ А, В <= Е и е. f Е Е UleeA1 Rl Or(A)<IAI, R2 если А с: В. ТО r (А) < r (В), R3 r (А U В) + r (А n В)  r (А) + r (В), R4 r(A)r(AU{e})r(A)+ 1, 5 если r (А U {е}) == r (А U {f}) == r (А), то r (А U {е, f}) == r (/1). Доказательство. СвоЙства R 1 и R2 очевидны. Дока)l{ем R3. Пусть {el, ..., ер}......... максимальное независимое множество в А n В. Расширим ero до маl,симальноrо независимоrо множества {еl, ..., ер, '1, ..., fq} C: А, а затем до максимальноrо незави- симоrо множества {el,..., ер, '1,..., fq, gl, ..., gr} С: А U В. Имеем p==r(An B ), p+q==r(A), p+rp+q+r==r(AUB), а следовательно, r (А U В) + r (А n В) == (р + q + ') + р == == (р + q) + (р + ')  r (А) + r (В). Условие R4 очевидно. R5 вытекает из R3: r (А)  r (А U (е, f}) == r (А U {е} U {f}))   r (А U {е}) + r (А U {f}) ........ r «А u {е}) n (А U {f}» === === r (А) + r (А) ........ r (А) == r (А). . Продолжая аналоrию с линейными пространствами, будем rоворить, что элемент е зависиА! от множества А, если r(AU{e})==r(A), и будем обозначать через sp(A) множество 
188 5. Лзтроипы всех элементов, зависим ых от А: sp (А) == {е Е Е: r (А U {е}) === r (А)). Множество А с: Е называется nодпространством матроида, если А sp(A). т. е. если r(AU{e})==r(A)+ 1 для пронзволь. Horo е Е Е,А. Теорема 5.4. Для произвОЛЬНblХ А, В s Е и е, f Е Е ll.лtееАt S 1 А с: sp (А), S2 если А  В, ТО sp (А)  sp (8), S3 sp (sp (А» === sp (А), S4 если f Ф. sp (А) и f Е sp (А U {е}), то е Е sp (А U {f}). 11 Доказательство. Условие SI очевидно: если еЕ А, то r(AU U{e}) == ,(А), т. е. е Е sp(A). Для доказательства S2 восполь. зуемся R3. Предположим, что А s В и е Е sp.(A).. Тоrда r (В)  (В U {е}) == r «А u {е}) U В)   r (А U {е}) + r (В)  r (А U (В n {е}» == === r (А) + r (В) ---- , (А) == r (8) п. следовательно, е Е sp (В). Из условий S 1 и S2 следует, что sp (А) с: sp (sp.(A) )'. Дока- жем теперь противоположное ВI{лючение. Для 9Toro нам будет JIеобходимо равенство r (sp (А» == , (А). (5.1) Чтобы доказать ero, предположим, что sp(A)"A==={el' ,.., ek}. Из определения sp (А) имеем ,(А U {ei}) === rJA), i === 1, ..., k. Предположим, что для HeKoToporo i < k имеет место , (А U U{el, ..., e;})r(A). Тоrда из R3 получаем , (А U {el, ..., ei, ei+l})  r «А U {el, .. " ei}) U (А U {ei+l}»   r (А U {el, ..., ei})+r (А U {el+l})......r (А) == == r (А) + r (А) ...... r (А) == r (А). ОТСIода индукцией по i получаем требуемое равенство (5.1). Доказательство включения sp (sp (А) ) с: sp (А) теперь просто. Предполаrая е Е sp (sp (А) ), Т. е. r (sp (А) U {е} ) === r (sp (А) ) t имеем r(A)r(AU{e})r.(sp(A)U{e})r(sp_(A»==r(A), Т.е. eEsp(A). Наконец, свойство 54 вытекает из определения зависимости элемента от множества: предположив f f:/= spJA) и f Е spJA U U {е} ), имеем r (А) + 1 === r (А U {f})  r (А U {е, f}) == r (,1 U {е 1)  r (А) + 1, а ОТСlода r (А U {f}) == r (А U {е, f}), т. е. е Е sp (А U {f}). . 
5.2. Ма троиды и их основные свойства 189 Отметим, что из свойства 53 следует, что sp (А) является подпространством матроида. Будем называть ero подnростран" ством, натянутым на множество А. Последним важным понятием данноrо раздела являетсЯ понятие цикла. Циклом матроида мы будем называть каждое минимальное зависимое множество, т. е. такое зависимое MHO жество С, что С"'"' {е} является lIезависимым для произвольноrо е Е с. Понятие цикла имеет особенно ясную интерпретацию для случая rрафовых матроидов, о которых речь пойдет в разд. 5.5. Теорема 5.5. Для произвольных циклов с, D выполняютсЯ условия: С 1 Если С  D, то С === D, С2 Если С =1= D и е Е С n D, то сущеС1'вует цикл F c: (CUD),,{e}. Доказателf,СТВО. Условие Сl выражает просто свойство ми- нимальности, содержащееся в определении цикла. Докажем теперь С2. Мно}кества С"'"' {е} и D",", {е} независимые, а следо вательно, ,( С",", {е} ) === I с I  1 и ,(D",", {е} ) === I D I  1. В силу условия R3 ,(С U D) + , (с n D) < ,(С) + , (D) === I С 1+ I D 1....... 2 === === I с U D ( + I С n D (........ 2. (5.2) Множество СП D независимое, так как оно является собствен- ным подмножеством обоих циклов. Отсюда ,( СП D) == I Сп D I инеравенство (5.2) можно переписать как , (С U D)  I с U D 1........ 2. (5.3) Предположим теперь, что не существует цикла Р, о котором идет речь в условии С2. Тоrда множество (С U D)" {е} незави- симое, r«CUD)"{e})===ICUDIl и в результате ,(CUD)  I С U D'  1 вопреки неравенству (5.3). - .. Отметим важное следствие из свойства С2. Следствие 5.6. Если А  независимое множество, то для пpo изволtноzо е Е Е .лtножество AU {е} содержит не более одноzо цикл а. Доказательство. Если бы существовали два различных цикла С, D с: А U {е}, то очевидно, что мы имели бы е Е СП D, и вследствие свойства С2 существовал бы цикл F с:= (С U U D) '" {е} S А вопреки предположению о независимости MHO_ жества А.  
19() 5. Матропды Свойства матроидов, рассмотренныс выше, связаны с ЛИ 4 Ilейно независимыми множествами векторов линейноrо про... странства. Приведем два друrих примера fатроидов. Для произвольноrо конечноrо мно)кества Е пара <Е, gJ(E), очевидно, удовлетворяет условиям MI и 1\12. Будем называть ее свободны,и матроuдол! на l\1ножестве Е. В таком матронде каждое множество А  Е независимое, и в результате ,(А) == IAI. Друrой пример получаем, рассматривая произвольное раз биение л  {Dl, ..., D k } мно,кества Е 11 определяя :/  {А <= Е: I А n D i I  1 дл я i  1, ..., k}. Отметим, что если А, В Е Э' И I в I == I А ,+ 1, то дол)кен су- ществовать такой индекс i, что D i n А == 0, но D i n в == 0. Элемент е Е D i n в можно «перенести» В А и получить мноЖе ство AU {е} Е:/. ЭТО доказывает справедливость условия М2. Матроид М == (Е, :/), определенный таКИ1 образом, будем на- зывать матроидоМ, разбиений. Более интересные примеры матроидов будут приведены в р азд. 5.4, 5.5 и 5.6. 5.3. Т еорема РадоЭдмондса Вернемся к жадным алrоритмам, о которых шла речь в первом разделе. Сформулируем сначала общую схему алrорит моI3 этоrо типа. Мы будем раСС1атривать конечное множество Е, функцию ': ER+ II семейство ;Y[jJ(E). Значение w(e) называется весом элемента е. Вес подмножества А s Е определяется следующим образом: w (А) == L '(e). (l Е А Алrоритм 5.7. (Жадный алrоритм.) 1 begin 2 упорядочить множество Е по убыnаНИIО весов так, чтобы Е=={еl, ..., е n }. rде w(el)w(e2) ... '(en); 3 8:==0; 4 for i :=== 1 to n do 5 if S U {e t } Е 5 then S :== S U {ei} 6 end Теорема 5.8 (Радо, Эдмондс. см. (15] и [56)). Если М== == (Е,:1) есть матроид, то Аtножество S, найденное жадным алzоритмом, является незавUСUМblМ множе-ством. с наибольшим весом. Напротив, если М == (Е,:/) не является Ma'FpOuaQM, ТО 
5.3. Теорема РадоЭдмондса 191 существует такая функция W: Е --+ R+, ЧТО S не будет незаВll CUJtLblM А-fножеством с наибольшим весом. Доказательство. Предположим, что М == (Е, 5) является матроидом, и пусть S =={Sl, .... Sk}......... множество, построенное жадным алrоритмом, причем W(Sl)W(S2) ... W(Sk). Рассмотрим произвольное независимое множество Т == {t 1 , ... ...,Im}. rде W(tl) W(t2) ... ;:::: w(t m ). Отметим сначала, что должно выполняться т  k. так как выбранное жадным алrоритмом множество S является базой матроида: каждыЙ элемент ei Е S, «отверrнутый» на некотором шаrе алrоритма, является зависимым от множества элементов, выбранных 11 предыдущий раз, а следовательно, от целоrо множества s. До- кажем теперь, что w (Т)  w (5), точнее, что для произвольноrо im имеем W(ti)W(Si). Предположим, что w(ti»W(Si). 11 рассмотрим независимые MHO)l(eCTBa А  {SI, ..., Sil}. В === {/I, .... til. fi}. Соr.пасно условию М2 существует элемент t j , j  i, такой что MHO)l(eCTBO {SI,..., Sil, t j } независимое. Имеем w(tj)   w (t;)  W (Si), следовательно, существует такой индекс р   i. что W(Sl) ...  W(Spl) w(tj) W(Sp) вопреки тому, что Sp  элемент с наиБОЛЬШIIМ весом, добавление KOToporo ( {Sl, ..., Spl} не нарушает ero независимости. Полученное про.. ТlIворечие доказывает, что w (ti)  W (Si), 1  i  т. Предположим теперь, что М == (Е, 5) не является матрои- дом. Если не выполняется условие М 1, т. е. если сущеСТВУlоr такие множества А, В s Е, что А С: В Е Э'. А Ф 3, то опрс делим w (е)  { ' , еСсПII е Е А, еСЛII е Е Е " А. Леrко УВllдеть, что l\'IHO)KeCTI30 А не содержится тоrда во мно- жестве S, выбранном )I{адным алrоритмом. В результате w (5) < w (В) == w (А). Если же условие М 1 выполняется, на не выполняется условие М2, то существуют независимые мно- жества А, В, такие что I А 1=== k, I В I === k + 1, и для каждоrо е Е В"А множество А U {е} зависимое. Обозначим р == I А n В I (очеВIIДНО, что p<k и пусть O<e<l/(k........p». Определим { 1 + в, если е Е А. w (е) === \ 1, если е Е В " А, О в остальных случаях. Заметим, что прп весах, определенных таким образом, жадный алrоритм сначала выберет все элементы множества А, а затем 
192 5. Матроиды отбросит Все элементы е Е В""А. В результате будет выбрано Мllожество S с весом, меньшим веса множества в: w(S)==w(A)===k(l +e)==(kp)(l +e)+p(l +e) k+lp  (k  р) k  р + р (1 + е) === (k + 1 ........ р) + р (1 + е) === w (В). . Следует обратить внимание на один довольно УДlIвительный факт. Поскольку мы определили вес подмножества как сумму весов ero элементов, то Mor ло бы казаться, что ОПТИl-.lальное множество S будет существенным образом зависеть от числен- ных значений весов отдельных элементов. Однако же эта за- висимость очень слаба: мно)кество S зависит только от упо- рядочения весов отдельных элементов. В жадном алrоритме после сортировки элементов веса совершенно перестаlОТ нас интересовать. Стоит отметить TaK)I(e, что в доказательстве теоремы 5.8 мы показали, что множество S оптимальное в очень сильном смыс- ле. У Hero не только маКСlIмальна сумма элементов, но также в любом независимом множестве Т вес i-ro по величине эле- lvleHTa не больше веса i-ro по величине элемента в s. Этот факт мы будем называть опТUolиальностью по Fейлу (см. [25). Таким образом, в матроиде нельзя выбрать независимое мно- )I\CCTBO, состоящее из «меньшеrо ЧIIС,,1а больших по величине (по весу) элементов». Отметим также, что при обраutении упорядочеНIIЯ элемен тов жадный алrоритм выберет множество S, которое не только имеет наименьшиЙ вес, 110 11 iй по величине элемент (считая от наименьшеrо) будет не больше i-ro по величине элемента произвольной базы. Теперь tbI можем посмотреть на прнмене ние жадноrо алrоритма к задаче 1 в начале этой rлавы с об щей точки зрения: мы имели там дело с l\f атрондом разбнений. порожденным разбиением позициЙ матрицы на столбцы. Далее мы познакомимся с применением жадных алrорит- мов к друrим, менее банальным маТРОllдам. Ilокажем также, как В конкретных случаях эффеКТIIВНО проверять условие S U U {ei} Е :7, ПОЯВJ1Яlощееся в строке 6 )I(адноrо алrоритма. Во всех случаях мы получим оценку СЛО)I(НОСТН алrоритма в виде мноrочлена относительно размеРНОСТII задачи, что отнюдь не является ТИПJlЧНОЙ ситуацией дЛЯ ОПТИ1 нзаЦllОНIIЫХ задач. В большой степени эффективность жадных алrОРIlТМОВ ВЫЗbI- вается тем, что элемент, один раз включенный в оптимальное решение, остается в нем ДО конца. Здесь не бывает «проверки всех возможностей», характерноЙ для а.пrоритмов с возвраТО1 (СМ. п. 2.8), что обычно приводит к экспоненциаЛhНОМУ росту Чllсла шаrов при росте размерности задачи. 
5.4. Матричные матроиды 193 5.4. Матричные матроиды Матричные матроиды отличаются от матроидов, определяе- мых независимыми подмножествами линейноrо пространства. только видом. Пусть {VI,..., и п }......... элементы HeKoToporo ли- нейноrо пространства размерности т, и пусть {b 1 , ..., Ь т }......... базис этоrо пространства. Векторы Vl, ..., и п имеют однознач- но определенное разложение относительно базиса Ь 1 , ... I Ь т : Vl === Q)lb) + а 21 Ь 2 + · · · + a,пlbm, V2 === QI2 b l + а 2 :'Ь 2 + · · · + ат2 Ь т, , . . V n === а)п Ь ( + а2n Ь 2 + · · · + атпЬ т . Рассмотрим матрицу all a12 al n а21 а22 а2n А=== . . . . . . ..... Q т 1 ат2 а тп (5.4) Ее столбцы, обозначим их el, ..., еп, соответствуют векторам Vl, .... и п , причем подмножество векторов линейно независимо тоrда и только тоrда, коrда соответствующее им множество столбцов линейно независимо. Обратно, столбцы произвольноЙ матрицы А вида (5.4) можно трактовать как векторы HeKOTO poro mMepHoro линеЙllоrо пространства. Каждая такая матри- ца определяет матроид М (А) ===(Е, :1), rде Е есть множество ее столбцов. а В Е:1 тоrда и только тоrда, коrда множество столбцов В линейно независимо. Матроид, определенный таким образом, будем называть матроидо.м матрицы А. Матроид на- зывается MQTPUtlHblM, если он является (изоморфен с) матрон- дом некоторой матрицы. Алrоритм 5.9. (ЖадныЙ алrОРИТ1 для матричноrо матрон- да.) Данные: Матрица А с m строками и п столбцами, столБЦl>1 которой упорядочены по невозрастанию весов (ве-. са неотрицательны). Результаты: НсзаВlIсимое множество столбцов с наиБОЛЬ-4 шей суммоЙ весов (S со.держит номера эти.х столбцов) . 
J 94 5. Ма троидн 1 begin 2 S:==0; 3 for j :== 1 to Il do 4 begin i :=== о; 5 wbile (А [i, j] == О) and (i < т) do i :== i + 1; 6 if А [i, j] =1= О then (* j-й столбец ненулевой *) 7 begin S:== S U {j}; 8 f()r k:=== j + 1 to n do 9 for l:=== 1 to т do 1 О А [l, k] : == А [l, k]  А [1, j] * А [i, k]/ А [i, j) 11 end(*A[i,k]===O для j+lkn*]) 12 end 13 end Процесс преобразования матрицы А. реализуемый этим ал алrоритмом,  это не что иное, как известный из численноrо aHa лиза метод исключения [аусса. в каждой итерации цикла 3 а.пrорнтм проверяет (строка 5), состоит ли j-й столбец из од. них нулей. Если да (А [i, j] === о в cTpoI<e 6), то очевидно, что jй столбец не принадлежит ни к одному линейно независи- мому множеству столбцов. Если нет (А [i, j] =1= О в строке 6), ТО мы [Зl\лючаем j-й столбец в искомое множество линейно He зависимых столбцов и вычитаем для всех k > j из kro столб- ца jй столбец, умноженный на А [i, k J./ А [i, j]. Это не нарушает линейной зависимости столбцов, но приводит к обращению в нуль всех элементов iй строки справа от А [i, j] (леrко увидеть, что последующие IIтерации цикла 3 не МСНЯIОТ поло}кеНJlЯ дел). По окончании работы алrоритма мно}кествО S содержит HO мера ненулевых столбцов. Эти столбцы линейно независимы, так как после соответствующей перестановки строк они coдep жат подматрицу размером ISIXISI с нулями выше rлавноii диаrОllали и ненулевымн элементами на диаrОllали. Сложность алrоритма можно леrко оценить. если заметить, что доминирующей частыо (О (пт) lпаrов) блока 4 являетс: цикл 8. Этот блок выполняется fl раз. что в сумме дает О (п 2 т) шаrов. Покажем теперь пример применения алrоритма 5.9, связан ный с планированием экспериментов. Вообще rоворя, будем рассматривать эксперименты, в которых некоторый объект oд новременно подверrается действию мноrих незаВlIСИМЫХ ф(]к торов, причем можно количественно измерить суммарное IIзме- нение объекта. Нашей задачей будет определение ВЛИЯНIfЯ от- дельных факторов на изменение объекта. Примем линейную модель, в которой изменение объекта выражается формулой ь === CtXl + С2 Х 2 + ... + СтХт, 
5.5. rрафовые матронды 195 rде Xi есть интенсивность iro фактора, а Cl, ..., С т  коэф" фициенты. которые нужно опредеJlИТЬ. Проще Bcero было бы совершить т экспериментов, подверrая объект в i-M экспери менте действию только i-ro фактора с единичной интенсив- ностью; Tor да Xi == 1, Xk === О для k =F i, что дает возможность непосредственно определить Ci. Однако такое решение часто невозможно по чисто техническим причинам. Предположим, на- пример, что мы наблюдаем ВЛlIяние содержания различных минералов в почве на рост урожая некоторой культуры, при чем мы имеем в своем распоряжении п (п  т) удобрений, являющихся смесью этих минералов 13 cTporo определенных пропорциях. Уравнения, соответствующие возможным экспери.. ментам, можно представить следующим образом: clall + ca21 + · · · + ста т1 == b 1 , Cl a 12 + С2 а 22 + . . . + с т а т2 === Ь 2 , . . . (5.5) . C1Qln + С2 а 2n + · · · + ста тп === Ьn., rде aij обозначает количество iro минерала в j-M эксперимен" те (мы предполаrаем использование стандартных количеств удобрений и площадей культур). Рассмотрим матрицу А == == [Qij]. Ее столбцы соответствуют экспериментам (у добре ниям), а строки......... минера.нам. Каждое линейно независимое множество из т столбцов определяет множество эксперимен- тов, которые НУ}I(НО провести, чтобы ВЫЧИСЛIIТЬ коэффициенты CI, ..., С т из системы уравнений (5.5). Если упорядочить столбцы по неубыванию стоимости соответствующих им экс периментов. то жадный алrоритм определит самую дешевую систему экспериментов. 5.5. rрафовые матроиды Пусть G == (V. Е)  неориентированный rраф. Определим М (О) == (Е, З), rде .7==={А с:: Е:rраф(V, А) не содержит циклов}. Теорема 5.10. М (О) является матроидом для проuзвОЛЬНО20 zрафа а. Доказательство. Очевидно, что условие Мl выполняеТСЯ4 В силу теоремы 5.1 достаточно показать, что выполняется TK" же условие М3. И это действительно так. поскольку каждое максимальное подмножество А Е:1, содержащее в MHOj< 
196 5. Ма ТРОIfДЫ стве В с:: Е, является не чем иным, как стяrивающим лесом rрафа (V, В) (см. разд. 2.4). Количество элементов каждоrо TaKoro множества А составляет, таким образом, I V I  (число компонент связности rрафа (V, В»). . Матроид м(о) будем называть матроидом zрафа О. Произ вольный матроид называется zрафовым, если он является (изо морфен) матроидом HeKoToporo rрафа. Отметим. что ЦIIКЛl>1 матроида М (О) ......... это не что иное, как множества ребер эле ментарных циклов; это объясняет происхождение назваНIIЯ «цикл» в случае произвольных маТРОIlДОВ. Оказывается, что каждый rрафовый матроид М (О) можно трактовать как мат- ричный матроид, соответствующий матрице инцидентности rpa фа О, рассматриваемой как матрица с элементами из двух- элементноrо поля Z2 ==={О, 1}. Сложение в таком поле выпол няется по МОДУЛIО 2. а умножение......... как оБЫЧllое умножение целых чисел: + 01 О О 1 1 1 О О 1 О О О 1 О 1 Вспомним, что столбцы матрицы инцидентности COOTBeT ствуют ребрам, а строки......... вершинам rрафа, причем столбец, соответствующий ребру {и, V}, содержит единицы в строках, соответствующих вершинам и и и, и НУЛII В остальных пози циях. Теорема 5.11. Пусть G === (V, Е) ......... nроизвольный zраф и А ........ ezo матрица инцидентности. Подмножество столбцов матрицы А является линейно зависимым над полем Z2 тоzда и только Tozaa. КОёда соответствующее ему подмножество ребер содер.. жит цикл. Доказательство. Предположим, что MHO)l(eCTBO С  Е яв ляется циклом, и рассмотрим соответствующее ему множество столбцов матрицы А. Это множество содержит в каждой HeHY левой строке две единицы, следовательно, является линейно за.. висимым над полем Z2; ero сумма. вычисленная по модулю 2. дает нулевой столбец. Напротив, предположим, что некоторое непустое множество столбцов матрицы А является линейно зависимым над Z2. Это означает, что оно содержит непустое множество столбцов с суммой. являющейся нулевым столбцом (отметим, что в случае поля Z2 линейная комбинация с ненулевыми коэффициентами  это просто сум м а). П усть В с:: Е ......... соотвеТСТВУЮlцее ему м но- жество ребер. (V, В) является тоrда rрафом с четной степенью 
5:5. rрафовые матроиды 197 каждоЙ вершины. Этот rpaq) содержит ЦИI{Л, поскольку каЖДulЙ непустой rраф без циклов содержит по крайней мере 9ДНУ вер- шину степени 1. 11 в силу этой теоремы мы можем .использовать алrоритм 5.9 для ОТulскаНIIЯ базы матроида М (О) с наименьшим весом  друrими с.поваМII, МlIнимаЛl>ноrо СТЯI"ивающеrо дерева (в об щем случае леса, т. е. rрафа, ВСС компоненты связности KOTO poro являются деревьями). Сложность TaKoro решения состав- ляет О(т 2 п), rде п ===1 VI и т ===(Е1. Существуют однако значительно более эффективные алrо ритмы. Опишем один из Них......... алrоритм Краскала [40]. CJ1C дует отметить, что этот а.пrоrитм сыrрал большую роль в раз витии теории, описанной в данной rлаве; алrоритм 5.7 был сформулирован как обобщение алrоритма l(раскала с rрафо- Boro матроида на произвольные матроиды. Ал r о р и т 1\1 5. 12 (с м . [ 4 О]) . Данные: rраф G === (V, Е) в виде списка ребер el, ..., е т ) упорядоченноrо по lIеубыванию весов. Результаты: Минимальный стяrивающий лес (S содержит множество ero ребер J. 1 2 3 4 5 6 7 8 9 end begin S :== (о; р АЗ Б : === {{ [) } : V Е V}; for i:=== 1 to т do if el === {и, v}, rде и Е А, v Е В, А, В Е РАЗБ, А =1= В then begin S :=== S U {е;}; р АЗБ :=== (Р4ЗБ " {А, В}) U {А U В} end в этом алrоритме, являющемся вариантом жадноrо алrорит- ма для матроида М(О). мы строим стяrиваIОЩИЙ лес rрафа О, шаr за шаrом добавляя последовательно I{ S ребра, не вызываю щие замыкания uикла. РАЗЕ содержит разбllение множества V на множества вершин компонент СВЯЗНОСТJI rрафа. определяе Moro текущим содержанием множества s. Ребро ei, анализируе- мое в строке 5, добавляем к S тоrда и только тоrда, коrда оно имеет оба конца в различных блоках разбиения РАЗЕ, в про тивном случае ero добавление вызвало бы образование ЦИКла. После добавления ei к S следует заменить блоки А. В Е РАЗБ, содержащие концы ребер ei, их суммой А U В. Сложность алrоритма Краскала существенным образом за- висит от способа представления разбиения РАЗЕ и способа, Ka. .кИМ выполняется слияние ero блоков. Существуют очень эф.. 
198 5. Матр()пды фективные методы решения последней задачи (см. [67]). Для наших целей достаточно следующеrо метода: каждый блок раз- биения представляется ориентированным деревом, в котором из каждой вершины существует путь до корня. Корень идентифи- цирует данный блок. Такое дерево содержит также информа цию о своей высоте. Идентификация блока, содержащеrо дан- ную вершину. происходит прохождением пути из этой веРШИНbI 7 2 . 3 1 1 8 4 6 6 7 2 5 3 /\. 1 1 =? 4 РАсЗБ = {{1, 7, 8}, {z },.{4, s}, {3, 6}} РАJБ == {{1, 4,5,7,8 },{ 2}, {3, 6}} Рве. 5.1. Слияние БЛОКОD {I, 7, В} и {4, 5} разбиения РАЗВ. ДО корня. Слияние блоков А, В происходит путем добавления дуr от корня дерева, преДставляющеrо один блок, к корню дe рева, предстаВЛЯIощеrо друrой БЛОI{ (рис. 5.1). Если при слия- нии добавленная дуrа всеrда идет от корня Л,срева с lеньшеЙ ( 10) Рис. 5.2. lинимальное стяrивающее дерево, построенное а.пrоритмом Краскала. (или равной) высотой, то в ходе алrоритма высота каждоrо дерева не больше лоrарифма ero верШIIН, а тем самым не боль ше logn (см. задачу 5.13). Пример минимальноrо стяrивающеrо дерева, построенноrо алrоритмом Краскала, представлен на рис. 5.2 (в скобках даны веса ребер). 
5.6. Л-\атронды трансверсалей 199 5.6. аТРОИАЫ трансвеРСQnей Пусть .s4 == (Al, ..., А п )  семейство подмножеств (не обя зательно различных) HeKoToporo конечноrо МlIоя{ества Е. Бу.. дем rоворить, что множество S с:: Е является частичной транс.. версалыо семейства .54, если существует такое IIнъеКТlIвное OTO браженис (fl: S --+ {I, ..., п}, что е Е А (r (с) дл я ка}кдоrо е Е ,. Это эквивалентно следующему утвеР}J{деНIIЮ: множество S === =={el, ..., ek} является частичноЙ трансверса.пью семейства d. если для некотороЙ перестаНОВIОI f MHO)l{eCTBa {I, ..., k} и для некоторой ПОС.педоватеЛЬНОСТII индексов 1  il  ...  ik  п последовательность (етр), ..., ef(k» является системой различ- ных предстаВIiТСЛСЙ для последовательности < A i l' . . ., Ai k ) ( см. п. 4.4). ОТfетим, что для частичной трансвсрсали S семеЙства (А 1, ..., А п ) существует, вообlце rоворя, MHoro различных взаимно однозначных ФУНI(ЦIIЙ ер: s  {I, ..., п}, у довлетво" РЯIОЩIIХ условию е Е АСI (е), е Е s. Основным результатом данноrо раздела является следую.. щая теорема ЭДМОIlдса и Фалкерсона (см. [16]). Теорема 5.13. Пусть d === {Al, ..., А п )........ семейство пoa./ltt н о.. жеств конеЧНОёО M1-lОJlCества Е, и пусть :1  CeAteUCTBO частuч" НЫХ трансверсалей семеЙСТва d. ТОёда М (d) == (Е, 3) являет.. ея A-fатроuаОАt. Доказательство. ОчеВИДJIО, что УСЛОВllе М 1 выполняется. Чтобы доказать выполнение условия М2, предположим, что А, BE:I, IAI===k, IBI===k+l. Мы можем предполаrать, что А === { а 1 , ..., а k} И В === { Ь ), ..., Ь k + 1 }, r Д е а i == Ь i дл Я 1  i  r===,AnBI. Если r==k (т. е. А с В), то АU{Ьk+l}ЕЭ' И условие М2 Быполняется. Пусть r < k, и предположим, что (а), ..., ak) является СlIстемоЙ различных представителей для (Ail' ..., A'k)' а (b 1 , ..., b k + 1 ) является системой различных предстаВlIтелей для (А/р.... A jk + l ) (индексы il, ..', i k по парно различны, как и j), ..., jk+l). Рассмотрим следующее построение, которое либо находит такоЙ элемент Ь Е В"-А, что А U{b}E.7, либо заменяет последовательность (Ail'.'.' A ik ) некоторой новоЙ последовательностью, для которой (а), ..., ak) TaK)I{e является системой различных представителей. Построение Выберем такоЙ индекс р  k + 1, что jp Ф. {i 1 , ..., i k }. Если можно так выбрать этот индекс, чтобы r + 1  Р  k + 1. то последовательность (al, ..., ak, Ь р ) является системой различ-- 
200 5. Матроиды lIЫХ представителей для (All' ..., A ik , А, р)' а из этоrо следует. что А U{bp}E Э'. В противном случае, т. е. коrда 1  р  '. имеем ар == Ь р и последовате.льность (а 1, .. , ak) является сп- стемой различных представителей для (Ail' .... Aipl' Aip+1' ... · · .. А i k) · Рассмотрим подробнее эту последовательность. Если после- довательности (il, ..., i r ) и (j., ..., jr) совпадают на q < r позициях, то последовательности (i., ..., ip., jp, i p +., .... i r ) и (j., ..., jr) совпадают lIа q + 1 позициях, так как jp =1= i p . По- вторяя наше построение, мы либо находим требуемую чаСТIIЧ ную трансверсаль А U{b}. Ь Е В"А либо приходим к ситуации, коrда (i....., i r ) == (jl, ..., jr). Однако в последнем случае jp f:/= {i 1 , .... i k } для HeKoToporo р, ,+ 1  р  k + 1 (ведь не может быть {jr+l, ..., jk+l}  {ir+l' ..., i k }. Выполнение нашеrо построения еще раз приводит к нахо}кдеНIIIО raKoro элемента ЬрЕв"А. что АU{Ьр}ЕЭ'. _ МаТРОIlД М (d) называется матроuдом трансверсалей се- мейства d. Опишем теперь жадныЙ алrоритм для матроидов трансвер- салей. Этот алrОРIfТМ является модификацией метода нахожде- ния систем различных представнтелей (а точнее, наибольшеrо паросочетания в двудольном rрафе), oCHoBaHHoro на методике чередующихся цепеЙ, описанной в rл. 4. Вспомним, что семей- ст во ( А 1, ..., А п) П од М Н О Ж ес тв м н о}к еств а Е == { е 1, ..., е т} М Ы изображаем ДВУДОЛЬНЫМ rрафом Н с вершинаМII и., .... Ит. V., ..., v n Ii ребрами вида {и;, Vj}, rде е; Е A j . Каждой системе различных представителей (el l .. . ., e i k ) последовательности (А'l' ..., A'k) (индексы j., ..., jk попарно различны) COOTBeT ствует независимое множество ребер Nl =={{Ui t ' V J .},. · ., {llik' V/ k }} В rрафе Н. Алrоритм 5.14. ()Кадный алrоритм для матроида транспер- салей.) Данные: Семейство d == (А 1, ..., А п ) подмножеств Мllоже ства Е == {el. ..., е т }. представленное с помощыо двудольноrо rрафа о. Элементы el, ..., ет заИII дексированы в порядке невозрастания весов (веса неотрицательные) . Результаты: частичная трансверсаль S с наибольшим весом для семейства .s4 (и паросочетание М rpa4)a Н, определяющее функцию ер: S.......{l, ..., п}. о которой идет речь в определеНIJИ частичной трансверсали) . 
5.6. Матроиды траflсверсалеii . 201 5 6 7 end begin 8:==0; М==0; for i :== 1 to т do й. существует в G череДУIощаяся цепь Р относительно М с начаЛОI в el then begin S:==8U{e l }, M:==PM end 1 2 3 4 Очевидно, что СЛО)l{НОСТЬ этоrо алrоритма заВIIСИТ от метода поиска чередующейся цепи Р (строки 4 и 5). Если МЫ ИСПОЛЬ- зуем метод поиска в rлубину так, как это сделано в разд. 2.2, то число шаl'ОВ, необходимое для отыскания цепи, будет по- рядка чпсла ребер в rрафе а, Т. е. О Ctl l А! ,). Тоrда общая сложность алrорптма 5.14 будет О (т it11 А! ,). Прнведем теперь две задачи I1З праКТIIКИ, которые можно решать с помощью этоrо алrОРllтма. Предположим, что некий предпринимате.пь принял на рабо- ту n человек, причем i-й сотрудник имеет квалификацию, позво- ляющую выполнять любую работу из HeKoToporo множества At. n Обозначим U А! == Е == {e 1t ..., е т } и преДПОJIОЖИМ, что при- i==1 быль предпринимателя от выполнения работы ej составляет w (ej) и что ка)l(ДЫЙ из ПрlJНЯТЫХ на работу может выполнять не более одной работы. Нужно найти такое Соответствие работ и людеЙ, моrущих их выполнять, чтобы прибыль была наllболь- шеЙ. На языке маТРОIlДОВ задача заключается в нахождении базиса с наибольшим весом матроида траllсверсалей M(d), rде .s4 == (Alt ..., А п ). Точнее, HY)l(HO не только наiIти частич- ную трансверсаль S с наllбольшим весом, но также и взаимно однозначную функцию ер: S {1, ..., п}, для которой е Е Аф(е), е Е s. Именно это и делает алrОРIIТМ 5.14. Стоит отметить здесь, что, так же как и по всех }I(адных алrоритмах, представленных в данной rлаве, база с наимеНIJ- шим (наибольшим) весом зависит только от упорядочения эле- ментов el. ..., ет по неубыванию весов. Обозначим через е,   е! тот факт, что w (е;)  w (ej) (<<работа е! оплачивается не меньше, чем работа е;»). Мы знаем, ЧТО множество работ S == == {al, ..., ak} (rде а.  ...  ak) является оптимальным по rейлу, а следовательно, для каждоrо друrоrо множества работ 1 == {Ь 1 , ..., b t } (rде Ь 1  ...  Ь , ), которое может быть вы.. полнено нанятыми на работу, имеем l:S:; k и Ь;  al для I   i  1. 
202 5. Матроиды Второй при мер касается нахождения оптимальной очеред- ности выполнения работ. Предположим, что дано n работ еl, ... . . ., eпz, причем выполнение каждоЙ из них требует одноrо и Toro же количества времени, скажем одноrо часа. Работы мы выполняем по очереди, не прерывая НII одной начатой работы, причем в ка)l(ДЫЙ момент времени может ВЫПОЛНЯТI)СЯ не более одной работы. Для ка}кдоrо i, 1  i  т, дан так}{{е срок d i выполнения работы ei (отсчитываемый от нулевоrо момента) и штраф w (ei), который выплачивается за невыполнение зада- ния в срок (предполаrаем, что 111траф не зависит от Toro, на СКОЛЬКО часов был превышен срок). Нужно на ЙТII очередность выполнения работ, минимизирующую сумму штрафов. Эту же задачу мы можем сфОРМУЛllровать как нахождение выполни.. Moro в срок множества работ с наиuольшей суммоЙ штрафов (тут мы маКСIIМНЗlfруем сумму штрафов, «которых IIзбе}кали»). При этом ИУ)l(НО наЙти TaKII<e очередность выполнения работ из этоrо оптимальноrо множества. Связь этой задачи с lатрои- дами трансверсалеlUI следующая. ОпреДСЛИ7v1 Е === {el, ..., ет}, n== шах d l и A i ==={ej Е Е: d j  i} для 1  i  n. ПрlI таких liт обозначениях произвольная частичная трансверсаль S семей- ства .st == (Al, ..., А п ) определяет ВЫПОЛНИ1\10е n срок множе- ство работ, причем взаимно однозначная функция ер: S ---+-{l, ... . . ., п}. такая что е Е ACf<e), е Е 5, определяет для каждой ра.. боты е Е S время <р(е), в которое эта работа дол}кна быть вы- полнена. Следовательно, ОПТИl\lа'lьное решеНllе S япляется ба- зисом с наибольшим весом l\-lзтроида TpaHCBepC(].lCIl iVl (.54) и ero можно найти, используя алrорнтм 5.14. 5.7. Задачи 5.1. ДоказаТh, что семейство !lJ с:: 9 (Е) является базой неко- Toporo (однозначно определенноrо семейство ) матрон- да тоrда и только тоrда, коrда ВЫПО.пняется условие Вl Для произвольных 81' 82 Е [JJ И е Е В 1 '\ 82 существует f Е 82 "81' такое что (В 1 ',{е}) U {f} Е f1J. 5.2. Для следующих понятнй, связанных с матрОllдаrvlН: (а) семейство :у независимых множеств матронда, (6) семейство f1J без матроида, (в) семейство ri циклов 1атроида, (r) семейство PF лодпространств матроида, (д) функция paHra " (е) операция порождения подпространства sp. 
0.7. ЗадаЧlf 20) выразить каждое из ннх В терминах каждоrо из остав- шихся. .5.3. Доказать, что семейство ri s; [jJ (Е) является семейством циклов HeKoToporo матроида тоrда и только тоrда, коrда удовлетворяются условия Cl и С2. 5.4. Доказать, что операция sp: [jJ(E)fj'(E) ЯВ.пяется опера- цией порождения подпространства внекотором матроиде тоrда и только тоrда, коrда выполняются условия 51, 52, 53, 54. 5.5. Доказать, что ФУНI{ЦИЯ r является функцией paHra в не- котором матроиде тоrда 11 только тоrда, !{оrда выполняют- ся условия Rl, R2, R3 (или Rl, R4, R5). 5.6. Доказать, что если элемент принадлежит каждой базе матроида, то он не принадлежит ни одному циклу этоrо f\.lатроида. 5.7. Проверить, что для ПРОlIзвольноrо конечноrо множества Е и произвольноrо k IEI пара м == (E,fJ), rде fJ == == {А с= Е: I А I  k} является матроидом. Определить для этоrо !\aTpOllдa понятия (a)(e) из задаЧII 5.2. 5.8. Доказать, что в произвольном l\-lатроидс е Е sp(A) тоrда и только тоrда, коrда существует цикл с, такой что С"-А =={е}. 5.9. оказать, что еслп С 1 и С 2  два произвольных различных цикла матрОlIда и f Е C 1 "-C 2 , то для каждоrо е Е С 1 n С 2 наЙдется такой цикл С З , что f Е С З с= (С 1 U С 2 ) '\ {е}. 5.10. Доказать, что если !1J......... семейство баз матроида М == == (Е, 5), то gj* == {Е"-В: В Е $} ......... семейство баз неко" Toporo матроида М* (М* называется l'vI аТрОИДОf, двой.. ственН,ым М). Доказать, что функция paHra двоЙственноrо 1атроида выражается формулой ,* (А) == I А 1+ r (Е"А)........ ........ r (Е) . 5.11. Доказать, что Д.пя ПРОIIзвольноrо матроида М == (Е, 5) и произвольноrо МlIол«('ства 5 с:: Е пара (5, fY'), rде 5' == == {А Е 5: А с= S}, является матроидом. Вссrда ЛII будет матроидом (5,5"), rде 5"=={Sn A :AE5}? 5.12. п римснить алrоритм 5.11 !{ lатрице 14 21 36 2 8 4 1 7 2 ........ 7 1 3 ........ 1 4 1 1 6 О 6 О 1 12 2 А==  (столбцы упорядочены по неубываНIIЮ весов). 5.13. Доказать, что при описанной в разд. 5.5 реализации ал- ropllTMa Краскала высота дерева, представляющеrо про- извольный блок В разбиения РАЗЕ, не превышает log I в (. 
204 5. Мзтронды 5.14. Доказать, что каждый матроид разбиения является част ным случаем матрОllда трансверса.пей. 5.15. Доказать, что если существует система различных пред. ставителей дЛЯ <А 1, ..., А п ) и (Xt, ..., Xk) является си- стемой различных представителей для (А 1 ,..., A k ) (k < п), то существует элемент Xk+t и перестановка f множества {1,..., k + 1}, такая что (Xf(l),..., Xf(k+l» является системой различных лредстаВlIтелей дЛЯ (А 1 , ..  I t " А k+ 1 > . 
Литература 1. Ah() д. V., Hopcroft J. Е., Ullrnan J. О. Thc Design and ftLnaIysis of Сот- putr Algorithms, Addison Wesley, Rcading, Massachusetts 1974. [Русский перевод: Ахо Д., Хопкрофт Дж., У льман Дж. Построение и анализ вычис- лительных алrоритмов.  М.: Мир, 1979.] 2. Banacho\\'ski L., Kreczmar А. Elernenty al1alizy algoritm6w. \Varszawa, WNT 1981. 3. Bellman R. Е. Оп а routing probIem. Quart. Appl. Math. 1958, 16, s. 81...... 90. 4. Benes V. Е. Mathematical Theory of Connecting Net\\'orks апd Telcphone Traffic. New У ork, Acadcl11ic Press 1965. 5. Bcst М. R., van Emde Boas Р., Lenstra Н. W. А sharpened version of the AandreaaRosenbcrg conjcctl1re. Tcchn. Rep. ZW 30/74, Mathematisch Cent- rum, Alnsterdam 1974. 6. Birkhoff а. Tres ob.er\'aciones sobre el algebra Впеа1. Univ. Nac. Тиси- тап. Rev. Ser. А. 1946.5, s. 147151. 7. Clos С. А study of поп. bIocking switching networks. ВеН Systems Techn. J., 1953, 32, s. 406424. 8. De Bruijn N. а. Л combinatorial problem. Indagationes Math., 1946, 8. s. 461 467. 9. Deo N. Teoria graf6\v i jej zastos\\'ania w technice i informatyce. Warszawa. PWN 1980. 10. Diguid А. М. Structural properties of switching networks. Techn. Rep. В TL.. 7, Brown Univ., Providence, RI 1959. 11. Dijkstra Е. W. А note оп t\\"O probIcms in connexion with raphs. Numer. Ма th., 1959, 1, s. 269271. 12. Dil\vorth R. Р. А decomposition theorem for partially ordered sets. Апп Math., 1950,51, s. 161166. 13. ДИНИЦ Е. А. Алrоритм решеНIIЯ задачи о максимальном потоке в сети со степенной оценкоЙ. Докл. Академии наук СССР, Серия Ма r., Физ., 1970, 194, 4, с. 754757. 14. Duck'orth R., Stcdman Р. TintinnaIogia, or the Art оС ringin(?:. Kingsmead Reprints, Bath 1970 (впервые издано анонимно в Лондоне в 1668 r). 15. Edmonds J. Matroids and the grecdy alrorithms. Math. Programming, 1971. 1, s. 127136. 16. Edmonds J., Fulkerson D. R. Transversals and matroid partition. J. Res. NBS, 1965, 69В. s. 147153. 17. Edmonds J., Karp R. М. Theoretical improvements in algorithmic efficiency for network flow probIems. J. АСМ, 1972, 19, s. 248264. 18. Even S. Graph algorithms. Potomac, МО, Computer 5cicnce Press 1979. 19. Еуеп 5., Kariv О. Ап О (п 2 . 5 ) algorithm for maximum matching in gcneral graphs. Proc. 16th Annual SYlnp. оп Foundations of Computer Science. IEEE, 1975, s. 100112. 20. Floyd R. W. Algorithn 97: Shortest path. Сотm. АСМ. 1962, 5, s. 345. 21. Floyd R. W. Algorithm 245: treesort З. Соmm. АСМ, 1964, 7, s. 701. 22. Ford L. R. Network flow theory. ТЬе Rand Corp., P923, August 1956. 23. Ford L. R., Fulkerson О. R. Przep1ywy w sieciach. Warszawa, PWN 1969. .(Ford L. R., Fulkerson о. R. Flows in networks. Princeton Univ. Press. 
205 л итера тура Princeton, N. J., 1962.) [РусскиЙ перевод: Форд л. Р., ФаЛI<ерсон Д. Р. 110ТОКИ В сетSlХ.  j\1.: 1\1ир, 1966.] 24 Frobenius о. Ober Matrizen aus nicl1t negativen EJernenten. Sitzb. Preuss. Acad. Wiss., 1917, s. 274277. 2.5. Gale D. Optimal assignrnents in ап ordered set: ап appIication of matroid tl1eory. J. Combina toriaJ Theory, 1968, 4, s. 176.......180. 26. ааlil Z. А пе\у algorithm for the maximal flo\\' probIem. Proc. 19th IEEE Symp. оп Foundations of Computer Science, Апп Arbor, MI, October 1978, s. 231.......245. 27. Gavey М., Jollnson D. S. Computers and IntractabiIity. А Guide to the Theory of NPCompleteness. 5ап Francisco, сл, w. Н. Freeman and Со., 1979. [Русский перевод: rзри М., ДЖОIIСОН д. Вblчислитльные машины и тру днореrnаем ые зада чн.  1\\.: Л'1ир, 1982.1 28. Glover F. Maxitnutn matching in сопуех bipartite graph. Na\\'al Res. Logist. quart., 1967, 14, з. 313.......316. 29. Guiппеs book of world records. Nc\v York, Sterling 1972. 3\). Hall Ph. Оп representatives of subscts. J. London l\\C1th. Soc.. 1935. 10, s. 26.......30. 31. Harary Р. Graph Tlleory. Reading, МА, Addison \Vesley 1969. [Русский пе.. ревод: Харарн Ф. Теорин rрафов.  \.: 1\1ир, 1973.] 32. lIeap В. R. Perl11utations Ьу intercllanges. Соmр. J., 1963, 6, з. 293.......294. 33. Hopcroft J., Karp R. \. Ап п 5 / 2 algorithm for maximuln Matchings in bi.. partitc graphs. SIAM J. Comput., 1973, 2, s. 225.......231. 3 k Horowitz Е., Sallni S. Fundamentals of Data Structures, Potomac, МО. Computcr Scicnce Press 1976. 35. Horowitz Е., Sahni S. Fundё:lmentals of Computr AIgorithms. Potomac, МО, Computer Science Press 1978. 36. IgIe\vski М., Badey J., Matwin S. Pascal. Jzyk "rzorCO\\1"Y. Pascal 6000. Warszawa, WNT 1979. 37. Johnson D. В. Efficient algoritllms for shortest patlls ill sparse net\\'orks. J. АСМ, 1977, 24, з. 1.......13. 38. Johnson S. М. Generation of реrmutаtiопs Ьу adjacent tral1spositions. 1\'\ath. Соmр., 1963, 17, з. 282.......285. за. Кауе R. А. Grcy code for sct partitions. I IJ f orrna tiol1 Processil1g Lctt., 1976, 5,s.171173. 40. Kruskal J. В. Оп the shortest spanning subraph оС а graph and the tra.. velling salesman probIcm. Proc. Amer. Math. Soc., 1956, 7, s. 4849. 41. Kuratowski К. Rachunek r6zniczko\\1'y i са Iko\\.'y. Funkcje jed nej zmiennej. Wyd. V. Warsawa, PWN 1971. 42. Lawler Е. L. СоrпЬil1эtоriаl Optinlization: Net\\'orks and \atroids. New у ork, Holt, Rinehart and Winston 1976. 43. Lipski W. Оп strings containing аН subsets аз substrings. Discrete Math., 1978, 21, s. 253259. 44. Lipski W. More оп permutation generation methods. Computil1g, 1979. 23. s. 357365. 45. Lipski W.. Preparata Р. Р. Yet another permutation sequence. Techn. Rep. АСТ..1 О, Coordina ted Science Lab., U niv. оС Illinois, October 1978. 46. Lipski W., Preparata Р. Р. Efficient algorithms for finding maximum mat.. chings in convex bipartite graphs and related problems. Acta Informatica. 1981, 15. s. 329З46. 41. Lum У. У. Multiattribute retrieval \\,ith combined indexes. СОIПIП. АСМ. 1970, 1 З, s. 660665. 48. Malhotra У. м., Kumar Р. М., Mahesh".. ari S. N. Ап 0(1 V Р) аI gorithm for finding maximum flows in net\vorks. In formation ProcessinR; Lett., 1978, 7. s. 277 278. 49. ,\1.arek W., Onyszkiewicz J. Elementy logiki i theorii mnogosci \v zadaniach. Wyd. 2, Warszawa, PWN 1975. 
Литература 50. Masson а. М., Gingher о. с., Nakanlura s. А sampler of circuit switching net\\'orks. COnlputer, June 1979, s. 3248. 51. Mendelsohn N. S., Dиlmage А. L. SOlne gencra1izations of the problem of distinct representatives. Canad. J. Ма th., 1958, 1 О, s. 230241. 52. Menger К. Zur allgemeinen Kurventheorie. Fund. Math., 1927, 10, s. 96115. 53. Munro 1. Efficient determination of the transitive closure of а directed graph, Information Processing Lett., 1971, 1, s. 5658. 54. Nijenhuis А., Wilf li. S. Combinatorial Algorithms. New У ork, Acadcmic Press 1975. 55. Рап У. J а. Field extcnsion and trilinear aggregating, uniting and сапсе- ling for the acceleration of matrix multipIication. Proc. 20th Annual Symp. оп Foundations of COJТlputer Science, October 2931, 1979, San Juan, Puer- to Rico, s. 2838. 56. Rado R. Note оп independencc function. Proc. London Math. Soc., 1957, 7, s. 337 343. 57. Rasiowa Н. Wstp do matematyki visp6Jczesnej. Warszawa, PWN, 1968. 58. Reingold Е. N., Nicvergelt J., Deo N. Combinatorial Algorithms. Theory and Practice. Engle\\'ood Cliffs, N. J., Prentice Hall 1977. [Русский перевод: Рейнrолд Э., Ниперrе.пьт 10., Део Н. Комбинаторные алrоритмы. Теория и практнка.  j\1.: Л1ир, 1980. 1 59. Rivest R. L., Vuillemin J. generalization and proof of the Aandrcaa-Ro- senberg conjecture. Proc. 7th Annual АСМ Symp. оп theory of Computing, JV\ay 57, 1975. Albuquerque, NM, s. 6 11. 60. Sedgewick R. Perm utation genera tion metl10ds. Соmр. Surveys, 1977, 9. s. 137164 (см. также Survyors' Forum, s. 315317). 61. Seshu S., Recd М. В. Linear graphs and clcctrical net\\'orks. Readin, Ма, AddisonWesley 1961. [РУССI<НЙ перевод: Сешу С., Рид \. Б. Линейные rрафы и элеКТРlfческие цепи.  1\\.: Высшая школа, 1971.1 62. Slcpian D. Т\\'о theorcms оп а particular crossbar switching network. (Не- опубликованная статья, 1952). 63. Sperncr Е. Ein Satz uber Untermcngen einer endlichen Meng-e. Math. Z., 1928, 27, s. 544548. 64. Strasscn V. Gaussian c1imination is not optimal. Numer. Math., 1969, 13, s. 354356. 65. SysJo Л\. М., Dzikie\\:icz J. Computational cxpericl1cc \\"ith somc transitivc closure algorithms. Computing, 1975, ] 5, s. 3339. 66. Tarjan R. Е. Depth first scarch and lincar grapl1 algoritl1ms. SIAM J. Сот- put., 1972, 1, s. 146 160. 67. Tarjan R. Е. Оп Н1е cfficiency of а good but not 1inear set merging aIgo- rithms. J. ДСМ, 1975, 22, s. 215225. 68. TroHer Н. F. Perm (Лlgоrithln ) 15), Соmm. АСМ, ] 962, 5, s. 434435. 69. TuHe W. Т. Introduction to the Theory of Matroid. Nc\v У urk, Amcrical1 Else\'icr 1970. 70. Warshall S. А theorem оп Вооlсап matrices. J. АСМ, 1962, 9, s. 1112. 71. Wells М. В. Generation of permutations Ьу transposition. Math. Соmр.) 1961, 15, s. 192......195. 72. Welsh D. J. А. Matroid T!leory. London, Academic Press 1976. 73. Whitney Н. Оп thc abstract propcrties of Iincar independencc. Amer. J. Math., 1935, 57, s. 509......533. 74. Wilson W. а. Change ringing. London, Faber 1965. 75. Wirtll N. Wstep do рrоgrаmо\\'апiа systen1atycznego. Warsza\ya, WNT 1978. (Wirth N. SуstеП1эtiс programming. Ап introduction.  Prcntice Hall, Inc., 1973.) [РусскиЙ перр,под: Вирт Н. Систематическое проrраММИрование. Вве.. дение.  М.: l\\ир, 1977.] 76. Wirth N. AJgorytmy + structury danych == programy, Warszawa, WNT 1980. (\Virth N. Algorithnls + data structures == programs. Prentice На]), Inc., 1976.) [Русскиif перевод: Вирт Н. АJlrоритмы + Структуры данных == Про.. rpaMMbI........ М.: Мир, 1985.] 2З7 
Указатель Алrоритм 13 .......... rенернрования всех псрестановок 28, 3 J ........ ........ всех подмножеств hЭJJеМСIIТ- Horo множества 35 ........  всех последова телыfстейй 26  ........ всех разбиений множества 57  ........ всех kЭJJсмеIlТIIЫХ подмножеств множества 45  Деuкстры 124  Диница 142, 145, 147  ДJJЯ матричноrо матроида 193  для матроида трансверсаJJеЙ 200 жадный 183, 190 КраСКQла 197 нахождения всех rаМИJJЬТОНОВЫХ циклов 112 всех разбиеНIIЙ ЧИСJJа 63   кратчайшеrо пути 120   расстояний от источника до всех вершин в бесконтурном rpa- фе 129 ........ множества фундамента..'JЬНЫХ циклов 100 ........ ........ стяrивающеrо дерева методом поиска в rJJубину 95 .........  ........ ....... методом поиска в шири- ну 97 нахождения разбиения семейства всех подмножеств множества на симметричные цепи 174   эйлеровоrо цикла 107  нумерации вершин бесконтурноrо rрафа 127 определения знака перестановки 23 построения максимаJJьноrо потока в сеТII 152 с возвратом 108 Уоршалла 133 Ф лойда 132 Х опкрофта  Карпа 159 Антицспь 173 База матроида 187 Белд"иан Р. Е. 122 Бинарный код Fрея порядка п 35 Блок rрафа 102  разбиения 48 Вектор инверсивный 77 Величина потока 136 Вершина rрафа 11 ИЗОJJированная 11 ........ отец 96  потомок 96 ........ свободная 154 ........ с ы н 96 Вес дуrи 119 ........ элемента матроида 190 Ветвь 94 r а"иuльтон В. Р. 34. '38, 47, 109 Fейл д. 192 rенерированне множества перестано- вок 24 ....... подмножеств множества 35   ........ с повторениями 38 ........ ........ k-ЭJJементных 45  разбиений числа 63 
'Указа тель rраница верхняя 49 ....... нижняя 49 rраф бесконтурный 127, 129 ....... выпуклый 180  двудольный 117, 154 ....... двусвязный 1 01 ....... неориентированный 1 О ....... ориентированный 11 ....... связный 96 ....... сильно связныЙ 117 rрафы изоморфные 12 rруппа перестановок степени n 19 ...... симметрическая степени n 19 Двоичный пмсрный куб 37 Де Бреuн Н. д. 117 Дейкстра э. В. 124 Дерево 94 ....... бинарное 70 ....... стяrивающее rрафа 94 Деревья изоморфн ые 70 Джонсон с. М. 30 Диаrрамма Феррерса 60 ДUЛ80рТ Р. п. 177 Диниц Е. А. 142, 147 Длина пути 12, 119 ....... сети 142 ....... увеличивающей цепи 138 Дуrа 11 Задача NРполная 109 Закон Кuрхzофа 100 Замыкание ОТJlОIIJеllИЯ траllЗJlпtВIIОС 133 Знак перестановки 21 Измельчение разбиения 48 Инволюция 77 Инверсия 75 Источник 136 Карп Р. Л1. 159 КеНИ2 Д. 166 Класс эквивалентности 48 Клика 118 l(лос с. 169 209 Комбинация без повторений 40 Коммутатор размерности N Х N 169 Компонента двусвязности 102 ....... связности 12 ....... сильной связности 117 Конец пути 12 Контур 12 Корень дерева 70 ....... ....... стяrивающеrо 96 Коэффициент биномиалыI ы ii 19 Краскал д. В. 197 Кратность элемента 37 Лес стяrивающиi"1 97 Линия матрицы 166 Матрица бистохастическая 181 ....... инцидеllЦИЙ 84 ....... перестановочная 181 ....... смежности 85 ....... соседства ребер 114 Матроид 185 ....... rрафа 196 ....... rрафовый 196 ....... двойственный 203 ....... матричный 193 ....... paHr 187 ....... свободный 190  трансверсалсй 200 Матроиды изоморфные 186 Метод Л у.ма 176 ....... увеличивающих цепей 138 ....... Ф лойда 132 ....... форда....... Белл,М,ана 122 Множество матроида зависимое 185 ....... ....... независимое 185  с повторениями 37 ....... частично упорядоченное 1 О Мост rрафа 117 Мощность множества 9 Начало пути 12 Область левая 9 ....... правая 9 
210 Оптимальность по fеилу 192 Отец вершины 96 Отношение 9  а атисимметричное 10  бинарное 9, 132 . ......... транзитивное замыкание 133  рефлексивное 10  симметричное 1 О  эквивалентности 10 Очередь 13 Палиндром 76 Пара упорядоченная 9 Паросочетаl1ие 154 Паскаль 12 Псрестановка 16  нечетная 21 ........ обратная 19  тождественная 19  четная 21 Псрманент матрицы 181 Петля 84 Подrраф 12 rIодмножество 9, 34 ........ собственное 9  kэлементное 39 Подпространство ма троида 188  ....... натянутое на мно)кество 189 Поиск в r JJубину 89  в ширину 92 Покрытие вершинное 165 Порядок антилексикоrрафический 25  лексикоrрафический 25 ....... частичныЙ 1 О Потенциал вершины сети 147 Поток 136  максимальный 136 ....... псевдомаксимаw'lыlйй 144 Потомок вершины 96 Принцип ВКoIlючения  исключения 72 ПРОIfзведение декартово 9 ....... /(оши рядов 64 Пропускная способность вершины 179 ....... ........ д у r и I 36   разреза 138 Указатель ПсеВДОЦIIКЛ 98 Путь в rрафе 11  rамильтонов 34, 38t 47t 109 ......... ДЛИНа 12  конец 12 ......... критический 130 ....... начало 12 ....... эйлеров 106 Радо 190 Разбиение мпожества 48  числа 60 .......  самосопряженное 82  ....... сопряженное 60 Разложение на циклы 20 Размещение объектов по ящикам упорядоченное 16 Разность симметрическая 98 Разрез сети 137  ....... минимальный 138 Рапr матроида 187 Расстояние 119 Ребро rрафа 11 Решетка 49 Ряд Л1аклорена 65 ....... фор м a.lbflbIii 64 Секция коммутатора 170 Сеть 136  псреСТраllваемая N Х N 169  трехсеКЦlIонная /(лоса 169  СР1\\ 129 ....... РЕ R Т 129 Система раЗ..l11ЧНblХ представителей 163 размерности .......   общая 168 Сложсние рядов 64 Сложность временная 14  ПЫЧИСЛIlТСЛЫIЗЯ 13  по памяти 14 Список инцидснтности 87 Стек 13 Степень вершины 11 Сток 136 
Указа тель Суперпозиция перссrаllОВОК 18 Сын вершины 96 Теорема венrерская 166  ДUЛ80рта 177  РадЭд.мондеа 190  Холла 164 Тождество Кошu 41 Точка сочленения 101 Транзитивное замыкание отношения 133 Трансверсаль частичная 199 Транспозиция 21 Треуrольник Паекаля 41, 51 Троттер х. Ф. 30 Увеличивающая цепь 138  ...... длина 138 Уоршйл/l, с. 131, 133 Феррере Н. М. 60 Флойд Р. В. 131 Форд л. Р. 122, 138 Фундаментальное множество циклов 98 Функция 1 О ....... взаимно однозначная 10 ...... н а 1 О ....... производящая 64   экспоненциальная 82  ядро 53 211 Холл Ф. 164 Хопкрофт Дж. 156 Хорда 94 Цепь 172  симметричная 172  чередующаяся 156 ЦИI<Л 12, 98 ....... Де Брейна порядка n 117  rамильтонов 109  матроида 189  разложения пересrановки 20  эйлеров 106  э.пементарный '}. Число Белла 52  l(аталана 72  Стuрлuнzа BToporo рода 50 ....... ....... первоrо рода 54  Фuбонач.чu 69 UUar алrоритма 13 Эzерварu э. 166 Эдмонде Дж. 142, 190 Экспоненциальная производящаJl функция 82 Элемент зависимый от множества 187 Ядро функции 53 
Оrлавление Предисловие редактора перевода От автора . . . . . . . . · · · ......... . 5 7 1. Введение в комбинаторику. . . . . .. 9 1.1. Основные пон ят ия . . . .. .... ... 9 1.2. Функции и размеlцеНIfЯ. . . . . .. ... .... 14 1.3. Перестановки: разложение lIа циклы, знак перестановки. . . . . 17 }.4. rенсрирование перестановок . . . . .. ........ 24 1.5. Подмножества множества, множества с повторениями, rенерирова- lIие подмножеств множества. . ... . . . . . 34 1.6. k-элементные подмножества, биномиальные коэффициенты . . . . 39 ] .7. rенерирование kэлемеНТIfЫХ подмножеств. . . . . . . 45 1.8. Разбиения множеСТf\а . . . . . . . . . . . 48 1.9. Числа Стирлинrа BToporo и первоrо рода . ....... 50 1.10. rснерирование разбиеНIIЙ множества. . . . . . . 55 1.11. Разбиения чисел . . . . . . . . . . . 60 1.12. Производящие функции . . . . .. 64 1.13. Принцип включ.ения }.f ИСКЛlочения.. ... . . . 72 1.14. Задачи ....... . . . 76 2. Алrоритмы на rрафах 2.1. Машинное представление rрафов 2.2. Поиск в r лубину в rрафе. . . . . 2.3. Поиск в ширину в rрафе. . . . . 2.4. Стяrивающие деревья (каркасы). . . . 2.5. ОТblскание фундаментальноrо множества 2.6. Нахождение компонент двусвязности 2.7. Эйлеровы пути . ... 2 8. Алrоритмы с возвратом . . . 2.9. Задачи . . . . . . . . . . . . . . 84 . 84 . . . 88 . . . 92 . . . 94 . . . 98 . . 101 . 106 . 108 114 . . . . . . ЦIIКЛОВ В rрафе . 3. Нахождение кратчайших путей в rрафе . . . . . 3.1. Начальные понятия . . . . . . . . .. .... . . 3.2. Кратчайшие пути от фиксированной вершины. . . . . . . . 3.3. Случай неотрицательн ых весов  a..1rOpHTM Дейкстры. . . . . 3.4. Пути в бесконтурном rрафе. . . . . . . . . . . 3.5. Кратчайшие пути между всеми парами вершин, транзитивное замы- к а н и е от н о ш е н ия ... . . . . . . . . . . . . . . . . . 130 3.6. ЗадаtlИ ..... . . . . . . . . . . . 134 . 119 119 121 124 127 4. Потоки в сетях и родственные задачи. ... ....... 136 4.1. Максимальный поток в сети . . . . . . . .. . ] 36 4.2. Алrоритм построения максимальноrо потока . . . . . . . . . . 141 4.3. Наибольшие паросочетания в двудольных rрафах. . . .. . 154 
Оrлавление 213 4.4. Системы различных предстnвителей 4.5. Разложение на цепи . . 4.6. Задачи ... . .. ... . . . . . . 163 172 178 . . 5. Матроиды. . . . . . . . . . . . . . . . . . . 183 5.1. Жадные алrоритмы решения оптимизационных задач . 183 5.2. Ма троиды и ИХ основн ые свойства . . . . . . 185 5.3. Теорема Радо  Эдмонде а . . . . .. ... .... 190 5.4. МаТРИ4ные матроиды . . . . . . . . . . . . . . . . . . . 193 5.5. fрафовые матроиды .. ... .......... 195 5.6. Матроиды трансвеРС8JJей . 199 5.7. Задачи ... . . . . .. ........... 02 Литература . . . . . . . . . . .. . . . . 20) Указа тель. . .. .. . . · . . . . 20 3 
Уважаемый читатеJlьl Ваши замечания о содержании книrи, ее оформлении, качестве перевода и друrие просим присылать по адресу: 129820, Моск- ва, и 11 О, rсп, 1 й Рижский пер., д.2, из- лательство «Мир»! 
Учебное издание ВИТОЛЬД Липский КОi\1БИНАТОРИКА для проrРАММИСТОВ Ст. научн. редактор Бряндинская Л. А. а\\л. на учн. реда ктор Коро..'1ева Л. А. Художник rpexoB В. А. Художественный редактор Шаповалов В. И. ТеХНIIЧССI,ИЙ редактор Прохорова Е. Н. Корректор Л. Д. Панова ИБ К2 5417 Сдано в набор 12.02.87. Подписано к печаТII 30.09.87. Формат 60Х90/16. Бумаrа книжножур. нальнаSl еыкт. Печать высокаЯ. I'арнитура литературная. Объем 6,75 бум. л. Уел. печ. л. 13.50. Усл. кр.-отт. 13.76. Уч.-изд. л. 12,32. Изд. .N't 1/5212. Тираж 45000 экз. Зак. 524. Цена 90 коп. ИЗДАТЕЛЬСТВО «Л\ИР::. 129820, rсп, Москва, И-1I0, 1-й РижскиЙ пер., 2 Ленинrрадская Тlfllоrрафия Ng 2 rоловное предприятие ордена Трудовоrо Kpaclloro Зна- мени Ленинrрадскоrо объединения «Техническая книrа:. ИМ. Евrении СОКО.'1080А Союз ПО..'Iиrpафпрома при rосударетвепном комитете СССР по делам издательств, полиrрафии u книжноЙ торrОВJ1И. 198052, r. Ленинrрад, Л-52, ИэмаА.повекий лрослект, 29. 
МЗДА ТЕЛЬСТВО сеМИР) ПРЕДЛАr АЕТ СЛЕДУЮЩИЕ книrи по проrРАММИРОВАНИЮ И ПРИКЛАДНОА МАТЕМАТИКЕ Блейхут Р. Теория и практика кодов, контролирующих ошиб- ки. Пер. с анrл. 1986, 2 р. 60 к. Валях и. Последовательно-параллельныс вычисления. Пер. е анrл. 1985. 2 р. 30 к. rилман Л., Роуз А. I(ypc АПЛ. Диалоrовый подход. Пср. с анrл. 1979. 2 р. 10 к. rренандер У. Лекции по теории образов. Пер. с анrл. В 3-х томах. Т. 1. Синтез образов 1979. 1 р. 80 к. Т. 2. Анализ образов& 1981. 2 р. 30 к. 'Т. 3. Реrулярные структуры. 1983. 2 р. 90 к. Джоунс У., Трон У. непрерывныe дроби. АналитичеСI(ЭЯ тео- рия и прило)кения. Пер. с анrл. 1985. 3 р. 60 к. Зайлер э. Калибровочные теории связи с конструктивной квантовой теорией поля. Пер. с анrл. 1985. 1 р. 90 к. Системы параллельной обработки. Под редакцией Д. Ивенса. Пер. с анrл. 1985. 1 р. 90 к. Феррари д. Оценка производительности вычислительных си- стем. Пер. с анrл. 1981. 3 р. 40 к. Шоу А. Лоrическое проектированис операционных систем. Пср. с анrл. 1981. 1 р. 70 к. Чисар и., Кёрнер я. Теория информации: теоремы кодирова- ния для ДlIскретных систем без памяти. Пер. с анrл. 1985. 3 р. Эти книrи Вы можете приобрести в маrазинах KllllroToproB, распространяющих наУЧlIо-теХНllчеСI{УЮ литературу. Если в бли- жайшем от Вас маrазинс их не окажется, заКаз мо}кно напра- вить по адресу: 121019 Москва, просп. Калинина, 26, п/я 42, маrазин NQ 200 «Московский Дом книrи»; 1 03050 Москва, УЛ. Петровка, 15, маrазин NQ 8 «Техническая книrа»; 117334 MOCI{Ba, Ленинский проспект, 40, маrазин ]\[9 115. «Дом научно-технической книrи»; 191040 Ленинrрад, Пушкинская УЛ., 2, маrазин NQ 5 «Техни- ческая книrа». Книrи будут высланы наЛО}l{СННЫМ плаТС)I(ОМ (без задатка).