Text
                    А.Д. Плотников
Дискретная
математика
Учебное пособие
OCKBA 000 «НОВОЕ ЗНАНИЕ» 2005


УЦК 519.1@75.8) ББК22.176я73 П39 Рецензенты: зав. кафедрой защиты информации Винницкого национального технического университета, доктор технических наук В.Л. Лужецкий; зав. кафедрой геоинформатики Самарского государственного аэрокосмического университета им. академика СП. Королева, доктор технических наук, профессор В.В. Сергеев Плотников А.Д. П39 Дискретная математика: учеб. пособие /А.Д. Плотников. — М.: Новое знание, 2005. — 288 с. ISBN 5-94735-073-4. Материал книги доступно изложен и проверен на нескольких поколениях студентов, содержит самые необходимые сведения для будущих инженеров- системотехников, программистов, кибернетиков и других специальностей. Дается описание некоторых алгоритмов и приведены отлаженные Паскаль-программы для наиболее важных из них. Эти программы могут служить основой для выполнения лабораторных работ по курсу. Для студентов, аспирантов и других читателей, интересующихся отдельными разделами дискретной математики. УДК 519.1@75.8) ББК22.176я73 тников А.Д., 2005 ISBN 5-94735-073-4\\ «\ ^g^sw © Йфрмление. ООО «Новое знание», 2005
От автора Книга написана на основе лекций, которые автор читал на протя- протяжении 20 лет работы в Винницком техническом университете (ранее — Винницкий политехнический институт). Материал проверен на не- нескольких поколениях студентов и содержит самые необходимые сведе- сведения для будущих инженеров-системотехников, программистов, кибер- кибернетиков и других специальностей. Автор стремился, по возможности, упростить изложение материала, полагая, что, изучив общие вопросы дискретной математики, читатель при необходимости обратится к ака- академическим изданиям для более детального рассмотрения отдельных интересующих его разделов. В книге дается описание некоторых алгоритмов и приведены отла- отлаженные Паскаль-программы наиболее важных из них. Эти програм- программы могут служить основой для выполнения лабораторных работ по курсу. Несколько слов о терминологии. Везде, где это возможно, в оптими- оптимизационных задачах используется термин «наибольший» (наименьший), который соответствует термину maximum (minimum) в англоязычной литературе. Термин «максимальный» (минимальный) соответствует термину maximal (minimal) в английском языке. К сожалению, одина- одинаковый перевод этих терминов как максимальный (минимальный) в некоторых русскоязычных изданиях влечет неточности при изуче- изучении соответствующих оптимизационных задач. Книга предназначена для студентов, аспирантов и других читате- читателей, интересующихся отдельными разделами дискретной математики.
Глава 1 Введение в теорию множеств 1.1. Понятие множества и способы его задания Понятие множества является первичным в математике, поэтому оно не может быть определено с помощью других, более простых по- понятий. Интуитивно множество рассматривают как нечто целое, со- состоящее из объектов, которые называют элементами. Георг Кантор, создатель теории множеств, говорил, что «Множество есть многое, мыслимое нами как единое». Иногда множество рассматривают как объединение различных объектов, обладающих каким-то общим признаком. Природа этих объектов может быть произвольной: атомы, галактики, буквы, люди, животные, числа, книги и т.п. В любом языке существует много синонимов, эквивалентных по- понятию множества. Например, такими синонимами являются область, класс, совокупность, система, бригада, коллекция, толпа, библиотека и т.п. Многие из этих понятий используются для обозначения мно- множеств специального вида. Так, говорят о коллекции марок, о бригаде людей, но не говорят о коллекции людей или бригаде марок. Множества обычно обозначают большими буквами латинского алфавита: А, В, С,.... Если необходимо, то используют индексы при обозначении множеств: Л,, С3 и т. д. Для обозначения элементов мно- множеств используют, как правило, малые буквы латинского алфавита: а, Ь, с,..., также, возможно, с индексами: я,, я2, v, и т. д. Тот факт, что среди элементов множества Л имеется элемент а, за- записывают как ае Аи читают «элемент а принадлежит множеству Л», или а есть элемент А. Здесь е есть символ принадлежности. Если эле- элемент а не входит в состав множества А, записывают а ? А и читают «элемент а не принадлежит А». Обычно полагают, что всякое множество может иметь лишь один экземпляр одного и того же элемента, если иное не оговорено. Иногда рассматривают случай, когда множество А имеет несколько экземп- экземпляров одного и того же элемента, в этом случае множество называют мультимножеством. 5
Глава 1. Введение в теорию множеств Способы задания множества могут быть различными, и выбор спо- способа зависит как от количества элементов, из которых состоит множе- множество, так и от природы этого множества. Наиболее простой способ задать множество — перечислить все со- составляющие его элементы: А = {ах, а2, аг, а4}. Это задание множества в явной форме. Так, журнал группы студен- студентов, где приведен список всех членов группы, является примером та- такой формы задания множества. Элементы множества при перечис- перечислении заключаются в фигурные скобки, как это показано выше. Заметим, что порядок записи элементов множества в таком случае может быть произвольным. В общем случае, если множество имеет много элементов, то явное задание такого множества громоздко или невозможно. Например, не- невозможно составить список всех целых четных чисел. Поэтому мно- множество можно задать, указав условие, или свойство Р(х), которому должны удовлетворять все элементы х задаваемого множества. Свой- Свойство Р(х) называют также предикатом. Это свойство позволяет из всей совокупности объектов любого происхождения распознать элементы данного множества. Пусть это свойство задано предикатом Р(х), который является со- сокращенной записью предложения «х есть четное число». В этом слу- случае множество записывают следующим образом: А = {х\Р(х)}. Такая запись читается так: множество А состоит из элементов х та- таких, что Р(х) (что х есть четное число). Вместо вертикальной черты, отделяющей обозначение элемента множества от свойства элементов множества, используется также двоеточие: Иногда свойство, которым обладают элементы рассматриваемого множества, задают формулой Здесь R обозначает множество всех действительных чисел. 6
1.2. Подмножества Множество А = {а\ а2 - 4а + 3 = 0} состоит из корней квадратного уравнения л2- 4а + 3 = 0; множество А = {x\Q<x<\,x aR} имеет бес- бесконечное число элементов. В математике рассматривается также множество, не имеющее эле- элементов. Такое множество называют пустым и обозначают 0. Напри- Например, множество Л = {х\х2=-\,хе R} = 0. Здесь/? —множество дейст- действительных чисел. Множества между собой могут находиться в различных отноше- отношениях. Два множества А и В называют равными, если они состоят из одних и тех же элементов. Этот факт записывают так: А = В. Пусть Л = {1,2,3,4}иД={3,4,2, 1}. В этом случае имеем: А = В. 1.2. Подмножества Пусть имеется некоторое множество А Иногда требуется рассмат- рассматривать не все элементы множества ,4, а только часть этих элементов. Ясно, что часть элементов множества/! также образует множество. Та- Такое множество называют подмножеством множества А Строго говоря, множество А] является подмножеством множест- множества А если каждый элемент множества А] является также элементом множества Л, что записывают Л, с А и читают «А{ есть подмножество множества А» или «А] содержится в А». Исходя из определения подмножества можно заключить, что само множество А является собственным подмножеством, то есть можно записать, что Л а А. Чтобы подчеркнуть тот факт, что рассматриваемое подмножество Ах множества^ может совпадать с множеством А, отно- отношение «быть подмножеством» записывают также Ах с А Альтернатив- Альтернативно используют запись A z> Ах или А з Av В этом случае говорят, что множество Л содержит подмножество Av Из определения следует, что 0 с А, то есть пустое множество явля- является подмножеством любого множества А Пусть имеется множество всех подмножеств множества А. Такое множество называют булеаном или множеством-степенью и обозна- обозначают 2А.
Глава 1. Введение в теорию множеств Пусть, например, имеется множество А = {1,2,3}. Тогда множест- множество-степень (булеан) этого множества имеет следующий вид: 2Ч0ЛПЛ2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. Важным понятием в теории множеств является понятие универсаль- универсального множества, или универсума. Универсальным называют множест- множество, элементами которого являются все множества некоторой задачи или теории. Будем обозначать универсальное множество знаком U. Ясно, что если Л и В есть любые два множества, то Л, В с U. Для наглядного изображения множеств используют диаграммы Эй- Эйлера—Венна. На каждой такой диаграмме прямоугольником изобража- изображают универсальное множество U. Все другие множества, которые явля- являются подмножествами универсального множества, изображают внутри прямоугольника в виде некоторой его части, офаниченной замкнутой линией. Обычно такие множества изображают как окружности или овалы внутри прямоугольника. Рис. 1.1. Диафамма Эйлера—Венна На рис. 1.1 представлена диаграмма Эйлера—Венна. Из этой диа- диаграммы видно, что множество В является подмножеством множест- множества Л. Множества С и D не имеют общих элементов с множествами Л и В. Множества С и Д напротив, имеют общие элементы, принадле- принадлежащие как множеству С, так и множеству D. 1.3. Операции над множествами На множествах определяют некоторые теоретико-множественные операции. Результат таких операций — новое множество. Рассмотрим наиболее важные из этих операций. 8
1.3. Операции над множествами Объединением множеств А и В называют множество С, состоящее из элементов, принадлежащих множествам А или В, что обозначается: Таким образом, множество С можно задать следующим образом: С = {с\се А или се В}. Результат операции объединения можно изобразить графически диаграммой Эйлера—Венна. Результат операции объединения мно- множеств Л и В представлен на рис. 1.2 в виде заштрихованной области. Рис. 1.2. Результат объединения множеств С = Avj В Пересечением множеств А и В называют множество С, состоящее из элементов, которые являются общими для множеств А и В. Обозначают так: С = АпВ. Множество С можно задать также следующим образом: С={с\се Аи се В}. Результат операции пересечения множеств Аи В можно предста- представить на диаграмме Эйлера—Венна как общую часть кругов, изобра- изображающих эти множества. Эта область на рис. 1.3 заштрихована. Разностью множеств Aw В называют множество С, состоящее из таких элементов множества А, которые не являются элементами мно- множества В. Обозначают так: С = А\В.
Глава 1. Введение в теорию множеств Рис. 1.3. Результат пересечения множеств С = А п В Множество С можно задать также следующим образом: С={с\се Аис<? В}. Результат операции разности множеств А и В представлен на диа- диаграмме Эйлера—Венна как часть множества А, которая не имеет об- общих элементов с множеством В (рис. 1.4). _ Дополнением множества А называют множество А, которое являет- является разностью универсального множества Uw множества Л, то есть A=U\A. Множество А можно задать следующим образом: А={с\сеА}. Дополнение множества А представлено на диаграмме Эйлера— Венна как часть множества U, которая не имеет общих элементов с множеством А. Эта область на рис. 1.5 заштрихована. Рис. 1.4. Результат разности множеств С = А\В Рис. 1.5. Дополнение множества Л 10
1.4. Свойства операций над множествами 1.4. Свойства операций над множествами Чтобы записывать и преобразовывать теоретико-множественные выражения, необходимо знать свойства операций над множествами. Основные из этих свойств следующие. I. Коммутативность: A\jB= ] АпВ = ВпА. 2. Ассоциативность: А и (В u Q = (А и В) и С; Ап(ВпС) = (АпВ)пС. 3. Дистрибутивность: А и (В п С) = (А и Я) п (Л u Q; у4 п (Д и С) = (i4 n 5) u (i4 n С). 4. Законы де Моргана: 5. Идемпотентность: 6. Законы поглощения: Аи(А пВ) = >4; Ап(АиВ) = А. 7. Закон двойного дополнения: ~А = А. 8. Операции с универсальным и пустым множествами: AuU=U; Лп0 = 0; Аи0=А; AnU=A; AkjA=U; AnA=0. Если внимательно рассмотреть свойства теоретико-множествен- теоретико-множественных операций, то можно сформулировать правило, известное как принцип двойственности. 11
Глава 1. Введение в теорию множеств Теоретико-множественное выражение, содержащее операции объ- объединения (и), пересечения (п), дополнения (~), а также универсальное множество U и пустое множество 0, останется справедливым, если в нем произвести следующие замены: u—>n; n—>u; 0 —> U; U—>0;с—>з. Все перечисленные выше свойства могут быть доказаны по одной схеме. Суть ее в следующем. Пусть требуется доказать теоретико-множественное равенство М = N, где Л/и TV есть некоторые множества. Первая часть доказательства будет состоять в том, чтобы показать, что если некоторый элемент принадлежит множеству А/, то он также принадлежит множеству N. Этим будет доказана справедливость со- соотношения MdN. Вторая часть доказательства состоит в необходимости показать, что если некоторый элемент принадлежит множеству N, то он также принадлежит множеству М. Этим будет доказана справедливость со- соотношения NaM. Тогда из соотношений MczNnNciMследует вывод, что М= N. Пример. Пусть требуется доказать, что А и (В n Q = (А и В) n (A и С). Очевидно, что здесь М = А и (В п С) и TV = (А и В) п (А и Q. 1. Проводим доказательство «слева направо» (=>). Пусть имеется элемент х такой, что х 6 Л/. Тогда из определения операции объединения следует, что этот элемент принадлежит мно- множеству Л (х е А) или (здесь имеем не исключающее «или») множеству ВпС(хе BnQ. Рассмотрим каждый из этих случаев. а) Если х g у4, то, по определению операции объединения, имеем: х е А<и В ихе АиС. Следовательно, этот элемент будет общим для этих множеств, то есть х е (Аи В) п (A u Q. Иначе говоря, для дан- данного случая доказано, что М с N. б) Если х g В п С, то элемент х является общим для каждого из множеств В и С, то есть х е В и х е С. Но тогда будем иметь, что хе Аи В и Аи С. Следовательно, х е {Аи В) п (Аи С). Другими сло- словами, и для данного случая М с N. 12
1.5. Упорядоченные множества. Прямое произведение множеств 2. Проведем теперь доказательство «справа налево» (<=). Пустьхе N. Тогда, по определению операции пересечения, можно записать, что хе AkjВи хе AkjC. Рассмотрим два случая. а) Предположим, что хеА. Тогда очевидно, что хе A\j(BnC). Следовательно, хе М w мы имеем в этом случае TV с А/. б) Предположим, что х <? А. В этом случае из выражения для N за- заключаем, что элемент х является общим для множеств В и С, то есть хе ВпС. Но тогда хе Аи (Вг*С), таким образом и в этом случае TV с Л/. Так как мы доказали, что М с TV и N с М, то это может быть только тогда, когда М- N. 1.5. Упорядоченные множества. Прямое произведение множеств Во многих приложениях необходимо использовать множества, у которых следует учитывать порядок записи элементов. Например, точка в двумерном пространстве (на плоскости) задается двумя ко- координатами: (х, у). Очевидно, что это разные точки, если координа- координаты их не равны, даже при условии, что элементы этих двух элемент- элементных множеств одинаковы: B, 5) и E, 2) (см. рис. 1.6). Другие примеры упорядоченных множеств: любой список (очередь) — на защиту диплома, получение льгот; множество операторов программы и т.п. Наиболее простым упорядоченным множеством является двухэлементное множество, которое называют двой- двойкой или упорядоченной парой. Элемен- Элементы упорядоченного множества обыч- обычно заключают в круглые или угловые скобки. Например, B;5) или < 2;5 >. Если (я, Ь) — упорядоченная пара, то элемент а называют первым элемен- элементом или первой компонентой этой пары, О B;5) E;2) т I т \ г Рис. 1.6. Две разные точки, определяемые их координатами 13
Глава 1. Введение в теорию множеств а элемент b — вторым элементом или второй компонентой этой же пары. Каждое упорядоченное множество можно определить с помощью неупорядоченных множеств. Например, двойку определяют так: Тройку определяют через двойку: Аналогично, л-ку определяют через двойку: Введенное понятие упорядоченного множества позволяет опреде- определить новую операцию на множествах. Прямым (декартовым) произведением множеств А и В называют множество С = АхВ, состоящее из всех упорядоченных пар (а, Ь) та- таких, что as A, be В, то есть С =АхВ={(а,Ь)\аеА,Ье В}. Например, пусть А = {х, у} и В = {1,2,3}. Тогда А х В= ), ОМ), Имеется графическая интерпретация прямого произведения мно- множеств. Пусть множество А = {х\а <х< Ь) есть интервал значений пере- переменной jc и В = \у\с <y<d) есть интервал значений у. Ясно, что множе- множества/! и В имеют бесконечное число элементов. Тогда прямое (декарто- (декартово) произведение множеств А и В ||ЙШШШШ есть множество точек прямоуголь- 1Ш1ШШЩ|1 ника, изображенного на рис. 1.7: У А Рис. 1.7. Декартово произведение множеств А и В АхВ={(х,у)\хе А,уе В}. Если имеется прямое произведе- произведение нескольких одинаковых мно- множеств, то такое произведение кратко записывают так: АхА= А2, Ах Ах х А = А3. В общем случае: Ах А хАх---хА - А". 14
1.5. Упорядоченные множества. Прямое произведение множеств 1.5.1. Алгоритм упорядочивания множества Пусть имеется неупорядоченное множество Л = {я,, а2, ..., ап}, эле- элементами которого являются (целые) числа. В некоторых приложениях требуется упорядочить элементы множества Л, например, в порядке возрастания значений этих чисел. Такую операцию называют сорти- сортировкой, а множество Л определяют как массив. Одним из методов сортировки массива чисел является «Быстрая сортировка» (Quicksort). Сущность метода состоит в том, что на каж- каждой итерации1 выделяется часть массива чисел — рабочий массив — и для него находится главный (пороговый) элемент х е А, распола- располагающийся в рабочем массиве так, что каждое число в нем, распола- располагающееся левее элемента jc, меньше х, а каждое число, располагаю- располагающееся правей элементах, большех (см. рис. 1.8). 1 / п <х X >х Рис. 1.8. Быстрая сортировка Первоначально в качестве рабочего выбирается исходный массив, то есть устанавливаем границы рабочего массива / = 1 и г = п. В каче- качестве главного выбирается элемент х, находящийся в середине масси- массива. Далее, начиная с / = 1, последовательно увеличиваем значение / на единицу и сравниваем каждый элемент а{ с х, пока не будет найден элемент а1 такой, что а{ > х. Затем, начиная су = г, последовательно уменьшаем значение./ на единицу, пока не будет найден элемент а} такой, что х > а}. Если для найденных элементов а{ и а} выполняется условие / < у, то эти элементы в рабочем массиве меняются местами. Ясно, что описанная процедура закончится нахождением главного элемента и разделением массива на две части: одна часть будет содер- содержать элементы, меньшие х, а другая — большие х. Далее для каждой такой части вновь применяется описанная выше процедура. Паскаль-программа, реализующая данный алгоритм для 10-эле- ментного массива, имеет следующий вид: Итерация — совокупность повторяющихся вычислений. 15
Глава 1. Введение в теорию множеств Program Q_sort; const N=10; var a:array[1..N] of integer; (* исходный массив *) к:integer; procedure QuicksortA,r:integer); (* Процедура быстрой сортировки *) var i,j,x,y: integer; begin i:= 1; j:= r; x:= a[A + r) div 2] ; repeat while (a[i]<x) do inc(i); while (x<a[j]) do dec(j); if (i<=j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); dec(j); end; until (i>j); (* Рекурсивное использование процедуры Quicksort *) if (Kj) then Quicksort A, j ); if (i<r) then Quicksort(i,r); end; begin writeln('Введите',N,'элементов массива:'); for k:=l to N do readln(a[k]); QuicksortA,N); (* на входе левая и правая граница сортировки *) writeln('После сортировки:1); for k:=l to N do write(a[k],1 '); end. 1.6. Бинарные отношения 1.6.1. Основные определения Бинарными отношениями пронизана вся математика и ее прило- приложения. Бинарное отношение — это отношение между двумя объектами. Бинарное отношение можно определить как совокупность упоря- упорядоченных пар, указывающих объекты, находящиеся в данном отно- отношении. 16
1.6. Бинарные отношения Например, если нас интересует отношение «уважать» между двумя конкретными личностями а и Ь, то такое отношение может иметь раз- различные формы. Так, если имеется отношение R = {(а, Ь)}, то это озна- означает, что а уважает Ь. Отношение Л, = {(я, b), (Ь, а)} означает, что а ува- уважает Ь и Ь уважает а. Нетрудно интерпретировать также другие отношения «уважать» между интересующими нас лицами: R2 = {(а, Ь), (а9а)},Я5 = {(а,а)9(Ь9Ь)}ит.ь. В общем случае, если два элемента а, Ь находятся в данном отно- отношении R, то этот факт записывают (я, b) e R, или aRb. Если эти эле- элементы не находятся в отношении Л, то это записывают так: (я, b) ? R, или aRb. Некоторым из наиболее известных отношений присваивают спе- специальные названия и обозначения. Примеры: эквивалентность (=), отношение порядка (>) или (>), равенство (=), параллельность (||), перпендикулярность A) и т. д. Очевидно, что всякое бинарное отношение R можно рассматривать как подмножество прямого произведения некоторых множеств Л и В: Левой областью бинарного отношения R называют множество всех первых компонент упорядоченных пар, составляющих данное отно- отношение, то есть R_ = И(я, Ь) е R}. Правой областью бинарного отношения R называют множество всех вторых компонент упорядоченных пар, составляющих данное отношение, то есть R+ = {b\(a, b) e R}. Например, пусть R= {A,1), A,2), A,3), C,3)}. Тогда R_= {1,3}, Я+ = {1,2,3}. Полем бинарного отношения R называют объединение его левой и правой областей: Бинарное отношение /Г1 называют обратным к отношению R, если (а, Ь) е /Г1 тогда и только тогда, когда (?, а) е R, то есть /Г1 = {(а, Ь)\(Ь9 а) е R}. 17
Глава 1. Введение в теорию множеств Например, если/? ={A,1), A,2), A,3), C,4)}, то 7Г' = {A,1), B,1), C,1), D,3)}. Пересечением бинарного отношения R по элементу а е F{R) назы- называют совокупность всех вторых (различных) компонентов упорядо- упорядоченных пар, составляющих данное отношение, и таких, у которых первой компонентой есть элемент а. Обозначение: Ra. Например, для предыдущего бинарного отношения R имеем: Rx = {1,2,3}, R2 = {0}, R3 = {4}, R4 = {0}. 1.6.2. Способы задания бинарных отношений Способы задания отношений зависят от свойств бинарного отно- отношения. Различают следующие способы задания таких отношений. 1. Бинарное отношение R можно задать перечислением всех упорядо- упорядоченных пар, находящихся в отношении R. Очевидно, что такой способ задания отношений приемлем для относительно небольшого числа упорядоченных пар. Например: Rx = {A,1)B,2)C,3),D,4)}. 2. Если трудно перечислить все упорядоченные пары, составляющие отношение, то его можно задать формулой. Например: 5= {(я, b)\(a-b) = 0 mod3; a, be {0,1, ..., 10}}. 3. Графическое задание бинарного отно- отношения предполагает графическое представ- представление элементов левой и правой областей отношения в виде точек в этих областях, со- соединенных дугами (направленными отрез- отрезками). Каждая дуга представляет некоторую упорядоченную пару, находящуюся в данном отношении. Дуга начинается в точке, соот- соответствующей первой компоненте упорядо- упорядоченной пары, и заканчивается в точке, соот- соответствующей второй компоненте упорядо- упорядоченной пары. Пример отношения S = {(а, Ь), (а, с), (Ь, с), (Z>, d)} представлен на рис. 1.9. 4. Бинарное отношение R может быть за- задано в табличной форме. В этой таблице ука- Рис. 1.9. Графическое представление бинарного отношения Q 18
1.6. Бинарные отношения зываются все элементы поля отношения и соответствующие им пере- пересечения данного отношения по выбранному элементу. Например: а Sa={b,c) ъ Sb={c,d} с Sc={0} d Sd={0} 5. Бинарное отношение можно задать матрицей ||а/у||, в которой строки и столбцы соответствуют полю отношения. В этой матрице /-я строка соотносится с некоторым элементом левой области отноше- отношения, ау-й столбец — с некоторым элементом правой области отноше- отношения. Тогда аи= 1, если соответствующие элементы находятся в дан- данном отношении, и а,7 = 0 в противном случае. Например, отношение S из предыдущего пункта может быть пред- представлено следующей таблицей. а b с d На практике существуют также варианты вышеуказанных спосо- способов задания бинарных отношений. а 0 0 0 0 b 1 0 0 0 с 1 1 0 0 d 0 1 0 0 1.6.3. Операции над бинарными отношениями Так как всякое бинарное отношение — это множество упорядочен- упорядоченных пар, то над бинарными отношениями можно выполнять все теоре- теоретико-множественные операции: объединение, пересечение, разность, дополнение. Если R — бинарное отношение, то в качестве универсального мно- множества в этом случае рассматривают множество U= F(R) x F(R), где F(R) — поле отношения R. Если совместно рассматривается несколь- несколько бинарных отношений, то в качестве универсального множества рассматривают множество U = A xA, где А есть объединение полей каждого из рассматриваемых отношений. 19
Глава 1. Введение в теорию множеств Например, пусть рассматриваются отношения R = {A,1), A,2), A,3), C,3)} и S= {A,1)B,2)C,3)}. В этом случае универсальное мно- множество имеет вид: U={A,1), A,2), A,3), B,1), B,2), B,3), C,1), C,2), C,3)}. Тогда результаты некоторых теоретико-множественных операций будут следующими: R ={B,1), B,2), B,3), C,1), C,2)}, S ={A,2), A,3), B,1), B,3), C,1), C,2)}. ={A,1), C,3)}. Кроме обычных теоретико-множественных операций, над бинар- бинарными отношениями определяют специальную операцию. Композицией бинарных отношений R и S называют бинарное отно- отношение Т, состоящее из всех упорядоченных пар (а, Ь), для каждой из которых существует элемент се R+nS_ такой, что (я, с) е R, (с, b) e S (то есть aRc, cSb). Операцию композиции записывают так: Т = R о S. Например, пусть R= {A,1), A,2), B,3), C,3)}, S= {B,4), B,5), C,2), E,5)}. Тогда RoS = {A,4), A,5), B,2), C,2)} 1.7. Свойства бинарных отношений. Отношение эквивалентности Бинарное отношение R называют рефлексивным, если для любого элемента поля а е F(R) имеет место oRa. Примерами рефлексивных отношений могут служить отношение подобия ( ~ ), отношение параллельности (||), диагональное отноше- отношение на множестве А = {а, Ь, с}: АА={(а, a), (Z>, Z>), (с, с)}. 20
1.7. Свойства бинарных отношений. Отношение эквивалентности Бинарное отношение R называют антирефлексивным, если для лю- любого элемента поля а е F(R) имеет место aRa. Примерами антирефлексивных отношений являются отношения порядка (<), (>), отношение перпендикулярности (±). Если задано бинарное отношение Rl={(a,a),(a,b),(b,b),(a,c),(c,c)}, то это отношение рефлексивно, а бинарное отношение R={(a,b),(b,c),(b,b),(a,c)} — нет. Бинарное отношение R5 = {(a,b)Ab,c),(a,c)} антирефлексивно. Бинарное отношение R симметричное, если из aRb следует bRa. Примерами таких отношений являются отношение равенства (=), подобия ( ~ ), диагональное отношение (А^), отношение перпендику- перпендикулярности (±), отношение параллельности (||). Бинарное отношение R асимметрично, если из aRb следует bRa. Асимметричными являются отношения порядка (<), (>). Бинарное отношение R называют антисимметричным, если из aRb и bRa следует, что а = Ь. Заметим, что антисимметричное отношение отличается от асимметричного лишь тем, что в антисимметричном отношении допускается существование упорядоченной пары с оди- одинаковыми компонентами. Так, бинарные отношения — симметричны. С другой стороны, бинарные отношения — антисимметричны. 21
Глава 1. Введение в теорию множеств Отсюда следует, что одно и то же бинарное отношение может быть одновременно как симметричным, так и антисимметричным (см. би- бинарное отношение 5,). Бинарное отношение R называют транзитивным, если из aRb и bRc следует, что oRc. Примерами транзитивных отношений являются отношение ра- равенства (=), отношение подобия ( ~ ), диагональное отношение (А^), отношения порядка (<), (<), (>), (>), (с), отношение параллельно- параллельности (||). Примерами транзитивных отношений также могут служить отношения 5, и 53. В противном случае отношение R называют нетранзитивным. В зависимости от свойств, которыми обладают бинарные отноше- отношения, выделяют и исследуют различные типы отношений. Наиболее известные из них — отношения эквивалентности и порядка. Бинарное отношение называют отношением эквивалентности, если оно рефлексивно, симметрично и транзитивно. Примеры отношения эквивалентности: отношение равенства (=), отношение параллельности (||) и тому подобное. Классом эквивалентности Ra называют множество всех вторых компонентов упорядоченных пар отношения эквивалентности R, у которых первой компонентой является элемент а: Ra = {b\(a,b)eR}. Иначе говоря, классом эквивалентности называют пересечение отношения эквивалентности по элементу поля этого отношения. Так, например, в отношении равенства класс эквивалентности лю- любого элемента а состоит из единственного элемента а, класс эквива- эквивалентности отношения параллельности состоит из всех параллельных прямых. Бинарное отношение 5, является отношением эквивалентности. В нем каждый класс эквивалентности состоит также из одного эле- элемента: Sx(a) = {a}, ЗД = {b} и ЗД = {с}. Пусть имеется бинарное отношение S= {(а, а), (а, Ь), (Ь, а), (Ь, Ь), (с, с), (d, </), (</, е), (е9 d)9 (<?, е)}. Нетрудно видеть, что данное отношение рефлексивно, симмет- симметрично и транзитивно. Следовательно, отношение S есть отношение эквивалентности. 22
1.8. Отношение порядка Имеем классы эквивалентности: Sa = {а, Ы Sb = {а, b), Sc = {с}, Sd = {d, е}, Se = {d, e}. Другими словами, имеется три различных класса эквивалентно- стей, порождаемых данным отношением. С «точки зрения» свойств этого отношения, элементы a, b являются неразличимыми, как и эле- элементы d, e. 1.8. Отношение порядка 1.8.1. Основные определения Бинарное отношение R называют отношением порядка, если оно ан- антисимметрично и транзитивно. Если к тому же это отношение анти- рефлексивно, то такое отношение называется отношением строгого порядка. В противном случае мы имеем отношение нестрогого порядка. Понятие отношения порядка является очень важным в различных приложениях. Это отношение пронизывает все сферы человеческой деятельности. Иерархия в некотором обществе — это отношение по- порядка, отношения (<), (<), (>), (>) тажже есть отношения порядка. Примером отношения порядка может, например, служить отно- отношение «быть потомком», отношение служебной иерархии, отноше- отношение «быть меньшим действительным числом» и так далее. Отношение порядка часто определяют упорядоченной парой (А, <) или (Л, <), где А — поле отношения порядка, а символы (<) и (<) ука- указывают соответственно на отношение строгого и нестрогого порядка. В таком случае говорят, что множество Л упорядочено отношением < (или <), или что на множестве А введен порядок. В этом случае множе- множество А часто называют также упорядоченным множеством. Бинарное отношение R называется отношением линейного порядка, если оно есть отношение порядка и для любых a, b e F(R) (для любых двух элементов поля отношения) либо aRb, либо bRa. Иначе говоря, отношение порядка R называется линейным, если любые два элемен- элемента его поля находятся в отношении R. Линейно упорядоченное множество также называют цепью. Бинарное отношение R называют отношением частичного порядка, если для некоторых a, b e F{R) не имеет место ни aRb, ни bRa. 23
Глава 1. Введение в теорию множеств Например, пусть имеется множество/! = {а, Ь, с). Очевидно, что на множестве-степени 240, {*}, {*}, М, {а, Ы {а, с}, {/>, с}, {а, Ь, с}} определен частичный порядок отношением (с). Если R — отношение частичного порядка, то говорят, что множе- множество F(R) является частично упорядоченным. Если множество F(R) ко- конечно, то такое множество называют конечным частично упорядо- упорядоченным множеством. Если R — частично упорядоченное множество, то любые два эле- элемента a, be F(R) называют сравнимыми, если aRb или bRa. В против- противном случае эти элементы называют несравнимыми. Множество не- несравнимых элементов называют также антицепью упорядоченного множества. Заметим, если Л с F(R) есть цепь, то любые два элемента из А явля- являются сравнимыми. 1.8.2. Диаграмма Хассе Для графического представления упорядоченного множества R используют диаграмму Хассе. Эта диаграмма строится следующим образом. Каждому элементу поля F(R) ставится в соответствие точка (кру- (кружок) на плоскости, причем, если aRb, точку, соответствующую эле- элементу а, располагают ниже точки, соответствующей элементу/?. Точ- Точки, принадлежащие полю отношения порядка, то есть a, b e F(R), соединяют линией (ребром), если aRb и не существует элемента с е F(R) такого, что aRc и cRb. Пусть имеется отношение порядка: R = {A,2), A,3), A,4), A,5), A,6), A,7), A,8), B,5), B,7), B,8), C,5), C,6), C,8), D,6), D,7), D,8), E,8), F,8), G,8)}. Диаграмма Хассе данного отношения представ- представлена на рис. 1.10. Диаграмма Хассе помогает лучше понимать взаи- взаимосвязь элементов, принадлежащих одному и тому же упорядоченному множеству (например, принад- Рис. 1.10. лежность одной и той же цепи или одной и той же Диаграмма Хассе антицепи). 24
1.9. Разбиение частично упорядоченного множества на цепи 1.9. Разбиение частично упорядоченного множества на цепи Пусть имеется некоторое множество А Говорят, что множество Л разбито на подмножества Ах, А2,..., Ат, если: 1. 4*0,(/= U,...,/я); 2. Air\Aj = 0, если /*удля всех/,у е {1,2, ..., т}; 3. U=A Пусть (А, <) есть частично упорядоченное множество. Разбиение множества (А, <) на цепи называется наименьшим, если оно имеет наименьшее число элементов т по сравнению с другими разбиениями {А, <) на цепи. Такое разбиение также называется мини- минимальным цепным разбиением (МЦР) множества (А, <). Пусть требуется найти наименьшее число цепей, на которые мож- можно разбить множество А Искомое разбиение будет минимальным цеп- цепным разбиением (МЦР) упорядоченного множества А. Сформулированная задача имеет различные прямые или косвен- косвенные применения. Основной результат, связанный с этой задачей, по- получил Дилворт. Теорема 1.9.1 (Дилворт). Наименьшее количество цепей, на которые может быть разбито конечное частично упорядоченное множество, равно наибольшей антицепи этого множества. Существу ют другие обобщения этой теоремы, использующие раз- различные представления бинарных отношений, например графы. Справедливо также и двойственное утверждение. Теорема 1.9.2. Пусть А — конечное частично упорядоченное множе- множество. Тогда наибольшее число элементов в цепи из А равно наимень- наименьшему числу непересекающихся антицепей, содержащих все элементы множества А. Для наглядного представления частично упорядоченного множе- множества используем диаграмму Хассе. На рис. 1.11, а представлен частичный порядок, порожденный би- бинарным отношением R = {(я„ я2), (я,, а3), (я „ а5), (я4, я2), (я5, а2)}. 25
Глава 1. Введение в теорию множеств а2 аъ а2 аъ а4 а5 а2 О 1 1 1 а2 1 ® 1 1 1 4 1 а б в Рис. 1.11. Упорядоченное множество Американские математики Форд и Фалкерсон разработали эф- эффективный алгоритм, позволяющий для заданного конечного час- частично упорядоченлого множества {А, <) находить наименьшее раз- разбиение этого множества на цепи с одновременным нахождением наибольшей антицепи. Работа этого алгоритма основана на представлении упорядочен- упорядоченного множества рабочей таблицей (матрицей) Т. Это квадратная таб- таблица размера п х п, где п — число элементов в множестве А. Строки и столбцы этой таблицы соответствуют элементам множества А. Табли- Таблица Гсодержит два вида клеток: допустимые и запрещенные. Запрещен- Запрещенные клетки являются пустыми, а допустимые — содержат 1. Клетка i-j является запрещенной, если соответствующие элементы а1 и а} множества А несравнимы, то есть at Ra .. Клетка / -у является допус- допустимой, если соответствующие элементы а, и а} множества А сравнимы, то есть afixiy Совокупность S допустимых клеток таблицы Г называется незави- независимой, если все они размещены в попарно различных строках и столб- столбцах Г (то есть в любой строке и любом столбце таблицы Г находится не более одной клетки из совокупности S). Каждая выбранная допус- допустимая клетка совокупности S соответствует двум сравнимым элемен- элементам множества^. Нетрудно заметить, что любая независимая совокупность допус- допустимых клеток из Г определяет некоторое разбиение упорядоченного множества на цепи. Пустая совокупность соответствует разбиению упорядоченного множества (А, <) на п одноэлементных цепей. Ясно, что для нахождения наименьшего разбиения упорядоченного множе- множества на цепи необходимо найти наибольшее число независимых до- допустимых клеток таблицы Т. 26
1.9. Разбиение частично упорядоченного множества на цепи Алгоритм Форда—Фалкерсона для разбиения частично упорядо- упорядоченного множества на наименьшее число цепей состоит из двух этапов: • построения исходного разбиения частично упорядоченного мно- множества на цепи; • улучшения существующего разбиения, если это возможно. Во избежание неоднозначности строки и столбцы Г просматри- просматриваются единообразно: сверху вниз по строкам и слева направо по столбцам. Чтобы получить исходное разбиение упорядоченного множества на цепи, можно использовать следующую процедуру. Шаг 0. Положить N = п, где п — число строк TJ= 1. Шаг 1. Если TV = О, закончить вычисления, так как искомое разбиение найдено. Шаг 2. В /-Й строке Т найти первую по порядку допустимую клетку, соответствующий столбец которой не помечен. Если такая клетка не найдена, то положить / := / + 1, N := TV- 1 и перейти к Шагу 1. В противном случае запомнить найденную клетку (/,у), пометить столбец^, вычислить / := / + 1 и перейти к Шагу 1. На рис. 1.11,5 показана рабочая таблица для строго упорядочен- упорядоченного множества, представленного на рис. 1.11, а. Выбранная клетка исходного разбиения заключена в кружок. Ниже приведена реализация процедуры построения исходного разбиения упорядоченного множества на цепи на языке Паскаль. Процедура построения произвольного (начального) разбиения упорядоченного множества А на непересекающиеся цепи. Вход процедуры — AdjMat — рабочая таблица; Выход — вектор Solut длины numver, определяющий ребра разбиения, то есть (i,Solut[i]) есть ребро разбиения. *) Procedure InitCell; var MarkCol:Vect; (* вектор пометок столбцов таблицы *) f_j:boolean; begin for i:=l to NumVer do begin Solut[i]:=0; (* Установка пустого решения *) 27
Глава 1. Введение в теорию множеств MarkCol[i]:=0 end; i:=0; repeat inc (i) ; j:=0; f_j:=false; repeat inc (j ) ; if (AdjMat[i,j]=l) AND (MarkCol[j]=0) AND (Solut[j]oi) then begin Solut[i]:=j; MarkCol[j]:=1; f_j:=true; end; until(f_j OR (j=NumVer)); until(i=NumVer); end; (* the end of the procedure InitCell *) Для нахождения МЦР и наибольшей антицепи множества А вос- воспользуемся алгоритмом Форда—Фалкерсона. Алгоритм начинает ра- работу после завершения работы предыдущей процедуры, то есть после построения исходного разбиения упорядоченного множества на цепи. Шаг 1. Пометить символом (*) строки Г, которые не содержат вы- выбранные клетки . Шаг 2. Просмотреть вновь помеченные строки Г и в каждой строке найти все невыбранные допустимые клетки. Пометить индексом исследуемой строки все непомеченные столбцы Г, которые соот- соответствуют найденным клеткам. Шаг 3. Просмотреть вновь помеченные столбцы. Если просматривае- просматриваемый столбец содержит выбранную клетку (то есть клетку, заклю- заключенную в кружок), то пометить строку, содержащую выбранную клетку, индексом исследуемого столбца. Если просматриваемый столбец не содержит выбранной клетки, то перейти к Шагу 4. Если новые строки пометить невозможно, то перейти к Шагу 5. Шаг 4. Сущность данного шага — процедура построения новой сово- совокупности независимых клеток, имеющей на одну клетку больше, чем прежняя совокупность. На каждом этапе этой процедуры, кро- кроме заключительного, происходит выбор новой допустимой клетки Т и удаление «старой». Увеличение общего числа выбранных клеток 28
1.9. Разбиение частично упорядоченного множества на цепи происходит следующим образом. В найденному-м столбце выбрать новую клетку в строке /и(/), где m(J) есть пометка текущего столбца. Пусть уже выбрана клетка (/,у), помеченная m(i) и m(j), где m(i) есть пометка строки. Если m(j) = (*), то процедура построения новой со- совокупности независимых клеток завершена. Удалить все пометки строк и столбцов и идти к Шагу 2. В противном случае удалить клет- клетку (/, m(i)) и выбрать клетку (m(m(i)), m(i)). Положить / = m(m(i)), j = m(i) и повторить описанный выше процесс. Шаг 5. Найти наибольшую антицепь U= U\UC, где Ur есть множество помеченных строк, и Uc есть множество помеченных столбцов. За- Закончить вычисления. Найденные допустимые клетки определяют дуги, составляющие цепи МЦР. На рис. 1.11, в показаны выбранные клетки оптимального разбие- разбиения для частично упорядоченного множества, представленного на рис. 1.11, а. В этом случае МЦР состоит из цепей Лх = {а],а3},А2 = {а4, а2} и Аъ = {а5}. Также имеется множество Ur- {я2, а3, я4, а5} помеченных строк и множество Ue = {a2} помеченных столбцов. Следовательно, наибольшая антицепь U равна U= {а2, а3, а4, я5}\{а2} = {я3, а4, а5). Теорема 1.9.3. Пусть в рабочей таблице найдено наибольшее число допустимых клеток. Тогда мощность наибольшей антицепи частич- частично упорядоченного множества равна числу строк рабочей таблицы, которые не имеют допустимых клеток. Легко видеть, что если выбрано наибольшее число допустимых клеток в рабочей таблице Т, то каждый помеченный столбец ставит- ставится в соответствие помеченной строке этой таблицы. Поэтому мощ- мощность наибольшей антицепи равна числу первоначально помечен- помеченных строк Т. Q.E.D. Реализация алгоритма Форда—Фалкерсона в виде процедуры на л кг р. Пяг.кгяпк ппипр.пр.ня ниже языке Паскаль приведена ниже Процедура нахождения МЦР упорядоченного множества. Вход — AdjMat — рабочая таблица; Solut — вектор текущего решения. Выход — Solut — оптимальное разбиение множества. *) 29
Глава 1. Введение в теорию множеств Procedure МРР; (* Процедура находит минимальное цепное разбиение *) (* и наибольшую антицепь упорядоченного множества *) var flag_C,flag P,flag R,flag jiboolean; MarkC,MarkR,ConsR,ConsC:Vect; h,g,s,si:integer; (* MarkC — вектор пометок столбцов; MarkR — вектор пометок строк *) (* ConsC — вектор, указывающий какие пометки столбцов рассмотрены *) (* ConsR — вектор, указывающий какие пометки строк рассмотрены *) (* flag_C — указывающая, когда нужно рассматривать столбцы *) (* flag_P — указывает, имеется ли прорыв *) label М0,М1,М2,МЗ,М4; begin (* Устанавливаем начальные значения *) МО: for i:=l to NumVer do begin MarkR[i]:=0; ConsR[i]:=0; MarkC[i]:=0; ConsC[i]:=0 end; (* помечаем пометкой -1 свободные строки *) for i:=l to NumVer do if (Solut[i]=0) then MarkR[i]:=-l else MarkR[i]:=0; (* строки помечены *) (* конец установки начальных значений *) (* Просмотр пометок строк *) Ml: flag_R:=false; flag_C:=false; (* столбцы рассматривать не нужно *) for i:=l to NumVer do if (MarkR[i]<>0) AND (ConsR[i]=0) then 30
1.9. Разбиение частично упорядоченного множества на цепи begin for j:=l to NumVer do if (AdjMat[i,j]=l) AND (MarkC[j]=0) then begin MarkC[j]:=i; (* вводится новая пометка столбца*) flag_C:=true;(* столбцы рассматривать нужно *) end; ConsR[i]:=1; (* строка рассмотрена *) end; (* конец рассмотрения пометок строк *) (* Просмотр пометок столбцов *) if flag_C then begin for j:=l to NumVer do begin flag_P:=true; if (MarkC[j]>0) AND (ConsC[j]=0) then begin for i:=l to NumVer do if (AdjMat[i,j]=l) AND (Solut[i]=j) then begin flag_P:=false;(* найдена занятая клетка *) MarkR[i]:=j; (* строка помечается номером столбца*) flag_R:=true; (* строки нужно будет рассматривать *) ConsC[j]:=l (* столбец рассмотрен *) end; if flag_P then (* рассмотренный столбец не имеет занятой клетки *) begin h:=j; (* определен номер столбца, не имеющего занятой клетки *) ConsC[h]:=1; goto М2 end end; end; if flag_R then goto Ml end else goto M4; (* конец просмотра пометок столбцов *) 31
Глава 1. Введение в теорию множеств (* Ввод новой занятой клетки *) М2: Solut[MarkC[h]]:=h; (*Вводим новый элемент решения *) g:=MarkR[MarkC[h]]; (* запоминаем пометку строки, куда вводится новый элемент *) (* конец ввода новой занятой клетки *) (* Перераспределение существующих клеток *) МЗ: if (go-1) then begin Solut[MarkC[g]]:=g; g:=MarkR[MarkC[g]]; goto M3 end else goto MO; (* конец перераспределения клеток *) M4: (* Находим наибольшую антицепь *) sizeU:=0; for i:=l to N do if (MarkR[i]<>0) AND (MarkC[i]=O) then begin U[i]:=1; sizeU:=sizeU+l; end else U[i]:=0; (* конец построения наибольшей антицепи *) end; (* конец процедуры МЦР *) 1.10. Наименьший и наибольший элементы, границы упорядоченного множества Пусть множество^ упорядочено отношением порядка R. Элемент а е А называется наименьшим элементом множества А, если для всех be А имеет место отношение aRb. Наименьший элемент множества Л обозначают min A. Элемент b е А называется наибольшим элементом множества А, если для всех а е А имеет место отношение aRb. Наибольший элемент множества А обозначают max A. Из этих определений следует, что наибольший и наименьший эле- элементы упорядоченного множества имеет лишь такое множество, ко- которое упорядочено рефлексивным отношением R. 32
1.11. Функциональные бинарные отношения Пусть В с А есть подмножество множества А. Элемент а е А назы- называется минорантой множества В, если для всех be В имеет место отно- отношение aRb. Множество всех минорант множества В обозначают В~. Элемент а е А называется мажорантой множества В, если для всех be В имеет место отношение &/to. Множество всех мажорант множе- множества В обозначают В+. Например, пусть множество/! = {1,2,3,4} упорядочено отношением Я= {A,2), B,2), B,3), A,3), D,3)} и В = {2,3}, С = {2,4}. Тогда имеем следующие миноранты и мажоран- мажоранты множеств В и С: В~ = {1,2}, В+ = 0, С = 0, С = {3}. Наибольший элемент множества В~ называется точной нижней границей множества В с А и обозначается inf В = max B~. Символ inf есть сокращение от infimum и читается «инфимум». Наименьший элемент множества В+ называется тонной верхней границей множества В с: А и обозначается sup В = max B~. Символ sup есть сокращение от supremum и читается «супремум». Пусть требуется найти точные нижнюю и верхнюю границы мно- множеств В и С из предыдущего примера. Тогда имеем: inf В' = 2, sup B+ не существует, inf С" и sup С* также не существуют. 1.11. Функциональные бинарные отношения 1.11.1. Отображения Бинарное отношение R называют функциональным, если из aRb и aRc следует, что b = с. Иначе говоря, бинарное отношение R является функциональным, если оно не содержит двух различных упорядочен- упорядоченных пар с одной и той же первой компонентой. Всякое бинарное отношение можно рассматривать как подмноже- подмножество прямого произведения некоторых множеств: R с А х В. В этом случае говорят, что задано отношение R от А до В. В общем случае множество А может не совпадать с левой областью R , а множест- множество В — с правой областью R+ бинарного отношения R. Функциональное отношение RdAx В называется отображением, если R_ = А. В этом случае говорят, что имеется отображение R:A —»В. 33
Глава 1. Введение в теорию множеств Пусть имеется отображение R: А —» В и пусть имеется упорядочен- упорядоченная пара aRb, где ае A, be В. Элемент а называют прообразом элемен- элемента b при отображении R, а элемент b называют образом элемента а при отображении R. Пересечение отображения R по элементу а е А принято, кроме об- общей записи Ra, записывать также следующим образом: R(a) = {b}. Отображение R: Л -> В называют функцией, если множества А и В числовые. В общем случае рассматривают л-местные функции, или функции п переменных (аргументов). Функция/от п переменных есть отображение множества А" в множество В: Если отображение/есть функция от А до В и b е В есть образ про- прообраза a е А, то это записывают так: J{a) - b. Как видим, принципиальным отличием понятий «отображение» и «функция» является тот факт, что отображения могут быть определе- определены на произвольных множествах А и В, а функция — только на число- числовых множествах. Следовательно, понятие отображения является бо- более общим. 1.11.2. Классификация отображений и функций Пусть имеется отображение (функция) R: А —» В. Отображение (функцию) R называют сюръективным, если R+ = В. Отображение (функцию) R называют инъективным, если в нем разным прообразам соответствуют разные образы, то есть из а Ф b сле- следует R(a) Ф R(b). Отображение (функция) R называют биективным или взаимно од- однозначным, если оно сюръективное и инъективное. 1.12. Мощность множеств Множества Л и В называются эквивалентными, если между их эле- элементами можно установить взаимно однозначное (или биективное) соответствие. Эквивалентность множеств обозначают: А ~ В. Это от- отношение рефлексивно, симметрично и транзитивно, то есть А - А, А~В= В~Ап если А - В, В - С, то А ~ С. 34
1.13. Матроиды Если множества Аи В эквивалентны, то говорят, что они равно- мощны, или имеют одно и то же кардинальное число. Кардинальное число множества у4, или его мощность, обозначают Card(A) или \А\. Если множество А конечно, то его мощность — это число его эле- элементов. Георг Кантор под мощностью понимал такое свойство множеств, которое они имеют, если абстрагироваться от качества элементов и их состава. Например, если множество А имеет п элементов, то мощность его булеана равна: CardBA)=\<f\=2n. 1.13. Матроиды Понятие матроида играет важную роль при разработке различных алгоритмов. ПустьЛ = {ах, а2, ..., ап) есть некоторое множество и S = {Ах, А2, ...,AJ есть непустая совокупность подмножеств множества А. Упорядоченная пара М- (A, S) называетсяматроидом, когда: • Ai <Z Aj для любых Ап А} е S, если / *j\ • если Ai9 AjS Sm ake Ai9 то существует элемент aq е A} такой, что (A\{ak}) u {aq}. Элементы совокупности S называют базами матроида. Можно по- показать, что любые две базы матроида М содержат одинаковое число элементов. Это число называется рангом матроида А/. Подмножество множества А называют независимым, если оно со- содержится в некоторой базе матроида М. Подмножество множества Л, которое не является независимым, называют зависимым. Наимень- Наименьшее по числу элементов зависимое подмножество множества Л назы- называют циклом матроида М. Пример 1. Предположим, что совокупность S содержит все под- подмножества изу4, имеющие р < п элементов. Тогда мы имеем матроид рангар, в котором все элементы из Sявляются базами, а все подмно- подмножества изЛ, содержащие не более/? элементов множества Л, являются независимыми множествами. Циклами рассматриваемого матроида будут подмножества множества А, содержащие/? + 1 элемент. 35
Глава 1. Введение в теорию множеств Иногда матроид определяют в терминах независимых множеств. Пусть А есть конечное множество, определенное выше. Пусть, да- далее, Q есть совокупность подмножеств множества А, удовлетворяю- удовлетворяющих следующим условиям: • 0eQ; • если Л. е Q и Aj с А,., то А} е Q; • если Ai9AjG Q и \(А,\ = |(Лу| + 1, то существует такой элемент а е А\Ар что А} u {a} e Q. Здесь И/1 есть число элементов подмножества Аг Тогда пара М- {A, Q) называется матроидом. Элементы множе- множества А называются элементами матроида М. Элементы совокупно- совокупности Q называются независимыми множествами матроида, а всякое максимальное по включению независимое множество называется базой матроида М. Тогда подмножество множества А, не принадле- принадлежащее Q, называется Зависимым. Рассмотрим следующую оптимизационную задачу. ПустьЛ = {я,, а2, ..., ап) есть некоторое множество и пусть каждо- каждому элементу из А поставлено в соответствие некоторое число w(cry) (/'= 1, ..., п) — «вес» элемента а. е А. Пусть, далее, 5= {А],А2, ..., AJ есть непустое семейство подмножеств множества А Тогда весом эле- элемента As e S (/ = 1, ..., т) называется сумма В частном случае, если w{a) = 1, то w{A) = Card{A). Имеется возможность строить элементы семейства S, последова- последовательно выбирая элементы из множества А. Известно правило Р, по- позволяющее определить, является ли выбранная совокупность элемен- элементов из А подмножеством некоторого элемента из S. Другими словами, в задаче выполняется первое из свойств матроида: если А{ е S и Aj с Л„ то Aj € S. Требуется построить элемент А{ е S наибольшего (наименьшего) веса. Для решения подобных задач часто используется алгоритм, кото- который называют «жадным» или «поглощающим». Предположим, необхо- необходимо найти элемент Aj e S наибольшего веса. 36
1.13. Матроиды «Жадный» алгоритм Шаг 1. Среди элементов множества А выбрать элемент наибольшего веса. Шаг 2. Удалить из множества А выбранный элемент, а также все эле- элементы, каждый из которых с ранее выбранными элементами не удовлетворяет правилу Р. Шаг 3. Если множество Л непустое, то вернуться к выполнению Ша- Шага 1. В противном случае все выбранные элементы образуют реше- решение задачи. Данный алгоритм в применении к конкретной задаче может иметь различные формы. Пример 2. Рассмотрим знаменитую задачу о покрытии, которая формулируется следующим образом. Пусть Яесть некоторое конечное множество и пусть А = {?,, ...,Вп} есть совокупность подмножеств из В. Всякое подмножество я = = {/?., ..., Bi} совокупности Л назовем покрытием множества В, если U Bie=B. VBie en Следовательно, мы имеем семейство 5= {тс,, ..., nj покрытий мно- множества В. Для каждого покрытия п с: А определим функцию w(n) = Card(n). Задача состоит в поиске для заданных В и А такого покрытия п\ на ко- котором функция w принимает наименьшее значение. Ясно, что задача не имеет решения, если Для данного примера модификация «жадного» алгоритма выгля- выглядит следующим образом. Алгоритм поиска покрытия Шаг 0. Положить R := 0. Шаг 1. В совокупности А выбрать Bt (/= 1, ..., п), содержащий наи- наибольшее число элементов множества В. Положить R := R u Вг Шаг 2. Удалить/?; из множества^, а также все i?ye Л такие, что В} е R. 37
Глава 1. Введение в теорию множеств Шаг 3. Если множество А непусто, то вернуться к выполнению Ша- Шага 1. В противном случае все выбранные элементы образуют неко- некоторое покрытие п. К сожалению, в общем случае, данный алгоритм не находит наи- наименьшего покрытия. Возникает вопрос: когда применение «жадного» алгоритма будет успешным при решении ранее сформулированной оптимизационной задачи? Ответ на этот вопрос дает следующая теорема. Теорема 1.13.1. Пусть S есть совокупность взвешенных подмно- подмножеств конечного множества А, удовлетворяющая свойству: если А;Е Su Aj с А{, то А} е S. Тогда применение «жадного» алгоритма бу- будет успешным тогда и только тогда, когда Secmb совокупность не- независимых множеств матроида. Другими словами, одного указанного в теореме свойства недоста- недостаточно для успешного применения «жадного» алгоритма. Необходимо также выполнение второго из свойств матроида: если Д, AjE Swake A,, то должен существовать элемент aq e А} такой, что (A\{ak}) u {aq}. Контрольные вопросы 1. Приведите примеры известных вам множеств. 2. Как можно задать множество? 3. Какие множества называют равными? 4. Какое множество называют пустым? 5. Какое множество является подмножеством другого множества? 6. Что такое булеан (множество-степень) множества? 7. Что такое универсальное множество (универсум)? 8. Как строится диаграмма Эйлера—Венна? 9. Как определяется объединение множеств? 10. Как определяется пересечение множеств? 11. Как определяется разность множеств? 12. Как определяется дополнение множеств? 13. Какими свойствами обладают операции объединения, пересечения мно- множеств? 14. Как формулируются законы де Моргана? 15. В чем состоят законы поглощения? 16. Как формулируется принцип двойственности? 17. Как доказываются теоретико-множественные соотношения? 38
Контрольные вопросы 18. Как определяется упорядоченная пара (двойка)? 19. Как определяется прямое (декартово) произведение множеств? 20. Какую геометрическую интерпретацию имеет прямое произведение мно- множеств? 21. Как записывается прямое произведение нескольких одинаковых мно- множеств? 22. Что такое бинарное отношение? 23. Как определяется левая, правая области и поле бинарного отношения? 24. Как определяется пересечение бинарного отношения по элементу поля этого отношения? 25. Какие существуют способы задания бинарного отношения? 26. Как определяется композиция бинарных отношений? 27. Какие бинарные отношения называют рефлексивными, антирефлексив- антирефлексивными? 28. Какие бинарные отношения называют симметричными, антисиммет- антисимметричными? 29. Какие бинарные отношения называют транзитивными? 30. Как определяется отношение эквивалентности? 31. Что такое класс эквивалентности? 32. Как определяется отношение порядка? 33. Какое отношение порядка называется строгим? 34. Что такое цепь в упорядоченном множестве? 35. Какое упорядоченное множество называется частичным? 36. Как строится диаграмма Хассе? 37. Как формулируется теорема Дилворта? 38. Как формулируется алгоритм Форда-Фалкерсона? 39. Что называют наименьшим, наибольшим элементами упорядоченного множества? 40. Что называют минорантой, мажорантой упорядоченного множества? 41. Что такое точная верхняя, нижняя границы упорядоченного множества? 42. Какое бинарное отношение называют функциональным? 43. Какое функциональное отношение называют отображением, функцией? 44. Какая разница между понятиями отображения и функции? 45. Какое отображение называют биективным (взаимно-однозначным)? 46. Какие множества называют равномощными? 47. Что означает понятие мощности конечного множества? 48. Что такое матроид? 49. Что такое базы матроида? 50. Как формулируется «жадный» алгоритм? 51. Когда применение «жадного» алгоритма к решению оптимизационной задачи будет успешным? 39
Глава 1. Введение в теорию множеств Упражнения 1. Какие из приведенных ниже соотношений неверны и почему? (а)хе {2,д,х}. (ЬKе{1,{2,3},4}. (с)хе {l,sinx}. {d){x,y}e{a,{x,y},b}. (е) {а} е а. (Г)Ае{А}. (h) a = {а}. 2. Равны ли между собой множества А и В? Если нет, то почему: (а) А = {2,5,4}, В ={5,4,2}. (Ъ)А = {1,2,4,2}, Д= {1,2,4}. (с) А = {2,4,5}, Я={2,4,3}. = {1,{2,5},6},?= {1,2,5,6}. 3. Связаны ли множества^ и В отношением включения? Если да, то укажите, какое из них является подмножеством другого. (а) Л = {*,*,</},/?= {а, 6, с, </}• (b)A = {a,c9d9e},B={a,e,c). (c)A = {c,d,e},B={c,a}. 4. Запишите булеан множества Л: (а) Л = 0. 5. Запишите множества 2\ 22\ 2A(j2\ 2А<л2\ ест А = {а}. 6. Приняв множество первых 20 натуральных чисел в качестве уни- универсального, запишите следующие его подмножества: А — чет- четных чисел, В — нечетных чисел, С — квадратов чисел, D — про- простых чисел. В каких отношениях находятся эти подмножества? 7. Запишите множества, получаемые в результате следующих опе- операций над множествами из задачи 6: А и В, А п В, А п С, A n D, C\A,C\B,(C\D)kjD\C. 40
Упражнения 8. Докажите по отношению принадлежности и равенства двух мно- множеств следующие тождества: (а) А и (В пС) ^(А и В) n (A u С). (c) А п (А и В) = А. (d) A\(B kjQ = (A\B) n (A\Q. (e) А\(А\В) =АпВ. (f)A\B = A\(AnB). (g)(AvB)\C=(A\Qv(B\C). 9. По определению (я, Ь) = {{о}, {о, Ь}}. Найдите множества: (аJ\(я, Ь), если А = {а, Ь}. (b) (я, b) u (^>, а). (c) (я, Z>)n(Z>, ^)- (d) (a, b)\(b, a). (e) ((а, Ь), с). (О (^, (*, с)), (g) (д, д, а). 10. Что можно сказать о множествах/! и В, если: (а) из того, что (а, Ь) е Ах В, следует, что а Ф Ь. (Ъ)АхВе ВхА. (с)АхВ=ВхА. (d) из того, что (а, а) е Ах В, следует, что (а, о) е Ах В. (e) из того, что (а, а) <? Ах В, следует, что (а, а) ? Ах В. 11. С помощью диаграмм Эйлера—Венна исследуйте вопрос о спра- справедливости каждого из следующих рассуждений: (а) Если А, В и Стакие подмножества универсума U, что An В аС (Ь) Если А, В и Стакие подмножества универсума ?/, что А с В п С 12. Докажите, что для конечного множества А, состоящего из п эле- элементов, множество 2А содержит 2" элементов. 13. Пусть Л/, и М2 множества деталей первого и второго механизмов со- соответственно, а Р— множество пластмассовых деталей. Запишите в виде теоретико-множественных соотношений следующие условия, (а) Среди деталей первого механизма все детали — пластмассо- пластмассовые. 41
Глава 1. Введение в теорию множеств (b) Одинаковые детали, входящие в оба механизма, могут быть только пластмассовыми. (c) Во втором механизме нет пластмассовых деталей. 14. Запишите множество упорядоченных пар (х, у), выражающих от- отношение «jc — делитель у» на множестве целых чисел от 2 до 10 включительно. Является ли это отношение функцией? 15. Пусть* е Х,уе У и R — отношение между элементами множества, выражаемое соотношением xRy. Укажите, в каких случаях R мож- можно рассматривать как функцию? Укажите свойства каждого из со- соотношений. (a) X — множество студентов, У — множество учебных дисцип- дисциплин, xRy означает «х изучает у». (b) X— множество спортсменов, У— рост в единицах длины, xRy означает «х имеет росту». (c) X— множество компонентов электрической цепи, У— мно- множество узлов цепи, xRy означает «х связан с у». Литература [1.1] Лйгнер М. Комбинаторная теория. М.: Мир, 1982. [1.2] Беран Я. Упорядоченные множества. М.: Наука, 1981. [1.3] Коба B.I. Бшарш вщношення. К.: Радянська школа. 1983. [1.4] Кужель О.В. Елементи теори множин i математичноУ лопки. М.: Ра- Радянська школа, 1977. [1.5] Кузнецов О.П.у Аделъсон-Вельский Г.М. Дискретная математика для инженера. М.: Энергоатомиздат, 1988. [1.6] Куратовский К, Мостовский А. Теория множеств. М.: Мир, 1970. [1.7] Лавров И.А., Максимова Л.Л. Задачи по теории множеств, математи- математической логике и теории алгоритмов. М.: Наука, 1975. [1.8] Столл P.P. Множества. Логика. Аксиоматические теории. М.: Про- Просвещение, 1968. С. 9-70. [1.9] Фор Р. и др. Современная математика. М.: Мир, 1966. [1.10] Шрейдер Ю.А. Равенство, сходство, порядок. М.: Наука, 1971. [1.11] Baase S. Computer Algorithms (Introduction to Design and Analysis). Second edition. Addison-Wesley publishing company, 1991. 42
Глава 2 Введение в теорию графов 2.1. Основные понятия Графом называют двойку G- (V, Е), где V- {v,, v2, ..., vn} — множе- множество элементов, называемых вершинами, а?= {е,, е2, ..., ej — множе- множество ребер (дуг) графа. Каждое ребро (дуга) из Е определяется парой вершин v. и vy, которые оно соединяет. Такие вершины называют кон- концевыми для ребра (дуги). Ребро графа Gзадается неупорядоченной па- парой вершин {v,, vy), а дуга — упорядоченной парой вершин (v,., vy). Дугу графа G называют также ориентированным ребром. Нетрудно видеть, что граф задает бинарное отношение Е, а множе- множество К есть поле данного отношения. Неупорядоченной паре {v,., vy} вершин в отношении ? соответствуют две упорядоченные пары (v/? vy) и (vy, v,.). Однако теория графов развивалась независимо от теории множеств и поэтому в этой теории возникли собственные обозначе- обозначения и своя терминология. На рисунке вершины графа обычно изображаются точками (кру- (кружочками) на плоскости, а ребра — линиями, соединяющими эти точ- точки (если ребро ориентировано, то на линии указывают направление ориентации). Примеры графов, имеющих ребра или дуги, представ- представлены соответственно на рис. 2.1. Графы используются как математическая модель во многих науч- научных и прикладных задачах. Широкое применение графов объясняет- объясняется наглядностью построенной модели — обычно человек легко запо- запоминает и различает особенности графических образов. Граф называют неориентированным, если он не имеет ориентиро- ориентированных ребер (см. рис. 2.1, а). Для краткости неориентированный граф называют также неографом. Иногда каждое ребро такого графа представляют как две дуги, на- направленные в противоположные стороны. Граф называют ориентированным, если он состоит только из ори- ориентированных ребер (см. рис. 2.1, б, где направление каждого ребра указано стрелкой). Для краткости ориентированный граф называют также орграфом. Если граф имеет как ориентированные, так и неориентированные ребра, то такой граф называют смешанным. 43
Глава 2. Введение в теорию графов Ребро называют петлей, если оно начинается и заканчивается в од- одной и той же вершине. Так, на рис. 2.1, а изображена петля, начинаю- начинающаяся и заканчивающаяся в вершине v3. Рис. 2.1. Примеры графов Между вершинами графа G и его ребрами имеет место отношение инцидентности. Говорят, что вершина v, инцидентна ребру ек, если v,. — одна из концевых вершин этого ребра. Обратно, всякое ребро инци- инцидентно своим концевым вершинам. Вершины v;, Vj g К графа G называются смежными или соседними, если они инцидентны одному и тому же ребру (то есть соединены хотя бы одним ребром или дугой). Если хотя бы одну пару вершин графа G соединяют несколько ре- ребер, то такой граф называют мультиграфом. Вершину графа G называют изолированной, если она не инцидентна ни одной вершине этого графа. Так, вершина v4 является изолирован- изолированной в графе на рис. 2.1, а. Пусть в графе G имеется дуга ек = (v,., vy) e E. Тогда говорят, что дуга ек исходит из вершины v,. и заходит в вершину vy. Вершину v; называют также начальной, а вершину vy. — конечной для дуги ек. Существуют различные виды графов, которые используются в при- приложениях. Граф G называют полным, если каждая пара его вершин соединена ребром. Такой граф часто обозначают Кп. Если граф G не имеет ребер, то такой граф называют нуль-графом и обозначают Кп. 44
2.2. Способы задания графа Если граф G не имеет ни вершин, ни ребер, то его называют пус- пустым, обозначая ЛГ0. Граф G = (К, Е) называют двудольным, если множество его вер- вершин V можно разбить на два подмножества Vv V2a V(VX nV2 = 0) так, что каждое ребро графа имеет концевые вершины, принадлежа- принадлежащие подмножествам К, и У2 (то есть одна из вершин принадлежит К,, а другая V2). Полный двудольный граф обозначают Кт п, где т — число вершин в К,, а « — число вершин в V2. В этом графе каждые две верши- вершины v,, v2 такие, что v, e У] и v2 e V2 соединены ребром. v4 v, v2 б Рис. 2.2. Полный и двудольный графы На рис. 2.2, а изображен полный граф, а на рис. 2.2, 6—двудольный. 2.2. Способы задания графа Существуют различные способы задания графа. Каждый из этих способов имеет свои преимущества и недостатки. Различные способы имеют различную область применимости: в теоретических исследо- исследованиях, при представлении графа в компьютере, для решения некото- некоторого класса задач и тому подобное. Рассмотрим наиболее распространенные способы задания фафов. 2.2.1. Матрица смежности Одним из наиболее часто используемых способов задания графа G с п вершинами является матрица смежности. 45
Глава 2. Введение в теорию графов Матрица смежности — это булева матрица (иногда ее называют также двоичной или битовой) порядка п: R = ||rj|, в которой строкам и столбцам поставлены в соответствие вершины графа G,wrij= 1, если вершины v;, Vj е Ксмежные, и ги = 0 в противном случае. Так, для неориентированного фафа, представленного на рис. 2.1, а, матрица смежности имеет вид: R = 0 1 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 1 1 0 V V V V V V V а для ориентированного фафа, представленного на рис. 2.1,5, матри- матрица смежности имеет вид: 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 Нетрудно заметить, что матрица смежности неофафа симметрич- симметрична относительно главной диагонали. Этим пользуются при компью- компьютерном представлении фафа, задавая только (правую верхнюю) поло- половину матрицы смежности. Напротив, матрица смежности орграфа не симметрична относи- относительно главной диагонали. 2.2.2. Матрица инцидентности Матрица инцидентности графа G — это также булева матрица Q - II Qij II размера пх /я, в которой строкам поставлены в соответствие вершины графа, а столбцам — ребра. 46
2.2. Способы задания графа Если граф G — неориентированный, то матрица инциденции тако- такого графа является булевой матрицей, в которой qtj= 1, если вершина v, инцидентна ребру ер и q(j= 0 в противном случае. Так, для графа, изображенного на рис. 2.1, я, матрица инцидент- инцидентности имеет вид: <2 = 1 0 0 0 0 0 1 e2 1 1 0 0 0 0 0 el 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 Для ориентированного графа G элементы матрицы инциденции равны: <7/у = 1, если в графе имеется дуга е} = (v;., vA), в которой вершина v, — начальная, ди= -1, если в графе имеется дуга е} = (ук, v,), в которой вершина v; — конечная, и qu= 0 во всех других случаях. Так, для графа, изображенного на рис. 2.1, б, матрица инцидент- инцидентности имеет вид: 0'= e\ e2 еъ е4 -10 0 0 11-10 0 0 1-1 0-101 2.2.3. Список ребер Если граф G является разреженным, то есть число ребер т значи- значительно меньше величины п2 (число ребер полного графа т = п{п-\) ¦), то эффективным представлением графа является список его ребер, задаваемый парами вершин. Для этого формируют два массива: g= (g), '--igm) и h = (Л,, ..., hm). Каждый элемент в массиве есть метка 47
Глава 2. Введение в теорию графов вершины, а /-е ребро графа выходит из вершины gi и входит в вер- вершину А,. Например, неограф, изображенный на рис. 2.1, я, будет представ- представлен следующими двумя массивами: g= A,1,1,2,2,3,3,3,3,5,5,6,7) А = B,3,7,1,3,3,1,5,7,3,7,7,6), а орграф, изображенный на рис. 2.1, б, — следующими массивами: ?=B,2,3,4) А = A,4,2,3). 2.2.4. Структуры смежности В ориентированном графе вершина w называется последователем другой вершины v, если существует дуга, направленная из v в w. Вер- Вершина v называется тогда предшественником w. Граф может быть задан структурой смежности, то есть списком всех последователей (соседей) каждой вершины: для каждой вершины v за- задается Adj{v) — список всех последователей (соседей) вершины v. Граф, заданный структурой смежности, обычно обозначают: G = (V, Г), где Г — отображение К в К. Структура смежности неографа, представленного на рис. 2.1, а, имеет вид: V 1: 2: 3: 4: 5: 6: 7: Adjiy) 2, 1, 1, 3, 7 1, 3, з, 2, 7 3, 7 3, 5, 5, 6 Здесь: Adj(v) = V(v). 48
2.2. Способы задания графа Структура смежности орграфа, представленного на рис. 2.1,6, имеет вид: v Adj(v) 1: 2: 1, 4 3: 2 4: 3 Структуры смежности удобно использовать для алгоритмов, в ко- которых в графе добавляются или удаляются вершины. 2.2.5. Генерация графов Для отладки программы, решающей некоторую задачу на графах, а также для выполнения вычислительных экспериментов требуется иметь примеры графов. Эта проблема может быть решена с помощью программы, генерирующей случайный граф. Ниже представлена одна из возможных программ генерации гра- графов. Эта программа случайным образом формирует матрицу смежно- смежности графа и записывает сформированный граф в файл в виде списка ребер. То есть выходной файл имеет следующий формат: NAME FILE: testl.grh COMMENT: RANDOM GRAPH DIMENSION: 5 EDGE_DATA_FORMAT: EDGE_LIST EDGE_DATA_SECTION 1 2 1 4 1 5 2 3 2 5 3 4 3 5 4 5 -1 EOF Программа предназначена для генерации графа, имеющего до 20 вершин. Выходной файл имеет расширение «.grh». Обычно задают 49
Глава 2. Введение в теорию графов расширение, связанное с названием задачи, решаемой программой. Например, «.clq» для задачи поиска наибольшей клики (см. раз- раздел 2.6), «.hep» для задачи поиска гамильтонова цикла (см. раздел 2.7) и так далее. Program Gen; (* программа генерирует случайный граф *) const MaxVer=20; var i,j,h,N: integer; file:text; f_prob:string[30]; AdjMat:array[1..MaxVer,1..MaxVer] of integer; BEGIN write ('Введите число вершин графа N<=20: '); readln(N); writeln ('Введите имя выходного файла'); readln(f_prob); assign(file,f_prob+'.grh'); rewrite(file); randomize; for i:=l to N do begin AdjMat[i,i]:=0; for j:=i + l to N do begin AdjMat[i,j]:=randomB); AdjMat[j,i]:«AdjMat[i,j]; end; end; writeln (file, 'NAME FILE: ',fjprob,'.grh'); writeln (file, 'COMMENT: RANDOM GRAPH1); writeln (file, 'DIMENSION: *,N); writeln (file, 'EDGE_DATA_FORMAT: EDGE_LIST'); writeln(file,'EDGE_DATA_SECTION'); for i:= 1 to (N-l) do for j := (i + 1) to N do if AdjMat[i,j] = 1 then writeln(f,(i):3,(j):3); 50
2.3. Части графов writeln(file, '-I1 ), writeln(file,'EOF1] close(file); END. 2.3. Части графов Пусть имеется граф G = (К, Е). ГрафG' = (V',Е') называется частью графа G- (К, ?),еслиК' с К и ?"с?. Существуют различные части графа G. Рассмотрим две из них: подграф и су граф. ГрафG'= (К',?") называется подграфом графа G- (V, ?),еслиК'сК, ?'с?и подмножество ребер Е' графа G' образовано теми и только теми ребрами графа С, обе концевые вершины каждого из которых принадлежат множеству К'. В этом случае также говорят, что граф G' порожден подмножеством вершин V графа G. Граф<7' = (К',?") называется су графом графа G = (К, Е), если К' = V и ?"с ?, то есть множества вершин К и К' графов GuG' совпадают, а подмножество ребер Е' графа G' образовано некоторыми ребрами графа G. V7 Рис. 2.3. Примеры подграфа и суграфа На рис. 2.3, а, ^изображены соответственно подграф и суграф нео- неографа, представленного на рис. 2.1, а. 51
Глава 2. Введение в теорию графов 2.4. Операции на графах На графах выполняются некоторые теоретико-множественные операции. Рассмотрим их. Пусть имеются графы G, = (К,, Е{) wG2 = (K2, Е2). Объединением графов G, = (Кр ?,) и С2 = (К2, ?2) называется граф G= (К, ?) = G, u G2, если К= К, и К2и Е- ?, и ?2. Иначе говоря, граф объединения графов G, и G2 содержит вершины и ребра, которые при- принадлежат хотя бы одному из этих графов. Пересечением графов С, = (К,, ?,) и G2 = (K2, ?2) называется граф G = (F, Е) = G, n G2, если К= К, п К2 и Е = Ех п Е2. Иначе говоря, фаф пересечения графов С, и G2 содержит вершины и ребра, которые явля- являются общими для этих графов. _ _ _ Дополнением графа G= (V, Е) называют граф G = (К,?), в котором Е = (V х V) \ (Е и А у), где Ак есть диагональное отношение на множе- множестве V. Иначе говоря, дополнительный граф G имеет то же множество вершин, что и граф G, а ребра соединяют две его различные вершины только в том случае, если в исходном графе ребро между рассматри- рассматриваемыми вершинами отсутствует. Очевидно, дополнительный граф есть дополнение данного графа до полного. Композицией графов G, = (К,, ?",) и G2 = (K2, Е2) называется граф G = (V,E)=Gl oG2, в котором имеется ребро {*,., ху}, если и только если имеются ребра {*., хк} е ?,, (хА, ху} б ^з. Очевидно, что композиция графов С,, G2 — это композиция бинар- бинарных отношений, определяемых множествами ребер этих графов. Ре- Результат такой композиции — множество ребер графа G, оG2. Если исходные графы неориентированные, то каждое ребро {х, у} любого такого графа рассматривается как две упорядоченные пары (х, у) и (у, х). Далее, результативная композиция может быть получена композицией двух бинарных отношений, определяемых ребрами за- заданных графов. В общем случае результирующий граф может быть смешанным, то есть содержать как ребра, так и дуги. Если исходные графы ориентированные, то множества дуг таких графов есть обычные бинарные отношения. Тогда результат — это множество дуг, представляющих композицию заданных бинарных от- отношений. См. раздел 1.7. 52
2.4. Операции на графах Пример. Пусть графы соответственно: А = го 1 О 1 О 1 О 1 1 1 О 1 О О 1 1 1 О О О О 1 1 О О и G2 заданы матрицами смежности Аи В в = 0 0 0 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 Так как матрицы смежности заданных графов симметричны, то мы имеем неориентированные графы. Геометрические изображения гра- графов G] и G2 представлены на рис. 2.4. Матрица смежности графа GX(X) и G2(X) будет иметь еле- дующий вид: '0 1 0 1 ,1 1 0 1 1 1 Матрица Сх(Х)слС2{Х) дующий вид: '0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 0 0 п 1 1 0 о, смежности графа будет 0 1 0 0 1 1 1 0 0 0 иметь сле- 0 1 0 0 Рис. 2.4. Геометрические изображения графов G, и G2 Геометрические изображе- Рис' 25' Объединение и пересечение л. г- г- г- г- графов G, и Gf ния графов G, u G2 и о, n G2 ' 1 представлены на рис. 2.5. На рис. 2.6, а представлен граф, дополнительный графу Gv 53
Глава 2. Введение в теорию графов Композицию заданных графов получают в соответствии с выше- вышеописанным как композицию бинарных отношений. Ниже представлен подробный перечень упорядоченных пар вершин, определяемых за- заданными графами, и результат их композиции (пары, дающие уже имеющийся результат, не представлены). A,2), B,3) -> A,3), A,2), B,4) -> A,4), A,4), D,2) -> A,2), A,4), D,1) -> A,1), B,1), A,5) -> B,5), B,1), A,4) -* B,4), B,3), C,2) -> B,2), B,4), D,1) -> B,1), B,5), E,3) -» B,3), C,5), E,1) -» C,1), C,5), E,3) -> C,3), D,1), A,4) -» D,4), D,1), A,5) -> D,5), D,2), B,3) -> D,3), E,2), B,3) -> E,3), E,2), B,4) -> E,4), E,3), C,2) -» E,2), E,3), C,5) -> E,5). Результат композиции — смешанный граф — изображен на рис. 2.6, б. Рис. 2.6. Композиция графов На графах определяют также некоторые другие операции, которые используют при разработке алгоритмов на графах. Так, операция удаления вершины v из графа G приводит к построе- построению графаG' = (К',?"') = G\{v}, где V = K\{v}, а множество ребер Е' содержит те и только те ребра графа G, которые не инцидентны вер- вершине V. Операция стягивания ребра состоит в удалении ребра между вер- вершинами х,у е V и отождествлении этих вершин в одну, например в вершину v, множество ребер, инцидентных вершинам х и у, в новом графе полагают инцидентными вершине v. Остальные вершины и ребра результирующего графа остаются такими же, как в исходном графе. Иногда операция может состоять просто в удалении ребра или не- нескольких ребер из заданного графа. 54
2.5. Связность графов и деревья 2.5. Связность графов и деревья Пусть имеется граф G=(V, E). Маршрутом М в графе G называют последовательность вершин и ребер из G такую, что соседние ребра eik,ei (A: = 1,2,...,р) последовательно- последовательности Мявляются смежными, а вершины v;/, v, являются концевы- концевыми для ребра ei{. Вершину v;. называют начальной, а вершину х. — конечной вершиной маршрута А/. Число/? ребер маршрута называют его длиной. Иногда маршрут Л/задают либо последовательностью составляю- составляющих его ребер: M = (ei] 9eil9...9eip\ либо последовательностью вершин, через которые он проходит: Граф G называют связным, если между любыми его двумя вершина- вершинами существует маршрут. Связный граф образует компоненту связно- сти. В общем случае граф G может иметь несколько компонент связ- связности. Так, на рис. 2.1, а представлен граф, имеющий две компоненты связности: одна из них порождается вершинами vp v2, v3, v5, v6, v7 гра- графа, а другая — вершиной v4. Неформально компоненту связности графа можно определить как такую часть графа G, которую можно нарисовать, не отрывая пера от бумаги и, возможно, проходя по одной и той же линии (ребру) не- несколько раз. Маршрут Л/ называют цепью, если в нем нет повторяющихся ре- ребер. Цепь называют простой, если в ней нет повторяющихся вер- вершин. В ориентированном графе цепь называют также путем. Так, на рис. 2.1, а маршрут М- (v6,v7,v3,v5,v7,V3,v,) связывает вер- вершины v6 и v,. Цепь С = (v6,v7,v5,v3,v7,v,) связывает вершины v6 и v,. На- Наконец, простая цепь Р = (v6,v7,v3,v,) также связывает вершины v6 и v,. Если в некоторой цепи начальная и конечная вершины совпадают, то такая цепь называется циклом. В ориентированном графе цикл на- называют также контуром. Так, на рис. 2.1, а имеется трехвершинный цикл(у„у2,у3). 55
Глава 2. Введение в теорию графов Связный граф G, не имеющий циклов, называется деревом. Если граф G имеет несколько компонент связности и не имеет циклов, то такой граф называют лесом. Ориентированное дерево — иногда его называют корневым дере- деревом — это ориентированный граф без циклов, удовлетворяющий сле- следующим условиям: • имеется в точности одна вершина, называемая корнем, в которую не входит ни одно ребро; • в каждую вершину, кроме корня, входит ровно одно ребро; • из корня в каждую вершину идет только один путь. Пусть G = (У,Ё) — граф, являющийся деревом. Если имеется путь из вершины v в вершину w, то v называется предком (predecessor) вер- вершины w, a w — потомком (successor) вершины v. Более того, если (v,w)e?, то v называется подлинным предком (отцом) вершины w, aw — подлинным потомком (сыном) вершины w. Вершина без подлин- подлинных потомков называется листом (leaf или pendant vertex). Вершина v и ее потомок вместе образуют поддерево G, и вершина v называется корнем этого поддерева. Глубина вершины v в дереве — это длина пути из корня в v. Высота вершины v в дереве — это длина самого длинного пути из v в какой-ни- какой-нибудь лист. Высотой дерева называется высота его корня. Уровень верши- вершины v в дереве равен разности высоты дерева и глубины вершины v. Упорядоченным деревом называют дерево, в котором множество сы- сыновей каждой вершины упорядочено в некотором порядке. При изо- изображении упорядоченного дерева полагают, что множество сыновей каждой вершины упорядочено слева направо. Рис. 2.7. Пример двоичного дерева 56
2.5. Связность графов и деревья Двоичным (бинарным) деревом называется такое упорядоченное де- дерево, в котором: • каждый сын произвольной вершины рассматривается либо как левый, либо как правый сын; • каждая вершина имеет не более одного левого сына и не более одного правого сына. На рис. 2.7 изображено двоичное дерево. 2.5.1. Поиск в глубину Для определения связности графа может быть использован один из алгоритмов поиска в графе — поиск в глубину (Depth-First Search или, кратко, DFS). Если граф связный, то в процессе поиска в глубину посещается каждая вершина графа. В процессе поиска строится неко- некоторое дерево. Поиск в глубину начинается с произвольной вершины v0. Она ста- становится текущей. Далее для любой текущей вершины v, находится та- такая смежная вершина vp которая не является помеченной. Ребро v,., v, присоединяется к строящемуся дереву Т, а вершина v. помечается и ста- становится текущей. Если для текущей вершины непомеченная смежная вершина не находится, то происходит возврат к вершине, которая была текущей до нее. Конец работы алгоритма определяется условием, тре- требующим выполнить возврат из начальной вершины v0. Очевидно, если построенное в результате поиска в глубину дере- дерево Г содержит все вершины графа G, то этот граф — связный. При реализации поиска в глубину используется стек (Stack) — это массив, в который запись нового элемента производится только в ко- конец массива, и чтение возможно только последнего (конечного) его элемента. В процессе работы алгоритма в массиве Mark будут хра- храниться пометки просмотренных вершин. Поиск в глубину состоит в выполнении следующих шагов. Алгоритм DFS Шаг 1. Положить Stack := 0, Mark := 0, Vert\ := 0, Vertl := 0, s := 0 — число ребер построенного дерева. Шаг 2. Установить число вершин в стеке к := 1 и поместить началь- начальную вершину в стек Stack[k] := v0. Пометить начальную вершину Mark[v0] := 1. 57
Глава 2. Введение в теорию графов Шаг 3. Если к * О, то положить / := Stack[k] — очередная рассматривае- рассматриваемая вершина. В противном случае закончить вычисления. Шаг 4. Находим очередную вершину графа G, смежную с Л Пустьу есть такая вершина. Пометить вновь найденную вершину как рассмот- рассмотренную Mark\j\ := 1, увеличить число найденных ребер дерева по- поиска s := s + 1, запомнить новое ребро Vertl [s] := /, Vert2[s] \=j\ уве- увеличить число вершин в стеке к := к + 1, поместить новую вершину в стек Stackfk] :=j и перейти к Шагу 3. Если же новая вершина не найдена, положить к\-к- 1 и перейти к Шагу 3. Паскаль-программа реализации процедуры поиска в глубину при- приведена ниже. Предполагается, что перед, обращением к процедуре не- необходимо указать начальную вершину поиска v0. При этом считается, что граф G задан матрицей смежности А, массив Mark — массив меток. Номера просмотренных вершин графа запоминаются в стеке Stack, указатель стека — переменная к. Vertl, Vert2 — два массива для запо- запоминания концевых вершин ребер дерева поиска, Vertl[i]-Vert2[i] — ребро дерева. procedure DFS(v:integer); var Stack,Vertl,Vert2:array[1..N] of integer; Mark:array[1..N] of shortint; k, t,j,s:integer; New:boolean; begin FillChar(Stack,SizeOf(Stack),0); FillChar(Vertl,SizeOf(Stack),0); FillChar(Vert2,SizeOf(Stack),0); FillChar(Mark,SizeOf(Stack),0); s:=0; k:=l; Stackfk]:=v; Mark[v]:=1; while k<>0 do (* стек не пустой *) begin t:=Stack[k]; (* выбор текущей вершины из стека *) j:=l; New:=false; (* новая вершина не найдена *) repeat if (AdjMat[t,j] <>0) and (Mark[j]=0) then New:=true else Inc (j); 58
2.6. Числа графов until New or (j>N); (* нашли новую вершину или все вершины просмотрены *) if New then begin if toj then begin (* запоминаем новое ребро дерева *) Inc(s); Vertl[s]:=t; Vert2[s]:=j; end; Inc(k); Stack[k]:=j; (* добавляем вершину в стек *) Mark[j]:=1; end else Dec(k); (* удаляем вершину из стека *) end; end. На рис. 2.8 представлен граф, утолщен- утолщенные ребра которого принадлежат постро- построенному дереву поиска (более точно, утол- утолщенные ребра представляют дуги (v,., vy), где / <j). Здесь v, — начальная вершина по- поиска. V, V6 V2 Рис. 2.8. Поиск в глубину 2.6. Числа графов Более полно граф G = (К, Е) можно охарактеризовать так называе- называемыми числами графа. Определим некоторые из них. Число ребер, инцидентных вершине v е К графа G= (К, Е), назы- называется локальной степенью вершины v и обозначается: deg{v). Граф, у которого локальные степени всех вершин равны между собой, назы- называют однородным. Например, полный граф — это однородный граф степени п. Так, граф, представленный на рис. 2.1, я, имеет следующие ло- локальные степени вершин: deg(vx) = 3, deg(v2) = 2, deg(v3) = 5, deg(v4) = О, deg(v5) = 2, deg(v6) = 1, deg(v7) = 4. 59
Глава 2. Введение в теорию графов Цикломатическим числом графа G называют число y(G) = т - п + р, где т — число ребер; п — число вершин;/? — число компонент связно- связности графа. Так, для неографа, представленного на рис. 2.1, а, имеем: у(О = 9 - 7 + 2 = 4. С содержательной точки зрения цикломатическое число опреде- определяет число ребер, которые необходимо удалить из графа G, чтобы он не имел циклов. Граф G называют k-раскрашиваемым, если вершины его можно ок- окрасить, используя к различных цветов (красок), таким образом, чтобы концевые вершины каждого ребра имели различные цвета. Наимень- Наименьшее возможное число к называют хроматическим числом графа G. Например, хроматическое число графа на рис. 2.1, а равно ?(G) = 3. Понятие хроматического числа графа G и способы его определе- определения имеют важное практическое значение. Так, большинство задач синтеза конечных автоматов могут быть сведены к задаче поиска хро- хроматического числа соответствующего графа. Не имеется соотношения, которое позволяло бы вычислить хро- хроматическое число графа G. Наиболее простая оценка этого числа име- имеет вид y(G)<degmJv)+\, где degmax(v) — наибольшая локальная степень вершины v графа G. Любую совокупность вершин К, с К называют независимым мно- множеством вершин графа G= (К, Е), если никакие вершины из V] не смежны (то есть не соединены между собой ребром). Наибольшее по включению независимое множество вершин графа G называют мак- максимальным. Максимальное независимое множество вершин называют наибольшим, если оно содержит наибольшее число вершин по сравне- сравнению с другими независимыми множествами вершин графа G. Число вершин графа G в его наибольшем независимом множестве называют числом независимости или числом внутренней устойчивости графа и обозначают ao(G). Так, для графа на рис. 2.1, а имеем: ao(G) = 3, так как вершины v,, v5, v6 образуют наибольшее независимое множество. Любой полный подграф графа G называют кликой этого графа. По определению, кликой являются всякая вершина и любое ребро гра- 60
2.6. Числа графов фа G. Число вершин в наибольшей по включению клике называют Клыковым числом графа G. Кликовое число графов, представленных на рис. 2.1, равно 3. Разработка способа поиска наибольшего независимого множества вершин и наибольшей клики графа Gтакже является одной из важных задач алгоритмической теории графов. Эти задачи имеют многочис- многочисленные применения. Наибольшая клика графа G является наибольшим независимым множеством в дополнительном графе G (см. раздел 2.4). Поэтому дос- достаточно разработать алгоритм решения одной из задач: либо задачи поиска наибольшей клики, либо задачи поиска наибольшего незави- независимого множества вершин графа G. Тогда решение другой задачи можно выполнить, построив дополнительный граф. Два ребра е„ ек е Е графа G= (К, Е) называют независимыми, если они не инцидентны одной и той же вершине этого графа. Совокуп- Совокупность попарно независимых ребер графа G называют паросонетанием. Паросочетание графа G называют наибольшим, если оно имеет наи- наибольшее число ребер по сравнению с другими паросочетаниями этого же графа. Число ребер в наибольшем паросочетании графа G называют чис- числом паросочетания и обозначают a,(G). Имеются эффективные алго- алгоритмы поиска наибольшего паросочетания в графе. Например, ребра е2, еЛ и е9 для графа на рис. 2.1, а образуют наи- наибольшее паросочетание. Подмножество Vp с V графа G называют вершинным покрытием этого графа, если каждое его ребро имеет хотя бы одну концевую вер- вершину во множестве Vp. Вершинное покрытие называют наименьшим, если оно имеет наименьшее число элементов по сравнению с другими вершинными покрытиями графа G. Число элементов в наименьшем вершинном покрытии называют числом вершинного покрытия и обозначают C0(G). Имеет место соотно- соотношение В частности, для графа на рис. 2.1, а наименьшее вершинное по- покрытие образуют вершины v,, v3 и v7. Подмножество ребер Р с Е графа G называют реберным покрытием графа, если всякая вершина этого графа является концевой хотя бы 61
Глава 2. Введение в теорию графов для одного ребра из Р. Реберное покрытие называют наименьшим, если оно содержит наименьшее число элементов по сравнению с дру- другими реберными покрытиями графа. Число элементов в наименьшем реберном покрытии обычно обо- обозначают p,(G) и называют числом реберного покрытия графа G. Имеет место соотношение Рассматривают и иные числа графов, кроме перечисленных выше. 2.7. Эйлеровы и гамильтоновы графы В различных приложениях большое значение имеют понятия эй- эйлерова и гамильтонова графов. Цикл графа <7, в котором содержатся все ребра графа и каждое реб- ребро встречается в нем только один раз, называется эйлеровым. Граф G, в котором имеется эйлеров цикл, называется эйлеровым. Неформально эйлеров граф можно определить как такой, который можно нарисовать, не отрывая карандаша от бумаги и не проходя два- дважды по одному и тому же ребру. Цикл графа G, проходящий через каждую его вершину по одному разу, называют гамилътоновым. Граф, в котором имеется гамильтонов цикл, называют гамилътоновым. а б Рис. 2.9. Эйлеров и гамильтонов графы На рис. 2.9, а, б представлены соответственно эйлеров и гамильто- гамильтонов графы. Очевидно, что полный граф является как эйлеровым, так и гамиль- тоновым. 62
2.7. Эйлеровы и гамильтоновы графы Имеется простой критерий (признак) существования в графе эй- эйлерова цикла. I Теорема. Связный неориентированный граф G содержит эйлеров цикл тогда и только тогда, когда все его вершины имеют четную степень. Доказательство этой теоремы имеется в литературе по теории графов. К сожалению, неизвестен такой же общий простой критерий су- существования гамильтонова цикла в графе. Известны лишь некоторые критерии для частных случаев. Так, например, известно, что если для любой пары вершин v,., vy e V графа G сумма локальных степеней больше или равна числу вершин графа, то есть deg{v) + deg(Vj) > п, то в таком графе существует гамиль- тонов цикл. Задача поиска способа построения гамильтонова цикла — одна из важных задач теории графов. 2.7.1. Поиск гамильтоновых циклов в графе Пусть имеется неориентированный граф G, в котором требуется найти все гамильтоновы циклы, если они существуют. Для нахождения гамильтоновых циклов используем перебор с воз- возвратом (backtracking). Поиск начинаем с первой вершины графа. Пусть уже найдены первые к - 1 вершин возможного цикла. Рассматриваем ребра, выходящие из последней найденной вершины, и находим реб- ребро, соединенное с ранее не рассмотренной вершиной. Включаем най- найденную вершину в цикл и помечаем ее как рассмотренную, помещая ее в множество рассмотренных вершин SET1. Если такой вершины нет, то возвращаемся к предыдущей вершине и повторяем вычисления. Для организации такого порядка вычислений в программе используется стек Stack. Исходный файл графа представлен так, как это принято в TSPLIB (Traveling Salesman Problem Library) — библиотека примеров для зада- задачи коммивояжера и связанных задач (см. http://www.iwr.uni-heidelberg.de/iwr/comopt/soft/TSPLIB95/hcp). Пример исходного файла представлен ниже: NAME: <имя файла> COMMENT: HCP converted from maximal clique problem TYPE: HCP 63
Глава 2. Введение в теорию графов DIMENSION: 5 EDGE_DATA_FORMAT: EDGE_LIST EDGE_DATA_SECTION 1 2 1 3 2 3 3 4 3 5 4 5 -1 EOF В выходном файле приводятся гамильтоновы циклы, если они имеются, либо указывается, что таких циклов нет. Выходной файл имеет расширение .sol. Ввиду важности рассматриваемой задачи приводим полный текст Паскаль-программы. Эта программа находит гамильтонов цикл как в ориентированном, так и в неориентированном графе. В последнем случае один и тот же гамильтонов цикл, если он существует, представ- представлен в выходном файле дважды. Program All_hcp; Uses CRT; const MaxVer=20; type t=l..50; a=set of t; var New:boolean; AdjMat:array[1..MaxVer,1..MaxVer] of integer; Stackiarray[1..MaxVer] of integer; f_out:text; i,j,n:integer; SETl:a; y,yl:char; name,namel:string; 64
2.7. Эйлеровы и гамильтоновы графы Procedure ENTER; var f_input: text; w: char; il,jl,k: integer; f_konec:boolean; s:string[ll]; begin If ParamCount>=l then name:=ParamStrA) else begin Write('Enter input file name :'); Readln(name); end; assign(f_input,name); {$1-} reset(f_input); {$1+} If IOResultoO then begin writeln('Error while opening file : "',name, '" ! '), Halt A); end; (* очистка матрицы смежности графа *) for i:=l to MaxVer do for j:=l to MaxVer do AdjMat[i,j]:=0; (* конец очистки *) Repeat Read(f_input,w); if NOT (w='D') then readln(f_input); (* сброс строки *) inc (i); until w='D'; readln(f_input,s,N); Read(f_input,w); if w='E' then readln(f_input); if w='E' then readln(f_input); k:=l; f_konec:=false; Repeat Read(f_input,i1); if ilo-1 then 65
Глава 2. Введение в теорию графов begin readln(f_input,j1); AdjMat[il,jl]:=1; AdjMat[j1,il]:=1; (* строка должна быть удалена, *) (* если исходный граф ориентированный *) end else f_konec:=true; inc(k); until (f_konec); Close(f_input); (* the end of entering data file *) end; (* конец процедуры ENTER *) (¦к -к * * ) (•* **) Procedure GAMI(k:integer;SET1:a); (* Поиск гамильтоновых циклов *) var i,j:integer; begin for i:=l to N do if (not (i in SET1)) and (AdjMat[Stack[k-1], i]=1) then begin Stack[k]:=i; if k<N then GAMI(k+1,SET1+[i] ) ; if (k=N) and (AdjMat[Stack[k],1]=1) then begin if New then begin writeln(' Гамильтоновы циклы '); writeln(f_out,' Гамильтоновы циклы '); writeln(f_out); end; New:=false; write(f_out,' '); for j:=1 to N do begin write(Stack[j]:2,' — '); write(f_out,Stack[j]:2,' — '); end; writelnCl1 ) ; writeln(f_out,'1'); end; end; end; (* GAMI *) 66
2.7. Эйлеровы и гамилыоновы графы BEGIN SET1:=[1]; Stack[l]:=1; New:=true; clrscr; ENTER; namel:=name; i:=Pos('.',name); if i<>0 then Delete(namel,i,Length(namel)-i+1); namel:=namel+'с.sol'; assign(f_out,namel) ; {$1-} rewrite(f_out); {$1+} If IOResultoO then begin writeln('Error while creating output file : IM,namel,'!"'); Halt A); end; Writeln('Input file : ',name,' Output file : ',namel); writeln(f_out); GAMIB,SET1) ; if New then begin writeln('В данном графе гамильтоновых циклов нет '); writeln(f_out,' В данном графе гамильтоновых циклов нет '); end; close(f out); readln; END. На рис. 2.10 представлен простой при- пример гамильтонова графа. Так как граф не- неориентированный, программа находит га- мильтоновы циклы v, -v,-v,-Vc-v,-v,-v.. Рис. 2.10. Простой пример гамильтонова графа 67
Глава 2. Введение в теорию графов 2.8. Изоморфные графы Большое значение в теории графов и ее приложениях имеет поня- понятие изоморфизма графов. Графы G= (К, Е) иС = (V\E') называют изоморфными в случае воз- возможности установления между их вершинами и ребрами взаимно од- однозначного соответствия V <-> V, Е ^ Е' такого, что, если v,, vy из V соответствуют v/, v^. e V, то ребро {v,, vyj е Е соответствует ребру v/, v]eE'. Иначе говоря, графы GиG'изоморфны, если между их вершинами можно установить взаимно однозначное соответствие такое, что вер- вершины v,', v'j eV графа G' соединены ребром тогда и только тогда, ко- когда соответствующие им вершины v,, v. e К графа G соединены ребром. v2 v3 v2 v3 v2 V4 Рис. 2. /7. Пример изоморфных графов На рис. 2.11 представлен пример изоморфных графов. Ясно, что если графы G и G' изоморфны, то один из графов может быть получен из другого некоторой подстановкой вершин, переводя- переводящих один граф в другой. Таким образом, изоморфные преобразования графов, заданных матрицами смежности или инцидентности, состоят в перестановке строк или столбцов. Поэтому указанные преобразования матриц яв- являются допустимыми, так как не выводят из класса изоморфных гра- графов. Это тождественные преобразования. Понятие изоморфизма используется в практических приложени- приложениях. Покажем одно из них. Граф G называют плоским, если он может быть изображен на плос- плоскости так, чтобы его ребра пересекались только в вершинах. Понятие плоского графа важно, например, при проектировании печатных плат в приборостроении. 68
2.9. Покрывающие деревья Граф называют планарным, если он изоморфен плоскому графу. Существуют многочисленные алгоритмы определения планарности заданного графа. 2.9. Покрывающие деревья Важное значение в теории графов имеет понятие покрывающего де- дерева (spanning tree). Пусть имеется граф G= (V, Е). Связный суграф Т= {V, ?,) графа G называется покрывающим деревом (остовом, каркасом) графа G, если он не содержит циклов. Любое покрывающее дерево, когда оно суще- существует, содержит п - 1 ребер, где п — число вершин графа. Понятие покрывающего дерева широко используется при разработке различ- различных алгоритмов на графах. Имеется несколько хороших алгоритмов для построения покры- покрывающего дерева. С одним из них мы знакомы, так как результат поис- поиска в глубину — найденные ребра — образуют покрывающее дерево (см. раздел 2.5). Однако поиск в глубину позволяет получить невзвешенное по- покрывающее дерево или, более точно, покрывающее дерево для гра- графа, каждое ребро которого имеет единичный вес. В общем случае требуется построить взвешенное покрывающее дерево наименьшего веса. В этом случае предполагается, что каждому ребру ek = {v/5 vy} графа G= (К, Е) поставлено в соответствие некоторое действитель- действительное число vv(^) — его «вес». Тогда вес покрывающего дерева будет ра- равен сумме весов всех составляющих его ребер. Рассмотрим один из алгоритмов построения покрывающего дере- дерева наименьшего веса — алгоритм Прима (Prim R.C.). Алгоритм Прима Шаг 1. Положить ЕТ =0,VT= {v,}, где v,. — произвольная вершина графа. Шаг 2. Найти ребро {v,., vy) наименьшего веса, соединяющее вершину v, e VTc вершиной vy е V\Vr Если такой вершины нет, то прекра- прекращаем вычисления, так как граф не имеет покрывающего дерева (он не связный). Шаг3. Положить VT= Vt\j {vy}, ET= ?ru {v7, vy}. Шаг 4. Если VT- К, то прекратить вычисления, так как искомое по- покрывающее дерево построено, его ребра содержит множество Ет. 69
Глава 2. Введение в теорию графов Ниже приведена процедура Паскаль-программы, реализующая ал- алгоритм Прима. В ней предполагается, что задан связный граф, пред- представленный матрицей смежности AdjMat = array[\..N,\..N] of integer, в которой каждый элемент, не равный нулю, определяет вес ребра. Ре- Результат — наименьшее покрывающее дерево — выводится в виде списка ребер, заданных двумя массивами Vertl и Vertl их конечных вершин. Procedure Span_tree; var V,VT:set of 1..N; Vertl,Vert2:array[l..N-1] of integer; min,i,j,l,k,s,t:integer; begin s:=0; V:=[2..N]; VT:=[1]; (* включаем первую вершину в дерево *) while V<>[] do begin min:=maxint; for i:=l to N do if (i in VT) then for j:=1 to N do if (j in V) AND (AdjMat [i,j]<>0) AND (AdjMat[i,j]<min) then begin min:=AdjMat[i,j]; t:=j; end; VT:=VT+[t];(* вводим новую вершину V:=V-[t]; s:=s+l; Vertl[s]:=1; Vert2[s]^tr- Vert2[s]^trend; end; На рис. 2.12 представлен реберно- взвешенный граф и утолщенными ли- линиями выделено наименьшее покры- покрывающее дерево, найденное программой. Цифры в круглых скобках указывают вес соответствующего ребра. ну в B) (8) дерево ' (ЗУ\ A1) ч A3)/ *) B0) > Л V4 А) ^ A5) Ч14) / \E) 46) G) Рис. 2.12. Наименьшее покрывающее дерево 70
2.10. Кратчайший путь в графе Рассмотрим еще один алгоритм построения наименьшего покры- покрывающего дерева — алгоритм Краскала (Kruskal J.B.Jn). При описании алгоритма будем обозначать v = w, если вершины v, w e К принадле- принадлежат одной и той же компоненте связности графа G. Алгоритм Краскала Шаг 1. Сортировать ребра заданного графа в порядке возрастания их весов. Результатом сортировки является перечень упорядоченных ребер List. Шаг 2. Положить Ет- 0. Положить также, что каждая вершина гра- графа G образует одну отдельную компоненту связности, то есть v Ф w для всех v, w e V. Шаг 3. Если List = 0, то закончить вычисления — заданный граф не имеет покрывающего дерева. В противном случае выбрать первое ребро {v, w} из перечня List. Положить List := List\{v, w). Шаг 4. Если v Ф w, то положить Ет := Етu {v, w}, v = w, к := к + 1. Шаг 5. Если к < п - 1, то перейти к Шагу 3. В противном случае искомое покрывающее дерево построено, его ребра содержит множество Ет. Нетрудно увидеть, что оба алгоритма — алгоритм Прима и алго- алгоритм Краскала — являются вариантами «жадного» алгоритма. Ис- Использование этого алгоритма оказалось возможным, так как множе- множество Е ребер графа G и множество S(ET) покрывающих деревьев этого графа образуют матроид М = (Е, S(ET)). Каждое покрывающее дерево Ет е S(ET) является базой матроида М (см. раздел 1.13). 2.10. Кратчайший путь в графе В различных приложениях возникает следующая задача. Пусть задан орграф G = (К, ?), каждой дуге ек = (v,., vy) которого по- поставлено в соответствие неотрицательное число vv(^) = m^v, ,vy). Это число будем интерпретировать как длину соответствующей дуги. Пусть, далее, заданы две вершины s, t e КорграфаС. Длиной пути ме- между вершинами s, t называют сумму длин отдельных дуг, составляю- составляющих этот путь. Требуется найти кратчайший путь, соединяющий вер- вершины s, t. Мы воспользуемся алгоритмом Дейкстры (Dijkstra E.W.) — одним из лучших для решения поставленной задачи. В этом алгоритме s при- 71
Глава 2. Введение в теорию графов нимаем за начальную вершину искомого пути, которая помечается как рассмотренная. На каждом шаге этого алгоритма исследуются все нерассмотренные вершины и определяется ближайшая кs вершинах и соответствующий кратчайший путь из s в х. Вершина х помечается как рассмотренная. Алгоритм Дейкстры Шаг 1. Положить d(s) := 0, у := s и d{x) := <*>. Пометить вершину s. Шаг 2. Для каждой непомеченной вершины х вычислить новое значе- значение величины d(x) по формуле d(x) = min{d(x), d{y) + w(y, x)}. Шаг З. Выбрать непомеченную вершину х, для которой величина d{x) является наименьшей. Если для всех непомеченных вершин d(x) = oo} то прекратить вычисления, так как в графе отсутствует путь из s в Л Шаг 4. Пометить дугу (у, х) и вершину х как рассмотренные, и поло- положить;; =х. Шаг 5. Если у = t, то закончить вычисления. Двигаемся из вершины / против направления помеченных дуг и восстанавливаем путь из s в / (будет найден единственный такой путь). В противном случае перейти к Шагу 2. Ниже приведена Паскаль-программа, реализующая алгоритм Дейк- Дейкстры. Из комментариев -нетрудно понять назначение элементов про- программы. Program shortest_path; (* реализуем алгоритм Дейкстры *) Uses CRT; const Мах=10; var AdjMatWiarray[1..Max,1..Max] of integer; (* матрица длин ребер, 0 - когда ребра нет *) MarkV:array[l..Max] of byte; MarkE:array[1..Max,1..Max] of byte; vertexiarray[1..Max] of integer; Drarray[1..Max] of integer; 72
2.10. Кратчайший путь в графе i,j,s,t,y,wl,temp,N:integer; f,fl:text; flag,flagl:boolean; BEGIN clrscr; writeln(' Ввод данных с клавиатуры '); writeln; write(' ВВЕДИТЕ ЧИСЛО ВЕРШИН ГРАФА ==> '); readln(N); writeln; writeln(' ВВЕДИТЕ МАТРИЦУ ДЛИН РЕБЕР ГРАФА '); writeln (' Если ребра нет, то введите 0 '); writeln; for i:=l to N do begin for j:=1 to N do if (ioj) then begin write('Введите длину дуги между вершинами ',i:2,' и ' , j : 2, ' : '); readln(wl); if (wl>0) then AdjMatW[i,j]:=wl else AdjMatW[i,j]:=0; {AdjMatW[j,i]:=AdjMatW[i,j];} end; AdjMatW[i,i]:=0; end; write (' ВВЕДИТЕ НОМЕР ВЕРШИНЫ S: '); readln(s); writeln (' ВВЕДИТЕ НОМЕР ВЕРШИНЫ Т: '); readln(t); (* Начальные установки *) for i:=l to N do for j:=1 to N do MarkE[i,j]:=0; d[s]:=0; y:=s; for i:=l to N do begin if (ios) then d[i] :=maxint; MarkV[i]:=0; end; 73
Глава 2. Введение в теорию графов MarkV[s]:=1; y:=s; (* последняя помеченная вершина *) flag:=false; (* все вершины имеют бесконечное в. число *) while((y<>t) OR flag) do begin (* начинаем пересчет вершинных чисел *) for i:=l to N do if (MarkV[i]=0) AND (MarkE[y,i]=0) AND (AdjMatW[y,i]<>0) then begin temp:=0; temp:=d[y]+AdjMatW[y,i]; if d[i]>temp then begin d[i]:=temp; vertex[i]:=y; end; end; (* конец пересчета *) flagl:=false;(* полагаем все вершины помеченными *) i:=0; repeat inc(i); if MarkV[i]=0 then begin temp:=d[i]; flagl:=true; j:=i; (* найдена непомеченная вершина *) end; until (flagl); (* Находим наименьшее вершинное число *) for i:=l to N do if (temp>d[i]) AND (MarkV[i]=0) then begin temp:=d[i]; j:=i; end; (* найдена вершина с наименьшим вершинным числом *) (* проверяем вершинное число *) if (temp=maxint) OR NOT flagl then begin 74
2.10. Кратчайший путь в графе flag:=true; Writeln('ИСКОМЫЙ ПУТЬ ОТСУТСТВУЕТ1 end; if NOT flag then begin MarkE[vertex[j],j]:=1; MarkV[j]:=1; y:=j; end; end; if NOT flag then begin y:=t; write(y:2, '; ' ) ; while(y<>s) do begin i:=0; repeat flagl:=false; inc (i); if (MarkE[i,y]=l) then begin y:=i; write(y:2,'; '); flagl:=true; end; until(flagl); end; end; END. На рис. 2.13 изображен орграф, возле каждой дуги которого указа- указана ее длина. Здесь предполагается, что s := v,, / := v6. Утолщенными представлены дуги, помеченные в процессе работы программы. Ре- Результат печатается как обратная последовательность вершин крат- кратчайшего пути: v6; v5; v4; v,. Рис. 2.13. Поиск кратчайшего пути 75
Глава 2. Введение в теорию графов 2.11. Паросочетания в графе Пусть имеется граф G = (V, Е). Паросочетанием в графе (/являет- (/является множество несмежных (независимых) ребер. Пусть, далее, Месть паросочетание в G. Размером паросочетания М называется число его ребер. Паросочетание Ммаксимально, если его размер нельзя увеличить присоединением некоторого ребра графа G. Очевидно, что наиболь- наибольшее паросочетание всегда максимально. На рис. 2.14 оба паросочета- паросочетания, представленные утолщенными ребрами, являются максималь- максимальными. Но только паросочетание на рис. 2.14, б является наибольшим (и совершенным). а б Рис. 2.14. Максимальные паросочетания в графе Вершина графа G, инцидентная некоторому ребру из А/, называется насыщенной. В противном случае вершина графа называется ненасы- ненасыщенной. Паросочетание, в котором все вершины графа G насыщены, называют совершенным. Ясно, что совершенное паросочетание всегда является наибольшим. Однако обратное в общем случае неверно. М-чередующаяся цепь в графе G — это простая цепь, в которой реб- ребра, принадлежащие паросочетанию А/, чередуются с ребрами, не при- принадлежащими А/. Л/-чередующаяся цепь называется увеличивающей, если она начинается и заканчивается ненасыщенными вершинами. Имеет место теорема Бержа. Теорема 2.11.1. Паросочетание М в графе G является наибольшим тогда и только тогда, когда в G нет увеличивающей М-чередующей- ся цепи. Граф на рис. 2.14, а представляет собой увеличивающую Л/-чере- дующуюся цепь. Заменив в этой цепи толстые ребра на тонкие, а тон- тонкие — на толстые, получим наибольшее паросочетание, изображен- изображенное на рис. 2.14, б. 76
2.12. Потоки в сетях В различных приложениях возникает необходимость найти наи- наибольшее паросочетание в графе G = (К, Е). Существуют хорошие алго- алгоритмы построения наибольшего паросочетания как в произвольном, так и в двудольном графе. Для построения наибольшего паросочетания в двудольном графе G= (X, У, Е) может быть использован алгоритм Форда-Фалкерсона, изложенный в разделе 1.9. Для поиска наибольшего паросочетания каждой строке рабочей таблицы сопоставляют элемент множества X, а каждому столбцу — элемент множества Y. Очевидно, что в этом слу- случае рабочая таблица не обязательно будет квадратной. 2.12. Потоки в сетях Сетью называют ориентированный граф G = (К,?), каждой дуге которого поставлено в соответствие некоторое число, называемое пропускной способностью дуги. Поток в сети определяет способ пере- пересылки некоторых объектов из одной вершины графа в другую. Пере- Пересылка объектов происходит вдоль каждой дуги (по ее направлению). Число объектов, пересылаемых вдоль дуги (х, у), не может превы- превышать пропускной способности с(х, у) этой дуги. В сети выделяют особые вершины s и /, которые соответственно называются истоком и стоком сети. На сети формулируют задачу о наибольшем потоке, в результате решения которой находят наи- наибольший поток Fmax из источника s в сток /. Этот поток обеспечивает- обеспечивается назначением в каждой дуге (jc, у) величины/(х, у) передаваемого ею потока. Задача о наибольшем потоке имеет различные применения. При- Примерами сети может служить транспортная сеть, в которой определяет- определяется наибольший поток грузов, который может быть перевезен из одно- одного города (источника) в другой (сток). Другими примерами сети могут служить система нефтепроводов, водопроводная сеть, сеть почтовой службы, компьютерная сеть и тому подобное. Задача о наибольшем потоке в сети должна удовлетворять следую- следующим условиям. Для каждой дуги (х, у) сети должно выполняться соотношение 0<J[x,y)<c(x,y). 77
Глава 2. Введение в теорию графов Для любой вершины х(х *s,x*t) количество единиц потока, вхо- входящего в вершину, должно быть равно количеству единиц потока, вы- выходящего из нее, то есть для всех у € У для всех у е У Здесь ?Л1Я всех^е у АХ>У) — суммарная величина потока из вершины х в вершину у. Потоки для источника и стока должны удовлетворять следующим соотношениям: для всехуеУ для всеху&У для всех.уеК для всех уеУ Здесь подразумевается, что некоторые дуги могут доставлять по- поток в источник s: для всехуеУ или забирать поток из стока / Таким образом, задача состоит в нахождении наибольшего пото- потока Fmax, который может быть передан из s в /. При решении задачи о наибольшем потоке важным этапом явля- является проблема построения увеличивающей цепи, соединяющей ис- источник s со стоком /. В эту цепь могут входить как прямые, так и обрат- обратные дуги. Для построения такой цепи и последующего решения задачи для каждой дуги (х, у) сети находят две величины: i(x,y) = с(х,у) -Я*,У), Нх,у) =Л*,H. Здесь i(x,y) — величина, на которую может быть увеличен поток в дуге (х,у), a ripe,у) — величина, на которую может быть уменьшен по- поток в этой дуге. В процессе решения задачи дуги сети делятся на следующие виды: • стационарные, в которых поток не может быть ни увеличен, ни уменьшен; множество таких дуг обозначают через N\ 78
2.12. Потоки в сетях • увеличивающие — такие, для которых i(x,y) > О, то есть поток в них может быть увеличен; множество таких дуг обозначают через /; • уменьшающие — такие, для которых г(х,у), то есть поток в них мо- может быть уменьшен; множество таких дуг обозначают через R. В общем случае In R*0. Дуги, принадлежащие множествам /и R, называют промежуточными. Если построена некоторая увеличивающая цепь, то величина, на которую может быть увеличен поток в сети вдоль данной цепи, равна наименьшему из чисел i(x,y) для всех прямых дуг цепи, и г\х,у) для всех обратных дуг цепи. Например, / = 3 / = 2 г = 4 г=5 / = 6 если увеличивающая цепь имеет •—>*#—^#ч—#4—•—>• вид, представленный на рис. 2.15, s a b с d t то величина AF, на которую мо- рис 2 ]5 Увеличивающая цепь жет быть увеличен поток, равна AF= min{/(v7), Ца,Ь), r(c,b), r(d,c), /(</,/)} = {3,2,4,5,6} = 2. Чтобы увеличить поток в сети вдоль найденной увеличивающей цепи, необходимо увеличить на величину AF поток, проходящий че- через каждую прямую дугу цепи, и на эту же величину уменьшить поток, проходящий через каждую обратную дугу цепи. Для построения увеличивающей цепи может быть использован следующий алгоритм. Алгоритм построения увеличивающей цепи Шаг 1. В сети G определить состав множеств N,IhR. Дуги из множест- множества TV из дальнейшего рассмотрения исключить. Шаг 2. Пометить вершину х = s. Шаг 3. Пусть х — последняя помеченная вершина. Выбрать непоме- непомеченную вершину у и рассмотреть дугу (х,у) или дугу (y,x), если она не помечена. Если такой вершины у нет или каждая из упомянутых дуг помечена, то вернуться к вершине, из которой была достигнута вершина х. Если х = s, то возврат невозможен и увеличивающую цепь построить нельзя. Пусть найдена непомеченная вершина^. Тогда, а) если непомеченная дуга (х,у) принадлежит множеству /, то пометить вершину у и дугу (x,j>); б) если непомеченная дуга (у,х) принадлежит множеству R, то пометить вершину у и дугу Оус). Положить х = у. 79
Глава 2. Введение в теорию графов Шаг 4. Если х = Г, то увеличивающая цепь построена. В противном случае перейти к Шагу 3. Значение понятия увеличивающей цепи определяется следующим утверждением. I Теорема 2.12.1. Поток F в сети G является наибольшим тогда и только тогда, когда в сети нет увеличивающей цепи. Для решения задачи поиска наибольшего потока в сети может быть использован алгоритм Форда—Фалкерсона. Алгоритм поиска наибольшего потока Шаг 1. Выбрать некоторый поток в сети, например нулевой, когда f(x,y) = 0 для всех дуг. Шаг 2. Построить увеличивающую цепь и найти величину Д/\ Если увеличивающую цепь построить не удается, то прекратить вычис- вычисления, так как существующий поток в сети — наибольший. Шаг 3. Увеличить поток в сети на величину AF. Перейти к Шагу 2. Пример. Пусть задана сеть, изображенная на рис. 2.16. Числа возле каждой дуги указывают ее пропускную способность. Используем алгоритм Форда—Фалкерсона. Шаг 1. Выберем начальный поток: Л*, а) = 2, Д*, Ь) = 0, /{а, Ь) = 2, Л*,с) = 0, Л*, 0 = 2, Л*, 0 = 0. Шаг 2. Строим увеличивающую цепь. Имеем: i(s, а) = 2-2 = 0, r(s, а) = 2, то есть (s, а) ? I и E, а) 6 R', i(s, b) = 3 - 0 = 3, r(s, b) = 0, то есть (s, b) е /и (s, b) ? R\ i(a, b) = 3 - 2 = 1, t\a, b) = 2, то есть {a, b) e /и {a, b) e R; i(a, c) = 1 - 0 = 1, r(a, c) = 0, то есть (я, с) е /и (а, с) ? R; i(b, t) = 2-2 = 0, r{b, t) = 2, то есть (b, t) г /и (b, t) e R; i(c, 0=1-0=1, r(c, t) = 0, то есть (с, t) e / и (с, /) 6 R. 80
Контрольные вопросы Несложно увидеть, что увеличивающая цепь будет последова- последовательно содержать дуги (s, b), (я, b) (обратная дуга), (я, с) и (с, /). Находим: Л/7- min{/(s, b), r(a, b), i(a, с), /(с, t)} = min{3,2,l,l} = 1. Шаг З. Производим увеличение потока в сети вдоль дуг увеличиваю- увеличивающей цепи. Получаем: As, a) = 2, Л*,*) = 0+1 = 1, Л*,*) = 3-1 = 2, Л*, с) = 0 + 1 = 1, Л*, 0 = 2, Л<% 0 = 0 + 1 = 1. Шаг 2. Имеем: /(*, а) = 2 - 2 = 0, ф, а) = 2, то есть (s, а) <? /и (s, а) г R; /E, Ь) = 3 - 1 = 2, ф, Z>) = 1, то есть E, b) e /и E, A) e Л; /(я, А) = 3 - 1 = 2, г(а, Ь) = 1, то есть (a, b)e In (a, b) e R; i(a, с) = 1 - 1 = 0, г(а, с) = 1, то есть (а, с) б /и (я, с) е Л; /F, 0 = 2 - 2 = 0, r{b, t) = 2, то есть (b, t) ? /и (b, t) e R; /(с, /) = 1 - 1 = 0, /<с, /) = 1, то есть (с, /) 6 /и (с, Г) е Л. Увеличивающую цепь построить не удается, так как прямые дуги (а, с), (А, /) не принадлежат множеству /. Существующий по- поток наибольший. Его величина равна: ^ах =Л*, а) + А*, Ь) =АЬ, /) + Ас, /) = 3. Контрольные вопросы 1. Какие графы называют ориентированными? Неориентированными? 2. Как можно задать граф? 3. Что такое петля в графе? 4. Какой граф называют смешанным? 5. Что такое мульти граф? 6. Какой граф называют полным? Пустым? 0-графом? 7. Что такое двудольный граф? 8. Какой вид имеет матрица смежности ориентированного и неориентиро- неориентированного графов? 9. Как строится матрица инцидентности ориентированного и неориенти- неориентированного графов? 81
Глава 2. Введение в теорию графов 10. Когда удобно использовать структуры смежности при задании графа? 11. Что такое подграф, суграф? 12. Как получить объединение, пересечение и дополнение графов? 13. Что такое композиция графа? 14. Что такое маршрут, цепь, цикл графа? 15. Когда граф имеет покрывающее дерево? 16. Как формулируется алгоритм поиска в глубину? 17. Что такое локальная степень, цикломатическое число, хроматическое число графа? Число независимости графа? 18. Что такое клика графа? 19. Какой граф называют эйлеровым, гамильтоновым? 20. Какие графы называются изоморфными? 21. Как формулируется алгоритм Прима? 22. Как формулируется алгоритм Краскала? 23. Как формулируется алгоритм Дейкстры? 24. Какое паросочетание называется максимальным? Совершенным? 25. Что такое сеть? 26. Каким условиям удовлетворяет поток в сети в задаче о наибольшем потоке? 27. Какие виды дуг сети вы знаете? 28. Как строится увеличивающая цепь в сети? 29. Как находится наибольший поток в сети? Упражнения В задачах 1-5 графы С?,(К,, ?,) и G2(K2, Е2) заданы своими матрица- матрицами смежности А и В соответственно. Необходимо: • построить их геометрические изображения; • построить матрицы смежности объединения и пересечения гра- графов G, и G2\ • граф G] u G2 задать матрицей инцидентности; • определить цикломатическое число графа G, u G2\ • определить степени вершин графа G, u G2. 1. А = 0 1 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 1 0 1 n 1 1 1 0 в= ro 1 1 0 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 82
Упражнения 2. А = А = А = О 1 1 1 Г 1ОООО 10 0 0 0 10 0 0 0 10 0 0 0 Го 1 о 1 ол 10 0 0 0 0 0 0 11 10 10 1 О 0 1 1 О О 0 1 0 tf 0 0 110 110 0 0 0 10 0 1 0 0 0 10, О О О О 1Ч 0 0 110 0 10 0 0 0 10 0 1 10 0 10 в= в= в= о 1 1 о ( 10 0 0 1 10 0 10 0 0 10 1 0 10 10^ О 1 1 0 Ол 10 10 0 110 0 0 0 0 0 0 1 0 0 0 10 Го о о 1 Г 0 0 0 0 0 0 0 0 10 10 10 0 10 0 0 0 О 0 1 0 Ол 0 0 111 110 10 0 110 0 0 10 0 0 6. Найдите кратчайший путь между вершинами S и Гв графе: в 83
Глава 2. Введение в теорию графов 7. Найти минимальный остов графа: с 8. Методом поиска в глубину построить остов графа: 5 3 9. Найти минимальный остов графа, заданного следующей матрицей инцидентности (вес соответствующего ребра указан вектором М)\ М= F,7,4,8,3,5,9,1,2,6) 10. Найти наибольшее паросочетание в графе: X-j Xg X9 X\q 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1
Литература 11. Найти максимальный поток в сети: D 12. Найти максимальный поток в сети: Л , С Литература [2.1] Басакер Р., Саати Т. Конечные графы и сети. М.: Наука, 1974. [2.2] Белов В.В. и др. Теория графов. М.: Высш. шк., 1976. [2.3] Берж К. Теория графов и ее применение. М.: Мир, 1962. [2.4] Зыков АЛ. Основы теории графов. М.: Наука, 1987. [2.5] Емеличев В.А. и др. Лекции по теории графов. М.: Наука, 1990. [2.6] Кристофидес Н. Теория графов. Алгоритмический подход. М.: Мир, 1978. [2.7] Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. М.: Энергоатом и здат, 1988. [2.8] Кук Д., Бейз Г. Компьютерная математика. М.: Наука, 1990. [2.9] Нефедов В.Н., Осипова В.А. Курс дискретной математики. М.: Изда- Издательство МАИ, 1992. [2.10] Оре О. Графы и их применение. М.: Мир, 1965. [2.11] Оре О. Теория графов. М.: Наука, 1980. [2.12] Свами М., Тхуласираман К Графы, сети и алгоритмы. М.: Мир, 1984. [2.13] Уилсон Р. Введение в теорию графов. М: Мир, 1973. [2.14] Харари Ф. Теория графов. М.: Мир, 1973. [2.15] D.B. West. Introduction to Graph Theory. Prentice Hall, Inc., Upper Saddle River, NJ, 1996. 85
Глава 3 Элементы алгебры 3.1. Понятие алгебраической системы Алгебра, как научная дисциплина, изучает свойства множеств, на которых определена система операций и отношений. Методы ал- алгебры находят применение в различных приложениях (например, в теории автоматов). Алгебраической системой называется тройка U= (A, ?lF, Q.p), со- состоящая из непустого множества/!, множества операций ?lFи множе- множества предикатов QP Множество/! называется носителем или основным множеством системы U, а его элементы — элементами системы U. Мощность Card(A) множества А называют мощностью или поряд- порядком системы Uи обозначают как Card(U). Объединяя множества ?lF и Q,p и полагая, что Q = Q.F u Qp, можно записать систему Uболее кратко: U= (A, ?1). Система U= (A, Q) называется конечной, если множество А ко- конечно. Алгебраическая система U= (A, Q.) называется алгеброй, если О.р = 0 и моделью (реляционной системой), если S1F = 0. Примерами алгебраических систем могут служить: B=(R, +,-,x), где Z— множество всех целых чисел; R — множество всех рациональных чисел; +, -, х — обычные операции сложения, вычитания и умножения. Согласно введенной терминологии, U, В — алгебры, D — модель. 3.2. Группоиды и полугруппы Алгебраическая система U= (A, Q.F), где множество Q.F состоит из одной двухместной операции (как правило, операции умножения), называется группоидом. Группоид часто представляют так: U= (A, *). 86
3.2. Группоиды и полугруппы Следует отметить, что операцию * не нужно отождествлять с ариф- арифметической операцией умножения. Это обобщенное название двух- двухместной операции в алгебраической системе. Эту операцию можно выполнять над любыми двумя элементами множества А, причем эта операция не выводит за границы этого множества. В случае конечности множества А группоид (А, *) часто задают с помощью таблиц Кэли. Таблица Кэли — это прямоугольная табли- таблица, строкам и столбцам которой соответствуют элементы множест- множества А, на пересечении строк и столбцов таблицы находится результат, который принадлежит множеству А (таблица Кэли напоминает таб- таблицу умножения чисел): * а b X d а Ь ... у ... d х * у Пример. Представить группоид U=(A,*) таблицей Кэли, где А = {0,1,2, ...,7} и * есть сложение по модулю 4. Решение. Таблица Кэли будет иметь следующий вид: Слож. mod 4 0 1 2 3 4 5 6 7 0 0 1 2 3 0 1 2 3 1 1 2 3 0 1 2 3 0 2 2 3 0 1 2 3 0 1 3 3 0 1 2 3 0 1 2 4 0 1 2 3 0 1 2 3 5 1 2 3 0 1 2 3 0 6 2 3 0 1 2 3 0 1 7 3 0 1 2 3 0 1 2 87
Глава 3. Элементы алгебры Примеры группоидов: множество натуральных чисел относитель- относительно операции сложения; множество всех целых чисел относительно операции вычитания; множество всех рациональных чисел относи- относительно операции деления. В то же время натуральные числа не образуют группоида относи- относительно операции вычитания, так как разность двух натуральных чисел не обязательно есть натуральное число. Группоид (А, *) называется идемпотентным, если а * а-а для всех а е А. Группоид (А, *) называется коммутативным, если х * у = у * х для любых х, уе А. Если для любых элементов группоида (А, *) имеет место ассоциа- ассоциативный закон х * (у * z) = (х * у) * z, то группоид U называется полугруппой или моноидом. Если полугруппа обладает коммутативным свойством, то есть а * b = b * a, то она называется абелевой. Подстановкой называется отображение множества {1,2, ..., я} в се- себя. Например, если п = 3, то можем иметь следующую подстановку: Подстановка является биективным отображением, то есть каждо- каждому элементу левой части бинарного отношения — подстановки — со- соответствует один элемент правой части: 2 3 1 1 2 3 Первая строка представляет правую часть R+ бинарного отноше- отношения R, а вторая строка — левую часть R_ бинарного отношения R. Более того, так как R_ (вторая строка) имеет всегда один и тот же вид, то подстановку записывают одной строкой: B,3,1). Пусть А — множество всех подстановок множества {1,2, ..., п} в се- себя, тогда двойка U =(А,о) образует группоид. Более того, легко убе-
3.3. Понятие группы литься, что операция композиции на таком множестве ассоциативна и коммутативна, то есть t/является абелевой полугруппой. Составим, например, таблицу Кэли для группоида, который вме- вмешает все взаимно однозначные подстановки чисел 1,2,3 относитель- относительно операции композиции о. Обозначим: е = с = 1 2 3 1 2 3 I 2 3' а = 2 1 3 1 2 3 1 3 2 1 2 3 2 3 1 b = 1 2 3 3 2 1 1 2 3 3 1 2 тогда О е а Ь с d f е е а b с d f а Ь е d f b с b b f e d с a с с d f e a b d d с a b f e f f b с a e d 3.3. Понятие группы Группой называется алгебра U= (A, *), удовлетворяющая следую- следующим условиям: I ассоциативности, то есть а * (Ь * с) = (а * Ь) * с для любых а, Ь,се А; II существования нейтрального элемента, или единичного элемен- элемента, то есть среди элементов множества А имеется некоторый опреде- определенный элемент, называемый нейтральным и обозначаемый симво- символом 1, такой, что а * \ = \*а = а(а*е = е*а = а) для всякого а е А; 89
Глава 3. Элементы алгебры III существования обратного элемента, то есть для любого а е Л можно найти элемент а'х е А такой, что а * а~х = а~] * а = 1. Условия I—III часто называют аксиомами группы. Если, кроме того, для группы справедлив коммутативный закон, то есть IV а * Ъ- b * а для любых a, be A, то группа U называется коммутативной или абелевой. Пример. Пусть группоид задан таблицей: а b с а b с а b с а b с а b с Видно, что: 1) операция * ассоциативна а * (Ь * с) = (а * Ь) * с и так далее; 2) существует нейтральный элемент (в данном случае это эле- элемент х)\ 3) для каждого элемента х е А существует обратный (симметрич- (симметричный) элемент: а* Ь = Ь* а = су Ъ * а-а * Ь = с, с * с = с, так как а'х = 6, Ь'1 = а, с~] = с. Следовательно, рассматриваемый груп- группоид представляет группу. Можно заметить, что это абелева группа, так как таблица Кэли симметрична относительно главной диагонали. Группа называется конечной, если множество Л конечно. В против- противном случае группа называется бесконечной. Число элементов в конеч- конечной группе называется ее порядком. 90
3.4. Кольца, тела и поля Другой пример группы — множество целых чисел с операцией сло- сложения образует абелеву группу, то есть U= (Z, +) — абелева группа. В самом деле, операция сложения ассоциативна: а + (Ь + с) = (а + Ь) + с; имеется нейтральный элемент 0: существует обратный (противоположный) элемент: а + (-а) = (-а) + а = 0. Кроме того, данная группа — абелева, то есть а + Ъ = Ь + а. Относительно операции умножения множество целых чисел является группой (нет обратного элемента для 0 и другое). Другие примеры групп: ({1}, х), ({0}, +), ({1; -1}, х). Для любого множества А множество биекций C: А —> А является группой. Если, например, множество/! состоит из п элементов, то мно- множество всех биекций есть подстановки. Эта группа называется симмет- симметрической группой степени п и часто обозначается символом Sn. Она со- состоит из п\ элементов. Подмножество G- (В, *), где В с А группы U= (A, *), также мо- может образовывать группу. В этом случае G называется подгруппой группы U. Теорема 3.3.1. Для того чтобы непустое подмножество G группы V было подгруппой, необходимо и достаточно, чтобы 1. ае Gnbe G=>a * be G\ 2.ае G=*a-'e G. 3.4. Кольца,тела и поля Кольцом называется алгебра V- (А, +, х), обладающая следующи- следующими свойствами: 1) двойка (А, +) есть абелева группа, нулевой (нейтральный) эле- элемент которой обозначается через е @); 2) двойка (А, х) есть полугруппа; 91
Глава 3. Элементы алгебры 3) операция умножения дистрибутивна относительно операции сложения, то есть (а + b)xc = axe + bxc; cx(a + b) = cxa + cxb. Иначе говоря, алгебра U- (А, +, х) есть кольцо, если для a,b,c e A выполняются следующие свойства: 1. (я + *) + с = я + (* + с); 2. я + е = е + я = я; 3. а + (-а) = е\ 4.a + b = b + a; 5. (а х Ь) х с = а х (b x с); 6.(a + b)xc = axc + bxc и cx(a + b) = cxa + cxb. Примером кольца может служить множество чисел, в котором вы- выполняются операции сложения (вычитания) и умножения. Кольцо называется абелевым, если axb = b х а. Другой пример: множество многочленов с целочисленными коэф- коэффициентами образует кольцо. Кольца, в которых для всех отличных от нуля элементов существу- существуют обратные, называются телами. Иначе говоря, кольцо называется телом, если множество отлич- отличных от нуля элементов, то есть множество А\{0} образует группу отно- относительно умножения. В этом случае говорят, что в теле заданы две группы: аддитивная (А, +) и мультипликативная (Л\{0}, х). Если мультипликативная группа тела абелева, то есть умножение коммутативно, то тело называется коммутативным или полем. Тогда частное от деления элемента b на а Ф 0 есть элемент Ь/а: — = а~{ xb = bxa~]. а Отсюда вытекает, что множество чисел, в котором выполняются четыре арифметические операции (сложение, вычитание, умноже- умножение и деление за исключением деления на нуль), является числовым полем. 92
Контрольные вопросы 3.5. Гомоморфизм и изоморфизм Понятие изоморфизма является важным в теоретических исследо- исследованиях. Изоморфизм (от греч.) означает буквально «одна форма». Изоморфными называют объекты, предметы, которые имеют одну и ту же форму, одинаковое назначение и, возможно, выполняют оди- одинаковую функцию. Так, два группоида U= (А, *) и G = (В, о) называются изоморфными между собой, если существует такая взаимно однозначная функция /с U х G, что для всех a, b e A Аа * Ъ) =Аа) о J{b). Одним из важных свойств изоморфизма является то, что во всех операциях изоморфные группоиды ведут себя одинаково, и их можно рассматривать как один и тот же группоид с различными обозначе- обозначениями элементов. Обобщением понятия изоморфизма является гомоморфизм (оди- (одинаковый, подобный, равный). Отображение/группоида (/= (А, *) на G= (В, о) называется гомо- гомоморфизмом, если для всех л:, у е А Таким образом, от гомоморфизма не требуется взаимно однознач- однозначного соответствия, хотя любой изоморфизм является также гомомор- гомоморфизмом. При гомоморфизме ?/= (А, *) и G-(B, о) сохраняются свойства коммутативности и ассоциативности алгебраической операции. Контрольные вопросы 1. Что такое алгебраическая система? 2. Что такое алгебра? 3. Что такое модель? 4. Что такое группоид? 5. Как составляется таблица Кэли? 6. Что такое группа? 7. Что такое кольцо? Тело? Поле? 8. Какие объекты называют изоморфными? 93
Глава 3. Элементы алгебры Упражнения 1. Составить таблицу Кэли для группоида, который образуется из подстановок ij{2 2}li 2JI2 1 с обычной для них операцией умножения. 2. Определить, образуют ли следующие множества группу по сло- сложению и умножению: а) Все действительные числа. б) Неотрицательные действительные числа. в) Целые положительные степени двойки (то есть числа 2, 4, 8, ...). 3. Доказать, что если кольцо содержит не более трех элементов, то оно коммутативно. 4. Доказать, что множество рациональных чисел является телом. Литература [3.1] Ван дер Варден Б.Л. Алгебра. М.: Наука, 1979. [3.2] Общая алгебра / В.А. Артамонов, В.Н. Салий, Л.А. Скорняков и др.; Под общ. ред. Л.А. Скорнякова. Т. 1, 2. М.: Наука, 1991. [3.3] Биркгоф Б., Барти Т. Современная прикладная алгебра. М.: Мир, 1976. [3.4] Бородин А.И. и др. Основные понятия современной алгебры. К.: Ра- дянська школа, 1983. [3.5] Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. М.: Энергоатомиздат, 1988. [3.6] Кук Д., Бейз Г. Компьютерная математика. М.: Наука, 1990. [3.7] Мальцев А.И. Алгебраические системы. М.: Наука, 1970. [3.8] Фрид Э. Элементарное введение в абстрактную алгебру. М.: Мир, 1979. [3.9] Гаврилов СП., Сапоженко А.А. Сборник задач по дискретной матема- математике. М.: Наука, 1978. [3.10] Лавров И.А., Максимова Л.Л. Задачи по теории множеств, математи- математической логике и теории алгоритмов. М.: Наука, 1984. 94
Глава 4 Элементы математической логики 4.1. Общие сведения о математической логике Литературный и разговорный языки, которые применяют люди для общения, не являются строгими и однозначными. Поэтому естествен- естественно, что при использовании таких языков возникают затруднения в про- процессе рассуждений и при получении выводов из этих рассуждений. Считается, что именно эти причины послужили толчком для раз- развития логики как науки о законах и формах мышления. Развитие ло- логики связывают прежде всего с именем Аристотеля, который жил в IV веке до нашей эры. Его сочинение «Аналитики» долгое время рассматривали как труд, завершающий развитие этой науки. В XIX веке Джордж Буль развил алгебраический подход к логике и сформулировал правила логических вычислений. В труде «Исследо- «Исследование законов мышления» он использует алгебраическую символику для логических операций. Так, операция отрицания переменнойх вы- вычисляется как разность 1 - х, дизъюнкция (логическое сложение) пе- переменных х и у — как выражение х + у - ху и так далее. Современное обозначение логических операций, сходных с обозначениями теорети- теоретико-множественных операций, ввел русский математик П.С. Порецкий. В настоящее время математическая логика широко используется в различных областях человеческой деятельности: математике, юрис- юриспруденции, экономике, информатике и тому подобное. Математическая логика играет большую роль в основах математи- математики, так как при систематическом изложении математики возникает проблема выбора исходных понятий и правил, которые представляют базис всего изложения. Основным результатом деятельности в области оснований мате- математики можно считать становление математической логики как са- самостоятельной математической дисциплины, а принципиальным достижением математической логики — разработку современного аксиоматического метода. Основным объектом изучения в математической логике являются различные исчисления, например исчисление высказываний, исчис- исчисление предикатов. Основным предметом алгебры логики являются высказывания и логические операции над ними. 95
Глава 4. Элементы математической логики 4.2. Понятие простого и сложного высказывания Высказыванием (суждением) называется всякое повествователь- повествовательное предложение, о котором можно сказать истинно оно или ложно. Иногда для понятия «высказывание» используют также термин «про- «пропозиция». Не всякое повествовательное предложение является высказыва- высказыванием. Например, предложения «Волга впадает в Каспийское море», «2+2=5» и «Снег черный» являются высказываниями. Первое из них истинно, а последние два — ложные. Предложения «Который час?», «Я лгу» не являются высказываниями, так как в данном случае мы не можем говорить об истинности или ложности предложения. В исчислении высказываний не рассматривают внутреннюю струк- структуру и содержание высказываний, а ограничиваются рассмотрением их свойств представлять истину или ложь. Поэтому на высказывание можно смотреть как на величину, которая может принимать только одно из двух значений: «истина» или «ложь». Таким образом, истинность или ложность высказывания рассмат- рассматривают как его значение. Эти значения сокращенно обозначают «И» и «Л» соответственно для значений «истина» и «ложь». Используются также обозначения 1 и 0 для значений «истина» и «ложь». Если суждение об истинности высказывания можно вынести из самого высказывания, то такое высказывание называют простым. В противном случае мы имеем сложное высказывание. Из простых высказываний можно образовывать сложные выска- высказывания с помощью логических связок. Примерами таких логических связок являются союзы И, ИЛИ, НЕ, конструкция ЕСЛИ..., ТО... Простые высказывания обычно обозначаются некоторыми буква- буквами латинского алфавита — большими или маленькими, с индексами или без них. Логические связки часто имеют свои общепринятые обозначе- обозначения. Так, союз И, который называют также конъюнкцией, обозначают символом & или л, союз ИЛИ, называемый также дизъюнкцией, обо- обозначают символом v, а союз НЕ, который называют отрицанием, — символом -. перед высказыванием или чертой над соответствующим высказыванием, связка ЕСЛИ..., ТО..., которую называют имплика- импликацией, — символом —>. Например, А&В (или А л В), A v В, -лА (или А), А->В. 96
4.2. Понятие простого и сложного высказывания Значение сложного высказывания, которое оно принимает в зависи- зависимости от значений составляющих ее простых высказываний, задается таблицей истинности. Эта таблица содержит все комбинации значений истинности простых высказываний и для каждой такой комбинации указывается значение истинности сложного высказывания. Приведем таблицы истинности для сложных высказываний, обра- образованных с помощью некоторых наиболее часто используемых логи- логических связок. Таблица 4.1 Таблица истинности для отрицания А И Л А Л И Мы видим, что отрицание НЕ образует из высказывания А новое высказывание А, которое истинно, если А ложно, и наоборот. Таблица 4.2 Таблица истинности для конъюнкции А Л Л И и в л и л и АлВ Л Л л и Конъюнкция образует новое высказывание, которое истинно тогда и только тогда, когда оба составляющих его высказываний истинны. В противном случае новое высказывание является ложным. Таблица 4.3 Таблица истинности для дизъюнкции А Л Л И и в л и л и Aw В Л И И И 97
Глава 4. Элементы математической логики Мы видим, что новое высказывание, образованное дизъюнкцией, является истинным, если истинно хотя бы одно из составляющих его высказываний. Таблица 4.4 Таблица истинности для импликации А Л Л и и в л и л и А-+В И и л и Импликацию А -> В читают также: из А следует В. Импликация об- образует новое высказывание, которое ложно тогда и только тогда, ко- когда Л истинно, а Сложно. Иногда говорят, что импликация утвержда- утверждает, что из лжи может следовать что угодно (истина или ложь), а из истины только истина. Из ложной предпосылки не может следовать истина. 4.3. Булевы функции Во многих приложениях значения высказываний И или Л интер- интерпретируются как численные значения 1 или 0 соответственно. В этом случае простые высказывания можно рассматривать как некоторые пе- переменные, которые принимают свои значения из множества Е = {0;1}. Такие переменные называют булевыми переменными в честь английско- английского математика Джорджа Буля. Тогда сложные высказывания можно рассматривать как функции, определенные на множестве Е" всевозможных значений п булевых переменных и принимающих значения из множества Е. Такие функ- функции называют булевыми функциями. Другими словами, всякая булева функция рассматривается как отображение/: Каждый элемент множества Е" называют набором значений п булевых переменных или просто набором. Очевидно, существует 2" различных 98
4.3. Булевы функции наборов п булевых переменных. На каждом наборе булева функция/ может принимать два значения: 0 или 1. Поэтому существует 22 раз- различных булевых функций п переменных. Набор значений перемен- переменных, на котором булева функция/принимает значение, равное 1, на- называют единичным набором. Булевы функции нуля, одной и двух переменныых называют эле- элементарными. Функции нуля переменных — это константы 0 и 1. Имеются 4 булевых функции одной переменной. Это две констан- константы 0 и 1, одна тождественная функцияДх) = х и отрицание f(x) = х. В первых двух случаях функция независимо от значения переменной х принимает постоянное значение 0 или 1. Тождественная функция повторяет значение переменной, а функция отрицания принимает значения, противоположные значению переменной х. Имеются 16 булевых функций от двух переменных. Любая булева функция может быть задана таблицей, в которой перечисляются всевоз- всевозможные значения переменных и для каждого набора значений перемен- переменных указывается соответствующее ему значение булевой функции. Та- Таким образом, это — аналог таблицы истинности для высказываний, только вместо значений И и Л используются значения 1 и 0 соответст- соответственно. Такая таблица также называется таблицей истинности булевой функции. Приведем сводную таблицу истинности для наиболее часто ис- используемых булевых функций. Таблица 4.5 Сводная таблица для булевых функций двух переменных *. 0 0 1 1 0 1 0 1 /о 0 0 0 0 / 1 1 1 1 0 0 1 1 /э 0 1 0 1 /« 0 0 0 1 /, 0 1 1 1 /« 1 1 0 1 /, 1 0 1 1 /. 1 0 0 1 /, 0 1 1 0 1 1 1 0 1 0 0 0 В этой таблице имеем функции: /0 = 0 — константа нуль. /, = 1 — константа единица. /2 = х1 — тождественная функция. Она повторяет значение пере- переменной х,. 99
Глава 4. Элементы математической логики /3 = х2 — также тождественная функция. Она повторяет значение переменной х2. /4 = х, л х2 — это известная нам конъюнкция. Функция равна еди- единице, если и только если обе переменные х] и х2 равны единице. /5 = х] v х2 — это также известная нам дизъюнкция. Функция равна единице, если хотя бы одна из ее переменных равна единице. /6 = х, —> х2 — импликация. /7 = х, <— х2 — обратная импликация. /8 = jc, ~х2 — эквивалентность. Функция равна единице, если обе ее переменные принимают одинаковые значения. /9 = х, © х2 — неравнозначность, или сложение по модулю 2. Это отрицание эквивалентности. /10 = х, | х2 — штрих Шеффера. /и = х, I х2 — стрелка Пирса. Заметим, что последние две функции имеют особое значение в тех- технических приложениях. Так, например, функция Шеффера есть про- просто отрицание конъюнкции. Ее называют также функцией НЕ-И. Эта функция широко используется для описания логических устройств. Аналогичное можно сказать о стрелке Пирса, которую называют также функцией Вебба или функцией НЕ-ИЛИ, так как она есть от- отрицание дизъюнкции. Две булевы функции/и/, называются равными, если их таблицы истинности одинаковы. Этот факт записывают так:/=/,. 4.4. Свойства булевых функций Сложные булевы функции можно преобразовывать, используя свойства элементарных функций. Приведем без доказательства ос- основные из этих свойств. В их справедливости легко убедиться, если отдельно построить таблицу истинности для левой и правой частей приведенных ниже соотношений. Основные свойства \. xv y = yv х — коммутативность дизъюнкции; 2. х лу = у лу — коммутативность конъюнкции; 3. х л (у v z) = (х л у) v (х л z) — дистрибутивность конъюнкции относительно дизъюнкции; 100
4.4. Свойства булевых функций 4. х v (у л z) = (x v у) л (х v z) — дистрибутивность дизъюнкции от- относительно конъюнкции; 5. (х л у) л z = х л (у л z) — ассоциативность конъюнкции; 6. (х v у) v z = х v (у v z) — ассоциативность дизъюнкции; 7. х л х = х — идемпотентность конъюнкции; 8. jc v х = х — идемпотентность дизъюнкции; 9. х v х = 1 — тавтология, или закон исключения третьего; 10. х л х = 0 — непротиворечивость; 11. (х л у) v у = у — поглощение конъюнкции; 12. (xvу) лу = у — поглощение дизъюнкции; 13. х = х — закон двойного отрицания. Коммутативность конъюнкции и дизъюнкции показывает, что безразличен порядок записи переменных в конъюнкции и дизъюнк- дизъюнкции (аналог в обычной алгебре — произведение и сумма не зависят от порядка записи сомножителей и слагаемых). Дистрибутивность определяет правила раскрытия скобок. В обыч- обычной алгебре мы имеем дистрибутивность (распространимость) умно- умножения относительно сложения. Ассоциативность показывает, что безразличен порядок выполне- выполнения множественных операций конъюнкции и дизъюнкции. Законы поглощения позволяют упрощать булевы функции. Законы де Моргана xv у = х лу х лу = xv у Законы де Моргана устанавливают связь между дизъюнкцией и конъюнкцией. Операции с константами 1.0vx = x 2. 1 vx=l 3.0лх = 0 4. ]_АХ = Х 5Л =0 6.0 = 1 Свойства операций с константами также полезны для упрощения записи булевых функций. 101
Глава 4. Элементы математической логики Для упрощения записи булевых функций устанавливают их при- приоритет. Так, полагают, что наиболее сильно действие операции отри- отрицания, затем в иерархии приоритетов следует операция конъюнкции, а потом дизъюнкции. Можно указать следующий список приоритетов в обычной алгебре, соответствующий вышеуказанному: возведение в степень (извлечение корня), умножение и сложение. Кроме того, для упрощения записей операцию конъюнкции обычно не записыва- записывают, то есть поступают так же, как с операцией умножения в обычной алгебре — два подряд записанных символа означают произведение этих чисел. Аналогично, два подряд записанных символа булевых пе- переменных (с отрицанием или без него) рассматриваются как конъ- конъюнкция соответствующих переменных. 4.5. Классы булевых функций Выше, в разделе 4.3, мы определили, что общее число булевых функций равно 22". Обозначим множество всех булевых функций через Р2. Из множества этих функций выделяют некоторые классы (подмно- (подмножества) функций, играющие важную роль в теории булевых функций. Пусть имеется булева функцияДх,, х2..., хя), зависящая от п пере- переменных (аргументов). Пусть, далее, переменным этой функции при- присвоены значения: х, = а,,х> = а2, ...,*„ = а„, гдеауе {0;1},(/= 1,2, ..., п). ТогдаДа,, а2, ..., а„) есть значение функции/при заданных значениях аргументов. Говорят, что булева функция f сохраниет константу 0, если Л0,0,...,0) = 0. Множество всех булевых функций, сохраняющих константу 0, об- образует класс Ко с Р2. Теорема 4.5.1 Число всех булевых функций, сохраняющих констан- константу О,равно22"~\ В самом деле, булева функция принадлежит классу Ко, если на набо- наборе @,0,...,0) она принимает значение, равное 0. На остальных наборах значение функции произвольно. Следовательно, имеем 2" - 1 наборов, на которых функция может принимать значения 0 или 1. Поэтому об- общее число таких функций равно 22 "'. Q.E.D. 102
4.5. Классы булевых функций Говорят, что булева функция/сохраняет константу 1, если Множество всех булевых функций, сохраняющих константу 1, об- образует класс K]czP2. Теорема 4.5.2 Число всех булевых функций, сохраняющих констан- 12я-! ту 1, равно 2 Доказательство аналогично предыдущему. Q.E.D. Функция g(x] ,х2, ...,х„) = /(Xj, х2, ...,хп) называется двойственной функцией к функции/и обозначается/*. Например, имеем по определению Таким обозом, функция х v у является двойственной к функции х л у. Рассмотрим, что происходит с таблицей истинности двойствен- двойственной функции. Замена набора (х,,х2, ...,*„) на набор(Зс, ,Зс2,...,хЛ)со- ,Зс2,...,хЛ)соответствует «переворачиванию» таблицы, то есть записи наборов в обратном порядке. Или, что то же самое, «переворачиванию» зна- значений функции при сохранении порядка записи наборов. Действи- Действительно, наборы (х,,х2, ...,х„) и (JCj ,x2,...,xn) расположены симмет- симметрично относительно середины таблицы. Теперь остается применить операцию отрицания к значению функции, то есть поменять 0 на 1 и 1 на 0. В результате мы получим таблицу истинности двойственной булевой функции. Рассмотрим эту операцию на примере получения двойственной функции для конъюнкции. На первом этапе в таблице истинности конъюнкции X 0 0 1 1 У 0 1 0 1 х лу 0 0 0 1 103
Глава 4. Элементы математической логики «переворачиваем» столбец значений функции. Получаем: X 0 0 1 1 У 0 1 0 1 х л у 1 0 0 0 Далее, меняем значения функции и получаем таблицу истинности двойственной функции: X 0 0 1 1 У 0 1 0 1 хАу = xv у 0 1 1 1 Булева функция/называется самодвойственной, если она совпада- совпадает с двойственной себе функцией, то есть имеет место равенство/=/>. Класс самодвойственных функций обозначим через S с Р2. Напри- Например, функции / = х и/, = ху v xz v yz являются самодвойственными. Теорема 4.5.3. Число всех самодвойственных булевых функцийрав- но 2 . В самом деле, любую самодвойственную булеву функцию можно определить на половине наборов. Отсюда следует сделанное утвер- утверждение. Q.E.D. Булева функция/называется линейной, если она может быть запи- записана в следующем виде: ДхХ9х2,...,хя) = co®ciXl есЛе... е сЛ, гдес.е {0;1}(* = 0,1,2, ...,/!). Множество всех линейных булевых функций обозначим через L. | Теорема 4.5.4. Число всех линейных булевых функций равно 2"+'. 104
4.6. Функционально полные системы Утверждение очевидно, так как имеется 2" +' различных наборов значений коэффициентовск е {0;\}(к = 0,1,2,...,л). Q.E.D. Будем говорить, что набор значений переменных (а,, а2,..., а„) не меньше набора (о[,а'2,...,а';), если а . >а'у для всеху = 1,2,...,л. В этом случае мы записываем: В противном случае наборы называются несравнимыми. Булева функция называется монотонной, если для любых двух на- наборов, таких,что имеет место неравенство Множество всех монотонных булевых функций обозначим через Л/сР2. Число монотонных булевых функций оценивается асимптотически: ifi ifi 2е" <Card(M)<2AC" , где А — некоторая константа. 4.6. Функционально полные системы Нетрудно убедиться, построив соответствующие таблицы истин- истинности, что одни булевы функции можно выразить через другие. Так, например, законы де Моргана позволяют выразить дизъюнкцию че- через конъюнкцию и обратно. Другие примеры: х —> у = х v у, X, ~ Х2 =(*, AX2)VX] ЛХ2). Последнее соотношение может быть записано в упрощенном виде: Аналогично: Х] © Х2 = Х]Х2 105
Глава 4. Элементы математической логики Другие соотношения: х = 1 © х, X, V Х2 = X, 0 Х2 © Х,Х2. Возникает вопрос: с помощью каких булевых функций можно за- записать любую другую булеву функцию? Чтобы ответить на него, вве- введем некоторые определения. Пусть имеется система булевых функций: Лх,,х2, ...,х„),/,(х,,х2, ...,xj, /2(х,,х2, ...,xj, ...,/„(х,,х2, ...,xj. D.1) Функция Лх1,х2,...гхт)=Л/1(х1,х2,...^т),/2(х1,х2,...,хт), ...,/л(х„х2,...,хт)) называется суперпозицией функций системы A). Множество BczP2 булевых функций называется замкнутым, если в результате суперпозиции функций множества В могут быть получены только функции, принадлежащие множеству В. Теорема 4.6.1. Каждый из классов булевых функций, а именно класс функций , сохраняющих константу 1, класс функций, сохраняющих константу О, класс самодвойственных функций, класс линейных функций, класс монотонных функций и множество всех булевых функций, является замкнутым. Докажем, например, замкнутость множества всех булевых функ- функций. В самом деле, каждая из функций определена и принимает свои значения из множества Е= {0;1}. Следовательно, при суперпозиции вместо переменных некоторой булевой функции могут быть взяты булевы функции. Так как переменные новой функции принимают значения из множества Е- {0;1}, сама новая функция также будет булевой функцией, то есть будет принимать значения из множества ?={0;1}. Q.E.D. Система функций D.1) называется (функционально) полной в мно- множестве Р2 всех булевых функций, если в результате суперпозиции функций этой системы можно получить любую булеву функцию. 106
4.6. Функционально полные системы Следующая теорема была доказана знаменитым американским математиком Е.Л. Постом: Теорема 4.6.2 (Пост). Для того чтобы система булевых функций была полной, необходимо и достаточно, чтобы она содержала хотя бы одну функцию: 1. не сохраняющую константу 1; 2. не сохраняющую константу 0; 3. не самодвойственную; 4. нелинейную; 5. не монотонную. Доказательство необходимости этого утверждения очень просто: если какое-либо из перечисленных условий полноты не будет вы- выполнено, то будем иметь класс булевых функций, который является собственным подмножеством множества Р2 всех булевых функций. Например, если каждая из функций будет сохранять константу 1, то в результате суперпозиции функций системы получим только функ- функции, сохраняющие константу 1. Доказательство достаточности громоздко и мы отсылаем читателя к специальной литературе1. При определении полноты системы булевых функций удобно поль- пользоваться таблицей, в которой принадлежность функций этой системы к различным классам, упомянутым в теореме 4.6.2, отмечена зна- знаком «+». Составим таблицу для некоторых элементарных булевых функций и отметим их принадлежность к этим классам («+» — принадлежит, «-» — не принадлежит к соответствующему классу). Функция Отрицание Дизъюнкция Конъюнкция Импликация Сложение по модулю 2 Эквивалентность — + + — + - — + + + — L + — — — + + М — + + — — — S + — — — — — См., например, [4.13]. 107
Глава 4. Элементы математической логики Из таблицы нетрудно определить, что системы булевых функций, содержащие отрицание и конъюнкцию, отрицание и дизъюнкцию, яв- являются функционально полными. Естественно, полной будет и систе- система, содержащая отрицание, конъюнкцию и дизъюнкцию. Таким образом, мы убедились, что для представления любой буле- булевой функции достаточно использовать функционально полную сис- систему некоторых элементарных булевых функций. 4.7. Дизъюнктивная нормальная форма Обозначим: х° = х, если а = 1, и х° = Зс, если а = 0. Символ ха назы- называют литералом булевой функции/. Рассмотрим конъюнкцию х?х?-х?. D.2) Существует 2" различных наборов значений переменных ау (/=1,2,...,/!): а„ а2, ..., ст„ Соответственно имеется 2" различных конъюнкций вида D.2). Легко заметить, что конъюнкция D.2) равна единице, если и толь- только если Xj = Gj для всех (/= 1,2,. ..,я). Конъюнкцию D.2) называют так- также конституентой единицы. Теорема 4.7.1 Любая булева функция Дх]9 х2, ..., хп) может быть представлена в виде дизъюнкции конституент единицы V х?х?-хая\ D.3) /(строг о„)=1 где конституенты записываются для всех (а,, а2, ..., оп) таких, что Очевидно, на любом наборе таком, что функция Дх,, х2,..., хп) = 1, единице будет равна одна и только одна конституента. Поэтому дизъ- дизъюнкция D.3) будет равна единице только на тех наборах, на которых Я*,, х2,..., хп) = 1. Дизъюнкция конституент будет равна единице, если единице равна хотя бы одна конституента. На остальных наборах все конституенты в D.3) будут равны нулю. Нулю будет равна также дизъ- дизъюнкция этих конституент. Q.E.D. 108
4.8. Конъюнктивная нормальная форма Представление булевой функции в виде D.3) называют совершен- совершенной дизъюнктивной нормальной формой (СДНФ). Пример. Пусть булева функция задана таблицей истинности. Тре- Требуется записать ее в СДНФ. 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 J\ Y^p ^2' "^3/ 1 0 0 1 0 1 1 0 /2(х„ х2, х,) 0 0 1 1 0 1 0 1 Имеем: Заметим, что полученная запись функции/2(х,, jc2, x3) может быть упрощена следующим образом: Всякую конъюнкцию переменных функции, взятых с отрицанием или без отрицания, называют элементарной. Дизъюнкцию элементар- элементарных конъюнкций называют дизъюнктивной нормальной формой (ДНФ). Так, выше для функции/2(х,, х2, д:3) мы имеем две ДНФ. 4.8. Конъюнктивная нормальная форма Рассмотрим дизъюнкцию переменных функции, взятых с отрица- отрицанием или без отрицания: v°l VJC°2 V V Х°т 109
Глава 4. Элементы математической логики Такую дизъюнкцию называют элементарной или дизъюнктом. Ес- Если т = я, то дизъюнкт равен нулю на одном и только одном наборе значений переменных, а именно на таком, чтох, = а,,х2 = а2, ...,дсл = а„. Существует 2" различных наборов значений переменных а; С/= 1,2 л): а„а2, ...,а„. Поэтому имеется 2" различных дизъюнктов. Теорема 4.8.1. Любая булева функция f(x], х2, ..., х„), кроме констан- константы 1, может быть представлена в виде конъюнкции дизъюнктов Л xGl vx^v.-.v^, D.4) где дизъюнкты записываются для всех (о,, а2, ..., а„) таких, что Ла„а2, ...,ая) = 0. В самом деле, каждый дизъюнкт из D.4) равен нулю на одном и только одном из наборов значений переменных, на котором булева функция равна нулю. Поэтому соотношение D.4) на всех таких и только таких наборах равно нулю. Q.E.D. Представление булевой функции в виде D.4) называют совершен- совершенной конъюнктивной нормальной формой (СКНФ). Пример. Записать булевы функции из предыдущего раздела в виде СКНФ. Имеем: /1(х1,х2,х3) = (х, vx2 vx3)(x, vx2 vx3)(x, vx2 vx3)(x, vx2 vx3), /2(x,,x2,x3) = (xI vx2 vx3)(x, vx2 vx^ix^ vx2 vx3)(x, vx2 vx3). Можно обобщить представление булевых функций с помощью дизъюнктов. Пусть dv d2, ..., dm есть некоторые дизъюнкты. Тогда конъюнкция dlAd2A...Adm D.5) называется булевым выражением в конъюнктивной нормальной форме (КНФ). 110
4.9. Полиномиальные представления 4.9. Полиномиальные представления Сумму по модулю 2 всех конституент единицы называют совершен- совершенной бисуммарной нормальной формой (СБНФ). Теорема 4.9.1 Любая булева функция Дх,,х2, ...,х„) может быть представлена в совершенной бисуммарной нормальной форме. В самом деле, на любом единичном наборе функцииДх,, х2, ..., хп) единице будет равна одна и только одна конституента. Поэтому сумма по модулю 2 будет равна единице только на тех же наборах, что и функцияДх,, х2, ..., хп). Q.E.D. Пример. Пусть требуется записать в СБНФ функцию/,, заданную в примере раздела 4.7. Имеем: /1(х1,х2,х3) = х1х2х3 ех,х2х3 ©х,х2х3 ©х,х2х3. Как видим, СДНФ и СБНФ этой функции отличаются только опе- операциями, соединяющими ее конституенты единицы. Нетрудно определить, что сумма по модулю 2, операция конъюнк- конъюнкции, а также константы 0 и 1 образуют функционально полную систе- систему. Алгебру на множестве всех булевых функций с операциями сложе- сложения по модулю 2 и конъюнкцией изучал русский математик Жегалкин. Такую алгебру называют алгеброй Жегалкина. Справедливы следующие соотношения: x,©x2=x2®xp D.6) Х,(Х2 0 Х3) = *,*2 © *1*3> D'7> х©х = 0, D.8) х Ф 0 = х, D.9) х = 10х. D.10) Используя соотношения 4.6—4.10, а также представление булевой функции в виде СБНФ, можно перейти к записи функции в виде по- полинома Жегалкина. Получим полином Жегалкина для функции /, в рассмотренном выше примере: /1(х,,х2,х3) = х1х2х3 ех,х2х3 ех,х2х3 0x,x2x3 = = A0x])(iex2)A0x3)e(iex1)x2x3 0x1A0x2)x3 ©x1x2(l©x3) = = 10 x, 0 x2 0 x3 0 x, x2 © x, x2 x3. 111
Глава 4. Элементы математической логики 4.10. Способы задания булевых функций Ранее мы познакомились с несколькими способами задания буле- булевой функции. Прежде всего, это таблица истинности. Однако, ввиду громоздкости, таким образом можно задавать булевы функции лишь от небольшого числа переменных. Далее, мы ввели понятия дизъюнктивной и конъюнктивной нор- нормальных форм булевой функции и определили способ записи любой булевой функции в виде СДНФ и СКНФ, или просто в ДНФ и КНФ. Конечно, последние два способа — это аналитические формы задания булевой функции. Рассмотрим некоторые другие способы задания булевой функции. Первые способы исходят из табличной формы задания функции. По первому из них каждый набор значений переменных булевой функции рассматривается как число, записанное в «-разрядном дво- двоичном коде, где п — число переменных функции. Например, для бу- булевой функции трех переменных будем иметь следующие номера: 0,1, 2, 3, 4, 5, 6, 7. Поэтому булеву функцию можно задать, указав номера наборов, на которых функция равна единице. Так, булевы функции, рассмотренные в примере раздела 4.7, могут быть заданы следующим образом: fl(x{9x2,x3) = {0,3,5,6}, f2(xl9x2,x3) = {2,3,5,7}. Второй способ также исходит из табличной формы задания буле- булевой функции. В этом случае булева функция задается в векторной форме, компоненты вектора равны 0 или 1. В этом векторе /-й компо- компонент равен 1, если булева функция на /-м наборе равна 1. Аналогично, в векторе /-й компонент равен 0, если булева функция на /-м наборе равна 0. Так, булевы функции, рассмотренные в примере раздела 4.7, могут быть заданы следующим образом: /;(х,,х2,Хз) = A0010110), /2(х1,х2,х3) = @0110101). Имеются также другие формы задания булевой функции, основан- основанные на ее аналитическом представлении. Наиболее известная форма 112
4.11. Задача ВЫПОЛНИМОСТЬ задания булевой функции основана на ее аналитическом представле- представлении в виде КНФ. В этом случае каждому литералу х,о/ ставится в соот- соответствие номер / соответствующей переменной. Это число положи- положительное, если а, = 1, и отрицательное, если а, = 0. Таким образом, каждая КНФ может быть представлена в виде таб- таблицы (двумерного массива). Каждой строке этой таблицы соответству- соответствует дизъюнкт булевой функции. Таблица имеет столько строк, сколько дизъюнктов содержит представление булевой функции в виде КНФ. Чтобы отметить конец записи литералов одного дизъюнкта, в конце чисел, представляющих литералы дизъюнкта, ставят нуль. Например, булевы функции из предыдущего раздела, представ- представленные в СКНФ, могут быть заданы следующим образом. Функция fl(xl,x2,x3): -1-2 3 0-12-30 1-2-30 1230. Функция /2(jc,,jc2,jc3): -1-2-30-1-2301-2-301-230. 4.11. Задача ВЫПОЛНИМОСТЬ В теори алгоритмов (см. главу 7) определяют понятие универсаль- универсальной (или NP-полной задачи) в классе задач, решаемых на компьютере (задачи класса NP). Это понятие вводится как эталон очень сложной задачи. Поэтому задача ВЫПОЛНИМОСТЬ (ВЫП) занимает одно из центральных мест в теории вычислительной сложности задач класса NP, так как задача ВЫП является исторически первой NP-полной за- задачей. Поэтому многие исследователи доказывают NP-полноту неко- некоторой задачи класса NP, сводя ее к задаче ВЫП. Рассмотрим постановку задачи ВЫП. Пусть задано некоторое булево выражение в конъюнктивной нор- нормальной форме D.5). Набор значений булевой функции называют вы- выполняющим, если на этом наборе булева функция равна 1. Требуется найти выполняющий набор для выражения D.5). Кроме важной роли задачи ВЫП в теории сложности вычислений, эта задача имеет многочисленные приложения в различных областях знания. Ежегодно проводятся научные конференции, посвященные текущим достижениям в разработке решающих алгоритмов для этой задачи (SAT-конференции: SAT2000, SAT2002...). 113
Глава 4. Элементы математической логики Имеются булевы выражения, для которых не существует выпол- выполняющего набора. Например, булево выражение (х, vx2 vx3)a(x, vx2)a(x2 vx3)a(x3 vx])a(x] vx2 vx3) не является истинным ни для каких значений переменных. 4.12. Предикаты Понятие предиката обобщает понятие высказывания. Напомним, что высказывание мы определили как повествовательное предложе- предложение, которое является истинным или ложным. Всякое такое предло- предложение содержит подлежащее, определяющее объект высказывания, и сказуемое, определяющее свойство объекта. Например, в предло- предложении «Корова есть травоядное животное» имеем подлежащее «коро- «корова» и сказуемое «есть травоядное животное», определяющее свойство объекта. Это сказуемое называется предикатом. Чтобы формализовать высказывание, вместо подлежащего вво- вводится переменная. Например, «х есть травоядное животное». Вводя для краткости обозначение G(x), будем рассматривать функцию G(x) как предикат. Подставляя конкретные значения переменной х, полу- получаем истинные или ложные высказывания. Предикаты широко используются в математике. Например, пусть предикат Р(х) означает, что х есть четное число. Тогда мы можем за- задать множество А = {х\Р(х)}. Читается: множество А суть элементы jc такие, что х есть четное число, или просто, jc есть Р(х). Можно ввести также понятие двухместного предиката. Например, пусть предикат D(x, у) означает, что х делится на у. Аналогичным об- образом можно ввести понятие «-местного предиката. Например, пред- предположим, что предикат Л(х,, х2, ..., хп) означает, что переменные х,, х2, ..., хп есть корни алгебраического уравнения л-й степени. С помощью логических связок, ранее определенных для высказы- высказываний, можно образовывать более сложные предикаты. Например, предикат Р(х), очевидно, будет означать, что х не есть четное число. Кроме логических связок, в исчислении предикатов используются и другие операции — кванторы. Первый из кванторов — квантор всеобщности Vx. Читается: для всехх.... Например, Vx Р(х). В таком случае говорят, что квантор свя- связывает переменную х, то есть преобразовывает предикат в высказы- 114
4.13. Построение математических моделей вание. В нашем примере это можно прочесть так: «Все х есть четные числа». Второй из кванторов — квантор существования Зх. Читается: суще- существует* такой, что... Например, ЗхР(х) означает: «Существуетхтакой, что х есть четное число». Этот квантор также связывает переменную х и преобразует одноместный предикат в высказывание. Переменную jc называют связанной, если она есть переменная лю- любого из кванторов — всеобщности или существования. В противном случае переменная называется свободной. Число свободных пере- переменных определяет размерность предиката. Применение кванторов уменьшает размерность предиката. Например, из двухместного пре- предиката /)(jc, у) («х делит у») можно образовать одноместный предикат Зх D(x, у) — «Существует х, который делит у». Операция отрицания преобразует один из кванторов в другой квантор, то есть оба квантора_являются двойственными друг к другу. Рассмотрим выражение УхР(х), то есть не для всех jc из области оп- определения Р(х) выражение Р(х) является истинным. Это высказыва- высказывание, в свою очередь, равносильно высказыванию, что существует, по крайней мере, один предмет jc из области определения Р(х), для кото- которого Р(х) ложно, то есть VxP(jc) = Аналогично убеждаемся, что ЗхР(х) = VjcP(jc). Из определения кванторов следует, что они являются одними из основных операций во всей математике. 4.13. Построение математических моделей Рассмотрим несколько математических моделей, которые построе- построены с использованием средств булевой алгебры. 4.13.1. Пример 1. Схема управления освещением Пусть необходимо построить схему включения освещения комна- комнаты, которое может включаться (выключаться) с помощью двух вы- выключателей (тумблеров). Один из них расположен непосредственно на входе в комнату, а другой — возле кровати, где хозяин любит почи- 115
Глава 4. Элементы математической логики тать перед сном. Необходимо, чтобы каждый из выключателей позво- позволял, независимо от положения другого выключателя, включать или выключать освещение всей комнаты. Положим, что выключатели могут находиться в одном из двух со- состояний: 0 или 1. Каждый из выключателей имеет три контакта. Один из них — общий. Обозначим его буквой «О», два других — как «О» и «1». Выключатель соединяет общий контакт «О» с контактом «О» или с контактом «1». Обозначим через х булеву переменную, отражающую положение выключателя, находящегося у входа. Предположим, что эта пере- переменная равна единице (истине), если выключатель соединяет общий контакт с контактом «1», и 0 — при соединении общего контакта с контактом «О». Аналогичные значения принимает булева перемен- переменная у, которая соответствует положению выключателя, расположен- расположенного возле кровати. Тогда функция /(горение лампочки в комнате) будет принимать значение 1, если лампочка «горит», и 0 — если лампочка «гаснет». Рассмотрим возможности управления освещением комнаты. Когда мы заходим в комнату, выключатели возле входа и у кровати могут находиться в любом положении. Лампочка «не горит». Для опре- определенности считаем, что оба выключателя находятся в положении «О». Тогда при установке входного выключателя в состояние «1» лампочка должна «загореться». Находясь возле кровати, мы должны иметь воз- возможность выключить освещение. Это возможно переводом выключа- выключателя возле кровати в состояние «1». Таким образом, если оба выключа- выключателя будут находиться в одинаковом состоянии (оба в положении «О» или «1»), то лампочка в комнате должна «не гореть», а если выключате- выключатели будут находиться в разном состоянии (один из них в состоянип'«0», а другой в состоянии «1»), то лампочка должна «загореться». Эти состояния можно представить в виде следующей таблицы ис- истинности для булевой функции/: X 0 0 1 1 У 0 1 0 1 / 0 1 1 0 116
4.13. Построение математических моделей Очевидно, мы имеем одну из элементарных булевых функций, а именно функцию неравнозначности:/= х © у. Конечно, тот же результат получим, полагая, что лампочка «го- «горит», если оба выключателя находятся в одинаковом состоянии, и «не горит», если выключатели находятся в разных состояниях. Тогда схе- схема управления освещением комнаты будет описываться функцией эквивалентности:/= х ~ у. 4.13.2. Пример 2. Сумматор последовательного действия Пусть требуется построить устройство, на вход которого младшим разрядом вперед поступают два «-разрядных двоичных числа. На вы- выходе требуется получить сумму входных чисел, также начиная с ее младших разрядов. Такое устройство называется сумматором двоич- двоичных чисел последовательного действия. Обозначим: х, — значение /-го разряда первого из двоичных чисел, yt — значение /-го разряда второго из двоичных чисел. Ясно, что в процессе сложения /-х разрядов входных чисел может появляться единица переноса в следующий разряд суммы. Эту единицу переноса обозначим с,.. Выход — значение суммы /-го разряда — обозначим че- через 5,.. Работу такого сумматора можно представить в виде следующей таблицы истинности. X 0 0 0 0 1 1 1 1 V,- 0 0 1 1 0 0 1 1 с 0 1 0 1 0 1 0 1 s 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 117
Глава 4. Элементы математической логики Несложно заметить, что имеются два булевых выражения для /-го разряда суммы и для переноса в следующий (/ + 1)-й разряд: 4.13.3. Пример 3. Логическая модель гамильтоновости графа Пусть имеется неориентированный граф G= (К, ?), где V — мно- множество вершин графа, Е— множество его ребер. Напомним, что граф G имеет гамильтонов цикл, если в нем существует маршрут, начинаю- начинающийся в любой вершине графа, при движении по которому посетим единожды каждую вершину графа и вернемся в начальную вершину. Граф, имеющий гамильтонов цикл, называют гамильтоновым. В об- общем случае граф может не иметь гамильтонова цикла. Вершину v е V называют инцидентной ребру е е Е, если эта вер- вершина является концевой для ребра е. В этом случае говорят также, что ребро е инцидентно вершине v. Напомним, далее, что локальной степенью вершины v 6 Кназыва- ют число ребер графа С, инцидентных данной вершине. Локальную степень вершины v обозначают deg{v). Пусть требуется составить булево выражение, которое истинно (равно единице), если граф гамильтонов, и ложно (равно нулю) в про- противном случае. Обозначим такое булево выражение через F. Прежде всего зададимся вопросом: как задать (указать) гамильто- гамильтонов цикл? Этот цикл можно указать, перечисляя вершины, которые будут встречаться при движении вдоль его ребер. Однако наиболее ес- естественный способ задания гамильтонова цикла — задать совокуп- совокупность составляющих его ребер. Для составления требуемого булева выражения введем булевы пе- переменные (см. [4.11]), поставив в соответствие булеву переменную х е {0;1} каждому ребру е е Е графа G. Эта переменная будет равна единице, если соответствующее ребро входит в гамильтонов цикл, и равна нулю в противном случае. Рассмотрим требования задачи. Первое требование состоит в том, чтобы каждая вершина графа <7была инцидентной точно двум ребрам гамильтонова цикла. Второе требование — гамильтонов цикл дол- должен включать все вершины графа. Поэтому требуемое булево выра- 118
4.13. Построение математических моделей жение будем записывать как конъюнкцию двух булевых функций: F= FxSlF2. Функция Fx будет равна единице, если выполняется пер- первое требование, и F2 будет равно единице при удовлетворении второ- второго требования. Функцию F] легко построить. В самом деле, пусть v,. e Кесть некоторая вершина графа, имеющая локальную степень, равную deg(v), то есть этой вершине инцидентны ребра еп, еа, ..., е. v . Тот факт, что данной вершине инцидентно равны два ребра, можно отобразить следующим образом. Например, если ребра еп, еа принадлежат гамильтонову циклу, а другие ребра не принадлежат ему, то этот факт можно представить как конъюнкцию В этой конъюнкции только две переменные — х. и хг , которые соответствуют ребрам ei и е12, принадлежащим гамильтонову циклу, не имеют отрицаний. Все остальные булевы переменные, соответст- соответствующие другим ребрам, инцидентным вершине v,, связаны отрицани- отрицанием. Ясно, что эта конъюнкция равна единице, если переменные х. и х,2 принимают единичные значения, а все другие переменные конъ- конъюнкции равны нулю. Однако заранее не известно, какая пара ребер, инцидентных вер- вершине v,, принадлежит гамильтонову циклу. Поэтому следует включить в функцию F, все конъюнкции вида Kpq, где /?, д s {l,2,...,Gfeg(v,)}. Ясно, что для любой вершины только одна конъюнкция вида D.11) будет равна единице. Таким образом, первое из указанных выше тре- требований будет выполнено для рассматриваемой вершины, если мы составим дизъюнкцию таких конъюнкций. В результате, полученная дизъюнкцию обеспечивает выполнение первого из вышеуказанных требований только для одной вершины. Обозначим полученную дизъ- дизъюнкцию как Д. Теперь можно записать функцию Fx как конъюнкцию всех п дизъ- дизъюнкций Д. (/ = 1,...,л), где п — число вершин графа G: Оценим сложность формулы для функции F] как число различных литералов (переменных с отрицанием и без отрицания), используе- используемых для записи формулы. 119
Глава 4. Элементы математической логики Число переменных в каждой конъюнкции вида Kpq всегда равно локальной степени рассматриваемой вершины. Поэтому можно по- положить, что deg{y) = О(п) для любой вершины v e V. Число таких конъюнкций равно числу сочетаний из deg(v) = О(п) по два (число пе- переменных без отрицания). Это число равно deg(v)x(deg(v)-\) = 2 Другими словами, это есть длина дизъюнкции Д. Так как функция F, содержит п таких дизъюнкций, окончательно получаем, что сложность такой функции равна О(п3). Пример. Пусть имеется граф G, приведен- приведенный на рис. 4.1. Требуется построить для дан- данного графа функцию F,. Введем булевы переменные: v-v2 ->х, v3-v4 ->х7 v4-v7 ^Л|0 vrv5 ->x5 v5-v6 v2-v7 -**6 v6-v7 ^Л|2 Составляем дизъюнкцию конъюнкций для вершины v,: v7 v6 v5 Рис. 4.1. Графа = Хх Х2 Х3 V JC, X2 V JCj Х2 Для вершины v2: D2 =xlx4x5xe vx]x4x5xe Для вершины v3: D3 = x2 x4 x7 vx]xAx5x6 v x, x4 x5 xe v x, x4 x5 xe v x, x4 x5 x6 v wxlx4x5xb. Для вершины v4: ZL = x7 vx7x9x10 120
4.13. Построение математических моделей Для вершины v5: Для вершины v6: А = Х\2 Для вершины v7: А = *3*6 V.2 V *3*6 *,0*.2 V*3*6*,0*12 V*3*6*,0*.2 V Таким образом, имеем: F, = Z), л ZJ л ZK л D4 a D5 a D6 л ZO. К сожалению, построения одной функции F, недостаточно. Пусть, например, в рассмотренном выше фафе множество вершин разбито на два цикла: v, — v2 — v7 и v3 — v4 — v5 — v6. Следовательно, для этого слу- случая имеем значения булевых переменныхx1=jc3=x6=.x7=a:8=jc9=jc11 = 1, а остальные переменные функции F, равны нулю. Нетрудно увидеть, что при указанных значениях переменных значение функции F, = 1, так как каждая вершина графа G инцидентна точно двум ребрам пред- представленной совокупности ребер. Иначе говоря, функция F, содержит информацию о всех разбиени- разбиениях фафа G на непересекающиеся циклы, в том числе и о гамильтоно- вых циклах, если они имеются. Рассмотрим теперь, как можно построить логическое выражение для функции F2. Основой этого может служить следующий факт. При наличии любого цикла C(S) (S с V) фафа G, не содержащего все вер- вершины этого фафа, имеются по крайней мере два ребра гамильтонова цикла, если он существует, которые соединяют две разные вершины из 5 с вершинами вне этого цикла, то есть с вершинами множества V\S. Отсюда следует правило построения функции F2: выделить все цик- циклы СE) такие, множество вершин S каждого из них есть строгое под- подмножество множества всех вершин фафа G, и для каждого такого цик- цикла построить дизъюнкцию D'. Членами такой дизъюнкции являются двухэлементные конъюнкции, каждая из которых содержит две булевы переменные без отрицания. Эти переменные соответствуют двум реб- ребрам, которые соединяют две различные вершины цикла СE) с фафовы- ми вершинами вне этого цикла. 121
Глава 4. Элементы математической логики Например, для графа, представленного на рис. 4.1, имеется цикл v, - v2 - v7. Тогда описанная выше дизъюнкция для указанного цикла будет следующей: D;21 =x2x4 vx2x5 vx2x10 vx2x12 v vx4x10 vx4x12 vx5xlQvx5x]2. Как видно, формула для дизъюнкции вида D' получается довольно громоздкой. В общем случае, если число вершин в цикле C(S) равно к, то есть Card(S) = к, то число конъюнкций в дизъюнкции D' в худшем случае равно числу сочетаний из к по два (число способов выделить две разные вершины цикла СE)), умноженному на число сочетаний из (п - к) графовых вершин вне цикла также по два (число способов выбрать две концевые вершины для ребер, соединяющих вершины цикла с вершинами вне цикла) плюс (п - к) (число возможных общих вершин для вышеупомянутых ребер), то есть имеем: к{к-\) ((п-к)(п-к-\) , .Л Ясно, что число используемых литералов в дизъюнкции D' будет вдвое больше, так как выше было определено число конъюнкций. Полагая в полученном выражении к = —, приходим к выводу, что чис- число различных литералов в дизъюнкции D' есть величина О(п4). Заметим, что пока подсчитано только число литералов в дизъюнк- дизъюнкции D' для одного цикла. Сколько же имеется таких циклов в графе G в худшем случае? Очевидно, что цикл СE) может образовывать любая совокупность из к вершин графа G, где 3 < к<(п- 1). Отсюда имеем п п п ^ ' где С' = '-— есть число сочетаний из п по /'. Поэтому имеем 0B") всех циклов. Другими словами, записать логическое выражение F= Fx8lF2, определяющее условие гамильтоновости графа для реаль- реальных случаев, когда граф содержит тысячи вершин, практически не- невозможно. 122
4.14. Реализация математических моделей Тем не менее, полученная формула может служить основой по- построения алгоритмов поиска гамильтонова цикла в графе. Один из возможных подходов рассмотрим в следующем разделе1. 4.14. Реализация математических моделей Для чего нужны построенные математические (логические) моде- модели в практическом плане? Из примеров, рассмотренных в предыду- предыдущем разделе, ясно, что это зависит прежде всего от задачи, для кото- которой построена математическая модель. Так, формула для управления освещением комнаты дает нам воз- возможность построить схему управления этим освещением (рис. 4.2). Рис. 4.2. Схема управления освещением —> delay *0y,0c, Ci+\ Рис. 4.3. Структура сумматора Формула сумматора последовательного действия может быть по- построена на реальных логических элементах. В любом случае это уст- устройство будет иметь структуру, изображенную на рис. 4.3. Наиболее сложно использовать логическую модель гамильтоново- сти графа. В этом случае полученная выше формула может способст- способствовать построению алгоритма поиска гамильтонова цикла. Рассмотрим возможные применения формулы F = Fl&F2 для этой цели. Прежде всего заметим, что поиск выполняющего набора пере- переменных булевой функции Fv как части логической модели, хорошо известен: это поиск разбиения Р графа G = (V, Е) е ?„ на непересе- непересекающиеся циклы (такое разбиение называют также 2-фактором гра- графа). Известен эффективный (полиномиально-временной) способ Если читатель может предложить более эффективный способ построения формулы для 7*2 или желает обсудить эту проблему, то он может связаться с ав- автором по адресу: aplot@tom.vinnica.ua 123
Глава 4. Элементы математической логики построения такого разбиения, основанный на теореме Татта (см., на- например, [4.15]). Поэтому один из способов поиска гамильтонова цикла может состо- состоять в построении некоторого исходного разбиения Р- {СE,), ..., C(Sr)} графа G на непересекающиеся циклы. Тогда, г > 1, выбирается неко- некоторый цикл СE), называемый опорным, и производится последующее поэтапное расширение опорного цикла до гамильтонова, если это возможно. Такое расширение может быть выполнено перебором элементов множества R(S), где R(S) есть множество пар ребер из (/таких, что ка- каждое ребро пары имеет только одну вершину в 5, и эти ребра не имеют общей вершины в S. В этом случае для каждого выбранного элемента из R(S) можно попытаться построить новое разбиение Pv содержащее цикл СE,) такой, что S с Sx, и выбранный элемент из R(S) принадле- принадлежит новой совокупности Р] из п ребер, определяющих разбиение Pv Далее процедура расширения цикла СE,) повторяется. Ясно, что переход от разбиения Р к разбиению Рх может быть вы- выполнен с помощью некоторого чередующегося цикла, при обходе ре- ребер которого поочередно встречаются ребра разбиения Р и ребра, не принадлежащие этому разбиению. Такой чередующийся цикл назо- назовем увеличивающим для СE). Очевидно, если граф G гамильтонов, то такой цикл, хотя бы один, всегда существует (прежде всего существует расширение до гамильто- гамильтонова цикла). Можно предложить гипотезу, касающуюся построения увеличи- увеличивающего чередующегося цикла для C(S). Известно, что алгоритм построения паросочетания в графе стро- строит кратчайший чередующийся цикл. Поэтому гипотеза утверждает, что если в гамильтоновом графе G построено некоторое его разбие- разбиение Р (г > 1) на непересекающиеся циклы, то для любого выбранно- выбранного цикла C(S) e P среди кратчайших чередующихся циклов, содер- содержащих некоторую пару тонких ребер из R(S), найдется хотя бы один увеличивающий. Заметим, что доказательство данной гипотезы1 докажет существо- существование полиномиально-временного алгоритма для задачи поиска га- гамильтонова цикла. Автор доказал, что данная гипотеза неверна. 124
Контрольные вопросы Возможны также некоторые другие подходы к применению полу- полученной модели. Напомним читателю, что для решения подобных задач существу- существует определенный материальный стимул: в случае нахождения эф- эффективного метода решения для любой NP-полной задачи, а задача ВЫПОЛНИМОСТЬ и задача поиска гамильтонова цикла являются NP-полными задачами, американским математическим институ- институтом назначена награда в 1 миллион долларов (http://www.claymath.org/ prize_problems/). Контрольные вопросы 1. Что такое высказывание? 2. Как образуются сложные высказывания? 3. Какие логические связки вы знаете? 4. Как определяются булевы функции? 5. Сколько существует булевых функций п переменных? 6. Какой вид имеет таблица истинности импликации? Эквивалентности? 7. В чем состоит свойство коммутативности булевых функций? 8. Как формулируется свойство ассоциативности булевых функций? 9. Как формулируются законы де Моргана? 10. Какие основные классы булевых функций вы знаете? 11. Как формулируется теорема Поста о функциональной полноте? 12. Какие функционально полные системы булевых функций вы знаете? 13. Что такое дизъюнктивная нормальная форма (ДНФ)? 14. Что такое конституента единицы булевой функции? 15. Как записать совершенную ДНФ булевой функции по ее таблице истин- истинности? 16. Что такое конъюнктивная нормальная форма (КНФ)? 17. Как записать совершенную КНФ булевой функции по ее таблице истин- истинности? 18. Какие способы задания булевых функций вы знаете? 19. Как формулируется задача ВЫПОЛНИМОСТЬ? 20. Что такое предикат? 21. Какие кванторы вы знаете? 125
Глава 4. Элементы математической логики Упражнения В следующих задачах определить, является ли функционально полной заданная система функций. 1. х, —»х2, Xj —> х2 лх3. 2. х, vx2, л:, ©jc2 лх3. З.х,~х2,х, v(x2©x3). 4. х, л jc2, (Xj 1 х2) © х3. 5.x, vx2, Xj лх2 -> х3. 6. х, © х2, (х( v х2) л х3. Построить совершенные ДНФ и КНФ следующих функций: 7. Дх, ,х2 ,х3 ,х4) = @111101111011110). 8./(х1,х2,х3,х4) = A101111001111011). 9. Дх, ,х2 ,х3 ,х4) = @001101111011000). 10./(xi,x2,jc3,x4) = @111111011101000). 11. Дх, ,х2 ,х3 ,х4) = A000111011100111). Построить таблицы истинности следующих функций: 12. f(x,y,Z) = (XAy)v(XAZ)v(yAZ)- \3. f(x,y,Z) = (X Ay)v(x AZ)v(y AZ). Решить следующие задачи: 18. Пусть предикат Р(х) обозначает «х — простое число», а преди- предикат Е(х) обозначает «х — четное число». Перевести на русский язык следующую запись: Зх[?(х) л Р(х)] а Зх{[?(х) л Ах)] л Зу[х Фу а Е(у) л Р(у)]}. 19. Пусть предикат Р(х) обозначает «х — простое число», а преди- предикат Л(х, у) обозначает «х делится на у». Перевести на русский язык следующую запись: Ух\/у[Р(х) а Р(у) а Д(х, у) -> х = у\. 126
Литература Литература [4.1] Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычисли- вычислительных алгоритмов. М.: Мир, 1979. [4.2] BoolG. An investigation of the Laws of Thought, on which are Founded the Mathematics Theories of Logic and Probabilities. New York: Dover, 1958. [4.3] Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые за- задачи. М.: Мир, 1982. [4.4] ГжегорчикЛ. Популярная логика. М.: Наука, 1979. [4.5] КалужнинЛ.А. Что такое математическая логика. М.: Наука, 1964. [4.6] Колмогоров А.Н., Драгалин А.Г. Введение в математическую логику. М.: МГУ, 1982. [4.7] Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. М.: Энергоатомиздат, 1988. [4.8] Линдон Р. Заметки по логике. М.: Мир, 1968. [4.9] Новиков П.С. Элементы математической логики. М.: Наука, 1973. [4.10] ПападимитриуХ., Стайглиц К. Комбинаторная оптимизация (Алго- (Алгоритмы и сложность). М.: Мир, 1985. [4.11] Plotnikov A.D. A Logical Model of HCP // International Journal of Mathematics and Mathematical Sciences. Vol. 26, issue 11, 679-684, 2001. [4.12] Поспелов Д.А. Логические методы анализа и синтеза схем. М.: Энер- Энергия, 1974. [4.13] Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы (теория и практика). М.: Мир, 1980. [4.14] Яблонский СВ. и др. Функции алгебры логики и классы Поста. М.: Наука, 1966. [4.15] D.B. West. Introduction to Graph Theory. Prentice Hall, Inc., Upper Saddle River, NJ, 1996. 127
Глава 5 Минимизация булевых функций 5.1. Задача минимизации булевых функций В общем случае существует несколько способов записи одной и той же булевой функции. Например, пусть булева функция задана следующей таблицей истинности. *. 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Л*р*2>*з) 0 1 1 1 1 1 1 1 Совершенная ДНФ заданной функции имеет вид х2,х3) = ххх2х3 vx,x2x3 vx,x2x3 v v*j х2 х3 v х1 х2 х3 v х{ х2 х3 v Xj х2 х3. С другой стороны, совершенная КНФ имеет вид /(х1,х2,х3) = х1 vx2 vx3. Как видно из приведенного примера, запись заданной функции в виде совершенной ДНФ выглядит более сложно, чем запись этой же функции в виде совершенной КНФ. Здесь понятие более сложно не является точным. Чтобы определить понятие сложности записи буле- булевой функции, необходимо определить критерий такой сложности. Представляется очевидным, что сложность записи булевой функ- функции можно оценивать числом элементарных операций, используемых в такой записи и образующих функционально полную систему буле- 128
5.1. Задача минимизации булевых функций вых функций. Так, для записи вышеуказанной булевой функции в виде совершенной ДНФ было использовано 9 операций отрицания, 14 опе- операций конъюнкции и 6 операций дизъюнкции, то есть всего использо- использовано 29 элементарных булевых функций. С другой стороны, для записи этой же функции в виде совершенной КНФ использовано только две операции дизъюнкции. Очевидно также, что число использованных элементарных опера- операций в записи булевых функций зависит от примененных в ней эле- элементарных операций. Так, запись булевой функции/, (х, ,jc2,jc3) име- имеет две формы: В первом случае использовано три операции сложения по моду- модулю, а во втором — шесть операций отрицания, восемь операций конъюнкции и три операции дизъюнкции. Поэтому, говоря о про- простоте представления булевой функции, указывают также используе- используемую функционально полную систему булевых функций, или базис. Форму записи булевой функции, в которой использовано наимень- наименьшее число элементарных операций по сравнению с другими формами записи этой же функции, называют абсолютно минимальной (в приня- принятом базисе). Задачу поиска наиболее простой записи булевой функции называ- называют задачей минимизации. Такая задача возникает в ряде приложений. В частности, при проектировании устройств автоматики или вычис- вычислительных устройств их работа может быть описана некоторой буле- булевой функцией или системой таких функций. Каждой элементарной функции в устройствах соответствует некоторый физический элемент (ячейка), реализующий эту функцию. Следовательно, представлению булевой функции в минимальной форме соответствует более простое устройство автоматики или вычислительной техники, чем устройст- устройство, реализующее не минимальную булеву функцию. Состав устройства, реализующего заданную булеву функцию, обычно представляют как схему, определенным образом соединяю- соединяющую ячейки устройства. Пусть, например, ячейки, реализующие бу- булеву функцию конъюнкции (AND) и отрицания (NOT), изображены на рис. 5.1, а и б соответственно. Ячейка, реализующая функцию дизъюнкции (OR), может, как пра- правило, иметь к входов, где к > 2 (рис. 5.2). 129
Глава 5. Минимизация булевых функций В этом случае устройство, реализующее булеву функцию /2(х, ,х2,х3) = (х]х2 vx]x2)x3 в базисе NOT, AND и OR, будет иметь вид, представленный на рис. 5.3. Заметим, что в реальном устройстве могут быть также другие эле- элементы, уравнивающие задержки сигналов, представляющих булевы переменные, или усиливающие их. Приведенный рисунок показыва- показывает, что булевой функции в минимальной форме соответствует более простое устройство и, следовательно, более дешевое, более надежное и обладающее большим быстродействием. AND AND а б Рис. 5.1. Логические ячейки AND и NOT OR =ДС, VX2V...VXA Рис. 5.2. Логическая ячейка OR X, *2 '—> NOT Хх> AND t NOT v AND xxx-. > f OR f AND Рис. 5.3. Логическая схема устройства 130
5.2. Постановка задачи минимизации в классе ДНФ 5.2. Постановка задачи минимизации в классе ДНФ Построение абсолютно минимальной формы булевой функции в любом базисе является чрезвычайно сложной задачей. Такая форма представления функции предполагает использование скобок в запи- записи функции. Например, удаление скобок в представлении булевой функции /2 (х, ,х2 ,х3) = (х, х2 v х, х2 )х3 из предыдущего раздела при- приведет к увеличению числа элементарных операций для ее записи. С. Абхъянкар1 разработал алгоритм нахождения абсолютно мини- минимальной формы булевой функции в базисе NOT, AND и OR, который оказался совершенно неприемлемым уже при небольшом числе пере- переменных. Так, число операций т, которые необходимо выполнить для получения такой формы для булевой функции четырех переменных, оценивается неравенством 2257</я<265536. Следствием указанных обстоятельств является снижение требова- требований к числу элементарных операций, требуемых для записи любой булевой функции. Постановку задачи упрощения булевой функции ограничивают специальными формами ее представления. Наиболее распространенной формой представления булевой функ- функции является дизъюнктивная нормальная форма. Поэтому задачу уп- упрощения булевых функций обычно формулируют в классе ДНФ. Пусть имеется ДНФ булевой функции f(xl ,...,хл): Дх,,...,^)^ v^v-v^, E.1) где Ui (/ = 1,2, ..., s) — элементарная конъюнкция. Число s называют длиной ДНФ. ДНФ булевой функции /(х, ,...,х„) называют кратчайшей, если она содержит наименьшее число s элементарных конъюнкций по сравне- сравнению с другими ДНФ этой же функции. Рассмотрим некоторую элементарную конъюнкцию Число г переменных в конъюнкции ?/называют ее рангом. Abhyankar S. Absolute minimal expression of Boolean functions, IRE Transaction on Electronic Computers, vol. EC-8, 1959, N 1. 131
Глава 5. Минимизация булевых функций ДНФ, представленную соотношением E.1), можно охарактеризо- охарактеризовать также числом которое назовем суммарным рангом этой ДНФ. ДНФ булевой функции f(x] ,...,хя) называют минимальной, если ей соответствует наименьший суммарный ранг R по сравнению с други- другими ДНФ этой же функции. Таким образом, в классе ДНФ обычно формулируют одну из сле- следующих задач: найти кратчайшую (минимальную) ДНФ заданной функции/Ц ,...,*„). Показано, что, если число переменных булевой функции /(х, ,...,хл) не превышает четырех, то есть п < 4, минимальная и кратчайшая фор- формы такой функции совпадают. Однако при п > 5 существуют функции, у которых минимальная и кратчайшая ДНФ могут быть различными. Иногда также определяют задачу минимизации булевых функций в классе конъюнктивных нормальных форм (КНФ). Так как все методы минимизации булевых функций, разработанные для дизъюнктивных нормальных форм, достаточно легко переносимы на конъюнктивные нормальные формы, то обычно ограничиваются рассмотрением мето- методов минимизации в классе ДНФ. В основном эти методы в явной или неявной форме основаны на выполнении двух следующих операций. Первая из них называется операцией склеивания A, E.2) где А есть некоторая элементарная конъюнкция. Так как х vx = 1 и 1 лА = А, то легко убедиться в справедливости соотношения E.2): хА v хА = (х v х)А = А. В этом случае говорят, что конъюнкции хА и хА склеиваются по переменной х. Например, х, х2 х3 х4 v х, х2 х3 х4 = х2 х3 х4. Здесь А = х2 х3 х4 и две заданные конъюнкции были склеены по пе- переменной х,, в одной из которых эта переменная без отрицания, а в дру- другой — с отрицанием. 132
5.3. Сокращенная ДНФ Вторая из операций называется операцией поглощения AvAB = A, E.3) где Аи В — некоторые элементарные конъюнкции. Так как \чВ=\и\лА = А, то нетрудно убедиться также в спра- справедливости соотношения E.3): AvAB = A(\ v B)=A. Например, Здесь А = х х2, В = х3 х4. 5.3. Сокращенная ДНФ Булева функция / (дс, ,х2 ,...,jcn) называется импликантой функции /(х, ,х2 ,...,хя), если функция/ равна нулю на тех же наборах, на кото- которых равна нулю функция/ Рассмотрим таблицу истинности некоторых функций. *| 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 х, 0 1 0 1 0 1 0 1 / 0 1 1 0 1 1 1 0 А 0 0 1 0 1 0 1 0 /, 0 1 0 0 1 1 1 0 Здесь, по определению, каждая из функций/,/ является импли- кантой функции/ так как на всех наборах, на которых функция/рав- функция/равна нулю, каждая из функций/ и/ также равна нулю. Если/ есть импликанта функции/, то этот факт записывают так: 133
Глава 5. Минимизация булевых функций Ясно, что импликанта/, равна единице не на всех наборах, на кото- которых равна единице функция/. В том случае, когда импликанта/, равна единице на наборе, на котором единице равна и функция/, то говорят, что импликанта/, покрывает единицу функции/. В общем случае им- импликанта/, покрывает несколько единиц функции/. Пусть имеется элементарная конъюнкция U = х°1 х22 •••х°г. Соб- Собственной частью конъюнкции (/называют конъюнкцию, полученную из (/, удалением из U некоторых переменных. Например, если U = х{ х2х3, то собственными частями (/являют- (/являются конъюнкции (/, = х] х2, U2 = х] х3, U3 = х2х3, Ut = х,, U5 = х2 и (/6=х3. Элементарная конъюнкция U = х°х х22 •••хгСг называется простой импликантой булевой функции f(x{ ,х2,...,хл), если (/является импли- кантой функции/и никакая собственная часть (/не является импли- импликантой/. Например, конъюнкции(/, = х, х2х3 и(/2 = хх х2 являютсяимпли- кантами функции/(см. таблицу выше), но только конъюнкция U2 яв- является простой, так как собственная часть конъюнкции (/,, а именно конъюнкция U3 =х2х3, также является импликантой функции/ Заметим, что конституента единицы в совершенной ДНФ функ- функции/всегда является ее импликантой. Чем меньше переменных со- содержит импликанта функции/по сравнению с конституентой едини- единицы, тем больше единиц функции она покрывает. Имеет место следующее утверждение. Теорема 5.3.1. Всякая булева функция f(x{ ,х2,...,хя) может быть представлена как дизъюнкция всех ее простых импликант. В самом деле, по определению, каждая импликанта равна нулю на тех же наборах, на которых функция f(xx ,x2 ,...,хп) равна нулю. По- Поэтому и дизъюнкция всех простых импликант функции будет равна нулю на этих же наборах. Совершенная ДНФ функции /(х,, х2,..., хп) есть дизъюнкция всех конституент единицы этой функции. Так как имеется дизъюнкция всех простых импликант функции / то в эту дизъюнкцию входит либо соответствующая конституента единицы, если она является простой импликантой, либо ее некоторая собственная часть, которая является таковой. Поэтому на всех наборах, на которых функция/ равна единице, единице будет равна и дизъюнкция ее простых им- импликант. Q.E.D. 134
5.4. Тупиковые ДНФ Дизъюнкция всех простых импликант функции / называется со- сокращенной ДНФ этой функции. Название «сокращенная» появилось потому, что простые импли- канты являются наиболее короткими элементарными конъюнкция- конъюнкциями и их дизъюнкция приводит к более простому представлению неко- некоторых функций. Однако позднее было определено, что сокращенная ДНФ может содержать 1с(п) простых импликант, где Эта величина превышает число 2" конституент единицы булевой функции, которые используются для представления функции в виде совершенной ДНФ. Рассмотрим далее различные способы нахождения сокращенной ДНФ булевой нулевой функции. 5.4. Тупиковые ДНФ Пусть булева функция задана совершенной ДНФ: / = х, х2 х3 х4 v х, х2 х3 х4 v х, х2 х3 х4 v х{ х2 х3 х4 v vxI х2 х3 х4 v Xj х2 х3 х4 v х, х2 х3 х4 v Xj х2 х3 х4. Устанавливая значения переменных на различных наборах, можно убедиться, что следующая дизъюнкция простых импликант покрыва- покрывает все единицы заданной булевой функции: / = х2 х4 v ^ х2 х3 v х, х3 х4 v х, х2 х3 v х, х3 х4. E.4) Если в этой дизъюнкции удалить импликанту х^, то дизъюнкция оставшихся импликант снова будет покрывать все единицы функции/ Однако удаление любой другой импликанты из выражения E.4) приве- приведет к получению дизъюнкции, не покрывающей все единицы функции/ Дизъюнкцию совокупности простых импликант функции /(х, ,...,х„) и такую, что удаление из нее любой импликанты приводит к отсутст- отсутствию покрытия дизъюнкцией оставшихся импликант всех единиц функции, называют тупиковой ДНФ функции /(х, ,...,хя). Важность понятия тупиковой ДНФ определяется следующим ут- утверждением. 135
Глава 5. Минимизация булевых функций Теорема 5.4.1. Любая минимальная ДНФ булевой функции f(x],..., хп) I является тупиковой ДНФ. Допустим, что это не верно. Во-первых, предположим, что минимальная ДНФ есть дизъюнкция некоторых элементарных конъюнкций, которые не являются просты- простыми импликантами функции /(х, ,...,х„). Если данное предположение верно, то каждая такая элементарная конъюнкция имеет собственную часть, которая является простой импликантой функции f(x],...,х„). За- Заменив в минимальной ДНФ каждую конъюнкцию простой импли- импликантой, уменьшим ранг каждого члена этой ДНФ и, следовательно, уменьшим суммарный ранг минимальной ДНФ. Но это противоре- противоречит определению минимальной ДНФ функции /(х,,...,хя). Таким об- образом, доказано, что минимальная ДНФ есть дизъюнкция простых импликант функции/(jCj ,...,х„). Во-вторых, предположим, что в минимальной ДНФ имеются про- простые импликанты, при удалении которых оставшиеся простые импли- канты результирующей ДНФ снова будут покрывать единицы функ- функции /(х, ,...,хя). Но такая ДНФ имеет меньший суммарный ранг, чем минимальная ДНФ. Снова получили противоречие. Таким образом, теорема 5.4.1 доказана. Q.E.D. Заметим, что не всякая тупиковая ДНФ является минимальной. Например, рассмотрим две ДНФ: х, х2 v х} х3 v х, х2 v х, х3 Нетрудно убедиться в том, что это тупиковые ДНФ одной и той же функции, но только последняя является минимальной ДНФ. Число тупиковых ДНФ t(n) булевой функции /(*,,..., хп) определя- определяется соотношением Цп)<^С =B2")с, E.5) /=0 где с —> log 3/2 при п —> «\ Теорема 5.4.1 определяет процедуру нахождения минимальной ДНФ произвольной булевой функции. Процесс нахождения мини- 136
5.5. Построение сокращенной ДНФ мальной или кратчайшей ДНФ булевой функции f(x],...,хп) называ- называют процессом минимизации или просто минимизацией этой функции. Общая схема минимизации для всех методов одинаковая и вклю- включает следующие этапы (рис. 5.4): • построение сокращенной ДНФ; • нахождение тупиковых ДНФ; • нахождение минимальной (кратчайшей) ДНФ. Исходная функция ± Сокращенная ДНФ Тупиковые ДНФ Рис. 5.4. Схема минимизации Соотношение E.5) указывает на наиболее сложный этап миними- минимизации — выбор минимальной ДНФ среди большого числа тупико- тупиковых ДНФ. 5.5. Построение сокращенной ДНФ Как указывалось в разделе 5.3, все методы построения сокращенной ДНФ основаны на выполнении двух операций: склеивания и поглоще- поглощения. Различие в методах состоит в способе исходного представления булевой функции и организации нахождения всех простых импликант булевой функции/(х, ,х2,...,х„). 5.5.1. Геометрический метод Данный метод основан на использовании единичного «-мерного куба для представления булевой функции п переменных. Практиче- Практически его можно применять при значениях п < 4. Метод используется 137
Глава 5. Минимизация булевых функций в основном при теоретических исследо- *2 А ваниях, когда геометрические представ- 11 ления булевой функции в трехмерном пространстве распространяются, как это принято в математике, на произвольное «-мерное пространство. Если п - 2, то булеву функцию/^,, х2) представляют на плоскости в прямо- прямоугольной системе координат. В этом слу- случае каждому набору булевых перемен- Рис. 5.5. Единичный квадрат ных ставится в соответствие вершина единичного квадрата (рис. 5.5). Наборы, на которых функция равна единице, представлены как темные вершины. Импликанте может со- соответствовать вершина или ребро единичного квадрата. Если импли- канта простая, то изображающий ее геометрический объект не может быть составной частью более обширного объекта. Например, на рис. 5.5 представлена функция, две простые импли- канты которой — каждая соответствует выделенному ребру квадра- квадрата — образуют сокращенную ДНФ: f(xl,x2)=xlvx2. Здесь простая импликанта х] представлена ребром, соединяющим вершины 10 и 11, которые изображают конституенты х] х2 и ххх2 соот- соответственно. При склеивании эти конституенты как раз и порождают простую импликантух,. Аналогично простая импликанта х2 представлена ребром, соеди- соединяющим вершины 01 и 11. Соответствующие им конституенты х1 х2 и х,х2 при склеивании порождают простую импликантуд:2. Если п = 3, то булеву функцию/^,, х2, х3) представляют в трехмер- трехмерном пространстве в виде вершин единичного куба. В этом случае им- импликанте может соответствовать вершина, ребро или грань единич- единичного куба. Для функции, представленной на рис. 5.6, выделенные ребра соответствуют простым импликантам функции. Имеем сокра- сокращенную ДНФ: f(x],x2,x3) = x]x2 vx,x3 vx2x3 vx,x2 vx,x3 vx2x3. Как и в случае двух переменных, в рассматриваемом примере две вершины, соответствующие двум конституентам, которые склеива- 138
5.5. Построение сокращенной ДНФ 101. 100 ¦^3 к / 000, ,001 011 ? 010 / ПО Рис. 5.6. Единичный куб ются по одной переменной, образуют простую импликанту, представленную ребром. Так, например, вершины 010 и 011 изображают конституенты хх х2 Зс3 и х] х2 х3, которые при склеивании по пе- переменной х3 образуют простую импли- импликанту JCj x2, представленную на рис. 5.6 утолщенным ребром. Очевидно, что чем меньше перемен- переменных содержит простая импликанта, тем обширнее геометрический объект, кото- который ей соответствует. В случае функции трех переменных, конституенте едини- единицы соответствует вершина квадрата, конъюнкции двух литералов — ребро и одному литералу — грань единичного квадрата. Так, напри- например, если некоторая функция трех переменных равна единице на на- наборах 001, 011, 101, 111, то в процессе последовательного склеивания соответствующих конъюнкций будет получена простая импликан- импликанта х3, которой соответствует верхняя грань единичного трехмерного куба, изображенного на рис. 5.6. Практическое использование представления функции на вер- вершинах единичного «-мерного куба при п > 4 становится нецелесо- нецелесообразным. 5.5.2. Метод Квайна-Мак-Класки Метод Квайна-Мак-Класки организует нахождение простых им- пликант булевой функции следующим образом. Каждая конституента булевой функции f(x] ,x2,...,хп) представля- представляется в виде двоичного набора длины п, на котором функция равна единице. Все такие наборы группируются в зависимости от числа единич- единичных компонент. Так, все наборы, содержащие к единиц, образуют одну группу. Наборы располагаются в порядке возрастания числа к: k = Q,k= 1,*=2, ...Д = А2. Например, пусть булева функция равна единице на наборах 0000, 0110,0111, 1000, 1100, 1101, 1110, 1111. Тогда разбиение на группы имеет вид, представленный на рисунке, приведенном ниже. 139
Глава 5. Минимизация булевых функций 0000 1000 оно 1100 0111 1101 1110 1 -я группа 2-я группа 3-я группа 4-я группа 1111 5-я группа Очевидно, что склеиваться могут только те конституенты, кото- которые принадлежат соседним группам. В результате склеивания полу- получают конъюнкцию, в которой отсутствует одна из переменных. Та- Такую конъюнкцию представляют также двоичным набором длины л, а на месте каждой отсутствующей переменной ставят прочерк или крестик. Например, в результате склеивания конституент, представ- представленных наборами 0000 и 1000, будет получена конъюнкция -000, в которой вместо переменной х] проставлен прочерк. Иногда вместо прочерка ставят крестик, например хООО. 0000* 1000* оно* 1100* 0111* 1101* 1110* 111* хООО 1x00 ОПх х110 11x0 ПОх xlll 11x1 lllx 1 -я группа 2-я группа 3-я группа 4-я группа Конъюнкции, которые склеиваются, помечаются, например, звез- звездочкой. Любая конъюнкция из соседних групп, помечена она звез- звездочкой или нет, может участвовать в склеивании. После всех склеиваний полученные конъюнкции также разбива- разбиваются на группы по числу оставшихся в них единиц (см. приведенный рисунок). 140
5.5. Построение сокращенной ДНФ На следующем этапе склеиванию подлежат конъюнкции, кото- которые расположены в соседних группах и, кроме того, имеют символ х в одной и той же позиции. В результате, если найдутся склеиваемые конъюнкции текущего этапа, будут получены импликанты функции с меньшим числом переменных, также разбитые на группы. Конъюнкции новых групп снова подвергаются склеиванию. Если в результате склеивания получают конъюнкцию, которая ранее уже была получена, то результат такого склеивания опускают. Так продол- продолжается до тех пор, пока не будут найдены все склеиваемые конъюнк- конъюнкции. Простыми будут все непомеченные импликанты, которые были получены на всех этапах склеивания. хООО 1x00 011х* xllO* 11x0* 11 Ох* xllx Пхх 1-я группа xlll* 11x1* lllx* В рассматриваемом примере продолжим склеивания. Заметим, что результат склеивания конъюнкций ПОх и lllx, а также 11x0 и 11x1 один и тот же — это конъюнкция 11хх, которая записана один раз. Ана- Аналогично получаем две конъюнкции xl 1х, записываемые один раз. Полученные конъюнкции далее не склеиваются. Имеем непоме- непомеченные конъюнкции хООО, 1x00, xllx, llxx. Следовательно, сокра- сокращенная ДНФ заданной функции будет иметь вид Рассмотрим еще один пример. Пример. Построить сокращенную ДНФ булевой функции, задан- заданной строкой истинности: f(xA) = @101010110000101), где х4 — сокращенная запись последовательности х,, х2, х3, х4. 141
Глава 5. Минимизация булевых функций Проводим процесс поиска простых импликант: 0001* 1000 ООН* 0101* 0111* 1101* 1111* 0x01* 00x1* 01x1* х101* 0x11* xlll* llxl* Oxxl xlxl Получили сокращенную ДНФ: V V ^ —~ V V V V \/VV \/VV 1 5 3 ' 4 ' *^i'/V234 >vi"^'4 v^4* 5.5.3. Метод Блейка Метод Блейка позволяет строить сокращенную ДНФ булевой функции/(*,, х2, ...9хп), если она задана произвольной ДНФ. В ос- основе метода положена операция обобщенного склеивания: AxvBx = AxvBxvAB. В самом деле, имеем Ах vBx = Ax(l wB) vBx(\ v A) = Ах v Вх v АВ. После применения операции обобщенного склеивания ко всем возможным членам заданной ДНФ производят поглощения. В ре- результате получают сокращенную ДНФ. В основе этого метода лежит следующее утверждение. Теорема 5.5.1 (Блейк). В результате выполнения конечного числа операций обобщенного склеивания и поглощения к произвольной ДНФ булевой функции f(xv x2, ..., хп) будут получены все ее простые им- пликанты, то есть сокращенная ДНФ. Рассмотрим применение метода Блейка на примере. 142
5.6. Поиск минимальных ДНФ Пример. Пусть булева функция задана в дизъюнктивной нормаль- нормальной форме: vx2x3. Выполняем операцию обобщенного склеивания: х2х3 vjc2x3 = х2х3 vx2x3 vjc2, Следовательно, = х] х2 х3 v х2 х3 v х] После выполнения всех склеиваний имеем окончательно flxl,x2,x3)=x2vxlxy 5.6. Поиск минимальных ДНФ После процедуры построения сокращенной ДНФ осуществляют построение так называемой импликантной матрицы. Импликантная матрица представляет собой таблицу, в которой ка- каждой строке соответствует простая импликанта, а каждому столбцу — набор значений переменных, на которых булева функция равна еди- единице. Если простая импликанта покрывает некоторую единицу функ- функции, то в соответствующем столбце ставится пометка — крестик х. Пусть, например, булева функция равна единице на наборах 0000, 0110,0111,1000,1100,1101,1110,1111. В предыдущей части была най- найдена сокращенная ДНФ: В этом случае импликантная матрица имеет вид Х2Х1Х4 х2х} х,х2 0000 X оно X 0111 X 1000 X X 1 100 X X 1 101 X 1110 X X 1 И X X 1 143
Глава 5. Минимизация булевых функций Чтобы получить минимальную (тупиковую) ДНФ, необходимо вы- выбрать такую совокупность простых импликант, которая покрывает все единицы булевой функции. Это означает, что такая совокупность будет иметь хотя бы один крестик в каждом столбце импликантной матрицы. Легко понять, что в любую тупиковую ДНФ обязательно войдут те простые импликанты, которые содержат единственную пометку в не- некотором столбце. В нашем случае это первая, третья и четвертая им- импликанты — каждая из них содержит единственную пометку, а в сово- совокупности эти импликанты покрывают все единицы булевой функции. Единственная тупиковая ДНФ является, очевидно, также и мини- минимальной ДНФ: К сожалению, поиск минимальной (и кратчайшей) ДНФ не всегда такой простой, а является очень трудной задачей, которая эффектив- эффективно не решена практически до настоящего времени. Задача поиска ми- минимальной ДНФ — это задача о покрытии, рассмотренная в разде- разделе 1.13, а импликантная матрица есть матрица покрытий. Один из методов нахождения минимальной и кратчайшей ДНФ был предложен С. Петриком. Сущность этого метода состоит в том, что каждой простой импликанте булевой функции/^,, х,, ..., хп) ста- ставится в соответствие новая булева переменная у, которая равна едини- единице, если эта импликанта входит в тупиковую ДНФ. Затем каждому столбцу импликантной матрицы ставится в соответствие элементарная дизъюнкция тех новых переменных, которые имеют пометки в рас- рассматриваемом столбце. Далее записывается конъюнкция построен- построенных элементарных дизъюнкций. Пусть имеется импликантная матрица следующего вида: У, У2 У, У* Уь У, у7 х]Х,х4 V Y V х2х3х4 х{х2х} х2х3х4 х{х4 0010 X X ООП X X 0101 X X 0111 X X 1000 X 1010 X X 1100 X X 1101 X X X 1110 X 144
5.6. Поиск минимальных ДНФ В этой таблице каждой простой импликанте поставлена в соответ- соответствие булева переменная у,. (/ = 1,2,...,5). Запишем конъюнкцию элементарных дизъюнкций, построенных по вышеуказанному правилу: Т= (у, v ув){у1 v у2)(у3 v у4)(у2 v у3)(у7)(ув v y7)(y5 v у7)(уА v ys)(y7). Теперь, чтобы найти все тупиковые ДНФ булевой функции, пред- представленной импликантной матрицей, необходимо раскрыть скобки и, выполнив все возможные упрощения (поглощения), получить ДНФ, каждый член которой определяет тупиковую ДНФ: Т = У,УзУаУп ^УхУгУ^Уп ^УгУ.УьУп ^УХУЪУЪУ7 vy2y3ysy6y7. Таким образом, имеем пять тупиковых ДНФ. Например, тупико- тупиковая ДНФ определяется конъюнкцией ух у3у4у7 в построенной ДНФ. Запишем ее в явном виде: f(xl,x2,x3,xA) = xlx2x3 vx]x2xA vx2x3*4 v*,*4- Очевидно, что эта тупиковая ДНФ является минимальной и крат- кратчайшей ДНФ заданной булевой функции. Аналогично можно полу- получить другие тупиковые ДНФ этой функции. Рассмотренный пример показывает, что метод Петрика, хотя и по- позволяет получать все тупиковые ДНФ, практически применим при относительно небольшом числе переменных. Импликантную матрицу не строят, если сокращенная ДНФ не со- содержит отрицаний булевых переменных, так как в этом случае сама сокращенная ДНФ является единственной минимальной ДНФ за- заданной булевой функции. Вышеуказанное базируется на следующих утверждениях. Теорема 5.6.1. Если сокращенная ДНФ булевой функции J[xx, х2, ..., хп) не содержит отрицаний переменных, то она является единственной минимальной формой этой функции. Эта теорема есть следствие теоремы Блейка (теорема 5.5.1), так как, если предположить, что в сокращенной ДНФ, не имеющей отри- отрицаний, некоторая из простых импликант лишняя, после ее удаления из оставшейся ДНФ не может быть получена удаленная импликанта операцией обобщенного склеивания из-за отсутствия отрицаний. Теорема 5.6.2. Сокращенная ДНФ монотонной булевой функции /(х,, jc2, ..., хп) не содержит отрицаний переменных. 145
Глава 5. Минимизация булевых функций Контрольные вопросы 1. Как определяется сложность ДНФ булевой функции? 2. Что такое кратчайшая ДНФ? 3. Что такое минимальная ДНФ? 4. Что такое операция склеивания? 5. Что такое операция поглощения? 6. Что такое импликанта булевой функции? 7. Что такое простая импликанта булевой функции? 8. Что такое сокращенная ДНФ? 9. Что такое тупиковая ДНФ? 10. Какие существуют основные этапы минимизации булевой функции в классе ДНФ? 11. В чем сущность геометрического метода построения сокращенной ДНФ? 12. Что такое единичный л-мерный куб? 13. Что такое импликантная матрица? 14. Что такое метод Петрика? Упражнения Построить сокращенную дизъюнктивную нормальную форму функции, заданной таблицей истинности, и найти ее минималь- минимальную ДНФ: 1. X У Z Ax,y,z) 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 1 1 1 1 2. X У Z A*y,z) 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 146
Литература 3. X У Z Лх,У,1) 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 Найти минимальные (кратчайшие) ДНФ следующих булевых функций: 4. Дх4) = A010110011110110). 5. /(х4) = A1100110001001 И). 6. Дх4) = @110001101110011) 7. Дх4) = @011100110111011). 8./Eс4) = @1101И101110011). Литература [5.1] Вавилов Е.Н., Портной Г.П. Синтез схем электронных цифровых ма- машин. М.: Советское радио, 1963. [5.2] Миллер Р. Теория переключательных схем. Т. 1. М.: Наука, 1970. [5.3] ПаперновА.Л. Логические основы ЦВТ. М.: Советское радио, 1972. [5.4] Поспелов ДА. Логические методы анализа и синтеза схем. М.: Энер- Энергия, 1974. [5.5] Фистер М. Логическое проектирование цифровых вычислительных машин. К.: Техника, 1964. [5.6] ШоломовЛ.Л. Основы теории дискретных логических и вычислитель- вычислительных устройств. М: Наука, 1980. [5.7] Яблонский СВ. и др. Функции алгебры логики и классы Поста. М.: Лаука, 1966. 147
Глава 6 Элементы комбинаторики 6.1. Предмет комбинаторики Комбинаторика (комбинаторный анализ, комбинаторная матема- математика) — это ветвь математики, изучающая способы построения под- подмножеств некоторого конечного множества, причем таких, которые удовлетворяют наложенным ограничениям. Упомянутые подмножества часто называют комбинаторными кон- конфигурациями или выборками. Комбинаторика изучает следующие виды задач: 1. Подсчет числа комбинаторных конфигураций. 2. Нахождение условий существования комбинаторной конфигу- конфигурации. 3. Разработка алгоритмов построения комбинаторных конфигу- конфигураций. 4. Решение оптимизационных задач (экстремальных комбинатор- комбинаторных задач). Проблема подсчета числа комбинаторных конфигураций часто используется в приложениях. Такие задачи являются предметом изу- изучения перечислительной комбинаторики. Задачи такого типа широко используются в теории сложностей вычислений, при решении задач теории вероятностей, теории кодирования, в математической логи- логике и в других научных дисциплинах. Каждая из таких задач требует ответа на вопрос: сколько имеется заданных комбинаторных конфи- конфигураций? Задачи определения существования комбинаторных конфигура- конфигураций являются одними из наиболее трудных. Такие задачи возникают в основном для внутренних нужд комбинаторики, хотя имеют также и прикладное значение. В каждой такой задаче необходимо ответить на вопрос: может ли существовать комбинаторная конфигурация, обладающая заданными свойствами? Задачи разработки алгоритмов, или способов построения комби- комбинаторных конфигураций, являются предметом изучения многих при- прикладных дисциплин. Так, исследуются и разрабатываются различные методы генерации комбинаторных конфигураций: перестановок, раз- 148
6.2. Понятие выборки биений множеств и чисел, подмножеств заданного объема и тому подобное. Решение оптимизационных задач имеет чрезвычайно широкий спектр приложений в различных областях науки и техники. В каждой экстремальной комбинаторной задаче требуется найти комбинатор- комбинаторную конфигурацию, которая обладает заданными свойствами и ха- характеризуется экстремальным значением (минимальным или макси- максимальным) некоторого параметра (объема, веса и тому подобное). Алгоритмические проблемы комбинаторики изучаются также во многих прикладных дисциплинах: теории графов, теории автоматов, теории кодирования и прочее. 6.2. Понятие выборки В комбинаторике принято говорить о множестве, указывая число его элементов. Например, если имеется множество Л = {я,, д2, ..., ап}, содержащее п элементов, то в этом случае говорят об «-множестве А. Итак, пусть имеется «-множество А. Напомним, что множество В называют подмножеством множества А и обозначают В с А, если все элементы множества /? являются также элементами множества А. Если множество С имеет несколько экземпляров одного и того же элемента, то такое множество называют мультимножеством. Выборкой называется всякое мультимножество, элементы которого выбираются из элементов множества/!, то есть такое множество, кото- которое, в общем случае, может содержать несколько экземпляров одного и того же элемента множества А. Число элементов г в выборке (такую вы- выборку называют также r-выборкой) определяют как ее объем. Иногда понятие выборки используется также для обозначения са- самого процесса отбора элементов подмножества из исходного множест- множества. Далее понятие выборки трактуется, в основном, только как мульти- подмножество. Выборку, в которой не учитывается порядок записи элементов, на- называют сочетанием. Выборку, в которой порядок записи элементов учитывается, называют перестановкой. Введенные выше понятия r-перестановки и r-сочетания и их ком- комбинации охватывают все возможные типы выборок. Поэтому нет не- необходимости вводить понятие размещения, которое иногда появляет- появляется в литературе. 149
Глава 6. Элементы комбинаторики 6.3. Основные правила комбинаторики Опыт решения комбинаторных задач позволяет сформулировать два основных правила, которые используются при их решении. Эти правила определяют наиболее мощные средства решения перечисли- перечислительных комбинаторных задач. 1. Правило суммы: Число способов, которыми можно выбрать элементы п-множество А и элементы т-множества В при условии, что А п В = 0, равно п + т. Задача 1. Лекции по физике посещают 20 студентов, а лекции по астроно- астрономии — 30. Сколько студентов посещают указанные лекции, если они происходят в одно и то же время ? Обозначим множество студентов, посещающих лекции по физи- физике, как множество А, а лекции по астрономии — как В. Так как А п В = 0, то по правилу суммы находим, что эти лекции посещают 20 + 30 = 50 студентов. 2. Правило произведения: Число способов выбора элементов множества А х В равно пх т. Задача 2. Пусть имеется 5 различных конвертов и 6 различных марок. Скольки- Сколькими способами можно отправить письмо в конверте с маркой ? Ответ: 5 х 6 = 30 способов. Задача 3. Из Винницы в Киев можно доехать тремя видами транс- транспорта (самолет, поезд, авто- автобус), а из Киева в Чернигов — четырьмя (самолет, поезд, ав- автобус, пароход). Сколькими способами можно осуществить путешествие по маршруту: Винница — Киев — Чернигов (рис. 6.1)? Ответ: 3 х 4= 12. самолет самолет В< автобус >г поезд автобус поезд пароход Рис. 6.1. Виды транспорта 150
6.4. Пересчет упорядоченных выборок 6.4. Пересчет упорядоченных выборок В дальнейшем полагаем, что все выборки имеют объем г и строятся из элементов исходного ^-множества А = {я,, я2, ..., ап). Рассмотрим, как применяются основные правила комбинаторики для подсчета числа наиболее часто используемых типов выборок. Заметим, что при решении перечислительных задач, то есть задач определения числа заданных комбинаторных объектов, исходную задачу обычно разби- разбивают на несколько более элементарных, которые могут решаться с по- помощью полученных далее формул. 6.4.1. Число упорядоченных выборок с повторениями Обозначим N(n,r) — число упорядоченных выборок с повторения- повторениями элементов «-множества А, где г — объем выборки. Черта над обо- обозначением числа выборок обозначает, что элементы исходного мно- множества Л могут повторяться. Задача 4. Пусть А = {а„ а2, а3, aj и объем выборки равен г- 2. Записать все упорядоченные выборки с повторениями. Имеем (я,, я,), (я„ я2), (д„ я3), (я,, я4), (я2, я,), (я2, а2), (я2, я3), (я2> а*)> (а39 я,), (д3, а2), (д3, я3)> (*з> а*)> (д4, я,), (аАУ а2), (л4, д3), (д4, д4). Теорема 6.4.1. 7V(A2,r) = A7r. Доказательство. Первый элемент выборки можно выбрать «-способами. Так как элементы повторяются, то и второй элемент выборки можно выбрать п способами и т. д. Таким образом, любой элемент выборки можно выбрать п способами. Тогда первых два элемента выборки можно вы- выбрать п х п = п2 способами, три первых ее элемента — пхпхп = п3 способами. Значит, все г элементов выборки можно выбрать пг спосо- способами. Теорема доказана. 151
Глава 6. Элементы комбинаторики Задача 5. Найти число булевых векторов длины т. Ясно, что всякий такой вектор есть упорядоченное множество, со- состоящее из т элементов 0 или 1, то есть вектор — это упорядоченная выборка с повторениями элементов. Имеем п = 2, г = т, и по формуле для упорядоченных выборок с повторениями получим NB,m) = 2т. Задача 6. Имеется десять различных монет. Сколькими способами можно раз- разложить эти монеты по двум карманам ? Каждой монете поставим в соответствие 1, если она положена в ле- левый карман, и 0 — если в правый. Тогда всякому распределению мо- монет по карманам будет соответствовать булевый вектор длины 10. По- Поэтому имеем п = 2, г = 10 и 7VB,1O) = 210 =1024. Отметим, что примененный метод решения задачи о монетах, со- состоящий в сведении решения к поиску числа булевых векторов или булевых матриц, удовлетворяющих некоторым ограничениям, часто используется в комбинаторике. 6.4.2. Число упорядоченных выборок без повторений Пусть N(n, r) — число упорядоченных выборок без повторений. I Теорема 6.4.2. f (и-/-)! Доказательство. Прежде всего напомним, что -..хл,0!= 1!, 1!= 1 и П\ = (П - 1)! X Л7. Начнем составлять искомые выборки. Итак, первый элемент выборки можно выбрать л-способами, вто- второй элемент — (п - 1) способами, третий элемент — (п - 2) способами и так далее, а последний r-й элемент — (п - г + 1) способами. Следо- Следовательно, имеем 152
6.5. Порождение перестановок N(n,r) = nx(n-l)x-• х(п- г +1) = пх(п- 1)х- • -х(п - г +1) х (п - г) х 1 п\ (п-г)х-х\ (п-г)\ Теорема доказана. В частном случае, если г = п, то N(n, п) = Рп = п\, то есть имеем чис- число перестановок из п элементов. Задача 7. Студент сдал два экзамена, получив за них различные положитель- положительные оценки. Сколько видов результативных оценок он мог получить? Ясно, что результат экзамена — одно из трех чисел: 3,4 или 5. Тогда результат сдачи экзаменов — это упорядоченная выборка без повторе- повторений. Имеем г = 2, п = 3, тогда 6. C-2)! Задача 8. 1. В группе 25 человек. Сколькими способами молено выстроить их в одну шеренгу? Ответ: 25! 2. Сколькими способами можно эту группу построить в одну шеренгу так, чтобы Иванов и Петров не стояли рядом? Имеем 25! способов построить всю группу, а когда Иванов и Пет- Петров рядом — 24!. Учитывая, что Иванов может стоять слева или справа от Петрова, получаем искомое решение: 25! - 2 х 24! Строго говоря, в этом примере мы несколько опередили события и использовали так называемый логический метод, или метод включе- включений и исключений. 6.5. Порождение перестановок В комбинаторных алгоритмах часто возникает необходимость по- порождать и исследовать все элементы некоторого класса комбинатор- комбинаторных объектов. Наибольшее распространение имеют такие объекты, 153
Глава 6. Элементы комбинаторики как перестановки, сочетания и разбиения. Они являются основой для построения других более сложных комбинаторных конфигураций. Рассмотрим проблему построения перестановок. Пусть требуется построить все п\ перестановок элементов некото- некоторого л-множестваЛ = {av ..., ап). Например, если Л = {1,2,3}, то это будут следующие множества: A,2,3); A,3,2); B,1,3); B,3,1); C,1,2); C,2,1). 6.5.1. Представление перестановок Какие существуют способы представления перестановок? Перестановку часто рассматривают как некоторую взаимно одно- однозначную функцию/: Х-> X. Известно, что любую функцию (одного аргумента) можно задать как бинарное отношение. Напомним, что бинарное отношение — это просто совокупность упорядоченных пар (двухэлементных упорядоченных множеств). Если бинарное отношение представляет функцию одного аргумента, то пер- первая компонента всякой упорядоченной пары определяет некоторое значение аргумента функции, а вторая компонента — соответствующее значение функции. Так, предыдущий пример определяет 3! = 6 бинарных отношений: {A,1), B,2), C,3)); (A,1), B,3), C,2)}; {A,2), B,1), C,3)); (A,2), B,3), C,1)}; {A,3), B,1), C,2)); (A,3), B,2), C,1)}. Эти же бинарные отношения более компактно записывают также в следующем виде: (X 2 3\Г1 2 3\A 2 3\ [l 2 3Д1 3 2Д2 1 1 2 3\(\ 2 3\fl 2 3 2 3 1Д3 1 2Д3 2 1 Наконец, для дальнейшего сокращения записи перестановок пер- первую строку предыдущего представления опускают (поскольку она одна и та же для всех перестановок из п элементов), и мы приходим к записи перестановки в виде упорядоченного множества, как это и было пред- представлено изначально. 154
6.5. Порождение перестановок Перестановку можно представить также графически с помощью п точек, каждой из которых поставлен в соответствие некоторый эле- элемент множества А Точки соединяют линиями, в которых указано на- направление (эти линии называют ориентированными ребрами или дуга- дугами). Полученное графическое изображение перестановки представ- представляет собой граф. Граф произвольной перестановки состоит из одной или нескольких не связанных между собой частей, каждая из которых составляет одно целое. При этом отдельная связная часть графа перестановки может состоять лишь из одной точки с «петлей», то есть дугой, которая выхо- выходит из этой точки и заканчивается в ней. Иначе отдельная связная часть графа перестановки называется циклом. Число дуг в цикле называют его длиной. Так, перестановка П, = A,2,3) состоит из трех отдельных точек с петлями, а перестановка П2 = B,3,1) —это цикл длины 3 (рис. 6.2). П, П2 Рис. 6.2. Примеры задания перестановок графами 6.5.2. Методы генерирования перестановок Все методы систематического порождения перестановок состоят из трех частей: выбор начальной конфигурации, трансформация по- полученного объекта в следующий и условие окончания, которое опре- определяет момент прекращения вычислений. Различают следующие основные методы генерирования всех пере- перестановок: 1) лексикографический порядок; 2) векторы инверсий; 3) вложенные циклы; 4) трансформация смежных элементов. 155
Глава 6. Элементы комбинаторики Лексикографический порядок Говорят, что последовательность перестановок на множестве A,2, ..., п) представлена в лексикографическом порядке, если она запи- записана в порядке возрастания получающихся чисел. Так, например, лек- лексикографическая последовательность перестановок из трех элемен- элементов имеет вид: 123, 132, 213, 231, 312, 321. В общем случае если а = (а,, а2,..., а„) ит = (т1,т2,...,ти) — переста- перестановки, то говорят, что а лексикографически меньше т, если и только если для некоторого к > 1 имеет место ау = т7 для всеху < к и ск < хк. Один из вариантов алгоритма порождения перестановок в лекси- лексикографическом порядке состоит в следующем. Алгоритм порождения перестановок Шаг 0. Записать исходную перестановку П = A, 2,..., п) и положить / = /1-1. Шаг к. Вывести (на печать или дисплей) уже построенную перестанов- перестановку П = (я,, я2,..., я„). Осуществить переход к очередной перестанов- перестановке следующим образом. Просматривая имеющуюся перестановку П справа налево, находят самую правую позицию /, в которой я,. < я,. +,. Запомнить значение /. Если / = 0, то вычисления прекращают, так как все перестановки получены. В противном случае, начиная с позиции п справа налево, находят элемент яу такой, что яу > я,, (это не обязательно будет эле- элемент я,. + 1). В перестановке П выполняют транспозицию элементов я, и яу (то есть меняют их местами) и получают промежуточный результат ГГ, а затем все элементы ГГ, начиная с / + 1-й позиции (то есть элементы я,+1,..., п'п), переворачивают. Этим завершается построение очередной перестановки. Положить / = п - 1 и перейти в начало к-ю шага. Задача 9. Лексикографическим методом построить все перестановки при п = 4. Шаг 0. Строим исходную перестановку: П = A,2,3,4). Полагаем / = 3. Шаг 1. Выводим П = A,2,3,4). Находим я/ = 3 и яу = 4 (то есть / = 3 иу = 4). Выполнив транспози- транспозицию, получаем: П' = A,2,4,3). Далее, все элементы полученной пере- перестановки, находящиеся справа от позиции / = 3 (то есть элемент 3), 156
6.5. Порождение перестановок переворачиваем. Получаем новую перестановку: П = A,2,4,3). По- Полагаем / = 2. Шаг 2. Выводим П = A,2,4,3). Находим я, = 2 и 7iy=3. Переставляя эти элементы, имеем П' = A,3,4,2). Переворачивая элементы 4 и 2, получаем новую пере- перестановку: П = A,3,2,4). Полагаем / = 3. Шаг 3. Выводим П = A,3,2,4). Находим я,. = 2 и яу = 4. Переставляя их, имеем П' = A,3,4,2). Пе- Переворачивая элемент 2, получим новую перестановку: П = A,3,4,2). Полагаем / = 2. Продолжая аналогичным образом, получим в итоге распечатку следующей последовательности перестановок (просматривать по ка- каждому столбцу, начиная с первого): 1 1 1 1 1 1 2 2 3 3 4 4 3 4 2 4 2 3 4 3 4 2 3 2 2 2 2 2 2 2 1 1 3 3 4 4 3 4 1 4 1 3 4 3 4 1 3 1 3 3 3 3 3 3 1 1 2 2 4 4 2 4 1 4 1 2 4 2 4 1 2 1 4 4 4 4 4 4 1 1 2 2 3 3 2 3 1 3 1 2 3 2 3 1 2 1 После нахождения последней (в списке) перестановки алгоритм, уменьшая значение /, не найдет выполнения соотношения щ < Uj при 1 < / < 3. При / = 0 процедура генерирования перестановок завер- завершится. Следующая Паскаль-программа реализует описанный выше алго- алгоритм. Установленная в программе константа Num = 100 позволяет гене- генерировать перестановки до 100 элементов. Однако следует учитывать, что при этом будут генерироваться все 100! перестановок. Program perm_lex; (* программа порождает перестановки в лексикографическом порядке *) const Num=100; type Vect=array[1..Num] of integer; 157
Глава 6. Элементы комбинаторики var i,j,k,N,temp:integer; P,P_terap:Vect; flag,flagl,fIag2:boolean; BEGIN (* главная программа *) Write('Укажите число элементов в перестановке (N<100): N = '); readln(N); Writeln; (* формирование и вывод первой перестановки *) for i:=l to N do begin Write(P[i], ' Mr- end; WritelnC; •) ; (* конец формирования первой перестановки *) repeat i:=N; flag:=false; flagl:=false; repeat dec (i); if (i=0) then flag:=true (* проверяем i=0 или нет *) else begin if P[i]<P[i+l] then begin flagl:=true; (* новое значение i найдено *) j:=N+1; fIag2:=false; repeat dec(j); if P[j]>P[i] then begin flag2:=true; (* найден j-й элемент *) temp:=P[i]; P[ j] :=temp; for k:=i+l to N do (* построение промежуточной перестановки *) P_temp[k]:=P[k]; for k:=i+l to N do (* построение новой перестановки *) P[k]:=P_temp[N+i-k+l]; 158
6.5. Порождение перестановок for k:=l to N do (* вывод перестановки *) Write (P[k],''); Writeln(';'); end; until(flag2); end; end; until(flagl OR flag); until(flag); END. (* конец программы *) Векторы инверсий Пусть Х= (*,, х2, ..., хп) есть (упорядоченная) последовательность чисел, то есть такая, что*, < хр если / <j. Пара (л:,., ху) называется инвер- инверсией X, если / <у и х. > хг Вектор инверсий последовательности X — это последовательность целых чисел 4, d2,...,dn таких, что dj — число элементов л:, таких, что (х/? xj) является инверси- инверсией. Иначе говоря, d} — это число элементов, болыиихху и стоящих сле- слева от него в последовательности. Ясно, что 0 < d} <j. Например, для перестановки D, 3, 5, 2, 1, 7, 8, 6, 9) имеем следую- следующий вектор инверсий: j 123456789 ?/,01034002 0. Всякий вектор инверсий однозначно определяет перестановку эле- элементов множества A,2, ..., п). В самом деле, пусть имеется вектор инверсий: j 12 3 4 5 </,. 0 1 2 0 1. Вычислим соответствующую перестановку П = (тг,, я2, я3, я4,7i5). Так как d5 = 1, то имеем п5 = 4. Так как dA = 0, то п4 = 5. Далее, так как d3 = 2, то тс3 = 1. Аналогично, так как d2 = 1, то п2 = 2 и поэтому я, = 3. Таким образом, искомая перестановка будет иметь вид П = C, 2, 1,5,4). 159
Глава 6. Элементы комбинаторики Легко сформулировать правило построения перестановки по за- заданному вектору инверсий. Пусть имеются некоторый вектор инверсий (d], d2, ..., dn) и упоря- упорядоченное множество элементов перестановки А = (я,, я2, ..., ап), где at < ар если / <j. Требуется построить перестановку (я,, я2, ..., яя). Представленный вектор инверсий начинаем рассматривать справа налево. Пусть */,=./,. Тогда в качестве элемента ял выбираем ул - 1 элемент множества А, считая справа налево. Выбранный элемент удалим из множества А. Пусть dl =у„ где 1 < 1 < п. В качестве элемента я, искомой переста- перестановки выбираем//-й элемент множества/!, считая справа налево. Рас- Рассматриваемое множество получено из исходного множества А вычер- вычеркиванием в нем уже выбранных элементов перестановки. Вычисления прекращаются, когда будут выбраны все элементы множества А Задача 10. С помощью векторов инверсий построить все перестановки при п = 4. Так как ограничения 0 < d} <j (j = 1,2, ...,л) почти аналогичны тем, что предъявляются к цифрам в обычной системе счисления, то нахо- находим векторы инверсий и строим соответствующую перестановку. Вектор Перестановка Вектор Перестановка 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 2 2 0 1 2 3 0 1 2 3 0 1 2 3 1 1 1 2 1 1 1 2 2 2 3 3 2 2 3 3 3 4 4 4 3 4 4 4 3 4 4 4 2 2 3 3 1 1 1 2 4 3 2 1 4 3 2 1 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 2 2 2 2 0 1 2 3 0 1 2 3 0 1 2 3 2 2 3 3 3 4 4 4 3 4 4 4 1 1 1 2 1 1 1 2 2 2 3 3 3 4 4 4 2 2 3 3 1 1 1 2 4 3 2 1 4 3 2 1 4 3 2 1 160
6.5. Порождение перестановок Следующая Паскаль-программа находит все перестановки задан- заданного числа элементов с помощью векторов инверсий. Построение пе- перестановки по текущему вектору инверсий выполняется процедурой PERMUT. Вектор V_stdхранит элементы исходного множества, а век- вектор Mark — пометки уже выбранных в текущую перестановку вершин. V_inv — вектор инверсий. Program perm_inv; (* программа порождает перестановки с помощью векторов инверсий *) const Num=100; type Vect=array[1..Num] of integer; var i,j,k,N,temp:integer; P,V_inv,V_std,Mark:Vect; flag,flagl,fIag2:boolean; label 1; Procedure PERMUT(V_inv:Vect); (* процедура формирует перестановку по данному вектору инверсий *) var q:integer; begin for i:=l to N do Mark[i]:=0; for i:=N downto 1 do begin k:=N+l; fIag2:=false; q:=-l; repeat dec(k); if (Mark[k]=0) then (* здесь к определяет 1-й оставшийся элемент вектора V_std *) begin q:=q+l; if (q=V_inv[i]) then begin 161
Глава 6. Элементы комбинаторики P[i]:=V_std[k]; Mark[k]:=1; flag2:=true; end; end; until(flag2); end; end; (* конец процедуры PERMUT *) BEGIN (* главная программа *) Write('Укажите число элементов в перестановке (N<100): N = '); readln(N); Writeln; (* формируем исходный вектор инверсий *) for i:=l to N do begin V_inv[i]:=0; V_std[i]:=i; end; (* конец формирования исходного вектора инверсий *) (* формирование очередного вектора инверсий *) flagl:=false; repeat flag:=false; repeat PERMUT(V_inv); for j:=1 to N do Write (P[j],''); Writeln (';'); i:=N; 1: if (V_inv[i]<V_std[i]-l) then begin V_inv[i]:=V_inv[i]+l; flag:=true; end else begin if i>2 then begin V_inv[i]:=0; dec(i); goto 1; 162
6.5. Порождение перестановок Рис. 6.3. Циклическое движение элементов end else flagl:=true; end; if NOT flag then flagl:=true; until(flag OR flagl); until(flagl); END. (* конец программы *) Вложенные циклы Одним из простейших видов перестано- перестановок является единственный цикл, то есть перестановка, в которой некоторые элемен- элементы циклически сдвинуты вправо или «про- «провернуты» на некоторое число позиций. При- Примером такой перестановки может служить перестановка П = B, 3, 4, 5, 1), которая по- получена из перестановки A, 2, 3, 4, 5) цик- циклическим сдвигом всех элементов вправо на одну позицию (рис. 6.3). Простой способ генерации всех перестановок с применением цикли- циклических сдвигов элементов существующей перестановки состоит в сле- следующем. Начиная с исходной перестановки A,2, ...,я) последовательно сдвигать по циклу на одну позицию (разряд) все элементы переста- перестановки. Если сдвиг по циклу на один разряд первых п элементов воз- возвращает нас к ранее порожденной перестановке, то следует сдвинуть по циклу первые п - 1 элементов на один разряд. Если и этот шаг воз- возвращает нас к ранее порожденной перестановке, то сдвигаем по циклу уже первые п - 2 элементов на один разряд и так далее. Затем, после получения новой перестановки, снова сдвигаем по циклу все п эле- элементов перестановки до построения ранее полученной перестановки. Вычисления прекращаются, если все попытки построить новую перестановку безуспешны. Задача 11. Методом вложенных циклов сгенерировать все перестановки п = 4 элементов. Записываем исходную перестановку: П = A, 2, 3, 4). Циклически сдвигая все элементы перестановки на одну позицию влево, имеем 163
Глава 6. Элементы комбинаторики 12 3 4 2 3 4 1 3 4 12 4 12 3 12 3 4 В результате видим уже имеющуюся перестановку. Поэтому, цик- циклически сдвигая первые ее три элемента на одну позицию влево, име- имеем новую перестановку, все элементы которой далее снова цикличе- циклически сдвигаем: 2 3 1 4 2 3 1 4 2 3 1 4 2 3 1 4 2 3 1 4 — снова получена уже имеющаяся перестановка. Циклически сдвигая первые три элемента на одну позицию, имеем новую перестановку и продолжаем вычисления: 3 12 4 12 4 3 2 4 3 1 4 3 12 3 12 4 — перестановка была ранее. Вновь циклически сдвигаем первые три элемента и получаем уже имеющуюся перестановку A,2,3,4). Тогда циклически сдвигаем уже первые два элемента и продолжаем: 2 13 4 1 3 4 2 3 4 2 1 4 2 1 3 2 1 3 4 164
6.5. Порождение перестановок — перестановка была вначале. Поэтому циклически сдвигаем первые три элемента и продолжаем: 13 2 4 3 2 4 1 2 4 13 4 13 2 13 2 4 — перестановка уже имеется. Циклически сдвигаем первые три эле- элемента и продолжаем: 3 2 14 2 14 3 14 3 2 4 3 2 1 3 2 14 — перестановка также имеется. Циклический сдвиг первых трех и двух элементов не приводит к получению новой перестановки. По- Поэтому вычисления прекращаем, так как все искомые перестановки получены. Транспозиция смежных элементов В тех случаях, когда с каждой перестановкой связаны некоторые вычисления (то есть получение перестановок есть промежуточный результат некоторого алгоритма), существует возможность использо- использования частичных результатов, вычисленных для предыдущей переста- перестановки, если последовательные перестановки мало отличаются друг от друга. Для того чтобы различие между соседними перестановками было минимальным, любая перестановка в получаемой последовательности перестановок должна отличаться от предшествующей ей транспозици- транспозицией двух соседних элементов. Такую последовательность перестановок можно построить рекур- рекурсивно. Для п = 1 единственная перестановка A) удовлетворяет требова- требованиям. Пусть, далее, имеется последовательностьП,, П2,... перестано- 165
Глава 6. Элементы комбинаторики вок на множестве A,2, ..., п- 1), в которой последовательные пере- перестановки различаются только транспозицией соседних элементов. Будем расширять каждую из этих перестановок, вставляя новый эле- элемент п на каждое из п возможных мест. При этом п добавляется к пере- перестановке П последовательно во все позиции справа налево, если / не- нечетно, и слева направо, если / четно. Задача 12. Построить все перестановки транспозицией смежных элементов для л = 4. 12 2 1 123 132 312 321 231 213 1 1 4 2 4 1 4 2 2 3 3 3 1 4 1 3 1 3 3 4 2 2 2 4 3 3 4 1 4 3 4 1 1 2 2 2 3 3 3 4 2 2 2 4 1 1 1 4 2 2 4 3 4 2 4 3 3 1 1 1 2 2 2 4 1 1 1 4 3 3 3 4 6.6. Пересчет числа неупорядоченных выборок Как и ранее, полагаем, что имеется некоторое исходное «-множе- «-множество А = {д,, а2, ..., ап}, из элементов которого необходимо составлять неупорядоченные выборки объема г. 6.6.1. Число неупорядоченных выборок без повторений Выборки, которые являются подмножествами «-множества^, на- называются сочетаниями. Например, пусть имеется исходное множество Л = {а, Ь, с, d}. Тогда 3-сочетаниями являются подмножества: {а, Ь, с}, {Л, а, с}, {a, b,d}n так далее. Таким образом, подсчитывая число сочетаний объема г, находят число всех подмножеств л-множества, содержащих г элементов. Обозначим число сочетаний из п элементов по г: С[. В англоязыч- англоязычной литературе это число записывают также следующим образом: п г 166
6.6. Пересчет числа неупорядоченных выборок Теорема 6.6.1. I c:=- Доказательство. Очевидно, что число неупорядоченных выборок без повторений в Н раз меньше, чем число упорядоченных выборок без повторений. Поэтому Гг Щп,г) п\ г\ г\(п-г)\ Задача 13. Найти число булевых векторов длины /, содержащих ровно к единиц. Имеем 1 к\A-к)\ Задача 14. Найти число всех подмножеств объема к, составляемых из п-эле- ментного множества А. Имеем / = 4, к = 3 и каждое искомое подмножество множества А = {а, Ь, с, d) можно рассматривать как булевый вектор. В самом деле, зафиксируем элементы множества А на своих местах. Тогда подмножествам Ах = {а, Ь, с} и А2 = {a, b, d) можно поставить в соот- соответствие булевы векторы по следующему правилу. Для подмножества А{. поскольку элементы а, Ь, с встречаются по одному разу, то каждо- каждому из этих элементов ставится в соответствие единица, а поскольку элемента d в этой выборке нет, то ему в соответствие ставится нуль. Аналогично для выборки А2. Поэтому имеем соответствие Ах = {а, Ь, с> <-> A110) А2 = {а,Ь, </}<-» A101). Следовательно, искомое число подмножеств равно числу булевых векторов длины / = 4, содержащих ровно к = 3 единицы: Hi cl = 4. 3!D-3)! Как уже отмечалось, этот прием, когда подмножеству некоторого «-множества ставится в соответствие булевый вектор длины п, ис- 167
Глава 6. Элементы комбинаторики пользуется довольно часто. Поэтому необходимо уметь подсчитывать число булевых векторов, удовлетворяющих различным условиям. Ни- Ниже вернемся к рассмотрению данного способа представления под- подмножеств. Задача 15. Найти число булевых векторов длины I, содержащих не менее к единиц. Ясно, что искомое число равно Задача 16. Найти число элементов в множестве всех подмножеств п-множе- ства Л (то есть число элементов в множестве-степени или булеане). Напомним, что булеан обозначают так: 2А. Тогда Аналогичный результат получаем, если необходимо найти число булевых векторов длины п. 6.6.2. Число неупорядоченных выборок с повторением Число неупорядоченных выборок объема г из «-элементного мно- множества А с повторениями элементов обозначим Спг. Примеры. Пусть Л = {а, Ь, с, d) и выберем объем выборки г = 3. То- Тогда сочетаниями с повторением будут, например, следующие подмно- подмножества: {a, a, a}, {b, b, с), {с, d, d}, {а, с, d) и другие. Теорема 6.6.2. Доказательство. Каждой выборке поставим в соответствие последовательность из нулей и единиц (двоичную последовательность), которую составим следующим образом. Сначала запишем столько единиц, сколько раз 168
6.6. Пересчет числа неупорядоченных выборок элемент ах е А встречается в выборке, ставим граничный нуль и допи- дописываем столько единиц, сколько раз элемент а2 е А встречается в вы- выборке, и так далее. Процедура написания двоичной последовательно- последовательности заканчивается расстановкой такого числа единиц, сколько раз элементу е А встречается в выборке. Очевидно, что если некоторый элемент множества А в выборку не входит, то соответствующие ему единицы в двоичной последовательности отсутствуют. Ясно, что в этом случае между любой выборкой с повторениями элементов и всякой двоичной последовательностью, содержащей ров- ровно г единиц, имеется взаимно однозначное соответствие. Если г = 3 и множество/! = {а, Ь, с, d}, то имеем соответствия: {а, а, а} <-> 111000, {а, а, ?}<-> 110100, {6, с, </}<-> 010101, {Ь9с, с} <-> 010110. Понятно, что такая последовательность будет содержать г единиц и (п - 1) нулей. Общая длина такой последовательности равна (г + п - 1). Таким образом, исходная задача сведена к задаче нахождения чис- числа булевых векторов длиной (г + п - 1), содержащих ровно г единиц (ровно п - 1 нулей). Эта задача выше уже рассмотрена. Поэтому име- имеем решение: сг =сг =сл ^(А7+г~1)! w+r_, я+г., г!(/|в1)!- Q.E.D. Задача 17. Сколькими способами 12 шариков можно распределить по Зурнам? Имеем: где п = 12 иг= 3. Задача 18. Сколько различных слов можно составить, переставляя буквы в слове «кофеварка» ? 169
Глава 6. Элементы комбинаторики Так как в слове 9 букв, то перестановок всех букв будет 9!, но буква «к» и буква «а» повторяются. Поэтому необходимо полученное число разделить на 2!2! Таким образом, окончательно получим с--*- 2!2! — искомое число. Задача 19. Сколько различных слов можно полунить, переставляя буквы слова «кофеварка» так, чтобы никакие две гласные не стояли рядом ? В данном слове 5 согласных и 4 гласные буквы. Так как в условии сказано, что никакие две гласные не должны стоять рядом, то имеем 6 мест для расстановки четырех гласных букв по одной гласной на ка- каждом месте. Итак, получим 51 4! С = -х-хС64, 2! 2! 6 где 5! — число способов перестановки согласных букв; 4! — число спо- способов перестановки гласных букв. 6.7. Порождение подмножеств Пусть имеется я-множествоЛ = {я,, д2, ..., ап) и пусть требуется ге- генерировать подмножества множества А. Может возникнуть потребность генерации всех подмножеств или только подмножеств объема к. Иногда на генерируемую последова- последовательность подмножеств накладывается ограничение генерируемых подмножеств. 6.7.1. Представление подмножеств Каждое л-элементное множество Л = {я,, а2, ..., ап) имеет в точно- точности 2" подмножеств и каждому подмножеству В с А можно сопоста- сопоставить двоичную последовательность bxb2 ...bn, определяемую следую- следующим образом: [0, если at е о = < [1, если 170
6.7. Порождение подмножеств Тем самым устанавливается взаимно однозначное соответствие ме- между элементами множества В и всеми булевыми векторами (наборами) длины л, как это было ранее определено. Определенная выше двоичная последовательность bxb2.. .Ъп является удобным машинным представлением подмножества В (особенно если величина п невелика и эта последовательность может быть закодирова- закодирована одним машинным словом). Последовательность bxb2.. .bn в этом слу- случае можно рассматривать как двоичное число. 6.7.2. Генерирование всех подмножеств Для генерации всех подмножеств «-множества А, очевидно, доста- достаточно породить все двоичные наборы длины п. Легко увидеть, что наиболее прямым способом их порождения является запись в системе счисления с основанием 2. Однако, если на генерируемую последовательность налагается ог- ограничение наименьшего отличия соседних порождаемых элементов, то целесообразно воспользоваться записью чисел в двоичном коде Грея. Существуют много различных вариантов кодов Грея. Опишем один из них. Пусть bxb2...bn — есть некоторое двоичное число. Код Грея этого числа получают, сдвигая это число на один разряд вправо, и, отбросив самый правый (л-й разряд), складывают поразрядно по модулю два с этим же, но несдвинутым числом: А. е *, сг Ь, . ь2 . ^ ¦ ¦¦ *.-, сп ъ. Таким образом, каждый результирующий разряд ci получают по формуле с, = Ь{ ®Ь._Х (/ = 1,2,...,л), полагая Ьо = 0. Например, для двоичного набора 111001001 код Грея имеет вид 1110 0 10 0 1 Ф1 1 1001001 10 0 10 110 1 171
Глава 6. Элементы комбинаторики Легко заметить, что последовательность чисел, записанных в коде Грея, имеет такое замечательное свойство, что соседние числа отлича- отличаются друг от друга в одной (двоичной) позиции. Так, последовательности трехразрядных двоичных чисел и соот- соответствующих им трехразрядных кодов Грея имеют следующий вид: Двоичное число б" 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 ~0 1 0 1 0 1 0 1 Число Грея б" 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 ~б 1 1 0 0 1 1 0 Для генерирования двоичных кодов Грея можно воспользоваться следующим наблюдением. Если последовательность сх, с2, ..., ст содер- содержит все двоичные последовательности длины к и каждый член после- последовательности отличается от соседнего точно в одной координате, то, приписывая справа нуль к каждому члену этой последовательности и единицу также к каждому члену этой последовательности, записанной в обратном порядке, получим в результате новую последовательность, которая содержит все последовательности длины к + 1 и каждые ее со- соседние члены отличаются друг от друга точно в одной координате. Например, из последовательности 00,01,11,10 получаем последо- последовательность 000,010, 110, 100, 101, 1 И, 0П, 001 (подчеркнуты припи- приписанные координаты). Паскаль-программа, генерирующая все подмножества с помощью кода Грея, приведена ниже. Program Grey; (* программа генерирует все подмножества $п$-множества *) (* с помощью кода Грея *) const Num=5; type Vect=array[1..Num] of integer; 172
6.7. Порождение подмножеств var i,j,sum,N:integer; SS,gray:Vect; flagrboolean; BEGIN (* главная программа *) Write ('Укажите число элементов в исходном множестве (N<100) : N = '); readln(N); Writeln; for i:=l to N do SS[i]:=0; Writeln CO; ') ; repeat (* формируем новое двоичное число *) j:=N; repeat flag:=false; if (SS[j]<l) then begin SS[j]:=SS[j]+l; flag:=true; end else if j>l then begin SS[j]:=O; dec(j); end; until(flag); (* конец формирования двоичного числа *) sum:=0; (* формируем код Грея *) for i:=l to N do begin sum:=sum+SS[i]; if i>l then gray[i]:=(SS[i]+SS[i-l]) mod 2 else gray[i]:=SS[i]; end; for i:=l to N do if (gray[i]=l) then Write(i,lf); Writeln(';'); until(sum=N) ; END. (* конец программы *) 173
Глава 6. Элементы комбинаторики 6.7.3. Генерирование г-злементных подмножеств Иногда требуется генерировать не все подмножества множества А, а лишь такие, в которых число элементов равно г. Для построения r-подмножеств в лексикографическом порядке мож- можно воспользоваться следующим алгоритмом. Для простоты изложения будем полагать далее, что А = A, 2, ..., п). Пусть уже построено подмножество < я,, о2, ..., аг >, где а{ < ар если / <j. Тогда следующее подмножество в лексикографической последова- последовательности будет подмножество < bv b2, ..., br >, где <b],b2,...,br> = = < а{, ..., ap_v ар + 1, ар + 2, ..., ар + г-р + 1 >. Здесь р = max{/ :a,<n + i- r}. Иначе говоря, для порождения подмножеств в лексикографиче- лексикографическом порядке необходимо построить некоторое исходное подмно- подмножество, которое целесообразно рассматривать далее как вектор, и затем выполнить следующее. Если уже имеется некоторое подмно- подмножество < я,, а2, ..., аг >, то каждая его компонента либо достигла своего предельного значения, либо нет. Очевидно, что предельное значение компоненты я;. равно: о( = n+i-r{i = 1,2,...,г). Поэтому для построения следующего подмножества в имеющемся подмножестве необходимо найти такую компоненту/?, значение которой ар меньше предельной величины и, кроме того, номер этой компоненты наи- наибольший среди других компонент, у которых также значение эле- элемента меньше предельной величины. Далее, положить Ьх - ai для всех i < риЬк = ак+ 1 для всех/? <к<г. Пример. Последовательность всех 4-элементных подмножеств мно- множества {1, ..., 6}, полученная с помощью вышеописанного алгоритма (в лексикографическом порядке), имеет вид 1234 1256 2345 1235 1345 2346 1236 1346 2356 1245 1356 2456 1246 1456 3456 174
6.7. Порождение подмножеств Ниже приведена Паскаль-программа, генерирующая г-подмноже- ства в лексикографическом порядке. Program Combin_3; (* программа генерирует г-подмножества *) (* в лексикографическом порядке *) Uses Crt; Const Num=10000; Var i,p,k,N:integer; A:array [1. .Num] of integers- label finish; BEGIN Write('Введите число элементов N в множестве (N<1000) : '); readln(N); Write ('Введите объем к подмножеств (k<N) k<',N,' : '); readln(к); Writeln; if (k>=N) OR (k=0) then begin Writeln('Ошибка ввода1); goto finish; end; begin for i:=l to k do :=k; while р>=1 do end finish: END. begin for i:=l to к do Write(A[i],', •) Writeln; if A[k]=N if p>= 1 for i:= end; then p: then к downto ¦l+i-p+l; ; =p-l else p:=k; p do 175
Глава 6. Элементы комбинаторики Другой алгоритм генерирует все ^-элементные подмножества таким образом, что каждое последующее подмножество образуется из преды- предыдущего удалением одного элемента и добавлением другого. Такой алго- алгоритм генерирует подмножества в порядке минимального изменения. С этой целью обозначим через G(n, r) список, содержащий все г-элементные подмножества множества А = {1, 2, ..., п], в котором первым является подмножество {1,2, ..., г}, а последним — подмноже- подмножество {1, 2, ..., г - 1, п} и каждое следующее подмножество образуется из предыдущего удалением некоторого элемента и добавлением другого. Заметим, что, если G(n - 1, г) и G(n - 1, г- 1) уже построены, по- последовательность G(n, r) можно определить следующим образом: G(л, г) = G(n - 1, г), G(n - 1, г- 1) и {л}, гдеб^л - 1, г- 1) и М обозначает список, образованный из G(n - 1, г- 1) изменением порядка элементов списка на обратный и последующим добавлением элемента п к каждому множеству. Легко заметить, что описанный выше метод генерирования под- подмножеств соответствует построению кода Грея, если каждое подмно- подмножество представлять булевым вектором и каждый вектор содержит ровно г единичных компонент. Пример. Последовательность всех 4-элементных подмножеств множества {1, ..., 6}, полученная в порядке минимального измене- изменения, имеет вид GE,4) GE,3) GF,4) 2 3 4 5 2 3 5 2 5 6 3 5 6 2 3 5 6 3 4 5 6 2 4 5 6 14 5 6 12 4 6 13 4 6 2 3 4 6 12 3 6 176
6.8. Число разбиений множества на подмножества 6.7.4. Генерирование подмножеств с повторениями В некоторых приложениях используются множества с повторе- повторениями (или мультимножества). Каждый элемент мультимножества может появляться в этом множестве несколько раз. Число вхождений элемента называется его кратностью в этом множестве. Например, мультимножество, содержащее элемент а кратности 2, элемент b кратности 3 и элемент с кратности 1 обозначают: (a, a, b, b, Ь, с) или Bа, 36, 1с). Порядок записи элементов при этом не существен, то есть (a,a,b,b,b,c) = (b,a,b,a,c,b) = ... Существенна только кратность элементов мультимножества. Пусть Аи В — мультимножества. Говорят, что мультимножество В есть подмножество множества/! и записывают: В с А, если кратность каждого элемента в В не больше кратности этого элемента в А. Если А — мультимножество, содержащее п различных элементов я,, ..., ап с кратностями А:,, ..., кп соответственно, то каждому под- подмножеству В а А однозначно соответствует последовательность < /ир ..., тп >, где 0 </и, < kv ..., О < тп < кп. Здесь/и,(/ = 1,2,...,л) обо- обозначает кратность элемента я, в В. Ясно, что число всех подмножеств В с Л равно (кх + 1)(Л2+ 1) ... (кп + 1). Такие подмножества можно генерировать способом, который был использован при построении кода Грея. Для этого достаточно заметить, что если последовательность CVC2, ..., Ср содержит все /•=(/:,+ 1) ... (ks + 1) последовательностей < /и,,..., /и, >, то после- последовательность ГО ГО ГО Г1 Г 1 Г1 Г? Г? Г? С\ длины г(к5+] + 1) содержит все последовательности < mv ..., ms, ms + l >. 6.8. Число разбиений множества на подмножества Пусть имеется /i-элементное множество А. Говорят, что множест- множество А разбито на к подмножеств А (/ = 1,2,...,/:), если: \.Ai *0(/ = l,2,...,*), 0J,je {1, ...,*}, 177
Глава 6. Элементы комбинаторики Обозначим число элементов в подмножестве At через п(А) = пг Очевидно, что л, + п2 + ... + пк = п. Число разбиений множества на подмножества обозначим С(л;/!„ ..., пк). Теорема 6.8.1. ( к (?,) х \п2 \...пк! % Доказательство. Приступим к подсчету числа разбиений. Число способов выбора элементов подмножества А} равно числу сочетаний С^1. Число способов выбора элементов подмножества А2 равно числу сочетаний С"п1п . Число способов выбора этих двух подмножеств равно С х Сп и так далее. Таким образом, число выбора всех разбиений равно Я Л-Л| Я-Wj -/»2 *** П-п\ -...-Ль 1 п\ (п-п)\ (п-п -...-п ,)! пх \(п-п})\ п2\(п-пх-п2)\ пк \(п-п{-...-пк)\ п\ пх \п2 \..мк \ Задача 20. Сколькими способами можно расселить 12 студентов по трем ком- комнатам, если в 1-й комнате помещается 6 человек, во 2-й — 4 человека, а в 3-й — 2 человека. Имеем: п- 12 и г = 3 подмножества. Поэтому 12! СA2;6,4,2) = 6!4!2!' Задача 21. Сколько различных слов можно получить, переставляя буквы в слове «коловорот» ? 178
6.9. Генерирование разбиений множеств и чисел Очевидно, что искомое число равно 9! с-—. 4! Задача 22. Сколькими способами 6 мужчин и 6 женщин можно разместить за круглым столом так, чтобы никакие две женщины не сидели рядом? Имеем: 6! х 6! х 2! — если поменять женщин и мужчин с четных мест на нечетные. 6.9. Генерирование разбиений множеств и чисел Разбиение множеств часто необходимо для решения различных практических задач. Пусть имеется множество Л = {я,, ..., ап). Требуется найти все раз- разбиения множества А на подмножества. Очевидно, что в этом случае объем подмножеств^,. (/=1,2,...) «пробегает» все значения от 1 до п. Говорят также, что число Nразбито на к слагаемых ft,, ..., Ък, если ft, + ... +bk = N, где A:, ft,, ..., Ък > 0. Суммы считаются эквивалентными, если они от- отличаются только порядком слагаемых. Слагаемые называют также компонентами разбиения числа N. Пусть требуется найти всевозможные разбиения числа N на сла- слагаемые. Эта задача методологически связана с предыдущей. 6.9.1. Генерирование разбиений множества Пусть имеется множество Л = {1, 2, ..., п}. Множество всех разбие- разбиений множества ,4 на / подмножеств Л,, ..., А( обозначим ЩЛ), а мно- множество всевозможных разбиений этого множества Л на подмножества обозначим ЩА). Ясно, что ЩА) = Ylx(A) u ... и Yln(A). Легко заметить, что всякое разбиение пп е Ylt(A) однозначно опре- определяет разбиение пп_, множества Л* = А\{п}, которое возникает из раз- разбиения пп после удаления элемента п из соответствующего подмно- подмножества А( е пп. Если после удаления элемента п образуется пустое подмножество, то оно также удаляется из результирующего разбиения. 179
Глава 6. Элементы комбинаторики Например, еслия6 = {{1,4}, {3,5}, {2}, {6}} есть разбиение множества {1,2,...,6},тоя5 = {{1,4}, {3,5}, {2}} есть разбиение множества {1,2,..., 5}, полученное из я6 удалением последнего элемента 6. Очевидно, что возможно и обратное преобразование: если имеется некоторое разбиение ял_, е ЩА \{а}) на / подмножеств (л - 1 ^мно- ^множества А \{п}, то можно найти разбиения w-множества А на / и t + 1 подмножеств, вводя элемент п в подмножества разбиения пп_, (в том числе и в пустое подмножество). Так, например, если имеется разбиение п5 = {{1}, {2,5}, {3,4}} множе- множества {1,...,5}, то получаем следующие разбиения множества {1,.. .,5,6}: {{6}, {1}, {2,5}, {3,4}}, {{1,6}, {2,5}, {3,4}}, {{1}, {2,5,6}, {3,4}}, {{1}, {2,5}, {3,4,6}}. Отсюда следует простой рекуррентный метод генерирования всех разбиений: если имеется список Ln _, всех разбиений множества {1, ..., п - 1}, то список Ln всех разбиений множества {1, ..., п) можно создать, заменяя каждое разбиение в списке Ln_, на соответствующую ему по- последовательность разбиений, получаемую за счет введения элемента п. Задача 23. Используя рекуррентный метод, построить все разбиения множест- множества {1,2,3}. Имеем Lx {1} L2 {1,2} {1},{2} L2 {1,2,3} {1,2}, {3} {1},{2},{3} {1},{2,3} {1,3}, {2} 6.9.2. Генерирование разбиений числа Разбиения числа Nuak компонент можно порождать в возрастаю- возрастающем лексикографическом порядке, начиная с разбиения, в котором 6, = 1, Ь2 = 1, ..., 6,_, = 1, /= N-k + 1 и продолжая процесс следую- следующим образом. 180
6.9. Генерирование разбиений множеств и чисел Пусть имеется некоторое «текущее» разбиение bv ..., bk. Для полу- получения следующего разбиения из существующего, просматривая эле- элементы «текущего» разбиения справа налево, находим наибольшее зна- значение /', при котором bk - bi > 2. Заменяем далее в «текущем» разбиении все компоненты bj(j = /,/ + 1,...,&-1) на значение bt + 1. Последняя компонента Ьк при этом принимает значение Так, например, если N = 12, к = 5 и текущее разбиение имеет вид {1,1,3,3,4}, то следующее разбиение примет вид {1,2,2,2,5}. Процедура построения разбиений заканчивается, когда ни один из элементов разбиения не отличается от последнего больше чем на еди- единицу. Задача 24. Лексикографически генерировать все разбиения числа N = Юна к= 4 компонент. Используя описанный выше процесс, получаем {1,1,2,6}; {1,1,3,5}; {1,1,4,4}; {1,2,2,5}; {1,2,3,4}; {1,3,3,3}; {2,2,2,4}; {2,2,3,3}. Существуют и другие методы построения разбиений при задан- заданном к. Ясно, что изменяя величину & от 1 до N, можно построить все раз- разбиения числа N. 181
Глава 6. Элементы комбинаторики 6.10. Метод включений и исключений Этот метод называют также логическим или методом решета. Ме- Метод включений и исключений — мощный метод решения перечисли- перечислительных задач. Недостаток метода — его громоздкость. Пусть имеется «-множество А и предположим, что элементы мно- множества Л могут обладать или не обладать N свойствами: /?,, р2, ..., /V Рассмотрим r-выборку свойств Число элементов множества А, обладающих каждым из г выбран- выбранных свойств, обозначим n(pi ,/>,., ...,Pi). Заметим, что о наличии или отсутствии других свойств при этом не говорится. Удобно также фиксировать отсутствие определенного свой- свойства у элементов множества/!. Например: /?,. будет означать отсутствие /-того свойства. Тогда запись п(р] ,р2,р3,р4) означает число элементов множест- множества А, обладающих свойствамирх ир3 и не обладающих свойствами р2 и/?4. Применение метода включений и исключений основано на ис- использовании следующей теоремы. Теорема 6.10.1. Число элементов п-множества А, не обладающих ни одним из N свойств рх, р2, ..., pN, равно: Например, при N = 4 эта формула примет вид п(Р1,Р2>Рз>Р4) = = n-n(pl)-n(p2)-n(p3)-n(p4 ^Рз) + п(Р],Р4) + п(Р2>Рз) + "(Р ,Р2 >/>з)" "(Л ,Pi Ла ) ~ "(/>, ^з 'Р4) ~ "(Pi ^з ^4 Доказательство проведем для случая, когда N=3 (рис. 6.4). Чтобы найти число элементов множества А, не обладающих ни од- одним из свойстврх,р2,р3, необходимо, очевидно, из общего числа п эле- 182
6.10. Метод включений и исключений ментов множества удалить элементы, которые обладают вышеуказан- вышеуказанными свойствами. Число элементов, обладающих свойством pv рав- равно л(/?,), обладающих свойством р2-п(р2), обладающих свойством /?3 - п(р3). Таким образом, в результате имеем: п - п{рх) - п(р2) - п(р3). F.1) А ч л ^ч J АРЛ у л Рис. 6.4. N=3 Однако полученный результат будет меньше искомого числа по следующим причинам. Во-первых, дважды были учтены элементы, об- обладающие одновременно свойства- свойствами р] и р2. Число таких элементов, согласно принятым обозначениям, равно п(р],р2). Один раз такие эле- элементы были учтены как обладаю- обладающие свойством /?,, а второй раз — как элементы, обладающие свойст- свойством^. Поэтому к ранее полученно- полученному соотношению следует, очевидно, прибавить число п{рх,р2). Во-вто- Во-вторых, по аналогичной причине два- дважды были удалены элементы, обладающие одновременно свойствами р] и/?3, и, наконец, также дважды удалены элементы, обладающие од- одновременно свойствами/?2 иру Следовательно, соответствующие чис- числа следует учесть в ранее полученном результате. Тогда новый резуль- результат будет п - п(рх) - п(р2) - п(р3) + п(рх, р2) + п(рх, р3) + п(р2, Ръ). F.2) Этот результат также не окончательный. Рассмотрим, что проис- происходило с элементами, одновременно обладающими свойствами/?,,/^ ир3. Число таких элементов равно n(pv p2, ръ). Первоначально такие элементы были учтены как обладающие свойством/7,, затем как элементы, обладающие свойствомр2, и, на- наконец, как элементы, обладающие свойством ру Иначе говоря, при получении промежуточного результата F.1) трижды была удалена величина п(р]9 /?2, /?3). При получении промежуточного результата F.2) эта же величина была уже трижды добавлена: сначала в числе элементов, обладающих 183
Глава 6. Элементы комбинаторики одновременно свойствами рх ир2, затем в числе элементов, обладаю- обладающих свойствами рх и /?3, и, наконец, в числе элементов, обладающих свойствами/?2 иру Поэтому из промежуточного результата F.2) следу- следует вычесть величину п(рх, р2, /?3). Тогда окончательно имеем Задача 25. Найти, сколько элементов из множества А не обладают свойством р^ръи обладают свойствами р2, р4. По теореме включений и исключений имеем: Задача 26. В результате социологического исследования было выяснено, что студенты читают три журнала —А, В и С, причем журнал А читают 50 % студентов, журнал В — 60 %, журнал С — 40 %, журналы Аи В — 30 %, журналы В и С — 20%, журналы А и С — 15 %, журналы А, В и С — 10%. Найти: 1. сколько процентов студентов не читают ни один из журналов; 2. сколько процентов студентов читают только один журнал; 3. сколько процентов студентов читают только два журнала; 4. сколько процентов студентов читают не менее двух журналов. Решение. По условию задачи имеем: п(рЛ) = 50 %, п(рв) = 60 %, п(рс) = 40 %, п(рл, рв) = 30 %, п(Рл> Рс) = »5 %, п(рв, Рс) = 20 %, п(рА, pBi pc) = 10 %. Используя теорему включений и исключений, получим: -40% + 30% + 15% + 20%-10% = 2. п(Ра,Рв, = 15%+ 20%+15% = 50%. 184
6.11. Метод рекуррентных соотношений 3. п(рА,рв,рс) (рА,рв,рс) (р -п(РА,Рв>Рс)} + {"(РА>Рс)-"(РА = 35%. 4. п(рА,рв,рс) + п(рА, = 35% + 10% = 45%. 6.11. Метод рекуррентных соотношений Сущность этого метода состоит в том, что решение некоторой комбинаторной задачи сводится к решению той же задачи с меньши- меньшими значениями переменных. Результат решения представляется, как правило, в виде так называемого рекуррентного соотношения. Рекуррентным называют соотношение, в котором для вычисления некоторого члена числовой последовательности используют значе- значения предыдущих членов этой же последовательности. Иногда метод рекуррентных соотношений является единствен- единственным методом, позволяющим решить перечислительную задачу. Так, например, число неупорядоченных разбиений некоторого числа Nua к слагаемых не удается выразить иначе, как в виде рекуррентного со- соотношения: sk(N) = sk(N-k) + sk_,(N-k) + ... + Sl(N- к), где sk(N) — число неупорядоченных разбиений Nuak частей. Здесь sk(N) = О для N < к и sk(k) = 1. Рассмотрим примеры решения задач, связанные с получением ре- рекуррентных соотношений. Задача 27. Получить рекуррентное соотношение для числа сочетаний Сп. Решение. Множество всех таких сочетаний разобьем на две группы. В одну группу отнесем те из них, которые содержат элемент д, е А, а в другую группу — те, которые не содержат элемент а] е А. Прежде всего найдем число сочетаний, не содержащих элемент Д, G А. Ясно, что это число будет равно числу r-сочетаний, которые мож- можно получить из (п - 1)-множества А', полученного из л-множества А 185
Глава 6. Элементы комбинаторики после удаления из него элемента av Поэтому одна из вышеуказанных групп имеет C^j элементов. Так как один из элементов r-сочетания уже выбран (элемент я,), то число всех элементов в другой группе, очевидно, равно числу (г- 1)- сочетаний, компоненты которых также выбираются из (п - 1)-мно- жества А\ то есть в рассматриваемой группе имеем Сгп~_\ элементов. Следовательно, в результате получаем рекуррентное соотношение для числа сочетаний: гдел>0,С; =0приг> лиС; =1. Полученное рекуррентное соотношение широко используется для вычисления сочетаний. На его основе составляется треугольник Пас- Паскаля: 1 1 1 1 2 1 13 3 1 14 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 В этом треугольнике строки соответствуют значениям п = 0, п = 1, п - 2 и так далее, а диагонали — значениям г = 0,г= 1,г= 2 и так далее (сверху вниз и слева направо). Так, чтобы вычислить значение С64 с помощью треугольника Пас- Паскаля, необходимо по горизонтали выбрать 7-ю строку и 4-ю диаго- диагональ. На пересечении имеем число 20, что и является значением иско- искомого сочетания. Легко увидеть, что каждый элемент строки треугольника Паскаля вычисляется из элементов предыдущей строки согласно найденному рекуррентному соотношению. Задача 28 [Задача о кроликах]. В 1240году итальянским математиком Леонардо из Пизы по прозва- прозванию Фибоначчи была предложена так называемая «задача о кроликах». Формулируется она следующим образом. На ферму купили одну пару «молодых» крольчат. Требуется опреде- определить, сколько пар кроликов будет на ферме через п месяцев, если извест- 186
6.11. Метод рекуррентных соотношений но, что каждая пара крольчат (или «молодых» кроликов) через месяц становится фертильной (плодоносящей) и ежемесячно приносит при- приплод в виде одной пары кроликов. (Считаем, что кролики никогда не уми- умирают.) Решение. Обозначим искомое число через/,. Ясно, что каждый месяц на ферме имеются «молодые» и «старые» кролики. Поэтому общее число кроликов через п месяцев после при- приобретения одной пары крольчат на ферму есть сумма числа «моло- «молодых» и «старых» кроликов: где Yn — число пар «молодых» кроликов, аОя- число пар «старых» кроликов на ферме через п месяцев. Аналогично через п + 1 месяцев /л + 1 = -Гп + 1 ~*~ ^л + Г Определим величины Yn +, и Оп +,. Очевидно, что «молодых» кроликов в каждом рассматриваемом месяце будет на ферме столько же, сколько имелось «старых» кроли- кроликов в предыдущий месяц. Следовательно Все «старые» кролики в предыдущем месяце останутся «старыми» и в рассматриваемом месяце (кролики никогда не умирают). Кроме того, все «молодые» в предыдущем месяце кролики через месяц ста- становятся «старыми». Поэтому общее число пар «старых» кроликов на ферме через п + 1 месяцев равно On + ] = Yn + On=fn. Рассуждая аналогичным образом, имеем далее Л + 2 = ¦* л + 2 ^л + 2» где -Гя+ 2 = ^л+ I ~Jn 187
Глава 6. Элементы комбинаторики Тогда окончательно получаем Л+ 2 =Л +1 Л* Здесь/о = 0,/, = 1. Полагая п = 0,1,2,... получим ряд чисел Фибоначчи: 0, 1, 1, 2, 3, 5, 8,13,21... 6.12. Решение линейных рекуррентных соотношений Пусть имеется рекуррентное соотношение Л+2=Л+1+Л F.3) и заданы начальные условия:/0 = 0, /, = 1. Если для некоторой числовой последовательности задано рекур- рекуррентное соотношение, то имеются известные неудобства: для вычисле- вычисления любого члена такой последовательности необходимо вычислить все предыдущие. Поэтому для быстрого вычисления любого элемента числовой последовательности стремятся получить формулу для его вы- вычисления в явном виде (как функцию номера вычисляемого элемента в рассматриваемой числовой последовательности). Поэтому, если получено рекуррентное соотношение, его целесо- целесообразно использовать для построения упомянутой функции. Такая задача легко разрешима для рекуррентного соотношения с постоян- постоянными коэффициентами. Методику поиска искомой функции предварительно рассмотрим на примере. Предположим, что решение соотношения F.3) имеет вид Тогда соотношение F.3) примет вид Разделив обе части соотношения нар" * О, получим р2=р+\ или Р2-р-\=0. 188
6.12. Решение линейных рекуррентных соотношений Отсюда 1±л/5 2 Тогда общее решение рекуррентного соотношения имеет вид Используем начальные условия для нахождения коэффициентов: 1 + л/5 1-V5 _ ci + С2 -Jo ~и» с| - + °2 2 ~ ~ Находим: 1 + л/5 1-л/5 Отсюда = _С|) ciZL^L_ciZ^i = i. 1 1 =__1_ 1 1 + V5 1-V5 л/5' 2 л/5' 2 2 И окончательно получаем , у 2 J I 2 J Л" V5 — формула Бине для вычисления чисел Фибоначчи. Рассмотренный пример позволяет изложить общий прием реше- решения линейных рекуррентных соотношений с постоянными коэффи- коэффициентами. В общем случае линейное рекуррентное соотношение с постоян- постоянными коэффициентами имеет вид Хп + к ~Uk-\ ХЛя + Л-1 ^ак-2 ХЛ:/!+*-2+-+а0 ХХ/»' \°^> где о, (/ = 0,1,2,...,/: -1) — постоянные коэффициенты, и х„х2, ...,дсА F.5) — начальные значения последовательности {хп}, заданной соотноше- соотношением F.4). 189
Глава 6. Элементы комбинаторики Решение соотношения F.4) находим в виде хп = рп. Подставляя это выражение в F.4), получим полином к-той степени: Это уравнение имеет к корней: /?,, ...,рк. Тогда общее решение уравнения F.4) примет вид 1=1 где неизвестные коэффициенты с,, находим, используя начальные ус- условия F.5), которые позволяют составить систему линейных уравне- уравнений относительно этих коэффициентов. Задача 29. Решить линейное рекуррентное соотношение при х0 - 1 и х] =2. Решение. Положим, что решение заданного рекуррентного соотношения имеет вид *„=/>". Подставляя в рекуррентное соотношение, получим /-4/7+1=0. Откуда Л,2=2±л/3. Тогда общее решение заданного рекуррентного соотношения имеет вид Находим коэффициенты сх и с2: с, + с2 = 1; с]р1 +с2р2 =2. Имеем: с =\-с с - 2~р2 - 1 1 Л -Pi 2* 190
6.13. Понятие производящей функции Следовательно Таким образом, окончательно получаем 6.13. Понятие производящей функции Пусть имеется некоторая числовая последовательность: я0, я„ д2, ...,я„, ... F.6) Поставим ей в соответствие функцию: 2+...+anzn+.-.= yZ<>nZn> F-7) л=0 которая называется производящей для последовательности F.6). Кроме того, последовательности F.6) иногда ставят в соответствие функцию /Хг) = яо+я,- + д2— + ... + ап — + ...= уап—, F.8) 0 ' 1! 2 2! " п\ & п\ которую называют экспоненциальной производящей функцией для по- последовательности F.6). Производящие функции используют для компактной записи чи- числовой последовательности. Они позволяют определить такие свой- свойства последовательности F.6), которые иным способом определить невозможно. Существуют различные способы построения производящих функ- функций. Имеется также алгебра производящих функций. Наиболее существенные результаты, относящиеся к производя- производящим функциям, были получены американским математиком Пойа. Наиболее просто производящая функция может быть найдена, если последовательность F.6) задана рекуррентным соотношением. Рассмотрим некоторые примеры построения производящих функций при известном рекуррентном соотношении. 191
Глава 6. Элементы комбинаторики Задача 30. Построить производящую функцию для чисел Фибоначчи. Решение. Имеем рекуррентное соотношение Л + 2=Л+1+Л. /о = О и /1 = 1. F.9) Соотношение F.9) умножим на г", где п = 0,1,2,3,.... Получим сис- систему уравнений. Сложив их левые и правые части, имеем л=0 л=0 л=0 Очевидно, что л=0 это искомая производящая функция. Далее находим: л=0 Z Подставим полученные результаты в F.10): Тогда откуда получаем искомую производящую функцию Z f(z) = \-z-z1 Задача 31. Построить производящую функцию для последовательности 1,1,1, ...,1, ... 192
6.13. Понятие производящей функции Решение. Запишем рекуррентное соотношение для заданной последователь- последовательности: Л+ 1 ~Jn- Как и ранее, умножив на ? при п = 0,1,2, ... и сложив полученные уравнения, получим л=0 л+0 Здесь л=0 Таким образом, имеем уравнение Отсюда получим f(z)= \-z Задача 32. Построить производящую функцию для последовательности Решение. Для решения поставленной задачи используем рекуррентное соот- соотношение для числа сочетаний: с;=с, +сг-;. Л /1-1 Я-1 Отсюда, используя изложенный выше прием, получаем l±± r=0 r=0 r=0 Так как из «-множества нельзя составить r-сочетания при г > л, то г=0 л=0 искомая производящая функция. 193
Глава 6. Элементы комбинаторики Для следующего члена соотношения F.11) — также производящая функция для сочетаний из п - 1 элементного множества. Находим далее: / J /7-1 ' * П-\ V П~\ г=0 г=\ Подставим полученные значения в соотношение F.11): Таким образом, Подставляя вместо производящей функции из (п - 1)-множества аналогичное соотношение, получим Продолжая процедуру подстановки, придем к соотношению Так как/0(^) = Со° = 1, то получим окончательно — производящая функция числа сочетаний. Таким образом, получено соотношение, называемое биномом Нью- Ньютона: „ ЧислаСгп называют также биномиальными коэффициентами. 6.14. Свойства биномиальных коэффициентов Биномиальные коэффициенты часто встречаются при решении за- задач перечислительной комбинаторики. Поэтому целесообразно изу- изучить основные их свойства. 194
6.14. Свойства биномиальных коэффициентов Итак, имеем „ ^c;zr=(\+zy. F.12) Первую группу свойств можно получить непосредственно из F.12). Преобразуем F.12): г=0 Следовательно, У~< Г /"» П-Г Нашли важное свойство биномиальных коэффициентов. Далее, полагая в F.12) z = 1, получим ?с; =2", что совпадает с ранее полученным результатом. Полагая в F.12) z = -1, будем иметь г=0 Это значит, что общее число сочетаний, имеющих четное число элементов, равно числу сочетаний, имеющих нечетное число элемен- элементов. Полагая в F.12) z = 2, находим: ?с;2'=зл. Полученное свойство находит многочисленные применения. На- Например, это свойство используется для подсчета числа элементарных конъюнкций булевой функции. Продифференцируем F.12) noz' Jc;^ =n(\+zy-]. r=0 Снова подстановками можно получить группу свойств. Так, пола- полагая z = 1, имеем и т. д. 195
Глава 6. Элементы комбинаторики Проинтегрируем F.12) от 0 до 1: Откуда имеем П 1 ")Л+1 1 V—— С -——— ~r + l n я + 1 Аналогичным образом можно получить иные свойства биноми- биномиальных коэффициентов. Контрольные вопросы 1. Какие задачи решает комбинаторика? 2. Что такое выборка? 3. Что такое сочетание? Перестановка? 4. Как формулируются правила суммы и произведения? 5. Чему равно число упорядоченных выборок с повторениями? 6. Чему равно число упорядоченных выборок без повторений? 7. Чему равно число перестановок из п элементов? 8. Как формулируется алгоритм порождения перестановок в лексикогра- лексикографическом порядке? 9. Как используются векторы инверсий для порождения перестановок? 10. Как используется метод вложенных циклов для порождения перестано- перестановок? 11. Как используется метод транспозиции смежных элементов для порожде- порождения перестановок? 12. Чему равно число неупорядоченных выборок без повторений? 13. Чему равно число неупорядоченных выборок с повторениями? 14. Как можно генерировать все подмножества конечного множества? 15. Как можно генерировать подмножества конечного множества с повторе- повторениями элементов? 16. Чему равно число разбиений множества на подмножества? 17. Как можно генерировать разбиения конечного множества? 18. Как можно генерировать разбиения числа? 19. Как формулируется основная теорема метода включений и исключений? 20. В чем состоит сущность метода рекуррентных соотношений? 21. Как решаются линейные рекуррентные соотношения? 22. Что такое производящая функция? 23. В чем сущность метода производящих функций? 24. Какие свойства биноминальных коэффициентов вы знаете? 196
Упражнения Упражнения Решить следующие задачи. 1. Сколько существует отображений множества А = {я, ,а2 ,а3}в мно- множество В = {Ь] ,Ь2}? 2. Сколькими способами из натуральных чисел от 1 до 20 можно выбрать два различных числа так, чтобы их сумма была четной? 3. Сколько различных слов можно получить, переставляя буквы слова «комбинаторика»? 4. Сколько различных слов можно получить, переставляя буквы слова «комбинаторика», и таких, в которых никакие две гласные буквы не стоят рядом? 5. Сколькими способами пятеро юношей могут выбрать себе парт- партнершу для танца из восьми девушек? 6. Сколькими способами из натуральных чисел от 1 до 30 можно выбрать три различных числа так, чтобы их сумма была четной? 7. Сколько существует трехзначных чисел, составленных из цифр 1, 2,3,4,5, и таких, чтобы в каждое число входила цифра 1 при усло- условии, что каждую цифру в числе можно использовать не более од- одного раза? 8. Сколькими способами колоду из 36 игральных карт можно сдать четырем игрокам? 9. Сколько существует элементов в п множесве А, обладающих ров- ровно двумя свойствами из четырех, которыми они могут обладать или не обладать? 10. Сколькими способами можно посадить рядом 3 англичан, 3 фран- французов и 3 турок так, чтобы никакие три соотечественника не сиде- сидели рядом? 11. Решить рекуррентное соотношение: ап+2~3ап =0, а0 =2, ах =0. 12. Решить рекуррентное соотношение: 197
Глава 6. Элементы комбинаторики 13. Найти производящую функцию для последовтельности {ап}, если ап+2+Зап = 0, а{ =а2=1 14. Найти производящую функцию для последовательности {ял} еслиял+2+Зял =0, ах =а2 =1. 15. Доказать, что Литература [6.1] Виленкин Н.Я. Комбинаторика. М.: Наука, 1969. [6.2] Гаврилов Г.П., Сапоженко А.А. Сборник задач по дискретной матема- математике. М.: Наука, 1977. [6.3] Гульден Я., Джексон Д. Перечислительная комбинаторика. М.: Наука, 1990. [6.4] Ежов И.И. и др. Элементы комбинаторики. М.: Наука, 1977. [6.5] КалужнинЛ.А., Сущанский В.И. Преобразования и перестановки. М: Наука, 1979. [6.6] Комбинаторный анализ. Задачи и упражнения / Под ред. К.А. Рыб- Рыбникова. М.: Наука, 1982. [6.7] КофманА. Введение в прикладную комбинаторику. М.: Наука, 1975. [6.8] Липский В. Комбинаторика для пограммистов. М.: Мир, 1988. [6.9] Райзер Г.Дж. Комбинаторная математика. М.: Мир, 1966. [6.10] Рейнгольд Э., Нивергелып Ю.,Део Н. Комбинаторные алгоритмы. М.: Мир, 1980. [6.11] РиорданДж. Комбинаторные тождества. М.: Наука, 1982. [6.12] Рыбников К.А. Введение в комбинаторынй анализ. М.: Изд-во МГУ, 1985. [6.13] Сачков В.Н. Введение в комбинаторные методы дискретной матема- математики. М.: Наука, 1982. [6.14] Сачков В.Н. Комбинаторные методы дискретной математики. М.: Наука, 1977. [6.15] Холл М. Комбинаторика. М.: Мир, 1970. [6.16] Эндрюс Г. Теория разбиений. М.: Наука, 1982. [6.17] Яблонский СВ. Введение в дискретную математику. М.: Наука, 1979. 198
Глава 7 Элементы теории алгоритмов 7.1. Предмет теории алгоритмов Теория алгоритмов — это раздел математики, который изучает об- общие свойства алгоритмов. Различают качественную и метрическую теорию алгоритмов. Основной проблемой качественной теории алгоритмов является проблема построения алгоритма, обладающего заданными свойства- свойствами. Такую проблему называют алгоритмической. Метрическая теория алгоритмов исследует алгоритмы с точки зре- зрения их сложности. Этот раздел теории алгоритмов известен также как алгоритмическая теория сложности. Приложения теории алгоритмов имеются практически во всех раз- разделах математики, а также во многих прикладных дисциплинах. 7.2. Интуитивное понятие алгоритма Слово алгоритм происходит от имени узбекского математика и ас- астронома, жившего в IX веке, Мухаммеда бен Мусы аль-Хорезми, кото- который впервые разработал правила выполнения арифметических опера- операций в позиционной системе счисления. Затем понятие алгоритма стало использоваться в более широком смысле и не только в математике. Как для математиков, так и для практиков понятие алгоритма имеет чрез- чрезвычайно важное значение. Понятие алгоритм часто интерпретируют как точное предписание, определяющее вычислительный процесс, начинающийся с произволь- произвольного исходного данного и направленный на получение результата, пол- полностью соответствующего этому исходному данному. Такое определе- определение алгоритма не является строгим с математической точки зрения, так как в нем используются такие понятия, как «точное предписание» и «произвольные исходные данные», которые не определены строго. Приведенное выше определение алгоритма называют интуитивным. Особенностью любого алгоритма является его способность решать некоторый класс задач. Например, это может быть алгоритм решения 199
Глава 7. Элементы теории алгоритмов систем линейных уравнений, алгоритм решения алгебраических урав- уравнений второй степени и тому подобное. С развитием науки и практики появились задачи, для которых не были найдены методы их решения. Возник вопрос: отсутствие алго- алгоритма решения для данного класса задач есть результат недостаточно- недостаточного знания о задачах этого класса либо решающий алгоритма для дан- данного класса не существует вообще? Для решения этой проблемы было введено понятие вычислимой функции. Пусть имеется некоторый алгоритм а. Областью применимости алгоритма а называют совокупность тех объектов, к которым он применим. Говорят, что алгоритм а вычисляет функцию /, если его область применимости совпадает с областью определения функции/, и алго- алгоритм а перерабатывает всякий элемент* из своей области примени- применимости в/(х). Функция Дх) называется вычислимой, если существует вычисляю- вычисляющий ее алгоритм. Данное определение функции также не является строгим. Амери- Американскими математиками Клини, а впоследствии Чёрчем были строго определены математические функции, названные примитивно-рекур- примитивно-рекурсивными. Чёрч высказал гипотезу о том, что множество всех рекурсив- рекурсивных функций совпадает с множеством всех вычислимых функций. Это предположение получило название тезиса Чёрча. Гипотеза Чёрча не может быть доказана, поскольку использует нестрогое понятие вы- вычислимой функции. Позже американские математики Пост и впоследствии Тьюринг ввели понятие математической машины, которую называют машиной Поста или машиной Тьюринга. Это абстрактная машина, которая «ме- «механически» выполняет вычисления. Тьюринг высказал гипотезу (из- (известную также как тезис Тьюринга) о том, что для всякой вычислимой функции может быть построена машина Тьюринга. Этот тезис также не может быть доказан, так как включает нестрогое понятие вычисли- вычислимой функции. Доказано, что для всякой рекурсивной функции может быть по- построена машина Тьюринга и, обратно, всякая машина Тьюринга вы- вычисляет рекурсивную функцию. 200
7.3. Примитивно-рекурсивные функции Известны также другие способы уточнения понятия алгоритма, например нормальный алгоритм Маркова. Практический опыт показывает, что тезисы Чёрча и Тьюринга являются верными, не имеется ни одного опровержения этих ут- утверждений. 7.3. Примитивно-рекурсивные функции Дадим элементарное представление о рекурсивных функциях. Рекурсивные функции — это функции, определенные некоторым специальным образом. Из названия следует, что их вычисление со- содержит обращение к самим себе (при меньших значениях аргумен- аргументов). Подразумевается, что рекурсивные функции являются арифме- арифметическими функциями, то есть область их определения и область значений — это множество натуральных чисел и нуль. Прежде всего определяют так называемые простейшие, или эле- элементарные рекурсивные функции. Элементарными называют следующие функции: 1. Функцию следования 2. Функцию константы (чаще всего это нуль) (Г(х19...9хЙ) = 0. 3. Тождественную функцию Для построения более сложных функций используют различные операции. Важнейшие из них — это операции суперпозиции и при- примитивной рекурсии. Операция суперпозиции заключается в подстановке одних рекур- рекурсивных функций вместо аргументов в другие рекурсивные функции. Пусть имеется п функций/,(х„ ...,/J, ...,/„(*,, ...,/J, каждая из ко- которых зависит от т аргументов, и имеется функцияДх,, ..., хп), зави- зависящая от п аргументов. Тогда операция суперпозиции дает нам функ- функцию т аргументов «<*„...,*.) =ж„...,/.). 201
Глава 7. Элементы теории алгоритмов Рассмотрим операцию примитивной рекурсии. Эта операция стро- строит функцию от п + 1 аргументов, если имеется две функции: функция g(x,, ..., х„) и функция *(*„ ..., х„, хл+ „ хп + 2) (функция от п + 2 аргу- аргументов). Таким образом, если требуется построить функцию от неко- некоторого числа аргументов, необходимо иметь две функции: одна из них g зависит от числа аргументов, которое на единицу меньше, чем число аргументов в строящейся функции/, а вторая функция h зависит от числа аргументов на единицу большего числа аргументов функции/. Операция примитивной рекурсии определяется следующим об- образом: \ {/(х, ,...,*„ ,у + 1) = *(*, ,...,х„ ,yj(x] ,...,*„ ,дО). В развернутом виде имеем, когда у = 0: Дх19 ...,*„, 0) =#(*,, ...,*„)• Если>>= 1,тоЛх,, ...,*„, 1) = *(*!, ...,хл, 0,Лх„ ...,х„, 0)). Если у = 2, тоД^р ...,^л, 2) = А(х„ ...,хл, 1,Л*|, ...,^„, О) и так далее. Иногда операцию примитивной рекурсии обозначают/= R(g, h). Заметим, что операция примитивной рекурсии фактически строит таблицу значений новой функции/. Функция называется примитивно-рекурсивной, если она может быть записана с помощью элементарных рекурсивных функций с использо- использованием конечного числа операций суперпозиции и примитивной ре- рекурсии. Функция называется частичной, если она определена не для всех значений аргументов. Пример 1. Доказать, что функция fix, у) = х + у является прими- примитивно-рекурсивной. Решение. Так как заданная функция f(x, у) есть функция двух аргументов, то для использования операции примитивной рекурсии мы должны иметь функциюg, зависящую от одного аргумента, и функцию /г, за- зависящую от трех аргументов. Определим их. 202
7.3. Примитивно-рекурсивные функции В функции Дх, у) = х + у положим у = 0. Тогда имеем/(х, 0) = х — это тождественная функция. Полагая у = 1, получим Л*> 1) = х + 1 — это функция следования. Таким образом, выбираем следующие элементарные функции: то- тождественную g(x) = х и функцию следования А(х,у, z) = Z + 1. Заме- Заметим, что здесь h(x,y,z) = /33 (*,y,s'(x)). Используем схему примитивной рекурсии: Лх,0)=?(х)=х, Ах, 1) = Л(х, 0,Ах, 0)) =Дх, 0) + 1 =х + 1, Л*, 2) = А(х, 1,Л*, D) =Ах, 1) + 1 =х + 2, Таким образом, построена функция (таблица ее значений), кото- которая равна сумме двух слагаемых. В дальнейшем, если мы хотим доказать примитивную рекурсив- ность некоторой функции, мы можем использовать не только элемен- элементарные рекурсивные функции, но и те функции, примитивная рекур- сивность которых доказана. Например, мы уже можем использовать операцию сложенияДх, у) = х + у. Пример 2. Доказать, что функция Л*, У) =х • (у + 1) примитивно- рекурсивна. Заметим, что Решение. f^y) Найдем требуемые функции g(x) и А, используемые в данном ре- решении. Для этого считаем, что, так как заданная функция Ах, у) есть функция двух аргументов, следует выбрать функцию g одного аргу- аргумента и функцию И трех аргументов. Для заданной функции можно записать: Первая из этих функций — это тождественная функция g(x) = х, а вторая определяет функцию И. Это функция сложения двух чисел, 203
Глава 7. Элементы теории алгоритмов которая, как доказано выше, является примитивно-рекурсивной. По- Поэтому можно использовать ее для выбора функции Л. Итак, имеем для операции примитивной рекурсии: g(x) = х — функция одного аргумента, Л(х, у, z) = х + z — функция трех аргументов. Проверим, что функции выбраны правильно. Из определения опе- операции примитивной рекурсии имеем: Л*, 0) =?(*)=*, Л*, 1) = А(х, 0, Л*, 0)) =Лх, 0) + х = 2х, Лх, 2) = А(х, 1,Лх, 1)) =Л*, 1) +*= Зх, Примитивно-рекурсивность операции умножения доказана. Пример 3. Доказать, что функция Л*) = 2х примитивно-рекурсивна. Снова определяем функции g и А для примитивной рекурсии. Ясно, что функция g должна зависеть от нуля аргументов (то есть быть кон- константой), а функция А должна зависеть от двух аргументов. Имеем fix) Первая из этих функций есть функция константы g(x) = 1, а вторая определяет функцию А. Это функция умножения двух чисел, которая (по доказанному выше) является примитивно-рекурсивной. Имеем для операции примитивной рекурсии: g(x) = 1 — функция константы — функция нуля аргументов, А(х, у) = 2у — функция двух аргументов. Проверим, что функции выбраны правильно. Из определения опе- операции примитивной рекурсии, имеем Л0)=?@)=1, 204
7.4. Машина Тьюринга ЛЗ) = 2Д2) = 8, 7.4. Машина Тьюринга Машина Тьюринга представляет собой бесконечную в обе стороны ленту, разбитую на ячейки. В каждой ячейке ленты может быть записан один из символов алфавита А = {а0, я,, а2, ..., aj, называемого внешним алфавитом машины М. Один из символов алфавита А выделяют, на- например, а0 и называют его пустым. Часто этот символ обозначают так- также как X или 0. Его наличие в ячейке означает, что она пустая. Кроме того, машина А/ имеет универсальную головку (УГ), которая в каждом такте работы машины обозревает одну ячейку ленты. По сиг- сигналам с устройства управления (УУ) универсальная головка считывает символ, записанный в ячейке, либо записывает один из символов ал- алфавита А в ячейку. По сигналам с УУ головка может перемещаться вдоль ленты на одну ячейку вправо, влево или оставаться на месте. УУ машины Муправляет всеми процессами в машине и может на- находиться в одном из состояний множества Q = {qQ, ql9 ..., qn}. Множе- Множество Q называют внутренним алфавитом машины М. В этом множест- множестве выделяют два символа: q0 — заключительное состояние машины и qx — начальное состояние машины. Схематически устройство машины Тьюринга представлено на рис. 7.1. УУ Рис. 7.1. Машина Тьюринга 205
Глава 7. Элементы теории алгоритмов Работа машины происходит по программе, состоящей из отдель- отдельных команд. Структура команды имеет вид где ак — символ, считываемый головкой с ленты; q. — состояние, в ко- котором находится УУ машины; а} — символ, который УГ записывает в обозреваемую ячейку; q, — состояние, в которое переходит УУ ма- машины; W— команда перемещения головки. Это может быть один из следующих символов: R — перемещение вправо на одну ячейку, L — влево на одну ячейку и S — головка остается на месте. Построить машину Тьюринга — означает написать программу ее работы. Существуют различные варианты построения машины Тьюринга: одно-, двух- и многоленточные, используются различные алфавиты. В дальнейшем будем полагать, что алфавит машины Тьюринга со- состоит из двух символов = {0,|}, где 0 — пустой символ, а | («вертикаль- («вертикальная черта») — символ занятости ячейки. В этом алфавите любое целое неотрицательное число к представ- представляется к + 1 символами |, записанными в соседних ячейках ленты. В этом случае число 0 будет записано так: Для сокращения записи число к записывают также следующим об- образом: ...0Г'О... Рассмотрим примеры построения машины Тьюринга, использу- использующей описанный выше внешний алфавит. Пример 1. Пусть требуется построить машину Тьюринга, вычисляю- вычисляющую функцинэДх) = х + 1. Будем предполагать, что перед началом рабо- работы на ленте машины записаны исходные значения аргументов и универ- универсальная головка обозревает первый слева значащий символ (рис. 7.2). Предполагаем также, что после выполнения вычислений УГ оста- останавливается перед первым значащим символом результата. Прежде чем писать программу работы машины Тьюринга, следует определить порядок ее работы для получения результата. В нашем слу- случае после окончания работы машины на ленте должно быть занято на одну ячейку больше, чем на ней занято ячеек перед началом работы. 206
7.4. Машина Тьюринга Рис. 7.2. Начальное положение УГ Очевидно, что наилучший способ выполнить это требование со- состоит в следующем. После начала работы УГ машины должна пере- переместиться на одну ячейку влево, записать в пустую ячейку символ | и остановиться. Поэтому программа работы такой машины имеет две команды. Первая команда имеет вид Согласно этой команде, машина, находясь в состоянии #,, читает символ |, записанный в обозреваемой ячейке, оставляет этот символ в ячейке, остается в прежнем состоянии qx и сдвигается на одну ячей- ячейку ленты влево. Вторая команда имеет вид Таким образом, согласно этой команде, машина, находясь в со- состоянии <7р читает пустой символ, записанный в обозреваемой ячей- ячейке, записывает на его место символ |, переходит в состояние д0 и оста- останавливается. Программа работы машины Тьюринга может быть записана в виде таблицы. Столбцам таблицы соответствуют символы внешнего алфа- алфавита, а строкам — состояния машины. В рассматриваемом примере таблица работы машины Тьюринга имеет вид я, 0 1 207
Глава 7. Элементы теории алгоритмов Пример 2. Пусть требуется построить машину Тьюринга, вычис- вычисляющую функцию Дх, у) = х + у. Аргументы функции записаны на ленте машины и отделяются друг от друга пустым символом (рис. 7.3). Рис. 7.3. Начальное размещение двух аргументов Определим способ функционирования машины Тьюринга для по- получения результата. Поскольку результат представляет собой массив занятых ячеек, определяющих число х + у, машина будет читать сим- символы первого аргументах, оставляя их неизменными. Как только ма- машина прочтет пустой символ, разделяющий два аргумента, в ячейку, содержащую этот символ, будет записан символ |. В результате на лен- ленте будет получен сплошной массив занятых ячеек. Число занятых яче- ячеек, очевидно, на две больше, чем необходимо для представления ре- результата — суммы двух чисел. Одна «лишняя» ячейка будет занятой, так как машина заполнит пустую ячейку, разделяющую первоначаль- первоначально два аргумента. Далее, для представления каждого числа использу- используется один дополнительный символ |. Поэтому при объединении двух массивов занятых ячеек, представляющих два числа, один из допол- дополнительных символов | следует удалить. Таким образом, после заполнения пустой ячейки, разделяющей два аргумента, машина должна вернуться к началу полученного сплошно- сплошного массива занятых ячеек ленты и в две из них записать пустой символ, после чего остановиться напротив первой слева занятой ячейки. Программа работы машины имеет следующий вид: 0<7, 208
7.4. Машина Тьюринга 1<7з Рассмотрим, что означают состояния, в которые переходит уст- устройство управления в процессе работы машины. Когда машина находится в состоянии ql и читает символ |, то это со- состояние означает чтение ячеек, занятых аргументом х. Как только, на- находясь в состоянии <7,, будет прочитана пустая ячейка, машина перей- перейдет в состояние q2. Это состояние означает, что машина читает ячейки, занятые полученным сплошным массивом ячеек ленты. Когда, нахо- находясь в состоянии q2, машина прочитает пустую ячейку, УУ перейдет в состояние qy Это состояние означает, что головка машины уже нашла первую пустую ячейку перед сплошным массивом занятых ячеек и дви- движется вправо, чтобы записать пустой символ вместо символа |. Нако- Наконец, состояние q4 означает, что удален только один из двух символов |. Состояние q0 — заключительное. Пример 3. Пусть требуется построить машину Тьюринга, вычис- вычисляющую функциюДд:) = 2х. Определим порядок вычисления значения этой функции маши- машиной. Так как результат должен представлять массив из 2к - 1 занятых ячеек, где к = х + 1 — число ячеек, занятых аргументом х, то вычисле- вычисление организуем следующим образом. В ячейку, занятую аргументом х, вместо символа | записывается пустой символ. В каждом таком случае символ | записывается в двух ячейках, представляющих результат. Этот результат формируем в виде массива ячеек, расположенных справа от массива ячеек, занятых ар- аргументом х, через одну пустую ячейку. Когда вместо всех ячеек, заня- занятых аргументом х, будут только пустые ячейки, в новом массиве заня- занятых ячеек удаляется одна ячейка с символом |. Программа работы машины Тьюринга, вычисляющая функцию J{x) = 2x, имеет следующий вид: \q] —> Oq2R — удалена одна занятая ячейка аргумента. \q2 —> \q2R — читаются занятые ячейки аргумента. 0<72 -> Oq3R — найдена разделяющая пустая ячейка. |<73 —> |<73^ ~~ читаются занятые ячейки результата. О<73 —> \qAR — заполнена одна пустая ячейка результата. 0q4 —> \q5L — заполнена вторая ячейка результата. 209
Глава 7. Элементы теории алгоритмов \q5 —> \q5L — просматриваются в обратном порядке занятые ячейки результата. 0q5 —> 0g6L — найдена пустая разделительная ячейка. 0qe -» Qq7R — найдена вторая пустая ячейка. 0q7 -» 0qsR — снова читается пустая разделительная ячейка. \q% —» 0q0R — удаляется один занятый символ. Конец. \qe -> \q9L — найдена занятая ячейка аргумента. \q9 —> \q9L — просматриваются в обратном порядке занятые ячейки аргумента. 0q9 -> 0qxR — найдена пустая ячейка перед занятыми ячейками ар- аргумента. 7.5. Композиция машин Тьюринга Чтобы можно было строить сложные машины Тьюринга, опреде- определяют понятие композиции машин Тьюринга. Композицией машин Тьюринга Л/, и М2 называется машина Тьюрин- Тьюринга Л/, которая первоначально функционирует как машина Тьюринга Л/,, заключительное состояние которой qQ изменяют на начальное со- состояние машины Тьюринга Л/2. И далее машина М функционирует как машина Тьюринга М2. Композицию машин Тьюринга обозначают: Л/ = Л/, о Л/2. Из определения композиции машин Тьюринга следует, что Л/,оЛ/2 *М2оМг Так, если необходимо построить машину Тьюринга, вычисляю- вычисляющую функциюДх, у) = х + у +1, то достаточно выполнить компози- композицию машин Тьюринга, построенных в предыдущем разделе. Пусть машина Л/, вычисляет функциюДл:) = х + 1, а машина М2 вычисляет функцию/(х И- у). Тогда машина Л/ = Мх о Д/2 будет вычислять, оче- очевидно, функцию /(*, у) =х + у + 1. Для этого нужно к программе, описывающей машину Л/,, присоединить команды машины Л/2. Со- Состояния машины Мх будут также состояниями машины Л/. Заключи- Заключительное состояние qQ машины Л/, следует заменить состоянием q2, которое будет соответствовать начальному состоянию машины Л/2. Тогда изменится соответствующим образом нумерация состояний машины М2: состояние qx изменится на состояние q2 машины Л/, со- состояние q2 изменится на состояние q3 и так далее. 210
7.6. Алгоритмически неразрешимые проблемы 7.6. Алгоритмически неразрешимые проблемы В разделе 7.2 была определена необходимость уточнения понятия алгоритма. Мы рассмотрели два равноправных подхода к решению этого вопроса, поскольку легко показать, что для примитивно-ре- примитивно-рекурсивной функции может быть построена машина Тьюринга и на- наоборот. Рекурсивные функции и машины Тьюринга дают косвенное оп- определение понятия алгоритма: если возможно доказать, что некото- некоторая функция примитивно-рекурсивна, или возможно построение машины Тьюринга для получения решения некоторой задачи, то та- такая задача разрешима. С другой стороны, если доказано, что решение некоторой задачи не может быть получено вычислением примитивно-рекурсивных функ- функций, или доказано, что для решения данной задачи не может быть по- построена машина Тьюринга, то такая задача называется алгоритмически неразрешимой. Были найдены некоторые алгоритмически неразрешимые задачи. Одна из таких задач — проблема остановки, которая формулирует- формулируется следующим образом. Пусть имеется некоторая программа Л (ма- (машина Тьюринга) и некоторые исходные данные d. Необходимо для любой программы Л и любых исходных данных d определить, остано- остановится ли программа Л (то есть будет ли получен результат) или нет. Было доказано, что данная проблема алгоритмически неразрешима. Имеются также другие алгоритмически неразрешимые проблемы (например, доказана неразрешимость проблемы распознавания вы- выводимости в математической логике, доказана невозможность реше- решения в радикалах алгебраического уравнения л-й степени при п > 4 и другие). Однако понятие алгоритмической неразрешимости не озна- означает, что определенная проблема не может быть решена в некоторых частных случаях. Неразрешимость обычно свидетельствует о чрез- чрезмерно общей постановке проблемы, о невозможности решения всех задач данного класса одним и тем же приемом. Важность доказательства факта, что некоторая задача алгоритми- алгоритмически неразрешима, состоит в том, что исследователь не будет тратить время и силы на разработку алгоритма решения данной задачи в об- общем виде. 211
Глава 7. Элементы теории алгоритмов 7.7. Понятие сложности алгоритма Признак, позволяющий оценивать качество разработанного алго- алгоритма, называют критерием качества. Сейчас ни одна публикация, посвященная разработке алгоритма, не может считаться полной, если не приведена качественная оценка этого алгоритма. Какой же критерий используется при оценке качества алгоритма? Обычно таким критерием качества является сложность. Ниже более подробно остановимся на сущности этого критерия. Существуют различные понятия сложности алгоритма. Чтобы оценка сложности алгоритма была объективной, необходимо, что- чтобы эта оценка была количественной, то есть выражалась числом. Возможны различные оценки такого вида. Например, пусть имеются два алгоритма для решения одной и той же задачи (точнее — для решения одного и того же класса задач). Что- Чтобы определить их сравнительное качество, можно говорить, что алго- алгоритм Ах является лучшим или, иными словами, что он имеет лучшее качество, чем алгоритм А2, если описание алгоритмаЛх является коро- короче (в программе используется меньше операторов), чем описание ал- алгоритма^. Очевиден недостаток такого критерия — можно написать корот- короткую программу и ожидать решения очень долго. Поэтому на практике наиболее приемлемой оценкой сложности алгоритма является оцен- оценка времени его работы. Этот критерий позволяет определить вре- временные границы разрешимости задачи. Нужно понимать, что такая оценка алгоритма не «привязывается» к конкретному компьютеру. Теоретики, оценивая сложность алгоритма, строят математиче- математическую машину Тьюринга. Тогда число шагов, необходимых машине Тьюринга, чтобы решить некоторую задачу в соответствии с данным алгоритмом, и определяет его сложность. Однако построение машины Тьюринга для этой цели является очень громоздким и сложным процессом. Поэтому практики опреде- определяют временную оценку сложности алгоритма (и программы), полагая, что данный алгоритм выполняется также на некотором абстрактном компьютере. Этот компьютер обладает тем свойством, что каждое действие, определяемое алгоритмом, он выполняет за единицу време- времени, которая никак не уточняется, то есть в действительности это ни се- секунды, ни миллисекунды или наносекунды. 212
7.7. Понятие сложности алгоритма С этой точки зрения, например, операции сложения, умножения, деления, сравнения и тому подобное выполняются за единицу време- времени каждая. Но это только часть дела — определить вышеуказанные особенно- особенности работы абстрактного компьютера. Очевидно, что алгоритм может быть очень эффективным, или вре- время его работы может быть небольшим, если он работает с данными небольшого размера. Например, если граф содержит 6—7 вершин, то совсем нетрудно найти кратчайший путь между его двумя заданны- заданными вершинами, выполнив перебор различных вариантов движения из одной вершины в другую. В этом случае, например, алгоритм Дейкст- ры может оказаться не лучше, чем алгоритм полного перебора. Чтобы определить временную сложность алгоритма, принято оце- оценивать эту сложность как функцию от размерности задачи. В частно- частности, для алгоритмов на графах принято оценивать сложность алгорит- алгоритма как функцию от числа вершин фафа, то есть сложность графового алгоритма — это функция Дл), где п — число вершин графа. Заметим, что при построении функции сложности находят ее выра- выражение для худшего случая, или, говоря по-английски, — это worst-case analysis, то есть анализ худшего случая. Худший случай означает, что функция строится в предположении существования наиболее неблаго- неблагоприятных для алгоритма (с точки зрения вычислений) случаев реше- решения задачи. Такая функция может иметь различный вид для различных алго- алгоритмов. Например, временная сложность некоторого алгоритма ре- решения задачи на графах может быть представлена как полиномиаль- полиномиальная функция от числа вершин п графа: Дл) = 5л2+ 15/1-14. С другой стороны, чтобы решить задачу коммивояжера, можно рассмотреть всевозможные перестановки вершин графа. В этом слу- случае функция временной сложности имеет такой вид: Т(п) = с(п - 1)!, где с — некоторая константа. Принято делить алгоритмы по критерию сложности на два класса. Первый класс составляют алгоритмы, функция сложности которых описывается некоторым полиномом, например Т(п) = 5п2 + 15л- 14. Эти алгоритмы называют полиномиальными. 213
Глава 7. Элементы теории алгоритмов Второй класс — это алгоритмы, функция сложности которых не описывается полиномом. Такие алгоритмы называют экспоненциаль- экспоненциальными, хотя, строго говоря, их функция сложности может отличаться от экспоненты. Например, указанный выше переборный алгоритм для решения задачи коммивояжера, у которого функция сложности есть Т(п) = с(п - 1)!, также называют экспоненциальным. Это связано с тем, что любая не полиномиальная функция сложности Т(п) может быть представлена в виде Т(п) = 2р{п\ где п — размер задачи, ар(п) — некоторый полином. Принято считать полиномиальные алгоритмы «хорошими», а экс- экспоненциальные алгоритмы — «плохими». Такое разделение относи- относительно, так как если степень полинома большая, то полиномиальный алгоритм может работать неприемлемо долго. Полагают, что практи- практически применимы полиномиальные алгоритмы, время работы кото- которых определяется полиномом, степень которого не превышает 4. Иногда, кроме временной сложности алгоритма, оценивают затра- затраты памяти для его работы. В этом случае пространственная оценка оп- определяет наибольший размер памяти компьютера, необходимый для работы алгоритма. Это также некоторая функция от размерности зада- задачи, например, для графов — это функция числа вершин графа S(n). 7.8. Асимптотические оценки функций сложности Практически нет необходимости в точном построении выражения для функции сложности, что зачастую выполнить достаточно сложно. Возможность использования приближенного представления функции сложности объясняется тем, что ошибкой, возникающей в результате такого представления, на практике можно пренебречь. В этом случае найденная оценка будет верной при решении задачи на различных типах компьютеров. Для практических целей достаточно определить лишь порядок роста функции сложности с увеличением размерности решаемой задачи. Функцию сложности обычно представляют в виде некоторой асим- асимптотической оценки. Суть такой оценки — сравнение поведения некоторой реальной функции Дл) и идеализированной (более простой) функции g(n), ко- когда п стремится к бесконечности. 214
7.8. Асимптотические оценки функций сложности Говорят, что функцияДл) есть O(g(n)) (О-большое от #(л)), если HmZ^ = const >0. В случае, когда такой предел имеет место, пишут: J[n) = O(g{rij). Например, если имеется функция сложности Т(п) = 5л2 + 15л - 14, то можно записать, что Т(п) = 0(л2), так как г 5л2+15л-14 . hm = 5. "-*~ л Говорят, что функция Дл) есть o(g(n)) (р-малое от g(n)), если ,im0. "">- g(n) В случае, когда такой предел имеет место, пишутДл) = o(g(n)). На- Например, Т(п) = о(л2'5), так как .. 5л2+15л-14 л hm = 0 Приведенные выше асимптотические оценки применяются в боль- большинстве случаев. В частности, когда это возможно, стремятся получать оценку вида Эта оценка указывает на верхнюю границу функции сложности Дл), то есть время работы такого алгоритма растет с ростом размерно- размерности задачи не быстрее, чем#(л). Иногда также используют некоторые другие асимптотические оценки. Говорят, что функция J{n) асимптотически эквивалентна функ- функции #(л), и пишут:Дл) ~g(n), если Говорят, что функция Дл) есть &(#(л)) (омега omg(n)), если 215
Глава 7. Элементы теории алгоритмов Рассмотрим некоторые простые примеры получения оценок. Пример 1. Пусть имеется множество целых чисел А = {av а2, ..., а}. Рассмотрим алгоритм нахождения минимального элемента массива А. Шаг 1. Ввести TV элементов массива А Шаг 2. Положить / = 1, min = MAXINT, где MAXINT есть наибольшее целое число, представимое в компьютере. Шаг 3. Если min > ар то положить min = аг Шаг 4. Если / < N, то положить /:=/' + 1 и перейти к Шагу 3. Шаг 5. Печатать минимальное число массива min. Оценим сложность получения минимального элемента массива. Шаг 1 выполняется один раз и требует п единиц времени. Шаг 2 также выполняется один раз и на каждое присваивание значений ве- величинам / и min необходима одна единица времени, то есть этот шаг требует 2 единицы времени. Шаги 3 и 4 выполняются п раз каждый. Шаг 3 требует не более двух единиц времени, когда условие выполняется (единица времени на проверку условия и единица времени на присваивание нового значения величине min). Шаг 4 также требует 2 единицы времени — единица на проверку условия и единица на увеличение значения ве- величины I. Наконец, шаг 5 требует одну единицу времени. Таким образом, функция сложности Т(п) показывает, что поиск минимального элемента массива А требует 5л + 1 единиц времени. Асимптотическая оценка сложности равна О(п), так как .. 5л + 1 . lim = 5. Эту же оценку можно получить проще: шаг 1 требует для своего выполнения 0{п) единиц времени, шаги 3—4 также требуют О(п) еди- единиц времени, то есть в целом для нахождения минимального элемен- элемента массива нужно затратить О(п) + О(п) = О(п) единиц времени. Паскаль-программа, реализующая данный алгоритм для 10-эле- ментного массива, имеет следующий вид: 216
7.8. Асимптотические оценки функций сложности Program MIN_VALUE; var a:array[1..10] of integer; min:integer; i:integer; begin writeln('Введите 10 элементов массива1); for i:=1 to n do readln(a[i]); min:=MAXINT; for i:=l to 10 do begin readln (a [i]); if min>a[i] then min:=a[i]; end; writeln('Минимальный элемент массица = ', min); end. Данный пример также показывает, что находить сложность алго- алгоритма по его описанию или по реализующей программе (сложность программы) приводит, как правило, к одному и тому же результату. Пример 2. Рассмотрим алгоритм сортировки элементов массива целых чисел «пузырьковым» методом в порядке возрастания их зна- значений. Шаг 7. Ввести N элементов массива Л. Шаг 2. Положить / = 1. Шаг 3. Положить./ = / + 1. Шаг 4. Если а. > ар то положить х := а г, а.к := а:, а} := х; Шаг 5. Еслиу < N, то положить./ :=у + 1 и перейти к шагу 4. Шаг 6. Если / < TV - 1, то положить / := / + 1 и перейти к шагу 3. Шаг 7. Печатать элементы упорядоченного массива. Найдем асимптотическую оценку временной сложности алгоритма. Шаг 1 выполняется один раз и требует для выполнения О(п) еди- единиц времени. Шаги 3-5 выполняются О(п) раз, а шаги 2-6 выполня- выполняются О(п) - О(п) = О(п2) раз. Шаг 7 также выполняется один раз и тре- требует для выполнения О(п) единиц времени. Следовательно, общее время работы алгоритма равно О(п2). Паскаль-программа, реализующая данный алгоритм для 10-эле- ментного массива, имеет следующий вид: 217
Глава 7. Элементы теории алгоритмов Program Sort; const n = 10; { количество элементов в массиве } var aiarray[I..n] of integer; i,j,x:integer; begin writeln('введите f,n,' элементов массива1); for i:=l to n do readln( a[i] ); for i:=l to n-1 do begin for j:=i+l to n do begin if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; end; end; writeln ('после сортировки:1); for i:=l to n do writeln ( a[i] ); end. 7.9. Трудноразрешимые задачи В разделе 7.6 рассмотрено понятие алгоритмически неразреши- неразрешимой проблемы. Для многих практически важных задач такая пробле- проблема, как правило, не актуальна, так как известно, что они являются ал- алгоритмически разрешимыми. При решении задачи на компьютере исходные данные и результат решения всегда представлены с некоторой (конечной) точностью, так как компьютер работает с машинным словом, имеющим конечную длину. Таким образом, мы имеем конечное число машинных слов, среди которых находится и слово, представляющее результат реше- решения задачи. В таких случаях всегда можно решить задачу, используя так называемый тривиальный алгоритм — полный перебор возмож- возможных значений машинного слова. Однако подобный подход к реше- решению задач практически неприемлем уже для относительно неболь- небольших размеров машинного слова. Время решения реальных задач может оказаться настолько большим, что они практически неразре- неразрешимы. 218
7.9. Трудноразрешимые задачи При разработке алгоритмов можно наблюдать, что для некоторых задач удается построить алгоритмы, удовлетворяющие практическим потребностям, и успешно решить их на компьютере. Для других задач не удается разработать алгоритм более эффективный, чем алгоритм полного перебора. Все такие задачи называют трудноразрешимыми. Можно привести многочисленные примеры практически важ- важных задач, которые являются трудноразрешимыми. Это задана ком- коммивояжера, в которой требуется найти гамильтонов цикл в ребер- но-взвешенном графе такой, что суммарная стоимость циклических ребер является наименьшей. Это задача поиска дизъюнктивной нор- нормальной формы (ДНФ) булевой функции, в записи которой исполь- используется наименьшее число литералов (переменных и их отрицаний), известная как задача построения минимальной ДНФ булевой функ- функции, и многие другие. Возникает вопрос: является ли неудача в разработке алгоритмов для решения некоторых задач следствием неумения конкретного раз- разработчика или следствием каких-то свойств задачи? Ответ на поставленный вопрос пытается дать теория вычислитель- вычислительной сложности. Чтобы ответить на этот вопрос, необходимо каким-то образом классифицировать существующие задачи. Прежде всего определим форму, в которой должна быть представ- представлена задача. В теории вычислительной сложности принято рассмат- рассматривать задачи, сформулированные в распознавательной форме. При представлении задачи в распознавательной форме формулируется во- вопрос, на который может быть один из двух ответов: «да» или «нет». Имеются задачи, которые изначально имеют распознавательную форму. Например: является ли число Z простым? Являются ли два графа G, и G2 изоморфными? Другой пример — задача Выполни- Выполнимость (Satisfiability — SAT), которая исторически является первой распознавательной задачей, сформулированной американским ма- математиком С. Куком. В этой задаче представлена некоторая булева функция/в конъюнктивной нормальной форме и задается вопрос: существует ли набор значений переменных функции/, на котором она принимает значение 1 (истина)? Еще пример: существует ли на- набор из п ребер данного графа, который образует гамильтонов цикл, то есть цикл, при обходе ребер которого каждая вершина графа посе- посещается только один раз? 219
Глава 7. Элементы теории алгоритмов Задачи, которые в исходной постановке представлены в иной, не распознавательной форме, приводят к такой форме. Например, если требуется найти наибольшее независимое множество вершин графа, то формулируют вопрос: существует ли для данного графа G = (V, Е) и положительного целого числа К < Card( V) независимое множество мощности не менее А? 7.10. Класс NP Определим класс задач, рассматриваемых в теории вычислитель- вычислительной сложности. Ранее уже отмечалось, что существующие алгоритмы делятся на два класса: полиномиальные и экспоненциальные. Алгоритмы, время работы которых оценивается некоторым полиномом от размерности задачи, принято считать «хорошими». В то же время алгоритмы с экс- экспоненциальным временем работы считаются «плохими». Множество всех задач, для которых существует полиномиальный решающий алгоритм, обозначим через Р. Выясним, как можно охарактеризовать задачи, для которых в настоящее время не известен полиномиальный разрешающий ал- алгоритм. Ясно, что время работы алгоритма для нахождения, например, всех подмножеств данного л-множества, всех покрывающих деревьев данного л-графа или всех-его максимальных независимых множеств всегда есть экспоненциальная функция от размерности задачи п (чис- (числа вершин графа), то есть такой алгоритм изначально предопределен быть «плохим». Можно полагать, что в этом случае сама постановка задачи влечет экспоненциальность времени работы алгоритма. Такие задачи называют экспоненциальными по постановке. Очевидно, что та- такие задачи неинтересны для нас, поскольку очевидно, что получить хороший (полиномиально-временной) алгоритм для них невозмож- невозможно. Поэтому такие задачи целесообразно исключить из дальнейшего рассмотрения. Исключим также из рассмотрения задачи, для которых не существует никакого алгоритма решения (например, задачу о про- проблеме остановки — см. раздел 7.6). В теории сложности выделяют такие задачи, в которых время по- построения решения есть полиномиальная функция от размерности за- 220
7.10. Класс NP дачи. Кроме того, вводится требование, чтобы за полиномиальное время можно было проверить правильность полученного решения. Для характеризации задач, решаемых на компьютере, вводят по- понятие недетерминированной машины Тьюринга. Рассмотренную ранее в разделе 7.4 машину Тьюринга называют детерминированной (ДМТ). Недетерминированная машина Тьюринга (НМТ) содержит все те же устройства, что и ДМТ. НМТ также содержит дополнительное устройство (О), которое иногда называют оракулом (прорицателем) — см. рис. 7.4. Оракул с помощью универсальной головки У2 читает исходные данные задачи, записанные на ленте, стирает их, «угады- «угадывает» решение и записывает это решение на ленту. Затем машина ра- работает как обычная (детерминированная) машина Тьюринга — это процесс верификации (проверки) решения. Универсальная головка УГ читает решение, записанное на ленте, и проверяет его. Если реше- решение правильное, то на ленте записывается единица (ответ «да»), если нет — то нуль. О УУ Рис. 7.4. Недетерминированная машина Тьюринга Множество всех задач, разрешимых на недетерминированной ма- машине Тьюринга за полиномиальное время, образует класс NP. Существует другая интерпретация работы недетерминированной машины Тьюринга. Согласно этой интерпретации, основное отличие работы НМТ от работы детерминированной машины Тьюринга со- состоит только в возможности одновременной проверки правильности всех альтернатив. На каждом этапе вычислений НМТ строит множе- множество промежуточных решений, и дальнейшая работа НМТ произво- производится только с теми ранее полученными промежуточными решения- решениями, которые удовлетворяют условиям задачи. 221
Глава 7. Элементы теории алгоритмов Однако для практического применения удобно использовать аль- альтернативное определение класса NP. Будем говорить, что задача Z принадлежит классу NP, если: 1) задача может быть задана конечным числом символов TV; 2) решение задачи также может быть представлено конечным чис- числом Л/символов, где Месть полиномиальная функция otN : М =Д^О; 3) время проверки полученного решения /есть некоторая полино- полиномиальная функция от N: / = t(N). Большинство практически важных задач принадлежат к клас- классу NP. Например, вышеупомянутая задача поиска гамильтонова цикла принадлежит классу NP, так как исходная задача задается конечным графом, например матрицей смежности этого графа. Такая матрица содержите х п элементов, где п — число вершин графа. Решение зада- задачи — совокупность из п ребер графа. За полиномиальное время мож- можно убедиться, что предъявленная совокупность из п ребер действи- действительно образует гамильтонов цикл. Можно заключить, что задачи класса Р принадлежат классу NP, то есть имеет место соотношение Р с NP. Конечно, желательно всегда иметь только «хорошие» алгоритмы. Однако для многих практически важных задач, таких как задача нахо- нахождения наибольшего независимого множества вершин графа, задача поиска гамильтонова цикла и многих других, пока не удается разрабо- разработать полиномиальный решающий алгоритм. Поэтому возникает вопрос: класс Р совпадает ли с классом NP или является его строгим подмножеством? Этот вопрос поставлен уже бо- более тридцати лет назад и до сих пор не нашел своего решения. Ответ на эту проблему имеет важное практическое значение. Интересно, что математический институт Клэя (США) (Clay Mathe- Mathematics Institute) объявил приз в размере одного миллиона долларов за решение этой проблемы (см. http://www.claymath.org/prize_problems/). 7.11. NP-полные задачи Для некоторых задач класса NP было обнаружено удивительное свойство. Оказалось, что некоторые из них универсальны в том смыс- смысле, что построение полиномиального алгоритма для любой такой за- задачи влечет за собой возможность построения такого же алгоритма для всех задач класса NP. Такие задачи называют NP-полными. 222
7.11. NP-полные задачи Чтобы понять суть этого свойства, необходимо определить неко- некоторые понятия. Прежде всего заметим, что всякий алгоритм способен решать не одну конкретную задачу, а определенный класс задач. Например, ал- алгоритм Прима способен найти наименьшее по весу покрывающее дерево (каркас) для любого конечного графа. Такое множество кон- конкретных, или индивидуальных, задач (instances) называют массовой задачей (decision problem). Пусть имеются две массовые задачи Z, и Z2 из NP. Будем гово- говорить, что массовая задача Z, полиномиально сводится к массовой за- задаче Z2, если: 1) для любой индивидуальной задачи из Z, можно за полиноми- полиномиальное время построить соответствующую ей индивидуальную зада- задачу из Z2; 2) решение построенной индивидуальной задачи из Z2 за полино- полиномиальное время может быть преобразовано в решение соответствую- соответствующей индивидуальной задачи из Z,. Заметим, что когда говорится о полиномиальном времени построе- построения индивидуальной задачи из Z2 или о преобразовании ее решения в решение индивидуальной задачи из Z, также за полиномиальное вре- время, то подразумевается возможность построения соответствующего полиномиального алгоритма для такого преобразования. Процесс сведения одной задачи класса NP в другую задачу этого класса не всегда простой и может потребовать известной изобрета- изобретательности. В следующем разделе рассмотрим пример сведения задачи поиска минимальной ДНФ к задаче разбиения графа на минимальное число клик. Теперь определим понятие NP-полной задачи. Массовую задачу ZHa3biBaiOT NP-полной, если любая задача из это- этого класса полиномиально сводится к решению задачи Z. Таким обра- образом, теперь ясно, что разработка полиномиального алгоритма для ре- решения любой NP-полной задачи практически означает возможность построения такого алгоритма для любой задачи класса NP. Исторически первой NP-полной задачей является задача Выпол- Выполнимость (Satisfiability, или сокращенно SAT). Она формулируется сле- следующим образом. Литералом назовем любую из булевых переменных х,,х2, ...,хл, взятую с отрицанием или без отрицания. 223
Глава 7. Элементы теории алгоритмов Дизъюнкцию различных литералов называют дизъюнктом (clause). Конъюнкция дизъюнктов определяет некоторую булеву функцию. Иначе такое представление булевой функции называют ее конъюнк- конъюнктивной нормальной формой. Требуется найти такие значения булевых переменных, для которых построенное выражение истинно (если оно существует). В настоящее время найдены сотни NP-полных задач. Имеются списки таких задач (см., например,[7.3]). Из изложенного выше ясно, что если необходимо разработать ре- решающий алгоритм для некоторой задачи и эта задача является NP-пол- NP-полной, то результат такой разработки, скорее всего, будет отрицатель- отрицательным. Если предложенной задачи нет в известных списках NP-полных задач, то, чтобы доказать NP-полноту новой задачи, необходимо уста- установить, что такая задача принадлежит классу NP, и свести решение лю- любой известной NP-полной задачи к решению предложенной задачи. В настоящее время для решения NP-полных задач используют в основном различного рода эвристические алгоритмы, подобные ал- алгоритму MIN. С другой стороны, если разработка решающего алго- алгоритма для задачи из класса Р может рассматриваться как рутинная ра- работа, то поиск решающего алгоритма для решения NP-полной задачи или ее подкласса требует высокой математической подготовки. 7.12. Пример полиномиального сведения 7.12.1. Постановка задачи Как указывалось в главе, когда говорят о минимизации булевых функций в классе ДНФ, то подразумевают одну из двух задач: задачу построения кратчайшей ДНФ и собственно минимальную ДНФ. Крат- Кратчайшая ДНФ имеет наименьшее число дизъюнктивных членов (про- (простых импликант) по сравнению с другими ДНФ данной функции, а минимальная — наименьшее суммарное число литералов (то есть переменных функции с отрицанием или без), используемых при за- записи ДНФ. Пусть имеется булева функцияДх,, ..., хт), заданная множеством V всех ее единичных наборов, то есть таких значений переменных, на которых функция/принимает единичные (истинностные) значения. 224
7.12. Пример полиномиального сведения Напомним, что любую конъюнкцию к {к < т) переменных функ- функции/ взятых с отрицанием или без отрицания, называют элементарной. Здесь х,о/ = х;., если а, = 1, и х,о/ = х,., если а, = 0. Число k = r(U) назы- называют рангом конъюнкции U. Переменные функции/, входящие в конъюнкцию U, назовем свя- связанными в ней, а остальные переменные — свободными для конъюнк- конъюнкции U. Множество связанных переменных конъюнкции U обозна- обозначим S(U). Говорят, что конъюнкция U покрывает множество К, с К единиц функции/, если на всяком наборе из К, значение элементарной конъ- конъюнкции i/равно единице, а на всех остальных наборах переменных функции/— равно нулю. Такую конъюнкцию называют также импли- кантой функции/ Импликанту U называют простой, если никакая ее собственная часть импликантой функции/не является. Другими словами, импли- канта ^/является простой, если функция/не имеет другой импликан- ты U*такой, что S(U*) с S(U), или V\S(U) <zV\S(U*). Легко заметить, что множество К, наборов, покрываемое импли- импликантой U, имеет следующие свойства: • Card(К,) = 2', где / = Card( V\S(U))\ • / свободных переменных функции / принимают всевозможные значения на множестве наборов К,; • значения (т- t) = k связанных переменных функции/принима- функции/принимают фиксированные значения (на которых конъюнкция f/равна еди- единице). Лемма 7.12.1. Если ?/,, U2 есть простые импликанты булевой функ- функции/, покрывающие соответственно подмножества V] aVи V2 с V единиц этой функции, то найдутся хотя бы два единичных набора v,, v2 g VmaKue,4movxe И,, v,e V2uv2e Vlfv2e V2u которые отлича- отличаются друг от друга значениями по крайней мере двух переменных функции/. Очевидно. Q.E.D. 225
Глава 7. Элементы теории алгоритмов Лемма 7.12.2. Если v, и v2 — наборы, покрываемые раздельно просты- простыми импликантами Ux и U2 соответственно, то не существует про- простой импликанты U такой, которая одновременно покрывала бы эти наборы. Пусть выполняются условия леммы 7.12.2. Предположим, что существует простая импликанта Uтакая, кото- которая одновременно покрывает наборы v, и v2, раздельно покрываемые простыми импликантами ?/, и U2. Согласно лемме 7.12.1, наборы v, и v2 отличаются друг от друга зна- значениями по крайней мере двух переменных функции/. Отсюда следу- следует, что упомянутые переменные являются свободными для простой импликанты U. Значения связанных переменных импликанты U3, очевидно, сов- совпадают со значениями таких же переменных как импликанты U], так и импликанты U2. Иначе Ux и U3, а также U2 и U3 не покрывали бы (ка- (каждая пара) общего набора. Но тогда существует такая импликанта U, для которой свободными будут переменные из множеств ?(?/,) и 5(?/2), то есть V\S(UX) с V\S(U) и V\S(U2) с V\S(U), что противоре- противоречит условию леммы 7.12.2, согласно которой импликанты U] и U2 — простые. Q.E.D. Ясно, что всякую булеву функцию / можно представить в виде дизъюнкции каких-то элементарных конъюнкций: Такую форму представления функции/называют дизъюнктивной нормальной формой (ДНФ). Число/? называют й/шиойДНФ /)(/). Сумму рангов всех составляющих D(f) конъюнкций Ui (/ = 1,/?), то есть число называют сложностью этой ДНФ. ДНФ D(f) булевой функции/называют кратчайшей, если она имеет наименьшую длину по сравнению с другими ДНФ этой же функции. ДНФ D(f) называют минимальной, если она имеет наименьшую сложность по сравнению с другими ДНФ этой же функции. Итак, пусть требуется найти кратчайшую ДНФ функции^Дх,, ..., хт). 226
7.12. Пример полиномиального сведения 7.12.2. Графовая модель задачи минимизации Для того чтобы исследовать булеву функцию/(х,, ...,хт), часто строят граф, порожденный этой функцией. Графом, порожденным булевой функцией, принято называть не- неориентированный граф, вершинам которого соответствуют наборы значений булевых переменных (далее — просто наборы), на которых функция равна единице, а ребра графа соединяют соседние наборы, то есть наборы, различающиеся значениями одной переменной. В данном разделе также рассматривается граф, порожденный бу- булевой функцией. Он отличается от вышеописанного только тем, что его ребра соединяют любую пару вершин-наборов, принадлежащих (покрываемых) одной и той же простой импликанте функции. Уточ- Уточним вводимые построения. ПустьДх,, ..., хт) — произвольная булева функция, принимающая единичное значение на множестве наборов V- {v,, ..., vn} значений переменных функции/, то есть для всякого vf. = (а| ,..л'т) е V(t = 1, л; &j е {0;1};У = 1,/и) имеем Л v,.) = 1. Обозначим Z= {К,, ..., Vr] — множество всех простых импликант функции/. Булевой функцииДх,, ...,хт) поставим в соответствие неориентиро- неориентированный графG = (К, Г), вкотором множество всех вершин V= {v,, ..., vn} соответствует множеству всех единичных наборов функции/и v. e Tvp тогда и только тогда, когда найдется простая импликанта Vk e Zтакая, что v,, vp e Vk. В этом случае будем говорить, что граф G порожден буле- булевой функцией/ Пусть имеется булева функция /(х, ,х2 ,х3) = х, х2 vx^x2 v x3. Эта функция представлена на рис. 7.5, а 3-мерным единичным ку- кубом и на рис. 7.5, 6 графом, порожденным этой функцией. В дальнейшем будем рассматривать только графы, каждый из ко- которых порожден булевой функцией, и не будем различать понятия «набор» и «вершина». Клику Q(N) графа G называют максимальной по включению, если в графе G не существует другой клики Q(N*), и такой, что TV с N* и Исходя из свойств простой импликанты булевой функции/и спосо- способа построения графа G, можно утверждать, что если вершины v{, v2 e V соединены ребром, то: (а) соответствующие им наборы различаются значениями / пере- переменных функции/, где 0 < / < п\ 227
Глава 7. Элементы теории алгоритмов (б) в графе G существует цепь длины 2' - 1, соединяющая эти вер- вершины, причем ребра цепи инцидентны вершинам графа, соответст- соответствующим соседним наборам, и с каждой промежуточной вершиной цепи вершины v,, v2 также соединены ребром. Vi у2 а б Рис. 7.5. Пусть имеется булева функция Рассматривая множество К единичных наборов функции/как ба- базовое множество, а простые импликанты — как подмножества этого множества (это будут те единичные наборы, которые покрываются каждой простой импликантой), задача построения кратчайшей ДНФ будет, очевидно, задачей о покрытии наименьшей мощности. Так, в общем случае для задачи о покрытии мы имеем базовое мно- множество А и семейство S подмножеств множества А. Можно построить граф, порожденный соответствующей задачей о покрытии, как это указано выше. Однако имеется одна опасность: клика построенного графа может не соответствовать элементу данного семейства S. Так, например, если в семействе S имеются подмножества {я,, я2}, {я2, я3} и {яр я3}, то построенный неориентированный граф будет иметьтрех- вершинную клику, которая содержит вершины, соответствующие элементам яр я2, я3 е А. Однако для рассматриваемых задач подобные опасения исключа- исключаются следующим утверждением. Теорема 7.12.1. Если граф G = (К, Г) порожден булевой функцией/, то никакая совокупность Z, с Z(Card(Zx) > 2) ее простых импли- кант не соответствует максимальной по включению клике гра- графа G. 228
7.12. Пример полиномиального сведения Легко понять, что каждая клика графа G есть класс эквивалентно- эквивалентности для его вершин, определяемый бинарным отношением смежно- смежности вершин графа. С другой стороны, каждая простая импликанта булевой функ- функции/также является классом эквивалентности для единичных набо- наборов этой функции, определяемым бинарным отношением «принад- «принадлежать одной и той же импликанте». Если предположить, что совокупность^ с Zo6pa3yeT клику графа G = (V, Г), то это может быть лишь в том случае, когда в Zjijm каждой пары импликант (/,, U2 найдется импликанта U3, и такая, которая од- одновременно покрывает наборы v,, v2, один из которых покрывается импликантой (/, и не покрывается импликантой U2, а другой покры- покрывается импликантой U2 и не покрывается импликантой ?/,, что проти- противоречит лемме 7.12.2. Q.E.D. Следствие 7.12.1. Каждой максимальной по включению клике графа G=(V, Г), порожденного булевой функцией/, соответствует вполне определенная простая импликанта функции/ и обратно. Полученные результаты позволяют утверждать, что задача построе- построения кратчайшей ДНФ есть задача разбиения графа G = (К, Г) е Ln на наименьшее число клик. Пусть имеется неориентированный граф G - (К, Г) е Ln. Говорят, что (не обязательно максимальные по включению) клики , ..., Q(Nm) покрывают граф G, если Покрытие Р= {Q(NX), ..., Q{Nm)} графа G кликами называют наи- наименьшим (по мощности), если оно имеет наименьшее число элемен- элементов по сравнению с другими покрытиями графа G кликами. Пусть требуется найти кликовое покрытие графа G наименьшей мощности. Нетрудно показать, что всякое наименьшее по мощности клико- кликовое покрытие графа G может содержать его максимальные по включе- включению клики. Лемма 7.12.3. Пусть имеется граф G, порожденный булевой функци- функцией/. Тогда кратчайшей ДНФ булевой функции/соответствует наи- наименьшее по мощности покрытие графа G кликами. 229
Глава 7. Элементы теории алгоритмов Очевидно, что из-за взаимно-однозначного соответствия между простыми импликантами булевой функции/и максимальными по включению кликами графа G (см. следствие 7.12.1) решение сформу- сформулированной задачи дает решение задачи построения кратчайшей ДНФ. Q.E.D. Теорема 7.12.2. Пусть имеется граф G, порожденный булевой функ- функцией/. Тогда кратчайшей ДНФ булевой функции f соответствует наименьшее разбиение графа G на клики. Действительно, так как каждой клике графа G соответствует им- пликанта булевой функции/, причем максимальной по включению клике соответствует простая импликанта, убеждаемся в справедливо- справедливости такого утверждения. Q.E.D. Заметим также, что цепи наименьшего разбиения F графа G на клики целиком принадлежат импликантам из Z, поэтому кратчайшую ДНФ легко записать также как дизъюнкцию соответствующих про- простых импликант. Теорема 7.12.3. Время построения неориентированного графа по со- совокупности простых импликант полиномиально. В самом деле, пусть TV — число единичных наборов булевой функ- функции, М — число ее простых импликант. Тогда для построения клики неографа, соответствующей некоторой простой импликанте, необхо- необходимо затратить не более O(N2) единиц времени и общее время по- построения графа будет равноO(N2 M) Q.E.D. 7.13. Приближенные алгоритмы Одним из подходов к решению jVP-полных задач является разра- разработка приближенных алгоритмов. Определим это понятие. Труднорешаемые задачи, решаемые на практике, в основном пред- представляют собой оптимизационные задачи. Кроме того, все задачи, ко- которые не формулируются как оптимизационные, также могут быть сформулированы как оптимизационные. Например, задачу поиска га- мильтонова цикла графа можно рассматривать как одно из решений за- задачи разбиения графа на наименьшее число непересекающихся циклов, 230
7.13. Приближенные алгоритмы задачу Выполнимость — как задачу поиска наибольшего независимого множества вершин в графе и т. д. Оптимизационная задача характеризуется тем, что определяется множество ее допустимых решений D и необходимо найти такое ре- решение х е Д «вес» w(х) которого наибольший (наименьший). Обычно для таких задач можно за полиномиальное время найти некоторое до- допустимое решение задачи хе D. Пусть имеется некоторый алгоритм А, который (за полиномиаль- полиномиальное время) находит некоторое допустимое решение х веса н>(х). Тогда алгоритм Л называется е-приближенным алгоритмом (е > 0), если w(x) для всех индивидуальных задач, решаемых алгоритмом. Иногда величину е полагают функцией входа, то есть е зависит от длины входных данных задачи. Один из способов построения приближенных алгоритмов состоит в использовании эвристики, то есть совокупности разумных сообра- соображений, использование которых, предположительно, позволяет полу- получить решение задачи, близкое к оптимальному. Рассмотрим задачу вершинное покрытие, которая формулируется следующим образом. Пусть имеется граф G-(V, E). Требуется найти наименьшую сово- совокупность вершин х этого графа и такую, чтобы каждое ребро графа было бы инцидентно хотя бы одной вершине изх. Эта задача возника- возникает, например, при построении управления большой сети с минималь- минимально возможным числом вершин. Для решения сформулированной задачи воспользуемся следую- следующим алгоритмом. Шаг 1. Положить х := 0, G] :=G,k:=\. Шаг 2. Если граф Gk пустой, то прекратить вычисления. Совокуп- Совокупность х содержит покрывающее множество вершин графа. В про- противном случае в графе Gk выбрать вершину v, имеющую наиболь- наибольшую локальную степень, и присоединить ее к совокупности х. Шаг 3. Удалить из графа Gk вершину v и инцидентные ей ребра. В ре- результате будет получен граф Gk + ]. Положить к := к + 1 и перейти к шагу 2. 231
Глава 7. Элементы теории алгоритмов Ясно, что представленный алгоритм выбирает хотя бы одну вер- вершину каждого ребра графа G. Поэтому вершинное покрытие, постро- построенное приведенным алгоритмом, будет содержать не более половины вершин графа. В частности, граф, состоящий из множества непересе- непересекающихся ребер, будет иметь вершинное покрытие, содержащее по- половину вершин графа. Можно показать, что приведенный алгоритм является /л(л)-при- ближенным алгоритмом, так как w(x) где п — число вершин графа G, w(x) — число вершин в решении х. Другой способ уменьшения числа перебираемых вариантов состоит в использовании метода ветвей и границ или использовании динами- динамического программирования. Сущность метода ветвей и границ состоит в последовательном построении частичных решений, представленных в виде дерева поиска, и отбрасывании бесперспективных решений, что сокращает перебор. Еще один способ построения приближенных алгоритмов состоит в использовании локального поиска. Сущность этого метода в поиске «близких» решений к найденному допустимому решению и переходе к новому лучшему решению. Поиск близких решений производится в небольшой, локальной окрестности найденного допустимого ре- решения. Например, в задаче коммивояжера, после построения некоторого допустимого решения, отыскивается последовательность из к ребер (fc-замена), которая вставляется в существующее решение взамен имеющихся к ребер маршрута коммивояжера, что позволяет получить новое, лучшее решение. Здесь окрестность поиска определяется вы- выбором числа к. Контрольные вопросы 1. Что представляет собой интуитивное понятие алгоритма? 2. Какая функция называется вычислимой? 3. Как формулируется тезис Чёрча? 4. Как формулируется тезис Тьюринга? 5. Какие рекурсивные функции называются простейшими? 232
Упражнения 6. Что такое операция суперпозиции? 7. Как формулируется операция примитивной рекурсии? 8. Какая функция называется примитивно-рекурсивной? 9. Как устроена машина Тьюринга? 10. Какой вид имеет команда машины Тьюринга? 11. Что такое композиция машин Тьюринга? 12. Какие проблемы называются алгоритмически неразрешимыми? 13. Какие алгоритмы называются полиномиально-временными? Экспонен- Экспоненциальными? 14. Что такое O(g(n))l o(g(n))l 15. Какие задачи называются трудноразрешимыми? 16. Как устроена недетерминированная машина Тьюринга? 17. Как определяется класс Р? 18. Как определяется класс NP? 19. При каких условиях одна задача полиномиально сводится к другой задаче? 20. Какие задачи называются NP-полными? 21. Какие алгоритмы называются приближенными? Упражнения 1. Доказать, что функция [х-1,дс>1, [0,х<\ примитивно-рекурсивная (эта функция называется усеченной раз- разностью). 2. Доказать, что функция Лх)=х\ примитивно-рекурсивная. Напомним некоторые свойства фак- факториала: 0! = 1, п\ = п • (п - 1)!. 3. Доказать, что функция А*,у) = \х-у\ (модуль разности) примитивно-рекурсивна. 4. Доказать, что функция примитивно-рекурсивна. 233
Глава 7. Элементы теории алгоритмов 5. Доказать, что функция примитивно-рекурсивна. 6. Доказать, что функция /( Г0,если*>1, [1, если х = О, примитивно-рекурсивна. 7. Построить машину Тьюринга для вычисления функции 8. Построить машину Тьюринга для вычисления функции Дх) = 2х + 1. 9. Построить машину Тьюринга для вычисления функции Лх,у) = \х-у\. 10. Построить машину Тьюринга для вычисления функции [х-2, еслих>2, 10, еслих<2. Литература [7.1] Алферова З.В. Теория алгоритмов. М.: Статистика, 1973. [7.2] Ахо А. и др. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979. [7.3] Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые за- задачи. М.: Мир, 1982. [7.4] Емеяинев В.А., Мельников О.И., Сарванов В.И., Тышкевич Р.И. Лекции по теории графов. М.: Наука, 1990. [7.5] Компьютер и задачи выбора/ Э.Н. Гордеев, В.К. Леонтьев, П.П. Коль- Кольцов и др.. М.: Наука, 1989. [7.6] Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. М.: Энергоатомиздат, 1988. [7.7] Кук Д., Бейз Г. Компьютерная математика. М.: Наука, 1990. [7.8] Лаврова И.А., Максимова Л.Л. Задачи по теории множеств, математи- математической логике и теории алгоритмов. М.: Наука, 1975. 234
Литература [7.9] Нефедов В. Н., Осипова В.А. Курс дискретной математики. М.: Изд-во МАИ, 1992. [7.10] Основы кибернетики / Под ред. проф. К.А. Пупкова. М.: Высш. шк., 1974. [7.11] Пападимитриу X., Стайглиц К. Комбинаторная оптимизация (Алго- (Алгоритмы и сложность). М.: Мир, 1985. [7.12] Плотников А.Д. Об уточнении класса задач, решаемых недетерми- недетерминированной машиной Тьюринга// Кибернетика и системный анализ. 1997. № 5, с. 30-36. [7.13] Плотников А.Д. О сложности алгоритмов и программ. B003) http://homepages.compuserve.de/chasluebeck/dn/complex.rar [7.14] Рейнгольд Э. и др. Комбинаторные алгоритмы. М.: Мир, 1980. [7.15] Шоломов Л.А. Основы теории дискретных логических и вычисли- вычислительных устройств. М.: Наука, 1980. 235
Глава 8 О разрешимости конструктивных комбинаторных задач 8.1. Введение Одна из основных задач комбинаторики состоит в построении вы- выборки из элементов исходного л-множества W, удовлетворяющего за- заданным ограничениям. Таковы многие практически важные задачи: поиск гамильтонова цикла в графе, построение минимальной дизъ- дизъюнктивной нормальной формы (Д НФ) булевой функции и т. д. Всякую комбинаторную задачу на построение выборки, удовлетворяющей за- заданным ограничениям, назовем конструктивной. В дальнейшем, для удобства, прилагательное «конструктивный» обычно опускается и под понятием «комбинаторная задача» будем подразумевать только конст- конструктивные комбинаторные задачи. Важное значение имеет вопрос о разрешимости конструктивных комбинаторных задач, то есть проблема возможности построения ре- решения для любой такой задачи (см. [8.1], [8.4], [8.6], [8.12]). Сущность этой проблемы состоит в следующем. Если заданные ограничения задачи не противоречивы, то есть мно- множество допустимых решений комбинаторной задачи не пусто, то в клас- классическом смысле проблемы разрешимости такой задачи нет — всегда существует алгоритм полного перебора, который позволяет найти ис- искомую выборку, или решение задачи. Однако когда говорят о разре- разрешимости комбинаторной задачи, то чаще всего подразумевают воз- возможность построения решающего алгоритма, время работы которого есть полиномиальная функция от п, где п обычно рассматривают как размерность задачи. Поэтому далее, говоря о разрешимости комбинаторной задачи, будем подразумевать возможность разработки для нее полиномиаль- полиномиального по времени решающего алгоритма. В общем случае, если рассматривать множество всех комбинатор- комбинаторных задач, для многих из них имеется отрицательный ответ на вопрос об их разрешимости. Так, для построения всех тупиковых Д НФ буле- булевой функции требуется, очевидно, экспоненциальное время. Следо- 236
8.1. Введение вательно, целесообразно ограничиться рассмотрением только таких задач, в которых длина решения (объем искомой выборки) есть поли- полиномиальная функция от объема п исходного множества (см. [8.4]). Однако только указанного требования недостаточно. Требуется также, чтобы время, за которое проверяется выполнение найденной выборкой заданных ограничений задачи {проверка удостоверения, см. [8.6]), было и полиномиальной функцией от п. Итак, приходим к необходимости рассматривать только задачи класса NP (см. раздел 7.10). Более того, можно утверждать, что проблема разрешимости ком- комбинаторной задачи — это проблема соотношения класса NP и его подкласса Р. Ряд исследователей полагают, что имеет место строгое включение, то есть Р с NP и Р * NP, а другие полагают, что Р = NP. Представляется, что имеющееся различие во мнениях математи- математиков обусловлено несколькими причинами. Одна из причин состоит в бедности алгоритмических средств решения комбинаторных задач, а вторая — в общепринятом отождествлении класса NP с математиче- математическим устройством, решающим любые задачи этого класса за полино- полиномиальное время. Такое устройство реализует недетерминированный алгоритм решения задачи и известно как недетерминированная ма- машина Тьюринга (см. [8.1] - [8.12]). Недетерминированный алгоритм (см. [8.12]) работает как обычный детерминированный алгоритм до тех пор, пока нет необходимости сделать выбор нескольких альтерна- альтернатив. Далее, в отличие от детерминированного, недетерминированный алгоритм одновременно ведет вычисления по всем встречающимся альтернативам. Приведенное содержательное описание недетерминированной ма- машины Тьюринга является, таким образом, общеупотребительной мате- математической моделью класса NP. Преимущество такой модели состоит в том, что она никак не связана с обычной формой задания комбинатор- комбинаторной задачи в приложениях. Недостаток же состоит в отождествлении класса задач с математическим устройством, изменение которого неяв- неявно предполагает изменение определяемого им класса задач. Рассмотрим теперь один прием поиска решения задачи из области классической математики. Пусть необходимо решить уравнение (8.1) 237
Глава 8. О разрешимости конструктивных комбинаторных задач Уединяя один из радикалов и возведя полученное выражение в квадрат, получаем после приведения подобных членов уравнение x-14 = -6Vx + 2. (8.2) Заметим, что, строго говоря, каждая вышеуказанная операция — возведение в квадрат и приведение подобных членов — преобразует исходное уравнение, позволяет получить другие (равносильные) урав- уравнения. Таким образом, можно утверждать, что переход от уравнения (8.1) к уравнению (8.2) происходит путем построения последовательности уравнений. Аналогично, преобразуя уравнение (8.2), получаем квадратное уравнение x2-64jc+ 124 = 0. Полученные уравнения равносильны исходному в том смысле, что все решения исходного уравнения являются также корнями получен- полученных уравнений. Однако обратное в общем случае неверно. Например, последнее уравнение имеет корни х1 = 64 и х2 = 2. Из них только ко- корень лс2 = 2 является решением исходного уравнения. Подобные преобразования являются обычными в классической алгебре. Их назначение — свести решение сложного уравнения к ре- решению более простых уравнений, для которых известны хорошие ме- методы решения. Описанный выше прием решения математических задач — по- построение такой последовательности задач, каждая из которых в качест- качестве своего решения сохраняет все решения исходной задачи и является в некотором смысле более простой, чем исходная, — по-видимому, не мог быть использован при отождествлении класса задач с математи- математическим решающим устройством. 8.2. Последовательностный принцип построения решения Пусть имеется задача Z e NP. Возникает вопрос: как получить некоторое решение п задачи Z? Опыт решения комбинаторных задач показывает, что всякое реше- решение такой задачи может быть получено шаг за шагом, элемент за элемен- элементом. Иначе говоря, построение некоторого решения я целесообразно рассматривать протяженным по времени, в течение которого получают некоторые компоненты, или подмножества искомого решения. 238
8.2. Последовательностей принцип построения решения Такой способ построения решения задачи Z, когда его элементы получают шаг за шагом, элемент за элементом, назовем последова- тельностным. Заметим, что полученное на каком-то этапе решение задачи Zmoxct быть промежуточным, не обязательно ее искомым, то есть окончательным решением. Очевидно следующее утверждение. Утверждение 8.2.1. Всякое решение задачи Ze NP может быть по- получено последовательностным способом. Более того, по-видимому, можно полагать, что последовательност- ный способ является единым общим принципом построения решения для любой задачи Z е NP. В самом деле, пусть, например, необходимо найти некоторое неза- независимое множество вершин неориентированного графа, то есть такое множество его вершин, никакая пара которых не соединена ребром (не смежна). Очевидно, что в общем случае невозможен одновремен- одновременный выбор хотя бы некоторых из таких вершин, если заранее не огова- оговаривается структура графа. Ясно, что каждую последующую вершину можно выбрать только в том случае, если известно, какие вершины уже выбраны в формируемое независимое множество. Введенный последовательностный принцип построения решения любой задачи класса NP естественным образом приводит к понятию частичного решения. Решение я, задачи Ze NP назовем частичным, если существует такое решение я задачи Z, что я1 с я. Решение я задачи Ze NP назовем опорным, если в задаче ZHe су- существует другого решения я' такого, что решение я есть собственная часть решения я'. Иначе говоря, решение я является опорным, если оно максимально по включению. Если я — некоторое опорное реше- решение задачи Z, а я, - некоторое частичное решение этой задачи, при- причем такое, что я, с я, то частичное решение я, назовем собственным для опорного решения я. Множество всех опорных решений задачи Zo6o3Ha4HM B(Z). Теорема 8.2.1. Пусть я,, я соответственно частичное и опорное ре- решения задачи Z e NP, где я, cz я. Пусть, далее, /(я,), /(я) — время по- построения частичного и опорного решений задачи Z Тогда имеет ме- место соотношение: Кщ) < t(n). 239
Глава 8.0 разрешимости конструктивных комбинаторных задач Справедливость сделанного утверждения следует из последова- тельностного принципа построения решения задачи Ze NP, так как всякое ее опорное решение может быть получено после построения любого собственного частичного решения. Q.E.D. Подчеркнем, что при принятом последовательностном принципе построения опорного решения задачи Ze Гне накладывается ника- никаких ограничений на вид функции /(я). 8.3. Теоретико-множественная модель комбинаторных задач Сделанные выше определения позволяют ввести теоретико-мно- теоретико-множественную модель комбинаторной задачи. Рассмотрим двойку (W, Q), в которой множество W- {г,, ..., гп} (п > 1) назовем рабочим, а область Q есть непустая совокупность под- подмножеств я множества W, удовлетворяющая условию: 1°. если п е Q и тх, с я, то я, е Q. Двойку (И7, 0, удовлетворяющую условию 1°, называют системой независимости, а максимальные по включению элементы из облас- области Q — базами системы независимости. Очевидно, что множество всех частичных и опорных решений за- задачи Ze NP есть область Q и она вместе с исходным множеством W образует систему независимости (W, Q). Далее, если при решении задачи Z каждому элементу рабочего множества вставится в соответствие число — вес этого элемента, то следует полагать, что в комбинаторной задаче задано множество М- {ц(а*,), ..., \х(гп)} — совокупность целых неотрицательных чисел. Если вес элементов рабочего множества \?ъ задаче не оговаривает- оговаривается, то можно полагать веса всех его элементов равными, например, единице. -Наконец, если каждому решению задачи ставится в соответствие функция/: п —» R, где п е Q, R — множество действительных чисел, то приходим к выводу, что в качестве комбинаторной задачи следует рас- рассматривать четверку Z = (W, Q, M,f). В построенной модели всякий элемент п области Q назовем также допустимым решением задачи Z. Таким образом, далее, говоря о допус- 240
8.3. Теоретико-множественная модель комбинаторных задач тимом решении задачи Ze NP, будем подразумевать как частичные, так и опорные решения задачи Zh, обратно, говоря о частичном или опорном решении задачи, будем подразумевать только ее допустимые решения. Следует заметить, что построенная модель неконструктивна, так как область Q допустимых решений задачи задана неконструктивно. Построенная модель удобна для исследований и для понимания струк- структуры задачи. На практике задача Ze NP задается обычно четверкой Z= (W, P, M,f), где Р — система предикатов, позволяющая для каждо- каждого подмножества Wx рабочего множества W определить истинность предиката « Wx е Q?»1. Некоторые авторы (см., например, [8.6]) полагают, что элемент множества допустимых решений задачи вычисляется некоторым ал- алгоритмом по характеристикам комбинаторного объекта. Представ- Представляется, что понятие системы предикатов Р, позволяющих вычислить предикат «Wx е (??», более удобно и соответствует существующей практике. Предлагаемая теоретико-множественная модель комбинаторной задачи требует уточнений. В самом деле, в общем случае функцияДя) (я е Q) для одних задач может быть вычислена за полиномиальное, а для других — за экспо- экспоненциальное время. Так как в задачах класса NP предполагается, что любое ее решение может быть проверено за полиномиальное время, то в дальнейшем будем рассматривать только такие задачи для которых функцияДя) может быть вычислена за полиномиальное время для любого пе Q. Аналогично, система предикатов Р в разных задачах может за раз- различное время позволить вычислить предикат «W] е Q?» — найти до- допустимое решение задачи — за полиномиальное или экспоненциаль- экспоненциальное время. В принципе, по определению задачи класса NP, указанное время является полиномиальным для любого ее опорного решения. Таким образом обозначается верификация построенного множества W\, то есть является ли истинным предикат « W\ e Q», или иначе говоря, являет- является ли построенное множество W\ допустимым решением задачи. 241
Глава 8.0 разрешимости конструктивных комбинаторных задач Время вычисления предиката «Wx e Q?» для любого подмножества ^сЖ,в частности для частичного решения задачи Z, специально не оговаривается. Как увидим позже, этот факт определяет один из глав- главных недостатков в определении класса NP с помощью недетермини- недетерминированной машины Тьюринга. Далее будет показано, что возможность за полиномиальное время проверить истинность предъявленного опорного решения задачи Z отнюдь не гарантирует такую же возмож- возможность проверки истинности предиката «Wx e Q?» для любого Wx с W. Следовательно, чтобы построенная теоретико-множественная мо- модель для всякой задачи класса NP верно отображала общепринятое по- понятие этого класса, полагаем, что система предикатов Рзадачи Zno3BO- ляет за полиномиальное время вычислить предикат «Wx e (??», если Wx — опорное решение этой задачи. Построенная теоретико-множественная модель комбинаторной задачи является общей для всех задач класса NP. Другими словами, задача Z- (W, Р, M,f) является моделью массовой задачи класса NP. Если все элементы модели: рабочее множество W, система предика- предикатов Р, множество весов М и функция/— принимают конкретное зна- значение, то имеем индивидуальную задачу класса NP. Таким образом, можно также утверждать, что класс NP, как и любой другой класс, есть совокупность индивидуальных задач, обладающих общими призна- признаками, или свойствами, которые и определены в построенной модели. 8.4. Один пример комбинаторной задачи Неприемлемый перебор является одной из главных трудностей, которые возникают при поиске решения любой задачи Z 6 NP. Каковы причины возникновения неприемлемого перебора в зада- задачах класса NP? На каком этапе разработки решающего алгоритма по- появляется такой перебор? Наконец, имеется ли возможность устранить неприемлемый перебор? Пусть имеется некоторое частичное решение пх е Q задачи Z. В об- общем случае имеется подмножество /?,(Z) с B(Z) опорных решений, для каждого из которых решение я, является частичным. Исходя из принципа последовательностного построения опорно- опорного решения, возникает вопрос о поиске нового частичного решения задачи Z. Очевидно, что такое частичное решение может быть получе- 242
8.4. Один пример комбинаторной задачи но при выборе следующего элемента г е W\nx такого, что я, u {r} e Q. Если внимательно проанализировать какую-либо достаточно слож- сложную комбинаторную задачу, то придем к выводу, что это одна из ос- основных причин появления неприемлемого перебора в процессе ре- решения задачи. Рассмотрим следующую индивидуальную задачу. v6 Рис. 8.1. Поиск разбиения орграфа на минимальное число клик Пусть имеется ациклический орграф, представленный на рис. 8.1, а (на всех рисунках для этой задачи предполагается, что дуги орграфа ориентированы снизу вверх). Для всякого ациклического орграфа G = (У,Ё), где V — множест- множество вершин орграфа (/, а Ё — множество его дуг, можно построить граф транзитивного замыкания Gt = (V9Et) такой, в котором верши- вершины v,, Vj е ^соединены дугой (v,., vy.) e Et тогда и только тогда, когда эти вершины в орграфе G соединены ориентированной цепью, ис- исходящей из v, и заканчивающейся в vy. Граф транзитивного замыкания (ГТЗ) ациклического орграфа есть, очевидно, граф строгого частичного упорядочивания (X, >). Нецеле- Нецелесообразно далее различать понятия ГТЗ и упорядоченного множест- множества (X, >). ГТЗ поставим в соответствие двудольный орграф в котором Card(X) = Card(Y), и всякая дуга из Ё* соединяет верши- вершины, принадлежащие разным долям Хи Г орграфа G *. В этом случае (jc, ,y.)s Ё* тогда и только тогда, когда в ГТЗGt имеется дуга (х„ ху). 243
Глава 8.0 разрешимости конструктивных комбинаторных задач Паросочетание двудольного орграфа G * — это множество его дуг, попарно не имеющих общих вершин. Известны эффективные алго- алгоритмы поиска наибольшего паросочетания в двудольном орграфе (см., например, [8.6]). Известно (см. [8.3]), что всякое наибольшее паросо- паросочетание двудольного орграфа G * определяет разбиение вершин ГТЗ Gt на наименьшее число цепей. При ручных вычислениях с небольшим количеством вершин наи- наибольшее паросочетание ГТЗ удобно находить в его матрице смежно- смежности. В этом случае все единицы матрицы смежности полагают «допус- «допустимыми». Тогда задача поиска наибольшего паросочетания в ГТЗ состоит в выборе наибольшего числа таких допустимых единиц (их будет не более л), чтобы никакие две выбранные единицы не принад- принадлежали одной и той же линии — строке или столбцу (см. [8.3]). Пусть для ГТЗ орграфа, представленного на рис. 8.1, а, любым ал- алгоритмом для построения наибольшего паросочетания в двудольном графе найдено разбиение вершин ГТЗ на минимальное число цепей (МЦР). Одно из таких МЦР содержит вершины и дуги графа транзи- транзитивного замыкания, выделенные на рис. 8.1, а толстыми линиями. Матрица смежности ГТЗ с выбранными единицами, определяю- определяющими найденное МЦР, имеет следующий вид. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 0 1 0 0 0 Очевидно, что цепь МЦР, начинающаяся в вершине v,, содержит пару независимых (несмежных) вершин орграфа: v,, v6. В общем слу- случае ГТЗ может иметь несколько различных МЦР и переход от одного МЦР к другому возможен, если будет найден чередующийся цикл или 244
8.4. Один пример комбинаторной задачи чередующаяся цепь. Чередующаяся цепь или чередующийся цикл со- содержит поочередно толстые и тонкие дуги графа транзитивного замы- замыкания и каждая вершина также поочередно является либо начальной, либо конечной для инцидентных ей дуг. Кроме того, ясно, что в об- общем случае любая вершина ГТЗ может входить в чередующийся цикл или цепь дважды: один раз как начальная, а другой раз как конечная для инцидентных ей дуг. Заменив в ГТЗ толстые дуги найденной чередующейся цепи (цик- (цикла) на тонкие, а тонкие — на толстые, получим новое МЦР. В этом со- состоит разрешенное преобразование одного МЦР в другое по найден- найденной чередующейся цепи или чередующемуся циклу. Пусть для найденного МЦР в графе транзитивного замыкания требуется найти такую чередующуюся цепь (цикл), с помощью кото- которой можно было бы перейти от имеющегося МЦР к другому и такому, в котором ни одна цепь не содержала бы независимые вершины ис- исходного орграфа. Очевидно, что решением сформулированной задачи будет чередую- чередующийся цикл, изображенный на рис. 8.1, б. Выполнив в ГТЗ разрешен- разрешенное преобразование по найденному чередующемуся циклу, получим новое МЦР, цепи которого выделены толстыми линиями в орграфе, представленном на рис. 8.1, в. Легко заметить, что решение поставленной задачи — чередующие- чередующиеся цикл или цепь — имеет число элементов, которое линейно зависит от числа вершин ациклического орграфа, и верность предъявленного решения может быть проверена за полиномиальное время. Поэтому рассматриваемая задача принадлежит классу NP. Возникает вопрос: как найти искомый чередующийся цикл или чередующуюся цепь для любой такой задачи? При принятом последовательностном принципе поиск искомого решения (чередующейся цепи или цикла) состоит в последователь- последовательном выборе толстых и тонких дуг ГТЗ, начиная с выбора какой-то из толстых дуг, принадлежащих той цепи существующего МЦР графа транзитивного замыкания, которая содержит независимые вершины заданного орграфа. Как проверить, что новая выбранная дуга приводит к допустимому частичному решению такому, которое принадлежит хотя бы одному опорному решению, когда последнее существует? При выборе каждой толстой или тонкой дуги чередующейся цепи (цикла) определяются новые цепи строящегося МЦР. Так, выбор тол- 245
Глава 8. О разрешимости конструктивных комбинаторных задач стой дуги определяет ту цепь «текущего» МЦР, из которой будет уда- удалена выбранная дуга, то есть ту цепь МЦР, которая будет разорвана. Выбор же тонкой дуги, которая смежна с толстой дугой, выбранной на предыдущем шаге, устанавливает новое направление разорванной цепи, определяет некоторую новую цепь МЦР. Отсюда можно сделать вывод, что выбор толстой дуги чередующейся цепи однозначен (кро- (кроме выбора такой дуги на первом шаге) — выбирается та толстая дуга, которая смежна с тонкой дугой, выбранной на предыдущем шаге. Иначе обстоит дело с выбором тонкой дуги. Так как ее выбор оп- определяет некоторую новую цепь МЦР, то можно считать допусти- допустимым выбор такой тонкой дуги, чтобы новая цепь МЦР не имела дру- других независимых вершин, чем исходная МЦР. По-видимому, этот критерий выбора тонкой дуги для чередующейся цепи (цикла) явля- является единственно разумным критерием в процессе поэлементного построения чередующейся цепи (цикла). Устанавливать различные «окружения» тонкой дуги, исследуемой на предмет возможности ее включения в чередующуюся цепь (цикл), как это делается в алгорит- алгоритмах локального извлечения, нецелесообразно, так как в общем слу- случае приводит к неприемлемому перебору. Таким образом, приходим к понятию допустимого изменения МЦР. Это изменение будет допустимым, если каждый выбор тонкой или тол- толстой дуги для чередующейся цепи (цикла) приводит к появлению но- новых цепей разбиения ГТЗ, в которых не появляются новые независи- независимые вершины, принадлежащие одной и той же цепи разбиения. Тогда 246
8.5. Задачи без предвидения любое полученное частичное решение на каждом шаге поиска опорно- опорного решения задачи будет допустимым, если оно приводит к допустимо- допустимому изменению существующего МЦР. Так, на рис. 8.2, а представлено частичное решение (чередующийся цикл), образованное вершинами v4 - v6 - v2 - v5, а на рис. 8.2, б — раз- разбиение графа транзитивного замыкания, порождаемое полученным частичным решением. Ясно, что последующий выбор тонкой дуги (v3, v5) не может быть сделан на основе ранее найденных элементов ре- решения, так как при выборе этой дуги в ГТЗ будет образована цепь v3 - v5 - v7, которая содержит независимые вершины v3, v7. Для выбора указанной дуги необходимо заранее знать (предвидеть), что далее в строящийся чередующийся цикл будет выбрана толстая дуга (v3, v8). 8.5. Задачи без предвидения Проведенный анализ решения представленной выше индивиду- индивидуальной задачи показывает целесообразность определения класса за- задач, для которых каждое частичное решение может быть эффективно вычислено. Пусть найдено некоторое частичное решение я, задачи Z. В зави- зависимости от способа формирования очередного частичного решения комбинаторные задачи можно разбить на два класса: • задачи, для которых очередное частичное решение я2 может быть найдено за полиномиальное время из ранее найденного частичного решения путем поэлементного выбора (перебора) элементов множес- множества W\nx\ • задачи, для которых по частичному решению я, и поэлементно- поэлементному выбору элементов множества W\nl невозможно за полиномиаль- полиномиальное время построение нового частичного решения я2. Иначе говоря, комбинаторные задачи можно классифицировать в зависимости от времени вычисления предиката «я, u {r} e Q?» для всякого частичного решения я, е Q и всякого элемента г е W\nv Если такой предикат может быть вычислен за полиномиальное время от размерности задачи, то соответствующую задачу назовем задачей без предвидения. В противном случае будем называть задачу экспоненци- экспоненциальной по постановке. Множество всех конструктивных комбинаторных задач из NP без предвидения обозначим UF. 247
Глава 8. О разрешимости конструктивных комбинаторных задач Сразу заметим, что выделенный классификационный признак (его целесообразно назвать алгоритмическим) существенно отлича- отличается от таких (обычных) признаков для рассматриваемых задач. Так, ранее был определен класс задач NP. Указанное определение может рассматриваться как первый пример использования алгорит- алгоритмического критерия для выделения класса задач: как длина решения, так и его проверка могут быть выполнены за полиномиальное время. В этом классе выделяют более частные классы задач уже по другим признакам. Например, задачу о покрытии, задачу построения гамиль- тонова цикла, задачу о кратчайшем пути в графе и так далее. Здесь классификация задач производится в зависимости от формы ее поста- постановки, то есть в зависимости от того, как некоторая задача формули- формулируется в практических приложениях. Следовательно, такие класси- классификационные признаки целесообразно называть классификацией по постановке или по способу задания. Для наших целей более удобен сформулированный выше класси- классификационный признак. Как и при использовании иных классифика- классификационных признаков (по постановке), в класс задач без предвидения могут входить различные по способу задания задачи — полностью или частично. Не следует отождествлять класс задач без предвидения цели- целиком только с некоторым классом задач, выделенным по постановке. В класс задач без предвидения могут входить самые разные индивиду- индивидуальные задачи, выделенные по иным классификационным призна- признакам. Это могут быть некоторые индивидуальные задачи о покрытии, о раскрашиваемости графа и другие в общем случае «плохо» (за экс- экспоненциальное время) решаемые задачи. Этот факт давно замечен на практике. В то же время некоторые задачи класса NP, выделенные по способу задания, могут целиком принадлежать классу задач без предвидения, а другие — целиком находиться вне этого класса. Так, например, любая задача построения покрывающего дерева графа, очевидно, есть задача без предвидения, то есть класс задач на графах, состоящих в поиске покрывающего дерева графа, целиком принадлежит классу задач без предвидения. С другой стороны, задача поиска гамильтонового цикла в тради- традиционной постановке целиком находится вне класса задач без предви- предвидения. В самом деле, гамильтонов цикл — это такой цикл графа, который включает все его вершины ровно один раз. Так как всякий цикл графа 248
8.5. Задачи без предвидения с п вершинами однозначно определяется выбором ребер, составляющих цикл, приходим к выводу, что задача поиска гамильтонова цикла — это задача выбора ровно п ребер графа, удовлетворяющих в совокуп- совокупности условию: каждой вершине графа инцидентно ровно два ребра из совокупности и эта совокупность образует один цикл. Ясно, что каждый гамильтонов цикл графа — опорное решение за- задачи — имеет линейное число элементов от числа вершин графа и для проверки истинности предъявленного решения необходимо затра- затратить полиномиальное время. Таким образом, задача поиска гамильто- гамильтонова цикла принадлежит классу NP. Однако если в качестве промежуточного результата вычислений не- некоторый набор ребер графа рассматривать как частичное решение за- задачи, то для вычисления предиката «я, u {г} е Q?», где я, — любой ра- ранее найденный набор ребер (может быть пустой), требуется, вообще говоря, «просмотреть» все множество опорных решений задачи. Так как число элементов в таком множестве в общем случае есть экспонен- экспоненциальная функция размерности задачи, то и время, затрачиваемое для ответа на вопрос об истинности предиката «я, u {r} е (??», будет экспо- экспоненциальным. Следовательно, в традиционной форме задача поиска гамильтонового цикла экспоненциальна по постановке. Таким образом, имеет место следующее утверждение. Теорема 8.5.1. UFcz NPu UF± NP. Теорема 8.5.2. Опорное решение задачи Ze NP может быть найдено за полиномиальное время тогда и только тогда, когда Z e UF. Очевидно. Q.E.D. I Теорема 8.5.3. Если конструктивная задача класса NP эффективно разрешима, то она принадлежит классу UF. В самом деле, пусть задача Z e NP эффективно разрешима, то есть для нее имеется полиномиальный по времени решающий алгоритм. Предположив, что задача Z? UF, получим, что какое-либо ее допус- допустимое решение, вычисляемое за экспоненциальное время, решаю- решающим алгоритмом определяется за полиномиальное время. Противо- Противоречие. Q.E.D. 249
Глава 8.0 разрешимости конструктивных комбинаторных задач Теорема 8.5.4 Пусть имеется некоторая задача Z e UF. Тогда, если Card(B(Z)), где ВB) — множество всех опорных решений задачи Z, есть некоторая полиномиальная функция от объема п исходного мно- множества W, то всегда существует полиномиальный по времени алго- алгоритм ее решения. Пусть выполняются условия теоремы 8.5.4. Так как, согласно тео- теореме 8.5.2, всякое опорное решение задачи Z е Сможет быть найде- найдено за полиномиальное время, то, построив всевозможные опорные решения задачи, число которых полиномиально, получим, очевидно, за полиномиальное время искомое решение задачи Z Q.E.D. Всякую задачу класса UF, для которой выполняются условия тео- теоремы 8.5.4, назовем тривиальной, и поэтому целесообразно рассмат- рассматривать множество UF{ с NP всех таких комбинаторных задач без предвидения, у которых Card(B(Z)) = ОBР(Л)), где р(п) — некоторый полином. 8.6. Разрешающая последовательность комбинаторных задач В рассмотренном выше примере поиска такого МЦР графа тран- транзитивного замыкания, цепи которого не имеют независимых вершин исходного ациклического орграфа, было установлено, что решение такой задачи не может быть найдено без рассмотрения множества всевозможных способов построения чередующейся цепи (цикла). Иначе говоря, без изменения задачи поставленная проблема поис- поиска искомого решения не может быть эффективно решена потому, что при построении нового частичного решения в общем случае необхо- необходимо просмотреть все возможные опорные решения задачи, число которых экспоненциально. Возможно ли устранить возникшую трудность при решении дан- данной задачи? На рис. 8.3 изображен орграф, полученный из предыдущего пере- переориентацией в нем дуги (v4, v6). Видно, что в полученном орграфе вы- вышеуказанной проблемы нет и новая индивидуальная задача решается за полиномиальное время. Решение новой индивидуальной задачи будет также решением предыдущей задачи. 250
8.6. Разрешающая последовательность комбинаторных задач Итак, эффективное решение поставленной выше задачи поиска МЦР заданного орграфа, никакая цепь которого не содержит независи- независимые вершины орграфа, может быть найдено с помощью решения двух задач. В первой зада- задаче устанавливается невозможность эффектив- эффективно построить чередующуюся цепь (цикл), с по- помощью которой было бы построено искомое МЦР. Причина состоит в том, что для сформу- сформулированной задачи оказалось невозможным эффективно вычислить предикат «W] е ()?», Рис. 8.3. Преобразованный граф где W] = я, и {г}, 71, — ранее найденное частич- частичное решение задачи иге W\n. Однако был осуществлен переход к другой индивидуальной задаче того же класса (по постановке), что и исход- исходная, в которой эта же проблема легко разрешима. Может показаться, что решение указанной выше задачи оказалось возможным потому, что в том классе задач, которому принадлежит рассмотренная индивидуальная задача, нашлась другая индивидуаль- индивидуальная задача, которая принадлежит также классу задач без предвидения. Тем не менее, это не так. Ранее было показано, что задача поиска гамильтонова цикла цели- целиком находится вне класса UF. Можно указать другие формы задания, или постановки задачи по- поиска гамильтонова цикла, которые не являются экспоненциальными по постановке. Пусть задан граф G с п вершинами. Рассмотрим матрицу смежности графа G как таблицу задачи о назначении, в которой строки соответст- соответствуют работникам, а столбцы — работам (см. также [8.2]). Тогда едини- единицы матрицы смежности соответствуют возможным назначениям ра- работников на работы. Такое назначение допустимо, если выбрано п единиц матрицы смежности, никакие две из которых не принадлежат одной и той же линии — строке или столбцу. Каждому допустимому на- назначению соответствует некоторое разбиение фафа на непересекаю- непересекающиеся циклы и/или ребра. Требуется найти такое допустимое назначе- назначение, которому соответствует наименьшее число циклов графа G. Очевидно, что, если решение сформулированной задачи существу- существует в виде одного цикла графа G, это и будет искомый гамильтонов цикл. 251
Глава 8.0 разрешимости конструктивных комбинаторных задач Легко заметить, что построение опорного решения сформулиро- сформулированной задачи — некоторого закрепления п работ за п работниками — есть задача без предвидения (такое закрепление можно найти, решив описанную выше задачу о наибольшем паросочетании в двудольном графе). Это одна из задач класса UF, к которой может быть сведена задаче поиска гамильтонова цикла. Можно найти и другие варианты постановок этой задачи (см. [8.2]). В теории алгоритмов используется понятие так называемой поли- полиномиальной сводимости задач класса NP друг к другу (см. раздел 7.11). Имеются различные формальные определения этого понятия, в об- общем случае трактуемые одинаково. Воспользуемся определением, даваемым в [8.12]. Задача Z, e NP полиномиально сводится в задачу Z2 e NP, если любой частный случай задачи Z, можно преобразовать за полиномиальное время в некото- некоторый частный случай задачи Z2 так, что решение задачи Z, можно полу- получить за полиномиальное время из решения этого частного случая за- задачи Z2. Прежде всего заметим, что обозначение задач Z^ Z2e NP здесь следует понимать как обозначения классов задач из NP, классифици- классифицируемых по форме задания, или по постановке. Иначе говоря, Z, и Z2 — обозначения массовых задач. Тогда частный случай задач Z, и Z2 — это индивидуальные задачи соответствующих классов. Далее, при рассмотрении понятия полиномиальной сводимости следует осознать следующие особенности. Пусть имеется задача Z,, которая полиномиально сводится в зада- задачу Z2. В определении понятия полиномиальной сводимости никак не ограничивается отношение классов Z, и Z2. В принципе они могут принадлежать как одному и тому же классу, так и различным классам (хотя понятие полиномиальной сводимости обычно подразумевает последний случай). Затем, строго говоря, в процессе такого сведения одного частного случая (то есть одной индивидуальной) задачи в частный случай дру- другой задачи могут быть сформулированы другие индивидуальные за- задачи класса NP, то есть задачи, классифицируемые по форме поста- постановки к иным классам, чем задачи классов Z, и Z2. Это также никак не ограничивается в сделанном определении полиномиальной сво- сводимости. 252
8.6. Разрешающая последовательность комбинаторных задач Наконец, процедура полиномиального сведения задачи Z, в зада- задачу Z2, вообще говоря, не предполагает, что будет найдено решение какой-либо индивидуальной задачи вышеупомянутой последователь- последовательности, начинающейся индивидуальной задачей класса Z, и заканчи- заканчивающейся индивидуальной задачей класса Z2. Во введении к данной главе (раздел 8.1) приводился пример реше- решения задачи из классической математики. Аналогия со сводимостью здесь очевидна. Так, исходная задача решения индивидуального ир- иррационального уравнения сводится к решению индивидуального (квадратного) уравнения. В процессе такого сведения формулируется последовательность индивидуальных уравнений, из которых требует- требуется найти решение в одном, последнем уравнении. Пусть задача Z, е NP полиномиально сводится к решению задачи Z2 6 NP и в процессе такого сведения для каждой индивидуальной за- задачи класса Z, строится последовательность 5(Z,, Z2) индивидуальных задач класса NP, заканчивающаяся некоторой индивидуальной зада- задачей класса Z2. Последовательность S(Zl9 Z2) индивидуальных задач класса NP назовем разрешающей. Ясно, что Card(S(Zx, Z2)) > 2, то есть разрешающая последователь- последовательность S(Z,, Z2) состоит по крайней мере из двух индивидуальных за- задач: задачи класса Z, и задачи класса Z2. Таким образом, если задача^ е Л7> полиномиально сводится к ре- решению задачи Z2 e NP, то всегда существует разрешающая последо- последовательность S{ZX, Z2) индивидуальных задач класса NP, которые по форме задания могут принадлежать самым различным классам, и число элементов последовательности S{ZV Z2) есть полиномиальная функция размерности задачи Z,. I Теорема 8.6.1. Для всякой задачи Zкласса NP существует разрешаю- разрешающая последовательность S(Z,Z') такая, что Z' e UF. Рассмотрим задачу Z' поиска наибольшего независимого множе- множества вершин графа (ЗНМ) (см. [8.4]). Так как всякое опорное решение такой задачи — построение максимального независимого множест- множества — может быть получено за полиномиальное время, то, согласно теореме 8.5.2, ЗНМ принадлежит классу UF. С другой стороны, ЗНМ является NP-полной (см. [8.4]). Поэтому всякая задача Zкласса NP за полиномиальное время может быть све- денакЗНМ. Отсюда следует справедливость теоремы 8.6.1. Q.E.D. 253
Глава 8. О разрешимости конструктивных комбинаторных задач Заметим, что процесс построения разрешающей последователь- последовательности, сводящей некоторую задачу класса NP, экспоненциальную по постановке, к некоторой задаче класса UF, является, по существу, процессом построения решающего алгоритма. 8.7. К методике решения задач класса NP Рассмотрим более подробно возможную методику построения разрешающей последовательности для задачи Z, е NP. Иначе говоря, нас интересует путь сведения некоторой исходной задачи Z,, в общем случае экспоненциальной по постановке, в некоторую задачу Z2 e UF. Прежде всего заметим, что полиномиальное сведение одной зада- задачи класса NP в другую целесообразно выполнять, если для новой за- задачи имеется хороший решающий алгоритм. Существующую практику использования сводимости можно оха- охарактеризовать двумя особенностями. Во-первых, предполагается, что обычно сводятся задачи классов, различных по постановке (то есть по форме, в которой они формули- формулируются в приложениях). Во-вторых, в настоящее время превалирует статический подход к процедуре сводимости различных массовых задач (задач различных классов). Статическим назовем подход, не учитывающий характерные особенности индивидуальной задачи, которые возникают в процессе поиска ее решения. Иначе говоря, при статическом подходе устанавли- устанавливается правило, по которому некоторая индивидуальная задача одного класса сводится в строго определенную индивидуальную задачу друго- другого класса. Недостаток указанного подхода состоит в том, что такое сведение в задачу другого класса может быть осуществлено лишь тогда, когда эта задача является не менее трудной для решения, чем исходная. Практически после такого сведения все трудности, которые имеются при разработке решающего алгоритма для одного класса задач, пере- переформулируются в аналогичные проблемы другого класса. Очевидно, если исходная задача экспоненциальна по постановке, либо число ее опорных решений экспоненциально зависит от размер- размерности задачи, то возникает необходимость ее сведения в задачу клас- класса UFn такую, решение которой может быть найдено за полиномиаль- полиномиальное время. Заметим, что если задача Z, уже принадлежит классу UF, то 254
8.8. О недетерминированной машине Тьюринга это не гарантирует хорошее решение, так как число ее опорных реше- решений может быть экспоненциальным. Представляется, что такое сведение позволит составить список возможных вариантов задач класса UF, к которым может быть сведена задача^. Отбор приемлемых вариантов целесообразно производить по «принципу идеального результата». Суть этого принципа состоит в следующем. Пусть имеется задача Z,, для которой нужно найти эффективный решающий алгоритм. Выберем некоторую задачу Z2. Будем говорить, что задача Z2 идеальна для сведения к ней задачи Z,, если: • опорное решение для любой индивидуальной задачи Z, может быть найдено как опорное решение некоторой индивидуальной задачи Z2; • искомое опорное решение находится эффективно (за полино- полиномиальное время); • время проверки достижимости искомого решения также есть полиномиальная функция от размерности задачи. Ясно, что сформулированные требования к идеальной задаче пред- предполагают, что любая такая задача принадлежит классу UF задач без предвидения. В случае, если задача Z2 является «идеальной», то процедура сведе- сведения некоторой исходной индивидуальной задачи Z, в индивидуаль- индивидуальную задачу Z2 также может представлять значительные трудности. Обычно индивидуальную задачу Z, не удается сразу свести к «иде- «идеальной» индивидуальной задаче Z2. Часто индивидуальную задачу^ можно свести к индивидуальной задаче Z2, которая не является «иде- «идеальной» индивидуальной задачей. В этом случае приближение к иде- идеальной индивидуальной задаче осуществляется построением разре- разрешающей последовательности задач, каждая из которых в некотором смысле улучшает предыдущую. Разрешающая последовательность должна заканчиваться построением искомой идеальной задачи. 8.8. О недетерминированной машине Тьюринга Недетерминированная машина Тьюринга (НМТ) имеет важное значение в теории алгоритмов. Исторически именно понятие неде- терминированния вычисления за полиномиальное время было пер- первым алгоритмическим определением класса NP. 255
Глава 8. О разрешимости конструктивных комбинаторных задач Ранее (см. раздел 7.11) уже рассматривалось классическое опреде- определение НМТ. Период, прошедший с момента введения этого понятия, показал его исключительно важную роль в теории алгоритмов. Осо- Особое значение это понятие сыграло в теории сложности вычислений. С другой стороны, классическое определение НМТ имеет и нега- негативные стороны. Неопределенность недетерминированного вычис- вычисления, содержащаяся в определении НМТ, отвлекла внимание ис- исследователей от осмысливания причины возникновения перебора в конструктивных комбинаторных задачах. Классическим определе- определением НМТ умело устраняется необходимость такого осмысливания. Представляется, что определение понятия недетерминированных вычислений, как вычислений, которые выполняются одновременно по всем возможным альтернативам, вполне приемлемо, особенно с учетом того, что по каждой альтернативе каждое последующее час- частичное решение получают из предыдущего частичного решения за полиномиальное время. Иначе говоря, НМТ одновременно находит все опорные решения задачи класса UF(см. [8.10]). 8.9. Заключение Итак, в результате исследования проблемы разрешимости конст- конструктивной комбинаторной задачи установлено, что всякая такая зада- задача может быть сведена за полиномиальное время к некоторой задаче класса UF. Показано, что способ задания, или форма постановки задачи, ока- оказывает существенное влияние на возможность ее решения. Введенное понятие задачи, экспоненциальной по постановке, и алгоритмиче- алгоритмический признак ее распознавания, позволяют отбросить такие форму- формулировки задачи, которые заведомо требуют неприемлемого перебора, и искать разрешающую последовательность индивидуальных задач, принадлежащих классу задач без предвидения. Исходя из сказанного, можно сформулировать следующие реко- рекомендации, которые целесообразно учитывать при решении задач класса NP. • Если задача некоторого класса, выделенного по форме задания, целиком не принадлежит к классу UF, то следует перейти к другой форме постановки этой задачи, которая либо полностью принадле- 256
Литература жит классу UF, либо некоторые ее индивидуальные задачи принадле- принадлежат этому классу. • Если имеется задача, частично или полностью принадлежащая классу UF, то следует найти соответствующую ей «идеальную» задачу. • Если идеальная задача найдена, то следует искать разрешающую последовательность задач, приводящую к ней. Представляется, что предложенная точка зрения на причины воз- возникновения перебора в конструктивных комбинаторных задачах и возможный метод его преодоления позволит продвинуться в решении трудноразрешимых задач. Литература [8.1] Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычисли- вычислительных алгоритмов. М.: Мир, 1979. [8.2] Кристофидес Н. Теория графов (алгоритмический подход). М.: Мир, 1978. [8.3] Форд JI.Р., ФалкерсонД.Р. Потоки в сетях. М.: Мир, 1966. [8.4] Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые за- задачи. М.: Мир, 1982. [8.5] КофманА. Введение в прикладную комбинаторику. М.: Наука, 1975. [8.6] Пападимитриу X., Стайглиц К. Комбинаторная оптимизация. М.: Мир, 1985. [8.7] Плотников А.Д. О задаче нахождения независимого множества вер- вершин графа//Кибернетика. 1989. № 1.С. 119-121. [8.8] Плотшков А.Д. Про розбиття графа на найменшу кшьюсть клик // В1сник ВП1, 1993. № 1. С. 91-96. [8.9] Плотников А.Д. Один пщхщ до знаходження гамшьтонового циклу в граф!. // Вюник ВП1, 1995. № 1. С. 65-69. [8.10] Плотников А.Д. Об уточнении класса задач, решаемых недетерми- недетерминированной машиной Тьюринга // Кибернетика и системный анализ, 1997. № 5. С. 30-36. [8.11] PlotnikovA.D. A class of problems of NP to be worth to search an efficient solving algorithm // USA Repositary, 1999, (see http://xxx.lanl.gov/abs/cs/9903010). [8.12] Рейнгольд Э., Нивергельт Ю.,Део Н. Комбинаторные алгоритмы. М.: Мир, 1980. 257
Глава 9 Теоретико-множественные свойства экстремальных комбинаторных задач 9.1. Теоретико-множественная модель экстремальных комбинаторных задач Особое место в классе NP занимают экстремальные комбинаторные задачи (ЭКЗ) как часть множества конструктивных комбинаторных за- задач. С содержательной точки зрения сущность этой задачи состоит в нахождении такой выборки, где некоторая функция принимает экс- экстремальное (максимальное или минимальное) значение. Особая роль экстремальных комбинаторных задач определяется тем, что такие за- задачи часто встречаются в различных приложениях. Кроме того, любая конструктивная комбинаторная задача может быть сформулирована в виде задачи поиска экстремума (см. [9.3]). В частности, многие NP-полные задачи формулируются как задачи поиска экстремума. Ясно, что исходя из сказанного целесообразно исследовать свой- свойства экстремальных комбинаторных задач. Поэтому уточним теоре- теоретико-множественную модель таких задач. Итак, как было установлено в предыдущей главе, комбинаторной задачей (КЗ) будем называть четверку Z- (W, (?, Л/,У) е NP, которая является удобной математической моделью для исследования свойств этих задач. Далее будем полагать, что для любого опорного решения п е Q /(я) = ]>>(/•,). /и В общем случае различают два вида таких задач. В одних задачах требуется найти любое опорное решение задачи Z, а в других — такое опорное решение п € Q, что /(я) принимает экстре- экстремальное значение, то есть решить экстремальную комбинаторную за- задачу (ЭКЗ). В этом случае для задачи максимизации требуется найти такое опорное решение it e Q, что для всех п е Q 258
9.2. Способы задания ЭКЗ а для задачи минимизации — Очевидно, что все задачи, в которых требуется найти хотя бы одно опорное решение, легко можно свести к ЭКЗ, полагая вес каждого элемента рабочего множества Ж равным единице. 9.2. Способы задания ЭКЗ При теоретико-множественных исследованиях задачи Ze NP удобно пользоваться двумя способами ее задания: графическим и матричным. При графическом (более наглядном) способе задания каждому эле- элементу re вставится в соответствие точка (кружочек) на плоскости, сопровождаемая записью возле каждой точки имени (обозначения) элемента и числа — веса данного элемента. Все элементы рабочего множества W, образующие опорное решение п е Q, очерчиваются замкнутой линией. Очевидно, что в результате описанной процедуры будет получено графическое изображение гиперграфа (без вложенных друг в друга ре- ребер), каждому гиперребру которого соответствует опорное решение задачи Ze NP. На рис. 9.1, а и б заданы задачи Zx и Z2 соответственно. \ \ •Г6 N ( •l N. \ Ф1 Ямс. 9. /. Представление ЭКЗ гиперграфом 259
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач П\ \ я, я2 \ ( ч V 1 \ ч у Pwc. 9.7. Представление ЭКЗ гиперграфом Задача Ze NP может быть также задана булевой матрицей ||а|у|, в которой аи = 1, если элемент г,, е W (/ = 1,2,...,«) принадлежит опор- опорному решению яу е 5 (у = 1,2,...,/?), где В <zQ — множество всех опор- опорных решений задачи Z, и а/у= 0 в противном случае. Такую матрицу назовем матрицей опорных решений (МОР). Кроме того, в этом случае должен быть задан вектор М= (|х(г,), ..., [i(rn)) весов элементов рабо- рабочего множества W. Ясно, что МОР есть матричный аналог графического способа за- задания задачи Z. Очевидно также, что МОР определяет базы системы независимости (IV, Q). Ниже матрицами ||а/у II и ||а *.| представлены МОР и вектор-столбцы ов элементов для задач Z и Z. соответственно. весов Л/ cU = г, 0 О О 1 О 1 О 1 О 1 О О О 1 О О 1 О 1 О 1 О 1 О 1 О О 1 О О 260
9.3. Вспомогательные множества решений ЭКЗ N1- 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 х5 1 1 0 0 1 1 м 1 1 1 1 1 1 9.3. Вспомогательные множества решений ЭКЗ Обозначим через Т(п) объединение всех таких допустимых реше- решений я, е Q оптимизационной задачи Ze NP, в которое входит реше- решение я g (?, то есть Т(п)= U я,. Ясно, что Tin) с W. Множество l = W\Tin) назовем присоединенным к решению пе Q. I Теорема 9.3.1. Если л„ к2е Qunxa nv mo 5GC,) с S(n2). Очевидно, что если я, с я2, то Т(п2) с Т(щ). Тогда Sin,) = 1У\Т(щ) с ^\Дтс2) = 5(я2). Множество ЩП) = W\[n U 5G1)] назовем остаточным для решения п е Q. I Теорема 9.3.2. Если я € Qu re Win) * 0, топи {г} е (?. Действительно, W\[n u 5(я)] =(Ж\я) п [И/\5(я)]= п Г(я) = [Wn Цп)]\п = Т(п)\п. Q.E.D. 261
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач Поэтому при Щп) Ф 0 множество тс и {/*} входит хотя бы в одно до- допустимое решение из области Q и по свойству 1° также является реше- решением. Q.E.D. I Теорема 9.3.3. Если пе Q есть опорное решение, то W{n) = 0 и к и S(n) = W. Предположив, что W(p) * 0, придем к выводу, что в области Q су- существует решение тс = я u {r} (r e Щп)), собственной частью которо- которого является решение пе Q,a это противоречит определению опорного решения. Соотношение 7ruSGi) = И^для любого опорного решения п е Q сле- следует из определения остаточного множества при условии, что W(n) = 0. Q.E.D. 9.4. Конституенты Пусть В= {тс,, ..., пр] есть множество всех опорных решений задачи Ze NP. Обозначим тс = W \ п и о [тс, еслиа = 1, [тс, еслиа = 0. Следуя [9.2], каждое множество вида (a j e {0,1};у = 1,2,...,/?) назовем конституентой опорных решений задачи ZmiH просто конституентой, а множество /, — именующим множест- множеством конституенты, где /, = {а,, 2а2, ...,рср}. Множество всех непустых конституент задачи Zобозначим че- через #(Z). Очевидно (см. [9.2]), что справедливы следующие свойства: К1. К, n Kl2 = 0, если /, ф /2; К2. U К, =W; 262
9.5. Нормальная форма ЭКЗ где /(я.) — именующее множество такое, что ау = 1(у = 1,2,...,р;я:у e ,5). I Теорема 9.4.1. Всякий элемент рабочего множества Wпринадлежит одной и только одной конституенте. Обратное приведет к противоречию свойству Kl. Q.E.D. Из определения МОР задачи Zcлeдyeт, что /-и строке этой матри- матрицы можно поставить в соответствие конституенту К{., где /,= {o,v 2a,2, ...,/хт^} (/ = 1,2,...,л). Таким образом, МОР можно рассматривать как систему инцидентности для именующих множеств конституент из H{Z). 9.5. Нормальная форма ЭКЗ Пусть Wx с W. Через y(Wx) обозначим пересечение именующих множеств всех конституент из H(Z), к которым принадлежит хотя бы один элемент из Wx, а через y{)Vx) — дополнение y(Wx) до множества /={1,2, ...,/?}, то есть y(H/1) = Теорема 9.5.1. Wx a W есть допустимое решение задачи Z тогда и только тогда, когда у( Wx) Ф 0. По свойству 1° всякое допустимое решение задачи Z может рас- рассматриваться как подмножество хотя бы одного опорного решения Uj e B(j = 1,2,..., л). Поэтому, согласно свойству КЗ, именующие множе- множества конституент, которым принадлежат элементы решения Wx с W, имеют хотя бы один общий элемент, то есть y( Wx) ф 0. Обратное очевидно. Q.E.D. Следствие 9.5.1. Пусть тс„ л2 е Q. Тогда nxKjn2e Q, если и только если у(пх) n Y(rc2) *= 0. Теорема 9.5.2. Если пе Q, то 5(я)= U_AT,,, где Ро [у(п)] есть множество всех подмножеств множества у(п). 263
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач Очевидно, что множество S(n) состоит из элементов re W, каждый из которых принадлежит конституенте К/( такой, что у(я) п /, = 0. Отсюда и следует справедливость теоремы 9.5.2. Q.E.D. I Следствие 9.5.2. Если л„ п2е Qu у(я,) = у(п2), то SGt,) = S(n2). | Следствие 9.5.3. Если /, с /2, то S(Kl2) с S(Kf]). Теоремы 9.5.1 и 9.5.2 позволяют сформулировать простые правила нахождения элементов решения задачи Zno ее МОР. Так, элементы из Wобразуют допустимое решение п е Q, если соответствующие им строки МОР имеют единичные компоненты в одном и том же (хотя бы одном) столбце. Множество всех таких столбцов определяет, оче- очевидно, множество у(п). Тогда присоединенное множество для реше- решения пе Q состоит из тех и только тех элементов рабочего множест- множества W, которым соответствуют строки, имеющие нулевые компоненты в столбцах из у(п). I Теорема 9.5.3. Если rx е Kt и г, е п} где пе В есть опорное решение задачи Z, то Kt с п. Пусть выполняются условия теоремы 9.5.3, и допустим, что суще- существует элемент r2 e Kf такой, что г2 ? п. Однако r2 ? S(n), так как /1^0или S(n) = W. Противоречие. Q.E.D. Задачу ZHa3OBeM представленной в нормальной форме или нормали- нормализованной, если два любых элемента рабочего множества И^принадле- жат различным конституентам, то есть для любых /• , г. eW (/, ф /2) имеем: г/} е К1{, г/2 е К,2 и /, Ф /2 (К^ ,К,2 е H(Z)). Очевидно, что задача Zявляется нормализованной, если ее МОР имеет различные строки. Сущность нормализации задачи Z состоит в переходе от рассмот- рассмотрения исходной задачи Z e NP к рассмотрению (другой) аналогичной задачи Zn e NP, в которой элементы рабочего множества Wn соответ- соответствуют различным классам эквивалентности элементов рабочего множества W— элементов, принадлежащих одной и той же конститу- конституенте задачи Z Нетрудно заметить, что вес каждого элемента рабочего множества Wn равен суммарному весу элементов рабочего множест- множества W, принадлежащих соответствующей конституенте задачи Z, по- поэтому оптимальное решение задачи Zn определяет очевидным обра- образом оптимальное решение задачи Z. 264
9.5. Нормальная форма ЭКЗ Таким образом, осуществив замену каждой группы одинаковых строк МОР ||а,7|| задачи Zoднoй строкой и присвоив вес соответствую- соответствующему элементу нового рабочего множества Wn, равный суммарному весу группы замененных им элементов множества W, получим, оче- очевидно, MOP ||a"J и вектор весов Мп новой нормализованной зада- задачи Z,. Пример. Одним из важных примеров ЭКЗ является задача о покрытии. Очевидно, что задача о покрытии есть ЭКЗ Z- (W, Q, M,f) e NP. Задача о покрытии обычно задается матрицей покрытий (МП) pik | (/ = 1,2,...,п;к = 1,2,...,т), где рА = 1, если ак е г,., и р., = 0 в против- противном случае. Существуют некоторые методы упрощения матрицы покрытий [см. 9.1], что позволяет уменьшить размер решаемой задачи. Норма- Нормализация задачи Zпpивoдит к формулированию одного (нового) пра- правила упрощения МП. Известно, что каждый столбец МОР определяет неприводимое по- покрытие яуе5(у = 1,2,...,/?) множества Л (см., например, метод С. Пет- Петрика [9.24]). Очевидно, что в силу принципа двойственности каждый столбец МП будет определять покрытие множества В элементами ра- рабочего множества W(строго говоря, элемент r; е Избудет в этом случае «представлять» подмножество Д множества всех опорных решений В). Из вышесказанного легко установить, что элементы rt , ri2elV (/, Ф /2) принадлежат одной и той же конституенте Kt e H(Z) зада- задачи Z, если в МП ||Р/)к || существуют строки /,, /2, имеющие равное чис- число единиц, и такие, чтоР7. А&Р/2* = 0 для всех к = 1,2, ...,/я и для каждо- каждого А:гго столбца, для которого Р; к =1, найдется к2-й столбец, для которого р. к =1, такой, что для всех/ = 1,2,...,я(/ */,,/ */2) выполня- выполняется соотношение РЛ =Р;*2. Ясно, что в этом случае из МП |РЛ|| следует удалить /,-ю (/2-ю) строку и все столбцы к = 1,2,...,т, для ко- которых p.j/k = 1 ($i2k = 1), и положить [i(r ) = \i(rii ) + ц(г/2) (соответст- (соответственно \i(ri"i) = \i(ri)). Так, если МП задачи имеет вид, представленный на рис. 9.2, о, то по- после нормализации получим новую МП, изображенную на рис. 9.2, б, в которой r"={rx,rs}9 г2я={г2,гб}, г3я={г3,г7}, г; ={г4,г8}. 265
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач г2 п 1111000000000000 1000001010101010 0010101100000000 000000001 1000000 00001 100001 10000 0100000101010101 0001010000001 100 000000000000001 1 1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 1 м„ 2 2 2 2 б Рис. 9.2. Исходная и нормализованная задача о покрытии Пример. Пусть имеется граф G = (W, 5), где W— множество вершин графа, а5— отображение WkW. Множество ?/сЖ, удовлетворяющее условию называют независимым множеством вершин графа G. Независимое множество вершин U называют максимальным (Л/ЯЛ/), если МНМ U с W называют наибольшим (НБНМ), если Card(U)>Card(U) для всех МНМ U а Жграфа G. Ясно, что и в этом случае имеем ЭКЗ Z- (/?, (?, Л/,У) е NP, где \х(г) = 1 для всех \i(r) e Л/(/ = 1,л). 266
9.6. Двойственные ЭКЗ Вершины ri ,Г; e\V (/, ф /2) принадлежат одной и той же конститу- енте Kj е #(Z) задачи Z, если ?({/* }) = S({ri2}), которые легко обна- обнаружить в матрице смежности графа G. Нормализация задачи Z приводит к рассмотрению графа со взве- взвешенными вершинами и осуществляется очевидным образом [см. 9.4]. Рис. 9.3. Исходная и нормализованная задача поиска НБНМ На рис. 9.3, а представлена исходная, а на рис. 9.3, б — нормализо- нормализованная задача поиска НБНМ графа. Здесь К = К К г" = {/*, ,г7 ,г9}, г" = {г2 ,г6}, г;={г3,г5), г5"={г4}. 9.6. Двойственные ЭКЗ Пусть Z= (W, Q, M,f) e NP есть задача максимизации (миними- (минимизации). Задачу минимизации (максимизации) Z* = (W, Q\ M,f) e NP назовем двойственной задаче Z, если каждое опорное решение П . е В (j = 1,2,...,/?) задачи Zсвязано с опорным решением пе В (у = 1,2,...,/?) задачи ZcooTHomeHneM: = ni (9.1) 267
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач Из определения двойственной задачи Z* следует, что (Z*)* = Z, то есть двойственной для задачи Z* является исходная (прямая) за- задача Z. Теорема 9.6.1. Решение пе В является оптимальным для задачи Z тогда и только тогда, когда соответствующее ему решение П = W \ п е В является оптимальным для двойственной задачи Z \ причем /(я) = /(ИО- /(Я). Учитывая теорему 9.3.3 и соотношение (9.1), имеем и, кроме того, очевидно, что где Uj и Uj — соответствующие опорные решения задач Z и Z *. Поэтому, если п е Q есть оптимальное решение задачи максимиза- максимизации Z, то An) = /(НО - /(ft) > f(W) - /(П .) = /(/>), где Uj — любое опорное решение задачи Z. Отсюда имеем где UeQ* — оптимальное решение, а Пу — любое опорное решение задачи минимизации Z *. Ясно, что аналогичные соотношения получатся, если ZecTb задача минимизации. Таким образом, достаточность условий теоремы 9.6.1 доказана. Необходимость их очевидна. Q.E.D. Пусть H(Z) — множество всех (непустых) конституент задачи Z, a #(Z *) — такое же множество двойственной задачи Z *. Теорема 9.6.2. Конституента К, е H(Z) тогда и только тогда, ко- когда конституента К- е H(Z*), где Т. = / \ /.. В самом деле, пусть °1 пп°2 п-"Ппарр eH(Z). 268
9.6. Двойственные ЭКЗ Тогда для двойственной задачи Z * будем иметь: К;х = П°! пП°2 п-пПъ/ eH(Z)\ Учитывая (9.1), получим: Аналогично доказывается обратное. Q.E.D. Из теоремы 9.6.2 следует, что если г{ е К, и г. е К- , то соответст- соответствующие им строки /,, /2 МОР ||ос/у|| задачи Zудовлетворяют условию 1 для всех j = 1,2,...,/?. Конституенты К, е H(Z) и К- е, Н(Z *) назовем ортогональными. Обозначим через I(H(Z)) и l(H(Z*)) совокупности именующих множеств конституент, принадлежащих множествам #(Z) иЯG*) со- соответственно. Задачу Z назовем самодвойственной, если ^(Я(Z)) =/(Я(Z*)). Иначе говоря, Z— самодвойственная задача, если вместе с любой конституентой множеству #(Z) принадлежит и ортогональная ей конституента. Очевидно, что если Z — самодвойственная задача, то Card(H(Z)) есть четное число. Теорема 9.6.3. Если п — опорное решение задачи Zu в H(Z) существу- существуют ортогональные конституенты Kf , К- е #(Z), то либо Kt с я, либо К- аи. '\ Для доказательства достаточно указать, что для всякого опорного решения я е Q задачи Zимеем Card[y(p)] = 1. Q.E.D. Следствие 9.6.1. Если Z— самодвойственная задача, то в каждое ее опорное решение входит одно и то же число конституент. Следствие 9.6.2. Если Z— нормализованная самодвойственная задача, то каждое ее опорное решение имеет одно и то же число элементов. Самодвойственную задачу назовем тривиальной, если для любых ее ортогональных конституент Kf , К- выполняется соотношение 269
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач I Теорема 9.6.4. Если Z — тривиальная самодвойственная задача, то любое ее опорное решение является оптимальным. Очевидно. Q.E.D. Пример. Пусть Z=(W,Q,M,f) есть задача о покрытии, заданная МП ||CJ| (/ = 1,2, ...,п\к = 1,2,...,/я;т>1). Легко установить, что элементы /;. , ri2 e W (/, Ф /2) принадлежат ортогональным конституентам задачи Z, если в МП ||PJ| им соответст- соответствуют строки /,, /2, и удовлетворяются следующие условия: 1. существует такой столбец/:, е /= {1,2, ..., т}, чтоР, к = р.^2 = 1 u$jk = 0для всех/ = 1,2,...,л(/* /,, /* /2); 2. для всех столбцов к = 1,2,...,/н(/:* kl)^i k&$i2k =0и, кроме того, выполняется одно из нижеследующих условий: i 2 (b) если Card(Jr. ) > 1 и Card(J'. 2) > 1 и существует хотя бы один столбец к2е J такой, что Р,. к = Р. ^ = 0 и для каждой покомпонентной дизъ- дизъюнкции вектор-столбцов $к, v$к„ (к'eJt ,k"eJ) ,к' ф кх,к" Ф кх) найдется вектор-столбец тк UkeJ\(Ji{ и/^тако^чтоР^ <pr vPr,. Здесь У,. , J, — множество всех столбцов МП Шк таких, что р,,*=кр,2*=1) для к g /; Р, =(ри,Р2,,...,рл,) — вектор-столбец МП ||pj; Так, если МП задачи Zимеет вид, представленный на рис. 9.4, а, то 1-я и 4-я ее строки удовлетворяют вышеуказанным условиям и, следовательно, элементы г, и г4 принадлежат ортогональным консти- конституентам задачи. Наиболее быстрый метод построения самодвойственной задачи о покрытии, оптимальное решение которой совпадает с оптималь- оптимальным решением задачи Z= (W, Q, M,J), состоит в следующем. 270
9.6. Двойственные ЭКЗ 1 1 1ООООО 110 1110 0 10 0 10 0 10 0 0 10 10 0 1 0 0 0 1110 1 D 1 о о о 1 1 1 1 100000100000 1011100010000 0010010001000 01001000100 0 10 0 0 0 10 1 10 0 0 0 0 1 1 о о 0 0 0 111 0 10 0 0 1 00000000000001 00000000000010 00000000000100 00000000001000 00000000010000 00000000100000 Рис. 9А. Прямая и двойственная задачи о покрытии Пусть HPJI (/ = 1,2,..., л;А: = 1,2,...,/и) есть МП задачи Z Построим МП ||Р^ ||(/ = 1,2,...,2л;/: = 1,2,...,т + п)новой задачи Z', до- дополнив МП ||p.JI исходной задачи Zn строками и п столбцами. Положим: Р; =рл для всех/ = 1,2,...,А2Д = 1,2,...,т; Р'л =0для всех/ = л + 1,я + 2,...,2л, к = l^,...,w; Р'А = 1, если к = т + / и / = 1,2,...,я; 271
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач ^ =1, если к = т-п + /и/ = а2 + 1, 3'Л = 0 в остальных случаях (очевидно, что здесь к = Кроме того, положим ц(г/) = ji(r,), если / = 1,2,...,п и |i(/*,/) = 0, если Очевидно, что в результате будет построена самодвойственная за- задача о покрытии Z' = QV',Q',M',f). Так, если исходная задача задана МП, представленной на рис. 9.4, я, то соответствующая ей самодвойственная задача будет иметь матрицу покрытий, изображенную на рис. 9.4, б. Задачу Z\ двойственную к Z', получим, если положим \i(r*) = 0 при / = 1,2,...,/7 и \i(rj) = \i(r^n+] .) при / = л + 1,л + 2,...,2л. Матрицы по- покрытий задач Z' и Z *, очевидно, совпадают, если установить соответ- соответствие r't <-> г* (/ = л + 1,л + 2,...,2л). Пример. Пример двойственной и самодвойственной задач для задачи о на- нахождении НБНМ графа подробно изложен в работе [9.4]. г-, /8 а б Рис. 9.5. Исходная и нормализованная задача поиска НБНМ На рис. 9.5, а и б представлены соответственно прямая и двойст- двойственная задачи поиска НБНМ графа. 272
9.7. Циклические и ациклические ЭКЗ 9.7. Циклические и ациклические ЭКЗ Обозначим: Р(С) = Po(Q\{0}, где Ро(С) есть множество всех под- подмножеств множества С. Пусть D = {Д,..., Д }, Е = {fj ,...,?",2} есть семейства подмножеств некоторого множества С. Введем операцию прямого объединения # на семействах: D # ?= {Д и Ек: УД 6 Д V?A е ?]. Пусть С = С, и С2 и С, п С2 = 0. Тогда, очевидно, будем иметь: P0(Q = Р0(С,) u P(C2) u [ДС.) # Р(С2)]. (9.2) Пусть имеется задача Z= (W, Q, M,J) g (9.3) Теорема < к. где 9.7 Л.1 ия fc/шя,, я2 е Quy(n 2) = 5(я,) и [5(я2)\. 5(я2)\5(я,) = ^ 5(я,я2) = 5(л,)] и 5i и и t 0, /ИО (я„ л2), ^1. В самом деле, согласно теореме 9.5.2 = _U Так как у(п,) п у(я 2) = у(я,) и [yC71 ,) \ У(п г Iто учитывая (9.2), по- получим Отсюда следует соотношение (9.3). Q.E.D. Задачу Zназовем ациклической, если 5(я, и я2) = 5(я.) и [5(я2) \5(я,)] = 5(я,) и 5(я2). В противном случае задачу Z назовем циклической. 273
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач Теорема 9.7.2. Следующие утверждения эквивалентны: 1. задача Zявляется циклической; 2. существуют именующие множества /„ /2, /3 конституент из H(Z) такие, что Iq n /, Ф0 (q Ф /; q, I е {1,2,3}) и /, n /2 n /3 = 0; 3. существуют конституенты К{ , Kl2, К1з е H(Z) такие, что Пусть Z— циклическая задача. Тогда, по определению, существу- существуют такие решения я,, я2 е Q, что я, u я2 e Q и в соотношении (9.3) множество 5(я,, я2) Ф 0. Поэтому имеется хотя бы одна конституента К1} е #G)такая, что К1} с 5(я, ,тг2). Так как К,ъ с 5(я,) и К,з с S(n2), то по следствию 9.5.1 выполняются соотношения: /Зпу(я,)*0 и /3 п у(я2) ^ 0, то есть множество /3 имеет хотя бы один общий элемент с именующими множествами конституент, элементы которых при- принадлежат как решению я,, так и решению тг2. Следовательно, для лю- любых rxe Kj , r2 е К/2 (/, * /2) таких, что г, е яр r2 e я2, будем иметь: 1хг\12ф 0; /, n/3?fe 0; 12ъ13* 0. Однако из соотношения (9.3) следует, что /3 п у(я, и я2) = /3 n yGc,) n у(я2) = 0. Очевидно, что это будет тогда и только тогда, когда найдутся два таких элемента гх 6 К, , г2е К,2 (/, Ф /2) таких, что г, е я,, r2 e я2 и 1^ nl2 г\13 ф 0. Импликация A) —> B) доказана. Импликация B) —> C) следует из определения конституенты и тео- теоремы 9.5.1. Импликация C) —> A) следует из определения циклической за- задачи. Q.E.D. Следствие 9.7.1. Задача Zявляется циклической тогда и только то- тогда, когда в ЛЮР||а/у||(/ = 1,2,..., n\j = 1,2,...,/?) задачи найдутся строки /„ /2, /3 g {1,2,....«} (ik Ф /,; /:, / е {1,2,3}) w столбцы j\, j2, j2 e {1,2,...,/?} (/* ^У// k> 'G {1 >2,3}) такие, что соответствующая квадратная под- подматрица в каждой строке и каждом столбце имеет только один элемент, равный нулю, и в матрице ||ocl7|| не существует столбца jе {1,2,...,/?}\ {j\ J2 ,уз} такого, чтоа^ .= ai2J= a,3,= 1. 274
9.8. Каноническая ЭКЗ Любую совокупность из трех элементов rx,r2,r2 e Незадачи ZTaKnx, что г, g Kj , r2e К,2 и г3е К,з и конституенты К, , К/2, К1ъ удовле- удовлетворяют C) теоремы 9.7.2, назовем циклом. Очевидно, что задача Z, представленная на рис. 9.1, я, является ациклической, а задача Z, представленная на рис. 9.1, б, — цикличе- циклической, так как элементы r2, r3, r5 e W образуют цикл. Пример. Типичным примером циклической задачи является, оче- очевидно, задача о покрытии, а ациклической — задача о нахождении наибольшего независимого множества вершин графа. Можно пока- показать, что если МП задачи о покрытии в каждом столбце содержит две и только две единицы, то двойственная ей задача является ацикличе- ациклической (заданную МП в этом случае можно интерпретировать как мат- матрицу инциденций неориентированного графа) (см. [9.1]). 9.8. Каноническая ЭКЗ Пусть имеется ЭКЗ Z = (W, (?, M,J) e NP. L-пучком конституенты К, е H(Z) (в задаче Z) назовем множество ; Р'Пунком конституенты К, е H(Z) (в задаче Z) назовем множество Ясно, что К,х с1(^)и^ аР(К1х). Нетрудно также видеть, что ЦК, )eQu P(Kt ) e Q. Теорема 9.8.1. Если к е Q есть опорное решение задачи Zu К, аи, то L(Kj ) с 71. Действительно, из следствия 9.5.3 имеем S(Kj ) с S(Kf ), если Iq з /,. Тогда, учитывая (9.3), получим По условию теоремы 9.8.1 К, с я и поэтому у(п) с\1хФ&. Однако из определения L-пучка ЦК, ) следует, что /,n Ig = /, для всех /?d/,. 275
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач Тогда имеем К, с S(n), поскольку у(я) п 1дФ0. Принимая во внима- внимание, что я — опорное решение, то есть я u S(n) = W, получим: К, с я для всех Iq z> /,. Значит, ДЛ^ ) с я, что и требовалось доказать. Q.E.D. I Теорема 9.8.2. Если я есть опорное решение задачи Z и К, <хп, то Доказательство этой теоремы аналогично доказательству теоре- теоремы 9.8.1. Q.E.D. Задачу Z~ (W, (?, Л/,/) е NP назовем канонической, если для лю- любых ее конституент К, , Kt е H(Z) (/, Ф /2) имеет место соотношение /,<Z/2. Легко заметить, что решение любой задачи Z= (W, Q, M,f) e NP можно свести к решению соответствующей ей канонической задачи Zc = (}Vc, Qc, Mc,fc) и такой, оптимальное решение которой является также оптимальным решением задачи Z Такое сведение может быть осуществлено выполнением стандарт- стандартной процедуры, которую назовем канонизацией задачи Z, состоящей в следующем. Для каждого элемента г е Ненормализованной задачи Z=(W,Q,M,f) найти L-пучокДг) и построить новую задачу^ = (И/1, (?,, Л/,,/j), элемен- элементам которой соответствуют найденные I-пучки задачи Z, то есть г/ е W, если г? <-> L(r()(/ = 1,2,...,л), а каждое подмножество {г/ ,...,/*'} е Q, когда иЬ(Г; )eQ. Кроме того, полагаем ц(г;/) = |i[I(/*)]. Построением зада- задачи Z, завершается выполнение одного шага канонизации. Ясно, что в результате не будет потеряно ни одно опорное решение задачи Z. Канонизация задачи Zзаканчивается после построения задачи Zc, у которой /,-пучок каждого элемента рабочего множества состоит только из одного (рассматриваемого) элемента. Следует заметить, что в общем случае в результате канонизации задачи Z результирующая задача Zc может в качестве опорного иметь решение, которое соответ- соответствует допустимому (не опорному) решению задачи Z Техника исполнения шага канонизации зависит от формы исход- исходного задания задачи Z. 276
9.8. Каноническая ЭКЗ Пример. Наиболее просто осуществляется канонизация задачи нахождения наибольшего независимого множества вершин графа G= (W, S). I-пучок вершины г е ^образуют, очевидно, те и только те верши- вершины графа G, у которых список смежности есть подмножество списка смежностей вершины г. Граф Gx = (Wv ?,), полученный в результате шага канонизации, имеет одинаковое число вершин с исходным графом G = (W, 5), при- причем любой вершине г/ е Wx ставится в соответствие подмножество вершин графа G, образующих I-пучок вершины г, е W(i = 1,2,...,п), то есть /•/<-> U {г,}, 5 4rq:S({rq))cS{{rj)) и г'к е 5, (гД если rk e 5({г,.}) или S({rk}) с 5({г,}). Гь Рис. 9.6. Процедура канонизации графа На рис. 9.6, а изображен нормализованный граф, а на рис. 9.6, б и 9.6, в — графы, полученные после выполнения двух шагов его кано- канонизации. Очевидно, что гх ,г2), }, r/<->{r2,r3}, далее: /;"<-> {г/} ^ {г, ,г2}, {г2 ,г4 ,гб 277
Глава 9. Теоретико-множественные свойства экстремальных комбинаторных задач г3"<-> {г/} <-> {г2 ,г3}, г4"<-> {г/} <-» {г4}, <<-> W <-> К >Г5 >Г6 К 'б"*"» W} ** К }' Полагая, что \х(г) = 1 для всех (/ = 1,2,...,6), очевидно, будем иметь ц(/;") = 2, ц(г2") = 3, |л(г/') = 1, vUrf) = 1, ^«) = 3, ц(гб") = 1. 9.9. Заключение Проведенное исследование теоретико-множественных свойств ЭКЗ позволяет рассматривать задачи, имеющие различную форму поста- постановки, с единой точки зрения, установить их общность. Анализ показал, что вспомогательные множества для любого частичного решения задачи можно построить эффективно, если рассматриваемая задача принадлежит классу UF задач без предви- предвидения. Особый интерес имеет каноническая форма представления задач. Целесообразны дальнейшие исследования этой формы представления ЭКЗ. Интересно также проследить связь между возможностями по- построения эффективного решающего алгоритма и канонической фор- формой задачи. Литература [9.1] Кристофидес Н. Теория графов. М.: Мир, 1978. [9.2] Куратовский К., Мостовский А. Теория множеств. М.: Мир, 1970. [9.3] Пападимитриу X., Стайглиц К. Комбинаторная оптимизация. М.: Мир, 1985. [9.4] Плотников А.Д. О задаче нахождения независимого множества вер- вершин графа//Кибернетика. 1989. № 1.С. 119-121. [9.5] Плотников А.Д. Некоторые свойства экстремальных комбинаторных задач // Математические и программные методы проектирования информа- информационных и управляющих систем. Тезисы докладов к зональной конференции 28-29 мая 1990 г., Пенза. 14-15. [9.6] Плотшков А.Д. Про розбиття графа на найменшу кигькють клик // Вюник ВШ. 1993. № 1. С. 91-96. [9.7] Плотников А.Д. К вопросу о минимизации булевых функций // Вюник ВШ. 1994. № 2C). С. 89-92. [9.8] Плотников А.Д. Нормальная форма экстремальных комбинаторных задач // Вюник ВШ. 1994. № 3D). С. 73-76. 278
Литература [9.9] Плотшков А.Д. До питания про побудову найкоротшоУ диз'юктивноК нормально! форми булево! функцп // Вюник ВП1. 1994. № 2C). С. 89—92. [9.10] Плотников А.Д. Метод нахождения гамильтонового цикла в графе // Материалы симпозиума с международным участием «Наука и предпринима- предпринимательство». Винница-Львов, 1994. С. 37-39. [9.11] Плотников А.Д. Разбиение графа на наименьшее число клик // Ма- Материалы симпозиума с международным участием «Наука и предприниматель- предпринимательство», Винница-Львов, 1994. С. 39—42. [9.12] Плотников А.Д. Один пщхщ до знаходження гамшьтонового циклу в граф1 // Вюник ВП1. 1995, N1. С. 65-69. [9.13] Плотников А.Д. Двоит задач1 комбшаторжм оптимузаци // Вюник ВШ. 1995. №3. С. 55-58. [9.14] Plotnikov A.D. Polynomial-time partition of a graph into cliques. // SouthWest Journal Pure and Applied Mathematics (SWJPAM), Vol. 1. 1996. C. 16-21. [9.15] Plotnikov A.D. Set-theoretical properties of extreme combinatorial problems // SouthWest Journal Pure and Applied Mathematics (SWJPAM), Vol. 2,1996,11-28. [9.16] Plotnikov A.D. Formalization of the Class of Problems Solvable by a Nondeterministic Turing Machine // Cybernetics and Systems Analysis, \fol. 33, No. 5, 635-640, 1997 (see also http://xxx.lanl.gov/ abs/cs/9903012). [9.17] Плотников А.Д. Об уточнении класса задач, решаемых недетерми- недетерминированной машиной Тьюринга // Кибернетика и системный анализ. 1997. № 5. С. 30-36. [9.18] Plotnikov A.D. One Criterion of Existence of a Hamiltonian Cycle // Reliable Computing journal, 4, 1998, 199-202. [9.19] Plotnikov A.D. A class of problems of NP to be worth to search an efficient solving algorithm // USA Repositary, 1999, (see http://xxx.lanl.gov/abs/cs/9903010). [9.20] Plotnikov A.D. Designing SAT for HCP // USA Repositary, 1999, (see http://xxx.lanl.gov/abs/cs/9903006). [9.21] Плотников А.Д. Логическая модель задачи поиска гамильтонова цик- цикла // Материалы конференции «Дискретный анализ и исследование опера- операций». Новосибирск: Ин-т математики им. С.Л. Соболева СО РАН, 26 июня — 1 июля 2000, 101. [9.22] Плотников А. Д., Ольшевський I.JI. Використання покриваючих дерев для побудови гамыьтонового циклу// МЪкнародний науково-техшчний жур- журнал «Вим1рювальна та обчислювальна техшка в технолопчних процесах», 2000. №2A2). С. 143-146, [9.23] Plotnikov A.D. A Logical Model of HCP // International Journal of Mathematics and Mathematical Sciences. \Ы. 26, issue 11,679-684,2001. Hindawi Publishing Corporation. [9.24] Поспелов Д.А. Логические методы анализа и синтеза схем. М.: Энер- Энергия, 1974. 279
Предметный указатель Л/-чередующаяся цепь 76 NP-полная задача 222 O(g(n)) 2\5 o(g(n)) 2\5 А аксиомы группы 90 алгебра 86 Жегалкина 111 алгебраическая система 86 алгоритм 199 «жадный» 36 Дейкстры 71 интуитивное понятие 199 качественная теория 199 метрическая теория 199 поглощающий 36 полиномиальный 213 приближенный 230 разбиения частично упорядоченного множества на цепи 25 тривиальный 218 экспоненциальный 214 антицепь 24 асимптотическая оценка сложности 214 бинарное отношение 16 антирефлексивное 21 антисимметричное 21 асимметричное 21 нетранзитивное 22 обратное 17 рефлексивное 20 симметричное 21 способы задания 18 транзитивное 22 функциональное 33 эквивалентности 22 биномиальные коэффициенты 194 булеан 7 булевы функции 98 аналитические формы задания 112 элементарные 99 в вектор инверсий 159 вершина изолированная 44 насыщенная 76 ненасыщенная 76 смежная 44 внешний алфавит 205 внутренний алфавит 205 временная оценка сложности 212 выборка 148, 149 высказывание 96 простое 96 сложное 96 высота вершины 56 Г граф 43 гамильтонов 62 изоморфный 68 неориентированный 43 ориентированный 43 связный 55 эйлеров 62 глубина вершины 56 гомоморфные объекты 93 группа 89 группоид 86 д двойка 13 дерево 56 ориентированное 56 покрывающее 69 упорядоченное 56 дизъюнкция 109 диаграмма Хассе 24 Эйлера-Венна 8 дизъюнкт ПО дизъюнктивная нормальная форма 109 кратчайшая 131 минимальная 132 сокращенная 135 тупиковая 135 280
Предметный указатель дополнение графа 52 множества 10 допустимое решение 240 Е единичный куб 138 квадрат 138 задача алгоритмически неразрешимая 211 ВЫПОЛНИМОСТЬЮ ациклическая 273 без предвидения 247 двойственная 267 конструктивная комбинаторная 236 нормализованная 264 о наибольшем потоке 77 о покрытии 37 трудноразрешимая 219 экспоненциальная по постановке 220 экстремальная комбинаторная 258 циклическая 273 И изоморфные объекты 93 импликанта 133 простая 134 импликантная матрица 143 импликация 98 исток 77 К каноническая форма задачи 276 кардинальное число 35 квантор всеобщности 114 существования 115 класс NP221 Р220 эквивалентности 22 сохраняющий константу 0 102 сохраняющий константу 1 103 кликовое число графа 61 код Грея 171 кольцо 91 комбинаторика 148 перечислительная 148 композиция бинарных отношений 20 графов 52 машин Тьюринга 210 компонента связности 55 конституента единицы 108 опорных решений 262 контур 55 конъюнктивная нормальная форма ПО конъюнкция 110 критерий сложности ДНФ 131, 132 Л левая область бинарного отношения 17 лексикографический порядок 156 лес 56 логические связки 96 локальная степень вершины 59 м мажоранта 33 маршрут 55 матрица инцидентности 46 опорных решений 260 смежности 45 матроид 35 база 35 независимое множество 35 ранг 35 машина Тьюринга 205 недетерминированная 221 метод Блейка 142 Квайна-Мак-Класки 139 Петрика 144 включений и исключений 182 минимальное цепное разбиение 25 281
Предметный указатель миноранта 33 множество 5 именующее 262 остаточное 261 присоединенное 261 рабочее 240 способы задания 6 универсальное 8 упорядоченное 13 множество-степень 7 моноид 88 мощность множества 35 мультиграф 44 мультимножество 5, 149 Н набор 98 наибольший элемент множества 32 наименьший элемент множества 32 несравнимые элементы 24 О образ 34 объединение графов 52 множеств 9 операции над отношениями 19 операция поглощения 133 примитивной рекурсии 202 склеивания 132 суперпозиции 201 опорное решение 239 оракул 221 отношение порядка 23 линейного 23 нестрогого 23 строгого 23 частичного 23 отображение 33 биективное 34 взаимно однозначное 34 инъективное 34 сюръективное 34 п паросочетание 61 наибольшее 61 совершенное 76 пересечение бинарного отношения 18 графов 52 множеств 9 перестановка 149 подграф 51 подмножество 7 поиск в глубину 57 поле бинарного отношения 17 полином Жегалкина 111 полугруппа 88 абелева 88 последовательностиый принцип 239 поток 77 правая область бинарного отношения 17 правило произведения 150 суммы 150 предикат 6, 114 представление перестановок 154 принцип двойственности 11 прообраз 34 пропускная способность дуги 77 прямое (декартово) произведение 14 пустое множество 7 путь 55 разбиение на цепи 25 разность множеств 9 разрешающая последовательность 253 распознавательная форма задачи 219 рекуррентное соотношение 185 С свободная переменная 115 связанная переменная 115 сеть 77 система независимости 240 282
Предметный указатель совершенная нормальная форма бисуммарная 111 дизъюнктивная 109 конъюнктивная ПО сочетание 149 сравнимые элементы 24 сток 77 структура смежности 48 суграф 51 таблица Кэли 87 тезис Тьюринга 200 Чёрча 200 тело 92 теорема Поста 107 точная граница множества верхняя 33 нижняя 33 транспозиция смежных элементов 165 У универсум 8 упорядоченная пара 13 уровень вершины 56 Ф функционально полная система функций 106 функция 34 вычислимая 200 двойственная 103 линейная 104 монотонная 105 примитивно-рекурсивная 201 производящая 191 рекурсивная 201 простейшая (элементарная) 201 самодвойственная 104 частичная 202 хроматическое число графа 60 ц цепь 23, 55 простая 55 цикл 55 вложенный 163 цикломатическое число фафа 60 частичное решение 239 число независимости графа 60 неупорядоченных выборок без повторений 166 с повторением 168 разбиений множества на подмножества 177 упорядоченных выборок без повторений 152 с повторениями 151 эквивалентность множеств 34 283
Оглавление От автора 3 Глава 1 Введение в теорию множеств 1.1. Понятие множества и способы его задания 5 1.2. Подмножества 7 1.3. Операции надмножествами 8 1.4. Свойства операций надмножествами 11 1.5. Упорядоченные множества. Прямое произведение множеств 13 1.5.1. Алгоритм упорядочивания множества 15 1.6. Бинарные отношения 16 1.6.1. Основные определения 16 1.6.2. Способы задания бинарных отношений 18 1.6.3. Операции над бинарными отношениями 19 1.7. Свойства бинарных отношений. Отношение эквивалентности 20 1.8. Отношение порядка 23 1.8.1. Основные определения 23 1.8.2. Диаграмма Хассе 24 1.9. Разбиение частично упорядоченного множества на цепи 25 1.10. Наименьший и наибольший элементы, границы упорядоченного множества 32 1.11. Функциональные бинарные отношения 33 1.11.1. Отображения 33 1.11.2. Классификация отображений и функций 34 1.12. Мощность множеств 34 1.13. Матроиды 35 Контрольные вопросы 38 Упражнения 40 Литература 42 Глава 2 Введение в теорию графов 2.1. Основные понятия 43 2.2. Способы задания графа 45 2.2.1. Матрица смежности 45 2.2.2. Матрица инцидентности 46 2.2.3. Список ребер 47 2.2.4. Структуры смежности 48 2.2.5. Генерация графов 49 2.3. Части графов 51 2.4. Операции на графах 52 284
Оглавление 2.5. Связность графов и деревья 55 2.5.1. Поиск в глубину 57 2.6. Числа графов 59 2.7. Эйлеровы и гамильтоновы графы 62 2.7.1. Поиск гамильтоновых циклов в графе 63 2.8. Изоморфные графы 68 2.9. Покрывающие деревья 69 2.10. Кратчайший путь в графе 71 2.11. Паросочетания в графе 76 2.12. Потоки в сетях 77 Контрольные вопросы 81 Упражнения 82 Литература 85 Глава 3 Элементы алгебры 3.1. Понятие алгебраической системы 86 3.2. Группоиды и полугруппы 86 3.3. Понятие группы 89 ЗА Кольца, тела и поля 91 3.5. Гомоморфизм и изоморфизм 93 Контрольные вопросы 93 Упражнения 94 Литература 94 Глава 4 Элементы математической логики 4.1. Общие сведения о математической логике 95 4.2. Понятие простого и сложного высказывания 96 4.3. Булевы функции 98 4.4. Свойства булевых функций 100 4.5. Классы булевых функций 102 4.6. Функционально полные системы 105 4.7. Дизъюнктивная нормальная форма 108 4.8. Конъюнктивная нормальная форма 109 4.9. Полиномиальные представления 111 4.10. Способы задания булевых функций 112 4.11. Задача ВЫПОЛНИМОСТЬ ИЗ 4.12. Предикаты 114 4.13. Построение математических моделей 115 4.13.1. Пример 1. Схема управления освещением 115 4.13.2. Пример 2. Сумматор последовательного действия 117 4.13.3. Пример 3.'Логическая модель гам ил ьтоновости графа 118 285
Оглавление 4.14. Реализация математических моделей 123 Контрольные вопросы 125 Упражнения 126 Литература 127 Глава 5 Минимизация булевых функций 5.1. Задача минимизации булевых функций 128 5.2. Постановка задачи минимизации в классе ДНФ 131 5.3. Сокращенная ДНФ 133 5.4. Тупиковые ДНФ 135 5.5. Построение сокращенной ДНФ 137 5.5.1. Геометрический метод 137 5.5.2. Метод Квайна-Мак-Класки 139 5.5.3. Метод Блейка 142 5.6. Поиск минимальных ДНФ 143 Контрольные вопросы 146 Упражнения 146 Литература 147 Глава 6 Элементы комбинаторики 6.1. Предмет комбинаторики 148 6.2. Понятие выборки 149 6.3. Основные правила комбинаторики 150 6.4. Пересчет упорядоченных выборок 151 6.4.1. Число упорядоченных выборок с повторениями 151 6.4.2. Число упорядоченных выборок без повторений 152 6.5. Порождение перестановок 153 6.5.1. Представление перестановок 154 6.5.2. Методы генерирования перестановок 155 6.6. Пересчет числа неупорядоченных выборок 166 6.6.1. Число неупорядоченных выборок без повторений 166 6.6.2. Число неупорядоченных выборок с повторением 168 6.7. Порождение подмножеств 170 6.7.1. Представление подмножеств 170 6.7.2. Генерирование всех подмножеств 171 6.7.3. Генерирование г-элементных подмножеств 174 6.7.4. Генерирование подмножеств с повторениями 177 6.8. Число разбиений множества на подмножества 177 6.9. Генерирование разбиений множеств и чисел 179 6.9.1. Генерирование разбиений множества 179 6.9.2. Генерирование разбиений числа 180 286
Оглавление 6.10. Метод включений и исключений 182 6.11. Метод рекуррентных соотношений 185 6.12. Решение линейных рекуррентных соотношений 188 6.13. Понятие производящей функции 191 6.14. Свойства биномиальных коэффициентов 194 Контрольные вопросы 196 Упражнения 197 Литература 198 Глава 7 Элементы теории алгоритмов 7.1. Предмет теории алгоритмов 199 7.2. Интуитивное понятие алгоритма 199 7.3. Примитивно-рекурсивные функции 201 7.4. Машина Тьюринга 205 7.5. Композиция машин Тьюринга 210 7.6. Алгоритмически неразрешимые проблемы 211 7.7. Понятие сложности алгоритма 212 7.8. Асимптотические оценки функций сложности 214 7.9. Трудноразрешимые задачи 218 7.10. Класс NP 220 7.11. NP-полные задачи 222 7.12. Пример полиномиального сведения 224 7.12.1. Постановка задачи 224 7.12.2. Графовая модель задачи минимизации 227 7.13. Приближенные алгоритмы 230 Контрольные вопросы 232 Упражнения 233 Литература 234 Глава 8 0 разрешимости конструктивных комбинаторных задач 8.1. Введение 236 8.2. Последовательностный принцип построения решения 238 8.3. Теоретико-множественная модель комбинаторных задач 240 8.4. Один пример комбинаторной задачи 242 8.5. Задачи без предвидения 247 8.6. Разрешающая последовательность комбинаторных задач 250 8.7. К методике решения задач класса NP 254 8.8. О недетерминированной машине Тьюринга 255 8.9. Заключение 256 Литература 257 287
Оглавление Глава 9 Теоретико-множественные свойства экстремальных комбинаторных задач 9.1. Теоретико-множественная модель экстремальных комбинаторных задач 258 9.2. Способы задания ЭКЗ 259 9.3. Вспомогательные множества решений ЭКЗ 261 9.4. Конституенты 262 9.5. Нормальная форма ЭКЗ 263 9.6. Двойственные ЭКЗ 267 9.7. Циклические и ациклические ЭКЗ 273 9.8. Каноническая ЭКЗ 275 9.9. Заключение 278 Литература 278 Предметный указатель 280 Учебное издание Плотников Анатолий Дмитриевич Дискретная математика Учебное пособие Редактор Б.С. Славин Компьютерная верстка В.А. Киселёв Художник обложки С.В. Ковалевский Корректор К.А. Степанова Подписано в печать с готовых диапозитивов 03.05.2005. Формат 60x84 1/16. Бумага типографская №2. Гарнитура Ньютон. Печать офсетная. Усл. печ. л. 16,74. Уч.-изд. л. 16,77. Тираж 1010 экз. Заказ № 356<. ООО «Новое знание». ИД №05902 от 24.09.2001. 107076, Москва, Колодезный пер., д. 2а. Телефон @95) 234-58-53. E-mail: ru@wnk.biz При участии ООО «Новое знание». ЛИ № 02330/0133439 от 30.04.2004. Минск, пр. Пушкина, д. 15, ком. 16. Почтовый адрес: 220050, Минск, а/я 79. 5-17) 211-50-38. E-mail: nk@wnk.biz /wnk.biz веское предприятие i типография». 2ltt0i5^P®iPi. ЩШакова-Набережная, 4.