Текст
                    МАТЕМАТИКА И ПРИКЛАДНАЯ МАТЕМАТИКА
Б.Н. ИВАНОВ
ДИСКРЕТНАЯ
МАТЕМАТИКА
АЛГОРИТМЫ И ПРОГРАММЫ
ПОЛНЫЙ КУРС
1
МОСКВА ,
ФИЗМАТЛИГ
2007


УДК 519(075.8)4-681.142.2 ББК 32.973.3 И 20 Иванов Б.Н. Дискретная математика. Алгоритмы и программы. Полный курс. - М.: ФИЗМАТЛИТ, 2007. - 408 с. - ISBN 978-5-9221-0787-7. Учебное пособие по курсу дискретной математики. Изложение носит достаточно полный и строгий характер. Теоретические основы курса сопровождаются практически значимыми алгоритмами, реализованными в конкретных компьютерных программах. Книгу можно рассматривать в качестве хорошего справочника методов и алгоритмов дискретной математики, широко применяемых в практическом программировании. Пособие рассчитано на студентов специальностей, учебные планы которых предполагают изучение каких-либо разделов курса дискретной математики, в первую очередь на математиков-прикладников, а также программистов, занятых разработкой прикладного программного обеспечения. Рекомендовано Дальневосточным региональным учебно-методическим чентром (УМО) в качестве учебного пособия для студентов технических специальностей вузов региона. Рецензенты: кафедра математического моделирования и информатики ДВГ- ТУ,зав. кафедрой доктор физико-математических наук, профессор А.А.Буренин; доктор физико-математических наук, профессор В.В. Катрахов. © ФИЗМАТЛИТ, 2007 ISBN 978-5-9221-0787-7 © Б. Н. Иванов, 2007
ОГЛАВЛЕНИЕ Предисловие 7 Глава 1. Введение в математическую логику 9 §1.1. Системы счисления 9 1.1.1. Системы счисления 9 1.1.2. Смешанные системы счисления 12 1.1.3. Задача оптимального кодирования 14 1.1.4. Системы счисления с основаниями 2, 8 и 16 15 § 1.2. Введение в булеву алгебру 18 1.2.1. Булевы функции 19 1.2.2. Формулы, реализация функций формулами 22 1.2.3. Замена переменных и суперпозиция 24 1.2.4. Существенные и фиктивные переменные 26 1.2.5. Интерпретация булевых функций 26 1.2.6. Алгебра Буля 31 1.2.7. Совершенные дизъюнктивная и конъюнктивная нормальные формы (СДНФ и СКНФ) булевых функций 33 § 1.3. Минимизация булевых функций 37 1.3.1. Классификация двоичных наборов 38 1.3.2. Геометрическая интерпретация задачи минимизации булевых функций 38 1.3.3. Метод Карно минимизации булевых функций 4-х переменных 42 1.3.4. Аналитический метод Куайна минимизации булевых функций 44 § 1.4. Функциональная полнота булевых функций 50 1.4.1. Алгебра Жегалкина 50 1.4.2. Классы Поста булевых функций 54 1.4.3. Теоремы Поста о функциональной полноте 57 § 1.5. Исчисление высказываний 63 1.5.1. Основные понятия 63 1.5.2. Задачи исчисления высказываний 64 1.5.3. Соотношение булевой алгебры и исчисления высказываний. Содержательный аспект 65 1.5.4. Содержательный аспект тождественно истинных формул 66 1.5.5. Формальное введение в исчисление высказываний 68 § 1.6. Исчисление предикатов 85 1.6.1. Понятие предиката 86 1.6.2. Операции над предикатами 87 1.6.3. Определение кванторов 87 1.6.4. Строение исчисления предикатов 89 1.6.5. Предикаты свойств 91 1.6.6. Исчисление одноместных предикатов, исчисление классов 92
4 Оглавление 1.6.7. Техника преобразования формул в исчислении предикатов 96 1.6.8. Формализация некоторых отношений средствами узкого исчисления предикатов 99 Глава 2. Комбинаторные схемы 104 §2.1. Правило суммы 104 § 2.2. Правило прямого произведения 105 § 2.3. Размещения с повторениями 105 § 2.4. Размещения без повторений 106 § 2.5. Перестановки 106 § 2.6. Сочетания 107 § 2.7. Сочетания с повторениями 108 §2.8. Перестановки с повторениями, мультимножества 109 § 2.9. Упорядоченные разбиения множества 110 §2.10. Неупорядоченные разбиения множества 112 § 2.11. Полиномиальная формула 114 § 2.12. Бином Ньютона 114 §2.13. Инверсии 115 § 2.14. Обратные перестановки 116 Глава 3. Представление абстрактных объектов 119 §3.1. Представление последовательностей 119 3.1.1. Смежное представление 119 3.1.2. Характеристические векторы 120 3.1.3. Связанное размещение 121 § 3.2. Представление деревьев 127 3.2.1. Представление деревьев на связанной памяти .... 128 3.2.2. Представление деревьев на смежной памяти 129 § 3.3. Представление множеств 133 Глава 4. Методы подсчета и оценивания 135 §4.1. Производящие функции 135 4.1.1. Линейные операции 137 4.1.2. Сдвиг начала вправо 137 4.1.3. Сдвиг начала влево 137 4.1.4. Частичные суммы 138 4.1.5. Дополнительные частичные суммы 138 4.1.6. Изменение масштаба 139 4.1.7. Свертка 139 §4.2. Линейные рекуррентные соотношения 145 §4.3. Неоднородные линейные рекуррентные соотношения .... 147 §4.4. Обобщенное правило произведения 150 §4.5. Принцип включения и исключения 153 § 4.6. Ладейные многочлены и многочлены попаданий 156 4.6.1. Ладейные многочлены 156 4.6.2. Многочлены попаданий 159
Оглавление 5 Глава 5. Генерация комбинаторных объектов 163 § 5.1. Поиск с возвращением 163 §5.2. Перестановки различных элементов 165 §5.3. Эффективное порождение перестановок 169 §5.4. Порождение подмножеств множества 173 §5.5. Генерация размещений с повторениями 177 § 5.6. Порождение сочетаний 178 § 5.7. Порождение композиций и разбиений 182 § 5.8. Генерация случайных перестановок 188 Глава 6. Сортировка и поиск 191 § 6.1. Сортировка вставками 192 § 6.2. Пузырьковая сортировка 193 § 6.3. Сортировка перечислением 194 § 6.4. Сортировка всплытием Флойда 195 § 6.5. Последовательный поиск 203 § 6.6. Логарифмический поиск 205 § 6.7. Сортировка с вычисляемыми адресами 207 Глава 7. Теория графов. Алгоритмы на графах 210 § 7.1. Основные понятия и определения 210 § 7.2. Представления графов 214 7.2.1. Матрица смежности графа 214 7.2.2. Матрица инцидентности графа 215 7.2.3. Матрица весов графа 216 7.2.4. Список ребер графа 216 7.2.5. Структура смежности графа 217 § 7.3. Метод поиска в глубину 217 § 7.4. Отношение эквивалентности 224 § 7.5. Связные компоненты 226 § 7.6. Выделение компонент связности 227 § 7.7. Эйлеровы графы 231 § 7.8. Остовные деревья 239 7.8.1. Жадный алгоритм построения минимального остовного дерева 241 7.8.2. Алгоритм ближайшего соседа построения остовного дерева 248 § 7.9. Кратчайшие пути на графе 253 § 7.10. Потоки в сетях 260 § 7.11. Клики, независимые множества 265 §7.12. Циклы, фундаментальные множества циклов 277 § 7.13. Листы и блоки 283 7.13.1. Листы 283 7.13.2. Блоки 286 7.13.3. Поиск блоков в глубину 288 § 7.14. Двудольные графы 291 7.14.1. Условия существования двудольных графов 291 7.14.2. Паросочетания 292
6 Оглавление 7.14.3. Алгоритм определения максимального паросочета- ния 292 7'.14.4. Системы различных представителей 295 7.14.5. Связь системы различных представителей и двудольных графов 295 7.14.6. Задача о назначениях 296 § 7.15. Хроматические графы 301 § 7.16. Диаметр, радиус и центры графа 302 Глава 8. Введение в теорию групп. Приложения 304 § 8.1. Определение группы 304 § 8.2. Гомоморфизм групп 305 § 8.3. Смежные классы 306 § 8.4. Строение коммутативных (абелевых) групп 310 § 8.5. Строение некоммутативных групп 315 § 8.6. Симметрическая группа подстановок 315 § 8.7. Действие групп на множестве 320 § 8.8. Цикловой индекс группы 325 § 8.9. Теория перечисления Пойа 326 § 8.10. Цикловая структура групп подстановок 332 8.10.1. Цикловой индекс группы, действующей на себе . . 332 8.10.2. Цикловой индекс циклической группы 332 8.10.3. Цикловой индекс симметрической группы 333 Глава 9. Элементы теории чисел 335 § 9.1. Наибольший общий делитель 335 § 9.2. Наименьшее общее кратное 336 § 9.3. Простые числа 336 § 9.4. Сравнения, свойства сравнений 340 § 9.5. Полная система вычетов 341 § 9.6. Приведенная система вычетов 341 § 9.7. Функция Эйлера 342 § 9.8. Функция Мёбиуса. Формула обращения Мёбиуса 346 Задачи и упражнения 349 Ответы 395 Список литературы 399 Предметный указатель 401
Предисловие Традиционно к дискретной математике относят такие области математического знания, как комбинаторику, теорию чисел, математическую логику, теорию алгебраических систем, теорию графов и сетей и т.д. Дискретная математика всегда оставалась наиболее динамичной областью знаний. Сегодня наиболее значимой областью применения методов дискретной математики является область компьютерных технологий. Это объясняется необходимостью создания и эксплуатации электронных вычислительных машин, средств передачи и обработки информации, автоматизированных систем управления и проектирования. На грани дискретной математики и программирования появляются новые дисциплины, такие как разработка и анализ вычислительных алгоритмов, нечисленное программирование, комбинаторные алгоритмы, алгоритмизация процессов. Курсы по дискретной математике и примыкающие к ним дисциплины изучаются во всех институтах и университетах на отделениях программирования, математики, технических направлениях, экономических и гуманитарных специальностях. Цель написания учебника — научить студентов не только основам дискретной математики, но и показать ее роль в современных компьютерных технологиях, вооружить читателя методами, применяемыми для решения широкого круга задач. Пособие написано в доступной форме, достаточно полно и строго. Особое внимание в книге уделяется вопросу практической компьютерной реализации. В каждом конкретном случае содержится достаточно информации для применения рассматриваемых методов на практике. В этом отношении много полезного найдет читатель, более склонный к программистской работе и интересующийся предлагаемыми алгоритмами в силу их практического использования. Рассматриваемый в книге набор приемов и правил алгоритмического характера может составить хорошую основу формирования культуры разработки, анализа и программной реализации алгоритмов любого заинтересованного читателя. Практическая компьютерная реализация большого количества рассматриваемых задач потребовала включения в книгу специальных разделов дискретной математики: представление абстрактных объектов, сортировка и поиск, порождение комби-
8 Предисловие наторных объектов. Однако увеличение объема материала книги только лишь усугубило многие вопросы, позволило уточнить их суть, а так же придать общее звучание разделам курса, которые на первый взгляд никоим образом не связаны. Книгу можно рассматривать в качестве хорошего справочника методов и алгоритмов дискретной математики, широко используемых в разработках прикладного программного обеспечения. Уровень математической подготовки, требующийся для понимания материала книги, может меняться от главы к главе. Минимум необходимых познаний в программировании соответствует уровню первокурсника, уже научившегося писать довольно пространные программы. Необходимый уровень математического образования соответствует типичной подготовке студента, прослушавшего ряд основных математических курсов, таких как математический анализ, аналитическая геометрия, линейная алгебра. Учебник ориентирован на двухсеместровый лекционный курс, читаемый автором на механико-математическом факультете Дальневосточного государственного технического университета. Без сомнения, книга может составить хорошую основу курсов, примыкающих к дискретной математике, таких как информатика, алгоритмизация процессов, анализ вычислительных алгоритмов. Учебник предназначен прежде всего для студентов специальности «Прикладная математика», а также других специальностей, изучающих дискретную математику и программирование. Книга будет полезна преподавателям, аспирантам и научным работникам, применяющим методы дискретной математики в прикладных задачах.
Глава 1 ВВЕДЕНИЕ В МАТЕМАТИЧЕСКУЮ ЛОГИКУ Математическая логика (называемая также символической логикой, формальной логикой) — это логика, развиваемая с помощью математических методов. Изучать математическую логику — значит, изучать логику, используемую в математике. Математическая логика как наука насыщена весьма богатым и разнообразным материалом. Мы начнем с некоторых ее вспомогательных важных разделов, чтобы затем иметь возможность продвигаться вширь и вглубь. § 1.1. Системы счисления В данном разделе рассматриваются системы счисления как средства представления целых чисел. Изучение свойств систем счисления имеет важное и практическое значение. Так, двоичная система счисления лежит в основе всех современных вычислительных устройств. 1.1.1. Системы счисления Определение. Системой счисления называется совокупность приемов и правил, используемых для представления чисел с помощью цифровых знаков: ±,0, 1,2,... . Для представления чисел используют позиционные системы счисления и непозиционные. Например, к непозиционным относится «римская система счисления» и другие подобного рода. Каждая непозиционная система счисления предлагает свои уникальные правила для записи чисел. Далее будем обращаться лишь к позиционным системам счисления. Определение. Позиционная система счисления — это такая система счисления, в которой числовое значение каждой цифры зависит от ее места (позиции или разряда) в записи числа. При переходе же в следующий соседний разряд числовое содержание цифры меняется в одно и то же число раз.
10 Гл. 1. Введение в математическую логику Определение. Основанием позиционной системы счисления называется количество цифр, используемых в данной системе для записи чисел. В следующей таблице рассматриваются примеры систем счисления и принятые (используемые) ими для записи чисел цифровые знаки. Основание системы счисления Десятичная Восьмеричная Шестнадцатеричная Двоичная q-я система счисления Используемые цифровые знаки 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, E, F 0, 1 0,1, ...,q- 1 В системе счисления с основанием q каждое положительное целое число N имеет единственное представление в виде конечной последовательности N = (a/b-i, ak-2, •••, а2, а\, а0)я, (1.1) где каждое ai — целое, удовлетворяющее условию 0 ^ ai < q, и ak-X ф 0. Число, в записи которого все ai = 0, г = 0, 1,..., к — — 1, является нулем. Нуль представляется последовательностью (0)q. Целое, соответствующее последовательности (1.1), имеет вид N = ak_xqk~x + ak_2qk~2 + ■ • • + a2q2 + axqx + a0q°. (1.2) Форма представления целых чисел (1.2) называется показательной или экспоненциальной. Утверждение 1.1.1. Представление (1.1) целых положительных чисел N является единственным. Доказательство — индукция по N. Проверим единственность такого представления для N = 0. Одно представление нуля — это 0 = (0)q. Допустим существование другого представления 0 = (оЛ_1,^_2,..., a0)q = ak_xqk~x + ak_2qk~2 + ...+ + a0q°, где 0 ^ оц < q. Условие а$ ^ 0 представления (1.2), где aiq1 = 0 лишь при а{ = 0, необходимо влечет а{ = 0 для всех г = 0, 1,..., fc — 1 б записи числа 0 = ak_xqk~x + ak_2qk~2 + ... + + aoq°. Единственность представления N = 0 доказана.
§ 1.1. Системы счисления И Пусть единственность представления выполняется для всех целых 0,1,... ,N — 1. Покажем, что это верно и для числа N. Допустим, что это не так и существуют два различных представления: (1.3) N = (afc_i, ak_2, ..., a2, ab a0)q = = (Ьт-\, &m-2, •••> Ь2, ^Ь fy))g. Пусть т> к, где Ьт-\ > О, тогда N = bm-{q™-{ + bm_2q™-2 + ...+b0q°> >(q-l)qm-2 + ... + (q-l)q°> ^ ak.xqk~x + ak_2qk~2 + ... + a0q° = N. Получили противоречие N > N. Следовательно, возможно лишь т = к, Ък-\ > 0 и ак-\ > 0. Рассмотрим для этого случая разность двух представлений (1.3): к-2 0 = N-N = (Ь,_! - ak.x)qk~x + Yfii - Oi)q\ i=0 Если bk-\ — ak-\ > 0, то k-2 0 = (bk-i - ak-x)qk-x + Yfii ~ <Ч)Ч* > г=0 k-2 k-2 > \qk~X + J> - Oitf > lqk~X - J> ~ Off* = = lqk-{-(lqk-l-l)=l. Таким образом, предположение Ък_\ — ак-\ > 0 приводит к противоречию: 0^1. Значит, Ък_\ = ак-\, где Ък_\ > 0. Отсюда следует, что число N — bk-\qk~x имеет два представления: N -bk-\qk~x = (6fc_2, bfc_3,... ,6о) = (a/c_2,a/c_3,...,a0). С другой стороны, N — bk_\qk~x < N и по предположению индукции оно имеет единственное представление. Следовательно, bi = (ц, i = 0,1,... ,fc — 2, а так как Ък_\ = ак-\, то и N имеет единственное представление. D Доказательством существования представления (1.1) для целого N ^ 0 является алгоритм 1.1 перевода этого числа в q-ю
_12 Гл. 1. Введение в математическую логику систему счисления (a^-i, а^-ч,... , ao)g- Алгоритм формирует последовательность а;, г = О, 1,..., к — 1, способом повторного деления N на основание q и записи остатков от деления в качестве cii, г = О, 1,... , fc — 1. На первом шаге при делении числа N на q остаток будет а^. На каждом следующем шаге в качестве делимого выступает целое частное предыдущего шага от деления на q. Повторное деление заканчивается, как только очередной остаток становится равным нулю. Значение к показывает количество разрядов в записи числа N. Алгоритм 1.1. N q (afc_i,afc_2, ,ao)g ao = 0; s = N- k = 0; while 5 ф 0 do begin ak = s mod q; { q} fc = fc + l; end; if fc = 0then к = к + \. Замечание. Очевидно, что наиболее широко используется десятичная система счисления. Двоичная же система лежит в основе всех современных вычислительных устройств. Сложность визуального восприятия содержания чисел в двоичной системе счисления с необходимостью требует средств записи их эквивалента в более компактной и содержательной форме. Именно шестнадцатеричная (в большей степени) и восьмиричная системы счисления используются для представления чисел в двоичной системе. Например, сегодня сложно найти язык программирования высокого уровня, где бы это было не реализовано. Более того, на этом основании в языках программирования двоичная система счисления даже может и не вводиться. 1.1.2. Смешанные системы счисления Смешанные системы счисления являются обобщением рассмотренных в п. 1.1.1 систем счисления с основанием q. В смешанных системах определяется не единственное основание q, а целая последовательность таких оснований go, q\, <?2> • • • • Теперь
§ 1.1. Системы счисления 13 представление числа N в виде конечной последовательности N = (ак-\, а/;_2,..., ао) соответствует целому к-2 N = ак-Х Д 4i + + «29190 + «19о + «о, 0-4) г=0 где 0 ^ a>i < qi, г =0, 1,... ,fc — 1, и a^_i > 0, если N > 0. Обычная система счисления с основанием q — это частный случай смешанной системы, где все qi = q, г ^ 0. Единственность представления (1.4) для смешанных систем доказывается подобно тому, как это рассмотрено для обычных систем счисления. Смешанные системы счисления в практической деятельности встречаются так же часто, как и десятичная система. Пример. Рассмотрим систему счисления измерения времени — секунды, минуты, часы, дни и недели. Это смешанная система с основаниями q0 = 60, q\ = 60, q2 = 24 и q$ = 7. В данной системе число N = (5,4,3,2,1) интерпретируется как величина, равная 5 неделям, 4 дням, 3 часам, 2 минутам и 1 секунде. Значение целого N = (5,4,3,2,1), соответствующего представлению (1.4), равно N = 5q3q2qiq0 + 4д2919о + 3gi^0 +2q0 + l = = 5 • 7 • 24 • 60 • 60 + 4 ■ 24 • 60 ■ 60 + 3 • 60 ■ 60 + 2 • 60 + 1 = = 3380521. В принятой интерпретации величина N равна интервалу времени, выраженному в секундах. Перевод целого N ^ 0 в смешанную систему счисления N = {ак-\,ак,... ,ао) с основаниями <?о><7ь<72, •• • можно выполнить посредством алгоритма 1.2. Нетрудно заметить, что положив в этом алгоритме все основания равными qi = q, мы повторим алгоритм 1.1 перевода чисел для обычной системы счисления. Значение к устанавливается равным количеству разрядов в записи числа N. Алгоритм 1.2. N (afc_i,afc_2, ,a0) (Як-\,Як-2> >Яо) а0 = 0; s = N; fc = 0; while 5 ф 0 do begin ак =s mod qk; { qk)
14 Гл. 1. Введение в математическую логику end; if k = 0 then k 1.1.3. Задача оптимального кодирования Задача оптимального кодирования формулируется следующим образом: найти систему счисления, в которой наиболее выгодно {оптимально) хранить информацию. Решение. Найти оптимальную систему счисления — значит, определить ее основание q0?t. Уточним понятие «оптимальная» или «наиболее выгодная» система счисления. Без ограничения общности можно считать, что информация представляется последовательностью цифровых знаков щ в какой-либо системе с основанием д, где 0 ^ щ < q. Тогда информацию (данные) можно рассматривать как некоторое целое число N = {ак-\, а/г_2, ..., ao)q. (1 -5) Так как значения 0 ^ щ < q, то для хранения цифровых знаков ai, г = О, 1,... ,fc — 1, необходимо иметь q состояний в каждом числовом разряде устройства хранения данных. Оценим общее число состояний в запоминающем устройстве, необходимых для хранения числа N. Значение числа (1.5) запишем в показательной форме: N = ak-xqk~x +ak-2qk~2 + •• • +a0q°. (1.6) Последнее выражение (1.6) позволяет определить количество разрядов fc, необходимых для хранения числа N. Действительно, N = ak-\qk~X + ak_2qk~2 + ... + a0q° < <(ff-l)fffc"i+(«-l)«fc-2 + ... + («-l)fl° = = (q- \){qk-x+qk-2 + ... + q°) = qk - 1. Итак, N ^qk - 1. Отсюда k = \logq(N + 1)] ^ logq(N + 1). Следовательно, для хранения N потребуется число состояний S = q.k = q-\\ogq(N+l)]. Именно суммарное число состояний S(q)=q-\bgq(N+l)] (1.7) Як) к + 1.
§ 1.1. Системы счисления 15 и является показателем оптимальности системы счисления. Основание оптимальной системы q^ должно доставлять минимум значению выражения (1.7). Можно возразить, что элементная база технических средств определяет и систему счисления хранения данных. В целом так и есть, и все-таки, в какой системе оптимум лучше и насколько? На рис. 1.1 представлен график функции числа состояний S(x) = х х х log^iV +1) от переменного основания х системы счисления. Минимальное значение достигается в точке х = е ж 2.72, для которой S'(x) = 0. Отсюда заключаем, что наиболее предпочтительными (оптимальными) являются две системы счисления — двоичная и троичная. 1.1.4. Системы счисления с основаниями 2, 8 и 16 Системы счисления с основаниями 2, 8 и 16 занимают особое место в различного рода компьютерных технологиях как аппаратных, так и программных. В качестве пояснения приведем следующий пример. Память вычислительных устройств подразделяется на байты. Байт — это набор из 8 бит. Каждый бит имеет 2 состояния — 0 и 1. Таким образом, информация в памяти представляется как последовательность 8-разрядных чисел (байт) в 2-ичной системе счисления. Сложность восприятия двоичных наборов сводит на нет их широкое использование в практических приложениях. Однако 8-битовый размер байта позволяет очень удобно представить содержимое его в 16-ричной системе счисления. Действительно, разделив байт пополам по 4 бита, получим представление байта в виде двузначного числа в 16-ричной системе счисления. Информация в таком виде легко читается и не носит объемного характера. Именно это обстоятельство делает незаменимой 16-ричную систему счисления, практически, во всех вычислительных устройствах. Связь систем счисления с основаниями 2 и 8 Рассмотрим представление целого N ^ 0 в 8-ричной и 2- ичной системах: N% = (Ьт-ьЬш_2,...,Ьо)8 = = ЬШ.ХЪШ-1 + Ьт_28™-2 + ... + Ьо8°, (1.8)
16 Гл. 1. Введение в математическую логику N2 = (afc_i,afc_2,...,a0)2 = о/с-1 ,л о/с-2 , ,л о0 ' ' где 0 < a* < 2, 0 < fy < 8 и afc_i > 0, 6m_i > 0, если JV ф 0. Значения fc,ra ^ 1 определяют количество разрядов в записи соответствующего представления числа N. Запишем представление (1.9) для N2, объединяя справа налево (от младших разрядов к старшим) каждые последующие три слагаемых в одно слагаемое. Недостающие старшие разряды дополняем нулевыми значениями. Получим N2 = (o3(m-i)+222+a3(m_,)+i21 +a3(m_1)20)23("l-1> + ...+ + (a522 + a42' + a32°) 23 + (a222 + 0,2' + o02°) 2° = = (a3(m-l)+2.a3(m-l)+b03(Tn-l))28m- +••• + + (а5>04,оз)28' +(a2,ai,a0)28°. (1.10) Единственность представления числа iV в какой-либо системе счисления (утверждение 1.1.1) дает основание заключить, что разложения (1.8) и (1.10) совпадают. Следовательно, выполняются равенства разрядов указанных разложений: Ь0 = («2>аьао)2 = а2^2 +«i2! +a02°, b\ = (as, a4, a3)2 = a522 + a42* + a32°, fc2 = (a8,a7,a6)2 = as22+a72l +a62°, м in bm-l— (a3m-ba3m-2»a3m-3)2 — = a3m_i2 +a3m_22 +a3m_32 . Отсюда следует и правило перевода целых N ^ 0. Правило. Сравнивая теперь представления iV в 8-ричной (1.8) и в 2-ичной (1.9) системах счисления, заключаем, что каждая цифра разряда (bi)e, i ^ 0, 8-ричной системы счисления определяет СООТВеТСТВуЮЩИе ЦИфрЫ Трех раЗрЯДОВ (а3г+2>ЯЗг+ЬЯЗг)2 2-ичной системы счисления; верно и обратно. Для заинтересованных читателей приведем таблицу (табл. 1.1) соответствия значений (Ь*)8 и (а3;+2,азг+ьа3г)2-
§ 1.1. Системы счисления 17 Таблица 1.1 (Ь)8 0 1 2 3 4 5 6 7 (a3i+2,a3i+l,a3i)2 000 001 010 011 100 101 110 111 = 0 • 22 + 0 • 21 + 0 ■ 2° = 0 • 22 + 0 • 21 + 1 = 0 • 22 + 1 • 21 + 0 = 0 • 22 + 1 • 21 + 1 = 1 • 22 + 0 • 21 + 0 = 1 • 22 + 0 • 21 + 1 = 1 • 22 + 1 • 21 + 0 = 1 • 22 + 1 • 21 + 1 2° 2° 2° 2° 2° 2° 2° Связь систем счисления с основаниями 2 и 16 Нетрудно заметить, что столь удобный переход от 2-ичной системы к 8-ричной и обратно, в обход общей процедуре перевода чисел, стал возможен из-за соотношения между основаниями указанных систем: 8 = 23. Основания же 2-ичной и 16-ричной систем связаны соотношением 16 = 24, что позволяет сформулировать следующее правило перевода чисел для последних систем счисления. Правило. Пусть целое N ^ 0 представлено в 16-ричной и 2- ичной системах счисления: N\6 = (bm-bbm_2,...,bo)l6> N2 = (а/с_1,а/с_2,...,а0)2, (1.12) (1.13) где 0 ^ щ < 2, 0 ^ bj < 16 и a^-i > 0, 6m_i > 0, если N ф Ф 0. Значения к,т ^ 1 определяют количество разрядов в записи соответствующего представления числа N. В (1.12) каждая цифра разряда (6;)i6> i ^ 0, 16-ричной системы счисления определяет в (1.13) соответствующие цифры четырех разрядов (а4г+з>а4г+2>а4г+ьЯ4г)2 2-ичной системы счисления; верно и обратно. Приведем таблицу (табл. 1.2) соответствия значений (Ьг) 16 и (^42+31 ^4г+2 > «4г+1, <Ш Ь • Пример. Пусть N = 3272ю- Найти ж2 = J/8 — ^16 — N. Решение. Удобнее выполнить перевод по следующей схеме: N\o —> J/8 -> ж2 —► ^16- Так и поступим.
18 Гл. 1. Введение в математическую логику Таблица 1.2 (Ми 0 1 2 3 4 5 6 7 8 9 А В С D Е F (Щг+З, й4г+2, ^4г+1, CL4i)2 0000 0001 0010 ООН 0100 0101 оно 0111 1000 1001 1010 1011 1100 1101 1110 1111 = о^ + о^+о-г'+о-г0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 1 = 1 = 1 = 1 = 1 = 1 = 1 = 1 23+0 23+0 23+0 23 + 1 23 + 1 23 + 1 23 + 1 23+0 23+0 23+0 23+0 23 + 1 23 + 1 23 + 1 23 + 1 22+0 22 + 1 22 + 1 22+0 22+0 22 + 1 22 + 1 22+0 22+0 22 + 1 22 + 1 22+0 22+0 22 + 1 22 + 1 241 2'+0 2! + 1 2'+0 2! + 1 2!+0 2' + 1 2!+0 241 2!+0 2! + 1 2'+0 2! + 1 2!+0 2! + 1 2° 2° 2° 2° 2° 2° 2° 2° 2° 2° 2° 2° 2° 2° 2° Согласно алгоритму 1.1 перевода из 10-ичной системы в любую другую получим 3272ю = 6310s = у&. Далее воспользуемся правилом перевода из 8-ричной в 2- ичную. Имеем 6$ = 1102, 3§ = 0112, Is =0012, 0g = 0002. Отсюда х2 =^^001^000,2. По правилу перевода из 2-ичной системы в 16-ричную запишем у16 = 1100 110010002 = СС816. § 1.2. Введение в булеву алгебру Под алгеброй в современной математике понимают множество объектов произвольной природы с определенными на них операциями и свойствами этих операций, даваемых в форме аксиом. Запишем основные требования, предъявляемые к алгебре. Операции алгебры должны быть применимы ко всем объектам множества. В результате выполнения операций должны получаться объекты той же природы, что и исходные. В этом случае говорят, что множество объектов замкнуто относительно опера-
§ 1.2. Введение в булеву алгебру 19 ций. Операций в алгебре должно быть конечное число и каждая операция должна быть конечноместной и т. д. Прежде формального введения в булеву алгебру удобно познакомиться с неформальным изложением данного вопроса. Это означает, что необходимо рассмотреть различного рода понятия, определения и, конечно же, объекты алгебры, возможные операций и их свойства. 1.2.1. Булевы функции Определение. Переменная х называется булевой, если она способна принимать только два значения 0 и 1. В качестве примера интерпретации такого рода переменных может выступать обычный настенный выключатель света на два положения. Здесь 1 соответствет положению переключателя вверх и 0 — положению вниз. Определение. Функция /(xi,x2,... ,жп) называется булевой (или логической, или функцией алгебры логики, или переключательной), если все ее аргументы Х{ являются булевыми, а сама функция также может принимать только два значения 0 и 1. Множество всех булевых функций от переменных Ж1,ж2,...,жп обозначают через Р2- Способы задания булевых функций Способы задания булевых функций не отличаются от способов задания обычных функций анализа. К таковым способам задания стандартно относятся: 1) табличный; 2) графический; 3) аналитический. (1) Табличный способ задания Пусть w = /(ж1,ж2, •• • >жп) — булева функция п аргументов. Область определения данной функции можно рассматривать и как множество упорядоченных наборов (или векторов, или двоичных наборов) D = {(ж1,ж2,... ,жп) | ж; Е {0, 1}, г — 1,2,... ,тг}, на каждом из которых функция принимает одно из двух значений: w G {0,1}. Количество таких наборов (xi,x2,... ,жп), согласно правилу прямого произведения (см. п. 2.2), равно \D\ = | {0,1} х {0, 1} х ... х {0,1} | = 2 ■ 2 •... ■ 2 = Т. 4 v ^^^^^"^ П
20 Гл. 1. Введение в математическую логику Нетрудно определить и количество всех функций w = = f(x\JX2,...,xn). Отдельная функция w = /(жьж2,... ,хп) задана, если определены ее значения (w\, w2,... ,w2n) на всех наборах (х\,Х2,...,хп) G D, где Wj G {0,1} — значение функции w = f(x\,X2,...,xn) на j-м наборе (х\,Х2,...,хп) = = (01... 1) G D, j = 1,2, ...,2П. Итак, количество булевых функций w = /(ж1,Ж2,... ,хп) совпадает с числом двоичных наборов (w\, W2,... ,W2n), где Wj G {0,1}. Согласно правилу прямого произведения (см. п. 2.2) число последних равно | {0,1} х {0,1} х ... х {0, 1}■ | = 2 ■ 2 ■ ... ■ 2 = 22п. V 2п Таблица 1.3 Число № 0 1 2 3 4 5 6 7 Двоичная форма х у z 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Функция w = f(x,y,z) /о=1 =/(0,0,0) /i = l =/(0,0,1) /2 = 0 =/(0,1,0) /з = 1 =/(0,1,1) /4=0 =/(1,0,0) /5 = 0 =/(1,0,1) Л = 0 =/(1,1,0) /7=1 =/(1,1,1) В качестве примера рассмотрим табличное представление булевой функции трех аргументов w = f{x,y,z), где w,x,y,z G G {0, 1}. Область определения функции — это множество двоичных наборов D = {{x,y,z) \ x,y,z e {0,1}}. Число наборов равно \D\ = 23 = 8, а количество таких функций равно 2\D\ = 22 = 256. Значения функции f{x,y,z) удобно представить в виде табл. 1.3, где перечислены всевозможные наборы из нулей и единиц длины 3 и для каждого набора указано значение функции fi G {0,1} на этом наборе. В таблицах, аналогичных табл. 1.3, обычно употребляется расположение наборов, соответствующих порядку естественного роста двоичных чисел: 0, 1,..., 2п — 1, в примере положено п = 3.
§ 1.2. Введение в булеву алгебру 21 Определение. Таблицы значений булевых функций, подобные табл. 1.3, называются таблицами истинности булевых функций. Название таблиц происходит от интерпретации значений 1 - истина (TRUE), 0 - ложь (FALSE). (2) Графический спосособ задания Рассмотрим графическое представление булевой функции трех аргументов w = f(xJyJz)J заданной таблично (табл. 1.3). Заметим, что множество наборов области определения функции D = {(xyyyz) \xyyyz e {0, 1}} является множеством координат точек вершин единичного трехмерного куба (рис. 1.2). Очевидный способ графического представления булевой фунции — это отметить каким-то образом вершины куба, в которых функция принимает значение 1. Именно так на рис. 1.2 и сделано. В соответствии с таблицей значений (табл. 1.3) отмечены вершины, в которых булева функция равна 1. Рис- 1-2 Замечание. Очевидно, что область определения булевой функции п аргументов w = f(x\,X2,... ,хп) составляется из наборов координат точек вершин единичного тг-мерного куба. (3) Аналитический спосособ задания Приведем таблицы истинности, обозначения и названия булевых функций одного и двух аргументов. В табл. 1.4 представлены все (их 22 =4) функции одного аргумента, в табл. 1.5 — все функции двух аргументов (их 22 =16). Таблица 1.4 z J001 / 101 7 111 000 110 011 / 010 7 к 100 X 0 1 2 3 01 00 01 10 11 Обозначение 0 X -■£, X 1 Название Нуль, const 0 Повторение х Отрицание х, не х Единица, const 1 Функции 0 и 1 называются соответственно тождественным нулем и тождественной единицей. Иногда эти функции 0 и 1 рассматривают как функции, зависящие от пустого множества переменных.
22 Гл. 1. Введение в математическую логику Таблица 1.5 X У 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 001 1 0101 0000 0001 0010 001 1 0100 0101 01 10 01 1 1 1000 1001 1010 101 1 1100 1101 11 10 1111 Обозначение 0 х- у, х Л у, xSzy у -» х, х • у X х-»у,х-у У хфу х У у х[у х ~ у -и* у у—>х, у => х, yDx —<х, х~ х —> у, х => у, xD у х \у 1 Название Нуль, const 0 Конъюнкция Запрет по у Повторение х Запрет по х Повторение у Сумма по модулю 2 Дизъюнкция Стрелка Пирса Эквивалентность Отрицание у Импликация от у к х \ Отрицание х Импликация от х к у \ Штрих Шеффера Единица, const 1 Функции одного и двух аргументов, представленные в таблицах 1.4 и 1.5, называются элементарными. Символы -1, |, I, Л, -/», V, —►, ф, ~, участвующие в обозначениях элементарных функций, называются логическими связками (операциями) или функциональными символами. 1.2.2. Формулы, реализация функций формулами Построение формул выполняется из элементарных булевых функций и носит рекурсивный характер. Пусть X — некоторый фиксированный алфавит переменных, а = {-i, |, [, Л, -/», V, —>, Ф, ~} — множество функциональных символов (базис) и F — множество булевых функций, соответствующих функциональным символам а. Определение. Формулой над а называется всякое (и только такое) выражение вида: 1) х — любая переменная из множества Х\ 2) (-.Л), (А\В), (А I В), (А Л В), (А * В), (А V В), (А -> В), (А ф В), (А ~ В), где А, В — это формулы над а. Примеры формул. G\ = ((у —> х) ф ((->у) ■ ж)), (?2 = = (-(ж ^ ((Ь*)\(Ь*)\Ы)) I V)VV))> °ъ = (С* V у) - *)■
§ 1.2. Введение в булеву алгебру 23 Реализация функций формулами. Всякой формуле G однозначно соответствует некоторая функция fc- Понятие булевой функции /с реализуемой формулой G, вводится рекурсивно следующим образом: 1) формуле G = х, где х £ X, сопоставляется функция fc(x) = х\ 2) если G равна одной из формул (~>А), (А\В), (А I В), (А Л В), (А ^ В), (А V В), (А -> В), (А ф В), (А - В), где А, В — это формулы над <т, то /# равно соответствующей элементарной булевой функции -i/д, /д|/в, /л i /б, Ja Л /б, /л -*» /в, /aV/b, /а->/в. /аФ/в, /а ~/в- Если /с(зь32,-.-,Яп), Жг G X, то значение ее на произвольном наборе (аьаг,... ,о?п), а^ G {0,1}, совпадает со значением на этом наборе для соответствующей ей элементарной булевой функции. Таким образом, зная таблицы истинности элементарных функций {функций базиса) (табл. 1.5), можно вычислить и таблицу истинности функции fc, которую реализует формула G. Эквивалентные формулы. Формулы G\ и G2 над а называются эквивалентными, если они реализуют равные булевы функции fGx и fG2. Приоритет операций. Для булевых формул допустима и бесскобочная их запись. Например, G = x($)y~z^z^y\/z. Для составления таблицы истинности таких формул необходимо установить последовательность выполнения операций — расставить скобки. С этой целью каждой логической операции ~*, |, i, А, -^, V, —>, ф, f>j назначается свой отличный от других приоритет операций. Приоритет операций устанавливается следующим их списком: "Л |, I Л, -», V, ->, ф, ~, (1.14) где чем левее расположение операции по списку, тем сильнее ее приоритет. Порядок выполнения операций в формулах 1. Если формула написана со скобками, то порядок определяется скобками. 2. Если формула написана без скобок, то одинаковые операции выполняются в порядке их появления; порядок же различных операций, в этом случае, определяется в соответствии с их приоритетом (1.14): -«, |, J,, Л, -/», V, —>, ф, ~. Определение. Формула называется тождественно-истинной, если ее значение на всех наборах переменных равно 1.
24 Гл. 1. Введение в математическую логику Формула называется тождественно-ложной, если ее значение на всех наборах переменных равно 0. В противном случае формула называется условно-истинной. Пример. Составить таблицу истинности формулы Решение. Расстановка скобок в формуле G дает следующий порядок выполнения операций G = ((жеу) - ((* -> z) -> (yVz))). 4 2 1 Значения истинности для формулы G приведены в табл. 1.6. Таблица 1.6 № 0 1 2 3 4 5 6 7 х у z 000 00 1 0 1 0 0 1 1 1 00 1 0 1 1 1 0 1 1 1 (1) yVz 0 1 1 1 0 1 1 1 (2) z —> z (3) (2)-0) 0 1 1 1 0 1 1 1 (4) хфу 0 0 1 1 0 0 1 1 (5) (4) ~ (3) 1 0 1 1 1 0 1 1 1.2.3. Замена переменных и суперпозиция В основу рекурсивного правила получения новых формул (п. 1.2.2) из элементарных булевых функций положены операции замены переменных и суперпозиции. Рассмотрим их определение и примеры использования. Определение. Операцией замены переменных булевой функции f(x\,X2,... ,жп) называется переименование ее пере-
§ 1.2. Введение в булеву алгебру 25 менных или замена их порядка. Пусть 7г = (7Г1,7Г2,... ,7гп) — перестановка (п. 2.5), тогда операция замены исходных переменных (х\,Х2,...,хп) на новые (ущ, уП2,..., уПп) записывается как #(УЬУ2,.-.,Уп) = /(жьЯ2,...,Жп) = /(У7ГРУ7Г2,...,У7ГП), | Утг2 -> Ж2 Ужп ~> хп где д(у\,у2, • • • ,j/n) — новая булева функция — результат операции замены переменных. Ниже даны примеры таких операций: (х ф у) V z = (z ф z) V ху (х ~у) ^> z = (у ~ z) w. X У ■ z у- z - W X У > Z Определение. Операция суперпозиции (или наложения) булевых функций состоит в том, что вместо аргументов данной булевой функции f(x\Jx2l • • • >хп) подставляют некоторые другие булевы функции hi(ykll9ykl2t...9yklmi), к2(ук21,Ук22,... ,Ук2гП2), ••• ••-, МУ*гР^2'---'У*гтг) и записывают f(xux2,...,xn\ = g(xjt,xh,.. Ь>\(Укп>Ук12>-- M3/fci>3/fc2"- К(УкгХ,Укг2, • 'Х38>Ук\\ >У/с12> >Ук\тх) ~~* ХЧ » У^2т2 / ~> Ж*1 » Укгтпг ) ~> Xir > У&гттгг 7» В качестве примера приведем суперпозицию следующих функций: х е у = ((ж ~ z) е (* -> у)) е (ж|(у -» ж)). (х ~ г) ф (г —> у) —> ж | ж | (у ^> ж) -> у Замечание. Нетрудно заметить, что операция замены переменных является частным случаем операции суперпозиции, если в последней в качестве функций h\, h2,..., hr положить обычные булевы переменные.
26 Гл. 1. Введение в математическую логику 1.2.4. Существенные и фиктивные переменные Скажем, что булева функция f(x\1x2i... , жп) существенно зависит от переменной ж», если существует такой набор значений (ai,... ,а»_ь ai+i,... ,ап) переменных (жь ..., я»_ь ai+b ..., жп), что /(о?1, ... ,0^-1,0, 0:^+1, ••• .Qfn) 7^ /(<*1> ••• ><*1-1> 1, Qfi+i, ... ,Qfn). Переменная ж» в этом случае называется существенной. В противном случае Жг называется несущественной или фиктивной. Рассмотрим следующий пример таблиц истинности двух функций /i и /2: № 0 1 2 3 X 0 0 1 1 У 0 1 0 1 /1 1 1 0 0 /2 1 0 1 0 Фиктивной является для функции f\ переменная у, для функции /2 — переменная х. Определение. Булевы функции f\ и /2 называются равными, если функцию f\ можно получить из /2 способом введения и (или) удаления фиктивных переменных. 1.2.5. Интерпретация булевых функций В контексте рассматриваемых вопросов интерпретацию следует понимать как соотношение двух систем или вложение смысла. В основе интерпретации как соотношения двух систем лежит интерпретирующий словарь — список соответствующих понятий, терминов, определений указанных систем. Предлагается рассмотреть релейно-контактную интерпретацию и смысловую. Релейно-контактная интерпретация Объектами релейно-контактной интерпретации являются контакты (реле) и контактные схемы. Поведение контакта рассмотрим на примере работы физического устройства — реле и обычной кнопки дверного звонка. Схема реле представлена на рис. 1.3. Опишем кратко работу реле.
§ 1.2. Введение в булеву алгебру 27 Контакты I Упругая пластина — Сердечник — Обмотка сердечника Рис. 1.3. Реле Суть работы реле — это его способность находиться в одном из двух состояний. Одно состояние связывается с наличием напряжения на обмотке сердечника, а другое — с его отсутствием. Упругая пластина реле имеет свойство отклоняться вверх при отсутствии напряжения на обмотке сердечника. При наличии на обмотке напряжения сердечник намагничивается и притягивает упругую пластину, устанавливая ее в горизонтальное положение. Именно это свойство реле изменять положение упругой пластины используется в электрических цепях в качестве переключателя. Различают два способа включения реле в электрические цепи. При первом способе реле используется как нормально разомкнутый контакт (рис. 1.4), а при втором — как нормально замкнутый контакт (рис. 1.5). Нормально разомкнутый контакт (рис. 1.4) Нормальное состояние нормально разомкнутого контакта (реле) — это отсутствие напряжения на обмотке сердечника реле (рис. 1.4). Включение такого контакта в электрическую цепь устанавливает ее в непроводящее состояние. При наличии напряжения на обмотке сердечника реле упругая пластина притягивается сердечником вниз и цепь замыкается (рис. 1.4). а) Реле 77777/ Ь) Кнопка звонка JUL с) Условное обозначение контакта на схемах Рис. 1.4. Нормально разомкнутый контакт Нормально замкнутый контакт (рис. 1.5) Нормальное состояние нормально замкнутого контакта (реле) — это отсутствие напряжения на обмотке сердечника реле (рис. 1.5). При включении такого контакта в электрическую
28 Гл. 1. Введение в математическую логику цепь его упругая пластина заводится за контакт цепи (рис. 1.5). Такое включение устанавливает электрическую цепь в проводящее состояние. При наличии напряжения на обмотке сердечника реле упругая пластина притягивается сердечником вниз и цепь разрывается (рис. 1.5). с) Условное обозначение контакта на схемах Рис. 1.5. Нормально замкнутый контакт Вывод. Таким образом, объектами релейно-контактных схем являются контакты и контактные схемы. Различают два вида контактов — нормально разомкнутые и нормально замкнутые. Контактные схемы также имеют два состояния — проводящее и непроводящее. Интерпретирующий словарь соответствия объектов булевой алгебры и объектов релейно-контактных схем Объекты булевой алгебры Булева переменная Значение переменной < > Булева функция Значение функции < > Объекты релейно-контактных схем Нормально разомкнутый контакт < \ — напряжение на обмотке \ ЕСТЬ J F Контактная цепь Г НЕТ 1 < > — проводящее состояние цепи Примеры интерпретаций булевых функций Предложенные примеры интерпретаций в дальнейшем будем использовать как строительные кирпичики для построении контактных схем любой сложности. Пример контактной схемы булевой функции ж 0 у не должен вводить в заблуждение. За- — Кнопка Пружина а) Реле ////// Ь) Кнопка звонка
§ 1.2. Введение в булеву алгебру 29 Булевы функции 1). X 2). х 3). х-у 4). xVy 5). хфу Контактные схемы и * 4+ х Их L2 II х шш II* -Н-У Lj^j llJ Рис. 1.6. Примеры интерпретаций интересованный читатель далее обнаружит, что построить контактную схему произвольной булевой функции не сложнее, чем вычислить ее таблицу истинности. Смысловая интерпретация Объектами смысловой интерпретации являются высказывания. Различают простые и сложные высказывания. Определение. Высказывание — это предложение (или набор слов, или утверждение, или суждение), о котором имеет смысл говорить, что оно истинно либо ложно. Определение. Простым называется высказывание, которое нельзя разбить на части так, чтобы каждая из них являлась высказыванием. Определение. Сложным называется высказывание, состоящее из нескольких простых, связанных логическими связками. Примеры высказываний. «Сахалин — остров». «Платон — грек». «2 меньше 3». «Святогор — богатырь». «Если Ас В, а ВсС, то А с С». Замечание. Истинные высказывания еще называют тождеств енно-истиннымиу а ложные — тождественно-ложными высказываниями.
30 Гл. 1. Введение в математическую логику Интерпретирующий словарь соответствия объектов булевой алгебры и смысловых объектов Объекты булевой алгебры Булева переменная Значение переменной < > Булева функция Значение функции < > Смысловые объекты Высказывание — значение высказывания Г ложь Л \ ИСТИНА J Сложное высказывание значение высказывания Г ложь 1 \ ИСТИНА J Примеры смысловой интерпретации булевых функций Обозначим через Ли В произвольные высказывания, которые интерпретируются как булевы переменные. Приведем базовый (не исчерпывающий) список высказываний, рассуждений (справа), которые могут быть заменены (интерпретированы) логическими формулами, стоящими слева. Булевы функции Смысловая интерпретация -.4 - Не А А не имеет смысла. А не верно. А&В - А и В. Как Д так и В. А вместе с В. А в то время как В. В, хотя и А. Не только Д но и В. А\/ В — А или В или оба. А или В. А если не В A D В —Если А то В. Для А необходимо В. Для В достаточно А. В случае А имеет место В. А~ В — Если А то Б и обратно. Для А необходимо и достаточно В. А тогда и только тогда, когда В. А равносильно В. А эквивалентно В. А® В — А или Б, но не оба. А кроме случая, когда В. Либо А либо В.
§ 1.2. Введение в булеву алгебру 31 Пример. Переведем следующие рассуждения в логическую символику (формулы). Проверьте правильность полученных ответов, вычислив для них таблицы истинности. 1. Любой друг Коли [К] — друг Васи [В]. Петя не друг Васи [■■.В], значит Петя не друг Коли [~^К]. Ответ: ((К э В) х X В) D К. 2. Я заплатил бы за работу по ремонту телевизора [Z], только если бы он стал работать [R]. Он же не работает [~^R]. Поэтому я платить не буду [->£]. Ответ: ((Z э R) • R) Э Z. Задача Кислера. Браун, Джонс и Смит обвиняются в подделке сведений о подлежащих налоговому обложению доходах. Они дают под присягой следующие показания. Браун : Джонс виновен, а Смит невиновен. Джонс: Если Браун виновен, то виновен и Смит. Смит : Я невиновен, но хотя бы один из них двоих виновен. Обозначим через Б, Д и С высказывания: «Браун виновен», «Джонс виновен», «Смит виновен». Выразите показания каждого из обвиняемых логической формулой. Постройте таблицы истинности трех полученных формул. Затем ответьте на следующие вопросы. 1. Совместны ли показания всех троих заподозренных (т.е. могут ли они быть верны одновременно)? 2. Показания одного из обвиняемых следуют из показаний другого; о чьих показаниях идет речь? 3. Если все трое невиновны, то кто совершил лжесвидетельство? 4. Предполагая, что показания всех обвиняемых верны, укажите, кто невиновен, а кто виновен? 5. Если невиновный говорит истину, а виновный лжет, то кто невиновен, а кто виновен? 1.2.6. Алгебра Буля Объектами алгебры Буля (Д. Буль, 1847) является множество ?2 всех булевых функций (п. 1.2.1). Основные операции алгебры: -1, Л, V. Аксиомы алгебры Пусть x,y,z — произвольные булевы функции. I. Аксиомы для особых элементов 0 и 1: 1. xVx = 1; 2. хх = 0.
32 Гл. 1. Введение в математическую логику II. Аксиомы для отрицания'. 1. Т = 0; 2. 0= 1; 3. х = х — снятие двойного отрицания. III. Аксиомы для конъюнкции: 1. х • у = у • х — коммутативность; 2. (х • у) • z = х • (у • z) — ассоциативность; 3. х • х = х — иденпотентность; 4. х • 1 = х\ 5. ж-0 = 0. IV. Аксиомы для дизъюнкции: 1. хУ у =уУх — коммутативность; 2. (хУ у)У z = х V (у V z) — ассоциативность; 3. ж V х = х — иденпотентность; 4. хУ 1 = 1; 5. zV0 = z. V. Л/са/олш для конъюнкции и дизъюнкции: 1. х • (у У z) = х • у V ж • 2? — дистрибутивность ■ относительно V; 2. х У (у • z) = {хУ у) • (xV z) — дистрибутивность V относительно • ; 3. хУ х • у = х — поглощение конъюнктивного члена; 4. х • (х У у) = х — поглощение дизъюнктивного члена. VI. Аксиомы для отрицания, конъюнкции и дизъюнкции: 1. х~^у = хУу — 1-й закон А. де Моргана (XIX в.); 2. хУ у = х • у — 2-й закон А. де Моргана. Замечание. Аксиомы не доказываются в рамках той же теории, однако справедливость их всегда можно проверить в рамках другой теории. В нашем случае — с помощью таблиц истинности. Проверим справедливость первого закона де Моргана: izH"!/ = x У у, вычислив таблицы истинности для его левой и правой частей. № 0 1 2 3 х у 00 0 1 1 0 1 1 ху 0 0 0 1 X 1 1 0 0 У 1 0 1 0 ху 1 1 1 0 х У у 1 1 1 0
§ 1.2. Введение в булеву алгебру 33 В данной системе аксиом не все аксиомы являются независимыми. Это означает, что имеется возможность вывода каких- либо приведенных аксиом из других аксиом. Как правило, авторы сознательно идут на такую избыточность с целью упростить процесс вывода и преобразования формул. Пример. Выведем аксиому V.2: х V (у ■ z) = (х V у) ■ (х V z). Решение. В качестве исходного выражения для преобразования возьмем правую часть указанной аксиомы и приведем ее к выражению левой части этой аксиомы. Итак, имеем (х V у) • (х V z) = (х V у) • х V (ж V у) • z = х • (х V у) V z X X (ж V у) = хх УхуУ zxM zy — ., V.3 х V ху = х — х V zx\J zy — III.3 XX = X ., V.3 x V zx = x = ж V xy\/ zx\/ zy — = x V zy. Замечание. Система аксиом дает возможность приводить произвольные булевы функции к стандартному их виду — это дизъюнктивные и конъюнктивные формы булевых функций. 1.2.7. Совершенные дизъюнктивная и конъюнктивная нормальные формы (СДНФ и СКНФ) булевых функций В данном разделе рассматриваются стандартные формы булевых функций. Отметим, что приведение к стандартному виду выполняется в рамках алгебры Буля (п. 1.2.6). По ходу изложения вводится ряд понятий и определений с целью упрощения и ясности изложения материала. Определение. Элементарным произведением (ЭП) булевых переменных х\,х2,... ,хп G X называется конъюнкция указанных переменных, взятых по одному с отрицанием или без него. Например, x-y-~z — элементарное произведение, х • уТ? — неэлементарное произведение. Определение. Дизъюнктивной нормальной формой (ДНФ) булевой функции называется дизъюнкция элементарных произведений. Например, f(x,y,ziw) = xy^VyzV'xzwV'yw. Определение. Конституентой 1 набора значений (01 10...0) булевых переменных х\,Х2,...,хп G X называется конъюнкция всех указанных переменных, взятых по одному с отрицанием или без него. Переменная входит с отрицанием, если ее значение в наборе равно 0. Для исходного набора конституента 1 имеет вид х\ Х2Х$х±.. .хп. Ясно, что консти- туента 1 является элементарным произведением. Например, 2 Иванов Б.Н.
34 Гл. 1. Введение в математическую логику (010) — набор значений переменных x,y,z, тогда хуz — конституента 1 этого набора. Утверждение 1.2.1. Конституента 1 как булева функция равна 1 лишь на том наборе, для которого она составлена. Справедливость следует непосредственно из определения конституенты 1. Определение. Конституентой 0 набора значений (0110...0) булевых переменных х\,х2,... ,хп Е X называется дизъюнкция всех указанных переменных, взятых по одному с отрицанием или без него. Переменная входит с отрицанием, если ее значение в наборе равно 1. Для исходного набора конституента 0 имеет вид х\ V х2 V жз V х± V ... V хп. Например, если (010) — набор значений переменных х, у, z, то xMyMz — конституента 0 этого набора. Утверждение 1.2.2. Конституента 0 как булева функция равна 0 лишь на том наборе, для которого она составлена. Справедливость следует непосредственно из определения конституенты 0. Утверждение 1.2.3. В соответствии с законами де Моргана (п. 1.2.6) конституента 1 и конституента 0 являются отрицанием друг друга. Совершенная дизъюнктивная нормальная форма булевых функций Заполним таблицу истинности (табл. 1.7) булевой функции f(x\,X2,... ,хп), п — число аргументов. Таблица 1.7 № 0 1 2 £ 2П- 1 Х\ 0 0 0 0 1 х2 . 0 . 0 . 1 . 1 . 1 . Хп . 0 . 1 . 0 . 1 . 1 / /о /. /2 h /2п-1 к1 К к\ к\ к\ -**2П— 1 к0 К°0 к? Kl к? ■К-2п — \
§ 1.2. Введение в булеву алгебру 35 В табл. 1.7 приняты следующие обозначения: / — указывает столбец значений функции f(x\,X2,... ,хп)\ fi e {0,1} — значение функции f(x\,X2, ...,хп) на г-м наборе; К{ — столбец конституент 1; К\ — конституента 1 г-ro набора; К0 — столбец конституент 0; К® — конституента 0 г-го набора. Например, 1 • Ж2 ' 5?з ■ ... ■ хп, a Kf = х\ V Х2 V жз V ... V хп. По К} =х табл. 1.7 составим формулу Fi(xi,x2,...,xn) = 2n-l = /0^V/1^11V...V/2n_1^n_1= \J fiKl (1.15) Теорема 1.2.1 (о СДНФ). Формула F\(x\,X2,... ,хп) (1.15) совпадает с исходной булевой функцией f{x\,x2,..., хп). Доказательство. Функция / и формула F\ совпадают, если совпадают их таблицы истинности. Для этого достаточно проверить, что они равны на произвольном £-м наборе: = foK0\ V f\K{\V ... V f2n-\K2n_x Из утверждения (1.2.1) К\\*={\\ ^\Ц = f0-0Vf{-0V...Vf£'l V...Vf2n-X-0 = fi. О Упрощение формулы F\ {x\, а?2,..., хп) Так как fiK\ = { '{ 0, если fi = 0, К\, если fi = 1, то 2п-1 Fl(xl,x2,...,xn)= \/ fiKli=KlmVKlmaV...VK, 1 г=0 где К^. — конституенты 1 тех наборов, на которых / равна 1. Таким образом, справедливо представление f(xi9x2,...,xn)=K}ni УКХШУ...УКХШ (1.16) Определение. Совершенная дизъюнктивная нормальная форма (СДНФ) булевой функции /(жьжг жп) есть (1.16) — дизъюнкция конституент 1 всех тех наборов, на которых данная булева функция равна 1. 2*
36 Гл. 1. Введение в математическую логику Совершенная конъюнктивная нормальная форма булевых функций По табл. 1.7 составим формулу *2(*Ь*2,». ,ХП) = (/oVifg) • (Д Vtf?) • ... ■ (/an.! VK$n-i) = 2n-l = Д (/iVA?). (1.17) Теорема 1.2.2 (о СКНФ). Формула F2(xi,x2,... ,жп) (1.17) совпадает с исходной булевой функцией f(x\, ж2,..., жп). Доказательство. Функция / и формула F2 совпадают, если совпадают их таблицы истинности. Для этого достаточно проверить, что они равны на произвольном £-м наборе. F2\e = (/oVi^U) • (/, vK°\e) •... • (/2„_, V *£,_,!<) = Из утверждения (1.2.2) *?|<={J; ^ j £ J = (/о v 1) • (/, v 1) •... ■ (fe vo) •... • (/2„_, v 1) = д. о Упрощение формулы i*2(#i, а?2,..., жп) т г w т^о f !' если S% = !' ТаккакДУ*? = { ^ если/.=0, то L2 2п-1 i=0 где #£ — конституенты 0 тех наборов, на которых / равна 0. Таким образом, справедливо представление f(xl,x2,...,xn) = K^-K°n2-...-K°ns. (1.18) Определение. Совершенная конъюнктивная нормальная форма (СКНФ) булевой функции f(x\,x2,..., хп) есть (1.18) — конъюнкция конституент 0 всех тех наборов, на которых данная булева функция равна 0. Следствие. Теоремы об СДНФ и СКНФ позволяют записать в аналитическом виде любую булеву функцию множества Р2, заданную таблично.
§ 1.3. Минимизация булевых функций 37 Следствие. Набор булевых функций а = {-i, Л , V} является полным, так как с помощью этого набора операций можно представить любую булеву функцию Р2. Пример. Составим СДНФ и СКНФ следующих булевых функций: х —> у, х фу, х -» у и х [ у. Соответствующая им таблица истинности (табл. 1.5) приобретает следующий вид: № 0 1 2 3 х у 00 0 1 1 0 1 1 х ->у 1 1 0 1 хфу 0 1 1 0 х -» у 0 1 0 0 х[у 1 0 0 0 Отсюда (х "> У)сднф (х ф у)СДНФ (х -*> У)сднф (х 1 У)сднф [X —> У)СКНФ (х Ф у)СКНФ [X -/» J/) скнф \Х 1 У/СКНФ = хуУху Vху, = xyVxy, = ху, = ху. = хУу, = (х Vy)(x Vy), = (ж Vy)(x Vy)(z Vy), = (х Vy)(x Vy)(xVy). Замечание. Вернемся к интерпретации булевых функций релейно-контактными схемами (п. 1.2.5). Представление функций в форме СДНФ и СКНФ снимает все вопросы относительно составления контактных схем булевых функций любой сложности. Достаточно представлять себе контактные схемы булевых функций -I, Л, V (п. 1.2.5). § 1.3. Минимизация булевых функций Под минимизацией булевых функций будем понимать их представление в самом экономичном коротком виде. Задачу минимизации будем решать в области дизъюнктивных нормальных форм (ДНФ) булевых функций (п. 1.2.7). В области ДНФ минимизация доведена до конечного алгоритма.
38 Гл. 1. Введение в математическую логику 1.3.1. Классификация двоичных наборов Пусть А = (ai,a2,...,an), В = (Ъ{,Ъ2,... ,Ъп), где <цМ G G {0, 1}, — произвольные двоичные наборы. 1. Наборы А и В — соседние, если отличаются ровно одной координатой. Например, А = (1101110011), В — = (1101110001) — соседние наборы. 2. Наборы А и В — несоседние, если отличаются более, чем одной координатой. Например, А = (1 10001001 1), В = (1 1 0 1 1 1 000 1) — несоседние наборы. 3. Наборы А и В — противоположные, если являются отрицанием друг друга. Например, А = (1 1 10000001), В = = (0001111110) — противоположные наборы. 4. Наборы А и В — сравнимые, если одновременно для всех % = 1,2, ...,п выполняется а^ ^ Ъ^ или сц ^ fy. Например, А = (11 1000 1 1 1 1), В = (1 0 1000 1 1 00) - сравнимые наборы. 5. Сравнимые наборы делятся на большие и меньшие. Пусть наборы А и В — сравнимые и для всех i= 1,2, ...,п выполняется сц ^ Ь{, тогда записывают А ^ В. Если же для всех г = 1,2, ...,п выполняется а\ > Ь{, то записывают А> В. 1.3.2. Геометрическая интерпретация задачи минимизации булевых функций Рассмотрим пример минимизации булевой функции трех переменных f(x,y,z), заданной таблично (табл. 1.8). Таблица 1.8 Л Ло л, А2 Аз А А Ае А7 х у z 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 f(x*V*z) 0 0 1 0 1 1 1 1 К1 xyz xyz xy~z xyz xyz xyz xyz xyz
§ 1.3. Минимизация булевых функций 39 А 101 001 011 111 А7 000 110 100 010 4U В таблице А — столбец обозначений наборов; А{ — г-й порядковый набор в таблице истинности; Кх — столбец конституент 1 для каждого набора таблицы истинности. Рассмотрим графическое представление (п. 1.2.1) выбранной функции f(x,y,z). Область определения f(x,y,z) — множество наборов {Aq, А{,..., Ау} координат точек вершин единичного трехмерного куба (рис. 1.7). В соответствии с таблицей истинности (табл. 1.8) отметим вершины, в которых булева функция равна 1. Представленный таким образом куб — это объемная таблица истинности булевой функции. Объемное представление таблицы истинности поз- ^J воляет визуально оценивать распределение вершин по кубу, в которых рИс. 1.7 функция равна 1. Запишем рассматриваемую функцию в СДНФ. При записи конституент 1 в СДНФ будем придерживаться такой их последовательности, где учитывается отношение соседства вершин на кубе (рис. 1.7), в которых функция равна 1. Полагаем, что две вершины соседние, если их наборы являются соседними, т. е. отличаются одной координатой. На кубе соседние вершины — это вершины одного ребра. Итак, f(xiyiz) = xyJVху zMху~Уху zWxyJ. А4 Аъ Ае А7 А2 Используя аксиомы булевой алгебры, упростим f(x,y,z). Заметим, что каждая пара соседних вершин имеет свою общую часть, чем и воспользуемся. Тогда f(x,y,z) = xy(~zVz)Vxy('zVz)Vxy~z= ху V ху \fxy~z. А2 АААЪ А6А7 А2 АААЪ А6А7 После «склеивания» соседних вершин их общую часть можно интерпретировать ребрами, которые их покрывают. Ребро представляется конъюнкцией двух переменных. Значит, последнее выражение для f(x,y,z) включает ребро Л4Л5, ребро A%Aj и вершину А2. Ребра Ал.А$ и A^Aj также являются соседними, соответствующие им выражения (наборы) отличаются одной координатой. Выполним склеивание таких ребер:
40 Гл. 1. Введение в математическую логику f(x,y,z) = x(yVy)Vxyz = х V xyz. А4А5А6А7 А2 А4А5А6А7 А2 Общую часть соседних ребер будем интерпретировать гранью, которая их покрывает. Грань представляется одной переменной. Теперь выражение для f(x,y,z) включает одну грань A^A^A^A-j и вершину А<ь. Геометрическая интерпретация выполненных аналитических преобразований, направленных на упрощение исходной функции f(x1y1z)i дает основание заключить, что уменьшение длины выражения f(x,y,z) возможно лишь в том случае, если имеется в наличие хотя бы одна пара соседних объектов (вершин, ребер и т.д.). Вернемся к объемной таблице истинности (рис. 1.7) исходной булевой функции f(x,y,z). Здесь вершина А% имеет соседнюю вершину Ле, в которой функция равна 1. Склеиванием указанных вершин, с целью уменьшения длины f(x,y,z), мы не воспользовались, так как вершина Л6 участвовала в склеивании с вершиной A-j. Однако и в этом случае длина f(xiyiz) еще может быть уменьшена. Воспользуемся свойством операции дизъюнкции: g V Л V h = g V (Л V h) = g V Л, где g и h — произвольные функции. Это означает, что булева функция не изменяется при повторном многократном включении ее дизъюнктивных членов. Воспользуемся этим свойством и добавим повторно в f(x,y,z) ее же вершину Aq как соседнюю с А^. Склеивание этих вершин уменьшит длину последнего выражения f(x,y,z) на 1: f(x,y,z)= х V xy~z V xy~z = А4А5АеА7 А2 Ае = х V y'z(xVx)= х V y~z . А4А5А6А7 А2А6 А4А5А6А7 А2А6 Последнее выражение позволяет заключить, что вершина А^ оказалась покрытой дважды: гранью A^A^A^A-j и ребром А2А^. Сформулируем общие правила аналитического описания геометрических объектов (вершин, ребер, граней и т.д.). 1. Выписывается конъюнкция тех переменных, которые не изменяются в пределах данного геометрического объекта.
§ 1.3. Минимизация булевых функций 41 2. Переменная берется с отрицанием, если на данном геометрическом объекте она равна 0 и без отрицания, если равна 1. Основные правила минимизации булевых функций в геометрической интерпретации 1. Пусть f(x\,X2,... ,хп) — исходная булева функция, которую необходимо минимизировать. Рассмотрим ее графическое представление. Множество наборов области определения функции f(x\,X2,...,xn) — это множество координат точек вершин единичного тг-мерного куба. Отметим вершины такого куба, в которых функция равна 1. Построенный таким образом тг-мерный куб является объемной таблицей истинности исходной функции. 2. Минимизация f(x\,X2,... ,хп) в геометрической интерпретации заключается в том, чтобы покрыть (склеить) все вершины единичного тг-мерного куба, в которых булева функция равна 1, геометрическими объектами (вершинами, ребрами, гранями и т.д.) максимально возможной размерности. Покрывать следует таким образом, чтобы ни одна из вершин, в которых функция равна 0, не оказалась покрытой. 3. Вершины куба можно покрывать произвольное число раз. Значение функции при этом не изменяется. 4. Минимальная ДНФ функции f(x\,x2,... ,хп) — это дизъюнкция геометрических объектов (их аналитических представлений), участвовавших в покрытии вершин куба, в которых функция равна 1. Пример. Найти минимальную ДНФ булевой функции f(x,y,z), заданной таблично (табл. 1.9). Таблица 1.9 А А Ах л2 л, А А As А7 xyz 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 f(x,y,z) 0 1 1 0 1 0 1 1 к1 xy~z xyz xy"z xyz xy~z xyz xyz xyz
42 Гл. 1. Введение в математическую логику На рис. 1.8 представлен куб пространственной таблицы истинности рассматриваемой функции. Точками выделены вершины, в которых f(x,y,z) равна 1. Геометрический объект максимально возможной размерности, которым можно покрывать вершины куба данного примера, — это ребро. Покрываем только те вершины, в которых функция равна 1. Вершины можно покрыть тремя ребрами А^А^, A-jA^, A2A^ и одной вершиной А\. Отсюда минимальная ДНФ имеет вид Ал х z* / 101 Y. 'ooi 111 А7 000 110 011 / 010 У *Аь Л А2 100 Рис. 1.8 f(x,y9z)min = xzM xyM yzM xyz. А4Аъ А7А6 А2Аъ А\ 1.3.3. Метод Карно минимизации булевых функций 4-х переменных В основе геометрической интерпретация задачи минимизации (п. 1.3.2) булевых функций f(x\,X2,... ,хп) лежит пространственная структура единичного гг-мерного куба. Успешное использование геометрической интерпретации в задаче минимизации функций 3-х переменных обусловлено наглядностью представления отношения соседства вершин в трехмерном кубе. С увеличением размерности п задачи возрастает число связей между вершинами и существенно падает наглядность представления. Так, для функций 4-х переменных f(x,y,z,w) решение указанным способом уже становится не очевидным. Например, на рис. 1.9 представлен четырехмерный куб. Такой куб строится перемещением трехмерного куба (x,y,z — измерения) по четвертому измерению (w). Метод Карно также является геометрическим, минимизация выполняется в рамках основных правил минимизации булевых функций в геометрической интерпретации. В основу метода положено удобное представление четырехмерного куба на плоскости, которое называется картой Карно (рис. 1.10, слева). Представление сохраняет отношение соседства вершин. Рис. 1.9
§ 1.3. Минимизация булевых функций 43 Рис. 1.10. Карта Карно Структура карты Карно (рис. 1.10) 1. Одна клетка карты соответствует вершине (нульмерная грань) четырехмерного куба (рис. 1.9). 2. Соседним вершинам четырехмерного куба соответствую соседние клетки карты Карно. Соседние клетки карты имеют общую сторону. Отношение соседства клеток на карте Карно имеет несколько особенностей, что очень важно для минимизации функций. При определении соседних клеток следует представлять, что горизонтальные и вертикальные края карты склеены в цилиндры так, как это показано на рис. 1.10, где а) — вертикальное склеивание и Ь) — горизонтальное склеивание. Если же выполнить горизонтальное склеивание карты, которую ранее склеили вертикально, то получим геометрическую фигуру — тор (бублик, двойной цилиндр) (рис. 1.10, с). Таким образом, у карты Карно нет крайних клеток, все они равнозначны. Соседство клеток оценивается по их относительному расположению на торе (двойной цилиндр). 3. Две соседних клетки карты соответствуют ребру (одномерная грань). 4. Четыре соседних клетки карты соответствуют двумерной грани. На карте двумерные грани составляются из двух ребер (две пары соседних клеток). Расположение таких ребер возможно либо в один ряд, либо квадратом. На рис. 1.10 можно найти примеры конфигураций такого рода соседства клеток, отмеченых звездочками (*). Если вы все правильно поняли, то должны опознать здесь четыре двумерные грани. 5. Восемь соседних клеток карты соответствуют трехмерной грани (трехмерный куб). На карте трехмерные грани составляются из двух соседних двухмерных граней. 6. Шестнадцать соседних клеток карты соответствуют четырехмерной грани (четырехмерный куб). На карте четырех-
44 Гл. 1. Введение в математическую логику мерные грани составляются из двух соседних трехмерных граней. Пример. Найти минимальную ДНФ булевой функции, карта Карно (таблица истинности) которой представлена на рис. 1.11. * * * * У * * * 1 / * * У Решение. Отмеченные клетки карты соответствуют координатам вершин еди- w ничного четырехмерного куба, в которых функция равна 1. Максимальная размер- * ность грани, которой можно покрывать Рис- 1-11 клетки указанной карты, равна двум. Таких граней здесь две — х"у и yz. Оставшиеся вершины покрываем двумя ребрами — xzw, xzw, и одной оставшейся вершиной — xy~zw. Отсюда /(ж, у, z,w)min = _ _ ДНФ = ху V уz V xzwV Vхzw V xyzw. Пример. Найти минимальную ДНФ булевой функции, карта Карно (таблица истинности) которой представлена на рис. 1.10. Решение. Отмеченные клетки карты соответствуют координатам вершин единичного четырехмерного куба, в которых функция равна 1. Максимальная размерность грани, которой можно покрывать клетки указанной карты, равна двум. Все отмеченные клетки покрываются тремя такими гранями. Отсюда минимальная ДНФ равна f(x,y,z,w) min = zwV xwV yw. ДНФ 1.3.4. Аналитический метод Куайна минимизации булевых функций Введем определения и понятия, используемые при описании метода Куайна минимизации булевых функций. Отметим, что в итоге данного раздела излагается конечный алгоритм минимизации произвольной булевой функции. Алгоритм вполне пригоден для его программной реализации. Классификация дизъюнктивных нормальных форм булевых функций Рассматриваемая класификация булевых функций привязывается к этапам минимизации метода Куайна. Последовательность форм булевых функций этапов минимизации представляется следующим их списком:
§ 1.3. Минимизация булевых функций 45 1. ДНФ; 2. СДНФ — исходная форма булевой функции; 3. Сокращенная ДНФ; 4. Тупиковая ДНФ; 5. Минимальная ДНФ. Определение. Импликантой fi булевой функции / называется элементарное произведение, которое равно нулю на всех тех наборах, где / равна 0. Это эквивалентно тому, что импликация fi —> / является тождественно истинной формулой (следует из определения импликанты). Утверждение 1.3.1. Пусть f = AV В и А,В,С — элементарные произведения. Тогда А, В • С — импликантны. Доказательство. Достаточно проверить утверждение для конъюнкции ВС, т. е. показать, что импликация В х х С —► / — тождественно истинная формула. Запишем импли- кацию В • С -> / в СКНФ. Тогда В • С -±f = ТГ~С V± = = ВС VJA V В) = (В V С) V (AV В) = (В V В) V AV С = = 1VAVC=1. D Итак, а) дизъюнктивный член А функции является ее импликантой; б) импликантой функции является элементарное произведение В • С, если часть его В является дизъюнктивным членом функции. В соответствии с утверждением 1.3.1 дадим следующее определение. Определение. Импликанта функции называется простой, если сама она является дизъюнктивным членом функции, а никакая ее часть не является таковой. Пример. Пусть f(x,yz) = x"zV xyz VyJVy. Тогда x~z, xyz,y — простые импликанты, y"z — непростая импликанта, xy~z — непростая импликанта, xyzw — непростая импликанта. Замечание. От непростых импликант функций можно избавляться. Избавимся в последнем примере от непростой импликанты y~z. Имеем f(x,y,z) = x~z V xyz V y~z V у = = x'zVxyzVy('zV 1) = x~z\I xy zVy. Утверждение 1.З.2. ДНФ булевой функции может быть составлена из простых импликант. Доказательство следует из последних определений.
46 Гл. 1. Введение в математическую логику Определение. Сокращенная ДНФ функции есть дизъюнкция ее простых импликант. Определение. Тупиковая ДНФ функции есть сокращенная ДНФ, в которой нет ни одной лишней простой импликанты. Определение. Минимальная ДНФ функции есть наименьшая из тупиковых ДНФ. Операции упрощения метода Куайна Пусть А и В — элементарные произведения. 1. Операция полного склеивания. Ах У Ах = А{хУх) = А. Геометрическая интерпретация. Операция полного склеивания соответствует объединению соседних геометрических объектов Ах и Ах — вершин, ребер, граней и т.д. 2. Операция неполного склеивания. ( А V Ах V Ах, Ах V Ах = \ А V Ах, { А V Ах. Геометрическая интерпретация. Операция неполного склеивания соответствует повторному покрытию геометрических объектов Ах и Ах — вершин, ребер, граней и т.д. 3. Операция элементарного поглощения. AvAB=A(lVB) = A. Геометрическая интерпретация. Операция поглощения соответствует удалению ранее покрытых геометрических объектов АВ объектами большей размерности А. Алгоритм минимизации метода Куайна 1. Исходная форма булевой функции — это ее СДНФ. 2. Получение сокращенной ДНФ. Для всех членов исходной булевой функции выполнить все возможные операции полного и неполного склеивания. Затем произвести все возможные операции элементарного поглощения. 3. Получение тупиковой ДНФ. Все тупиковые ДНФ булевой функции получаются из сокращенной ДНФ с помощью им- пликативной матрицы Куайна. 4. Получение минимальной ДНФ. Из всех найденных тупиковых ДНФ выбирается ДНФ с минимальной длиной по числу вхожднения всех переменных. Минимальных ДНФ у булевой функции может быть несколько, если их длины совпадают. Изложение каждого из пунктов алгоритма Куайна рассмотрим на конкретном примере минимизации булевой функции:
§ 1.3. Минимизация булевых функций 47 f(x,y,z,w)cmi<tf = xyzwVxyzwVxyzwV V xy~zw\/ xy~zw VxyzwV (1-19) V xy zwV xy zwV xyzw. Получение сокращенной ДНФ 1. Нумеруем все слагаемые булевой функции (1.19) и пытаемся выполнить операцию полного склеивания каждого слагаемого с каждым: /= xy^WVxy^wVxy~zw V 1 2 3 \l~xy~zw V'xy~zw Vxy zw V 4 5 6 V ху zw V х у z w V х у z w . 7 8 9 2. Формируем новый список булевой функции. Сначала записываем результаты полного склеивания и отмечаем слагаемые, участвовавшие в операциях. Затем дописываем слагаемые, не принимавшие участия в операциях склеивания. Сохраняем нумерацию слагаемых исходного списка функции: / = x^wVxy^VxywVxywVx~zwVy~zwV 1,2 1,5 1,8 2,9 3,4 4,5 VxzwVxyzVyzwVxzw. 4,6 6,7 7,8 8,9 3. Если возможно, то повторяем многократно п. 1 и п. 2 алгоритма с новым списком слагаемых функции: f= xw V xw Vxy~z\/x~zw\/ (1,2),(8,9) (1,8),(2,9) 1,5 3,4 V у ~zw V х z w Vi у z V у zw . 4,5 4,6 6,7 7,8 4. Для последнего списка слагаемых выполняем операцию элементарного поглощения. Получили сокращенную ДНФ: f= xwVxy^Vx^wVy~zwVxzwVxyzVyzw. 1,2,8,9 1,5 3,4 4,5 4,6 6,7 7,8
48 Гл. 1. Введение в математическую логику Получение тупиковой ДНФ Тупиковые ДНФ булевой функции строятся с помощью им- пликативной матрицы Куайна и найденной сокращенной ДНФ функции. Столбцы матрицы идентифицируются слагаемыми исходной булевой функции f(x,y,z,w). А так как исходная форма функции — СДНФ, то столбцы — конституенты 1. Строки матрицы Куайна идентифицируются простыми импликантами найденной сокращенной ДНФ булевой функции. Импликанты / / XW xyz ~x~zw y~zw ~xzw "xyz yzw 1289 15 34 45 46 67 78 + 1 * * / 2 * / 3 * + 4 * * * 5 * * 6 * * 7 * * + 8 * * / 9 * Рис. 1.12. Импликативная матрица Куайна Геометрическая интерпретация матрицы Куайна. Столбцы матрицы — это вершины куба, в которых функция равна 1. Строки матрицы являются простыми импликантами. Импли- каты — это геометрические объекты (вершины, ребра, грани и т.д.), которые покрывают указанные вершины куба. При построении сокращенной ДНФ устанавливалась нумерация исходных слагаемых СДНФ булевой функции и нумерация импликант сокращенной ДНФ. Пусть номера слагаемых СДНФ соответствуют номерам столбцов матрицы Куайна. Тогда составной номер импликанты — это список номеров столбцов, которые покрывает данная импликанта-строка матрицы. Такие номера столбцов отмечаются звездочкой для каждой импликанты матрицы. Нетрудно заметить, что импликативная матрица Куайна — это представление пространственной таблицы истинности на плоскости, где вместо сохранения отношения соседства вершин представлены уже геометрические объекты-импликанты, покрывающие вершины, в которых функция равна 1. Алгоритм поиска тупиковой ДНФ заключается в том, чтобы из перечня простых импликант сокращенной ДНФ вы-
§ 1.3. Минимизация булевых функций 49 брать минимальный по длине их состав так, чтобы выбранные импликанты покрывали все столбцы матрицы Куайна. 1. Определяются столбцы с одной звездочкой (*). В матрице Куайна (рис. 1.12) они отмечены символом /. Каждый из таких столбцов покрывается лишь одной импликантой. Значит, такие импликанты всегда должны входить в тупиковые ДНФ. В матрице Куайна (рис. 1.12) строки этих импликант отмечены символом /. 2. Далее логика минимизации подсказывает, что найденные обязательные импликанты помимо столбцов с одной звездочкой могут покрывать и другие столбцы. Их также следует отметить как покрытые. Такие столбцы в матрице Куайна (рис. 1.12) отмечены символом +. 3. В итоге могут остаться непокрытыми лишь столбцы, каждый из которых содержит две и более звездочки. Множество таких столбцов покрывается множеством импликант со звездочками в указанных столбцах. Из этого множества импликант необходимо выбрать те, которые имеют наименьшую суммарную длину и покрывают оставшиеся столбцы. Для небольшого числа переменных задачу всегда можно решить полным перебором. Вернемся к примеру. Непокрытыми остались столбцы 5,6,7. Они покрываются множеством импликант (1,5), (4,5), (4,6), (6, 7), (7,8). Видно, что нет одной импликанты, которая покрывала бы все три столбца. Две такие импликанты можно подобрать двумя способами. Первый способ — (6,7), (1,5), и второй — (6,7), (4,5). Им соответствуют тупиковые ДНФ f(xJyJzJw)Tyul = xw \fx~zw\fxyz\J'xy~z, 1,2,8,9 3,4 6,7 1,5 f(x,y,z,w)Tyn2 = xw Vx~zwVxy zVy~zw . 1,2,8,9 3,4 6,7 4,5 Тремя импликантами столбцы 5,6,7 можно покрыть также двумя способами. Первый способ — (4,6), (7,8), (1,5) и второй - (4,6), (7,8), (4,5): f(x,y,z,w)Tyn3 = xw Vx~zwVxzwVyzwVxy~z, 1,2,8,9 3,4 4,6 7,8 1,5 f(x,y,z,w)Tyn4 = xw Vx~zwVxzwVyzwVy~zw. 1,2,8,9 3,4 4,6 7,8 4,5
50 Гл. 1. Введение в математическую логику Получение минимальной ДНФ Из всех найденных тупиковых ДНФ выбирается та, которая имеет минимальную длину по числу вхождения всех переменных. Минимальных ДНФ у булевой функции может быть несколько, если их длины совпадают. Так, в примере из найденных четырех тупиковых две имеют равную наименьшую длину. Значит, имеем две минимальных ДНФ: /min,=/туп, = XW VxZWVxyzVxy^, 1,2,8,9 3,4 6,7 1,5 fmin2 =/туп2 = XW Vx^wVxyzVy^W. 1,2,8,9 3,4 6,7 4,5 § 1.4. Функциональная полнота булевых функций Определение. Система булевых функций F = {f\, /2,... ...,/т} из Р2 называется {функционально) полной, если любая булева функция может быть реализована формулой над этой системой, т. е. может быть выражена (представлена) через /ь/2»---»/т с помощью операций замены переменных и суперпозиции (п. 1.2.2). Утверждение 1.4.1. Пусть F = {/ь /2,..., fm} и G = — {<?ь<?2> • •• ,9п} две системы из Р2. Известно, что система F — полная и каждая ее функция может быть реализована формулой над системой из G. Тогда и система G — полная. Пример. Система булевых функций а = {-i, Л, V} — полная. Действительно, в теоремах об СДНФ (1.2.1) и СКНФ (1.2.2) речь идет именно об этом наборе булевых функций, посредством которого можно записать в аналитическом виде произвольную булеву функцию из Р2- 1.4.1. Алгебра Жегалкина Объектами алгебры является множество Р2 всех булевых функций (п. 1.2.1). Основные операции алгебры: 1, Л, ф. Аксиомы алгебры Пусть х, у, z — произвольные булевы функции. I. Аксиомы для конъюнкции: 1. х • у = у • х — коммутативность; 2. (х • у) • z = х • (у • z) — ассоциативность; 3. х • х = х — иденпотентность;
§ 1.4. Функциональная полнота булевых функций 51 4. х • 1 = х\ 5. ж-0 = 0. II. Аксиомы для суммы по модулю 2 (ф): 1. хфу = уфх — коммутативность; 2. (х ф у) ф z = х ф (у ф z) — ассоциативность; 3. хфх =0; 4. х ф 1 = х\ 5. жф0=ж. III. Л/сошжа для конъюнкции и суммы по модулю 2: 1. x-(y®z) = x-y ф x-z — дистрибутивность • относительно ф. Замечание. Изложение данного раздела повторяет схему изложения алгебры Буля и основной его теоремы об СДНФ (п. 1.2.6, п. 1.2.7). Полиномы Жегалкина Определение. Полиномом Жегалкина Рж(х\ух2у... ,жп) от п переменных называется выражение вида Рж = ао Ф а\х\ ф а2х2 Ф ... Ф апхпф Ф аХ2х\х2 Ф ахъх\хъ Ф ... Ф ап_1)Пжп_1Жпф (1.20) Фа1,2,Зж1ж2жЗ Ф •• • Ф 0>\,2,...,пх\х2 * •• • • жп, где aixi2.„ik G {0,1} — коэффициенты, ж* — булевы переменные. Определение. Полином Жегалкина называется линейным, если его степень не превышает 1. Такой полином имеет следующий вид: -Рж(ж1,ж2,...,жп) = аоФа1ж1 Фа2ж2Ф ...фапжп. (1.21) Утверждение 1.4.2. Количество полиномов Жегалкина п переменных (1.20) совпадает с числом булевых функций п переменных и равно 22П. Доказательство. Пусть т — число слагаемых в полиноме Жегалкина (1.20). Определим это число. Для этого рассмотрим алгебраическое выражение (1 +х\){\ + х2) ■ ... • (1 +хп) = 1 +х\ + х2 + ... +хп+ + Х\Х2 +Х\Х$ + ... +Хп-\Хп + + х\х2х$ + ... +х\х2 • ... • хп. (1.22)
52 Гл. 1. Введение в математическую логику Число слагаемых в правой части последнего выражения совпадает с числом слагаемых в полиноме Жегалкина (1.20). Число слагаемых же в правой части (1.22) легко сосчитать. Положим в (1.22) все xi = 1, г = 1,2, ...,тг, тогда в правой части каждое слагаемое обратится в 1 и в сумме дадут число таких слагаемых т. С другой стороны, левая часть выражении (1.22) при Х{ = 1 равна 2 ■ 2 ■ ... ■ 2 = 2П. Отсюда т = 2п — число слагаемых в полиноме Жегалкина (1.20). А так как коэффициенты а^,^...,^ слагаемых в (1.20) могут принимать два значения: 0 или 1, то количество полиномов Жегалкина определяется как 2Ш = 22п (правило прямого произведения п. 2.2). D Теорема 1.4.1 (Жегалкина). Любая булева функция f(x\ix2i...ixn) из Р2 может быть представлена единственным образом своим полиномом Жегалкина Рж(х\,х2,... ,хп) (1.20). Доказательство. Используя таблицу истинности функции f(x\,x2,... ,жп) (табл. 1.7), составим формулу F^(x\,x2,... ...,жп) по шаблону F\(x\,X2,...,xn) (1.15) теоремы о СДНФ (1.2.1), где вместо знака операции дизъюнкции (V) используется знак операции ф — суммы по модулю 2: Fz(x\,x2,... ,жп) = 2п-1 = /o^e/iifi1e...e/2»-ii^n.1 = 0/i^> (1.23) г=0 где fi — значение / на г-м наборе таблицы истинности; К\ — конституента 1 г-ro набора. Покажем совпадение исходной функции / и формулы ^т3. Для этого достаточно проверить их равенство на произвольном £-м наборе таблицы истинности функции /: Fz\i = foKb\i®flKl\i®...®f2n_lKln-i\i = 0, если гф $,, если г = L Из утверждения (1.2.1) К\\^= I / = /o-oe/i-oe...e//-ie...e/2n-i-o = //. Итак, / и F$ совпадают. Приведем формулу F$ к полиному Жегалкина. Для этого достаточно избавиться от возможных операций отрицания в К\ конституентах 1. Замена отрицания выполняется по аксиоме (Н.4) жф 1 = ж. Далее, согласно аксиоме
§ 1.4. Функциональная полнота булевых функций 53 (III. 1) х • (у ф z) = х • у ф х • z, раскрываем скобки и, пользуясь аксиомами (II. 3) х ф х =хи (II. 5) х ф 0 = 0, приводим подобные. Единственность представления функций полиномами Жегалкина следует из утверждения 1.4.2, что количество таких полиномов от п переменных совпадает с числом булевых функций того же числа аргументов и равно 22П. D Замечание. СДНФ булевой функции / не изменяется после замены в ней операций дизъюнкции V на операции ф — сумма по модулю 2, так как показано, что формулы F$ и F\ совпадают с исходной функцией /, где F\ — СДНФ функции /. Следствие. Система булевых функций <т = {1,Л,ф} — полная. Действительно, данный набор операций используется при построении полиномов Жегалкина булевых функций из Р2. Пример. Построить полином Жегалкина функции х —> у. Решение. Строить будем согласно теореме Жегалкина: (я-> у)ж = (ху Уху У ху)стФ = хуфху®ху = = (х ф 1)(у ф 1) ф (х ф 1) у ф ху = = хуфхфу Ф 1 Фжуф уфху = = хуфх ф 1. Утверждение 1.4.3. Пусть Р(ж1,ж2,• •• >жп) ~~ полином Жегалкина степени k ^ 3. С помощью замены переменных (их отождествления) данный полином можно привести к полиному степени к — 1. Доказательство. Без ограничения общности можно считать, что элементарное произведение С = х\х2.. .Хк из к переменных является слагаемым полинома Р(х\,Х2,... ,хп). Отождествив в Р переменные х^ = ж/c+i = ... = хп, получим полином Q(x\,X2,...,Xk). Нетрудно заметить, что в полиноме Q слагаемое С = х\Х2.. .Xk останется единственным степени к. Полином Q допускает следующие варианты по составу слагаемых %гп\ ^тп2 ' • • • ■ «Егп£_1 степени к 1. 1. Полином Q содержит все слагаемые хШ]хШ2 ■... • хШк_] степени к— 1. Число таких слагаемых С^-1 = к. Среди слагаемых будут А = Х\Х2 • .. . ■ Ж/с-1 И В = Х\Х2 ■ .. . • Ж/с-2жЬ так как к ^ 3. Отождествив переменные х^-\ = жь получим равные слагаемые А = В = С = х\Х2 • ... • xk-1. Их сумма Аф В ф С = А. Таким
54 Гл. 1. Введение в математическую логику образом, полученный полином Q{x\,X2,... , ж/c-i) будет иметь степень к — 1. 2. Полином Q содержит ровно к — 1 слагаемое степени к — 1: хт\хт2 ' ••• 'хтк-\- Одно слагаемое такой степени отсутствует. Пусть отсутствует слагаемое А = х\х^ ■ ... • хк-\- Отождествив х\ — ж/с, получим С — А. Так как А не входит в Q, то новое С — х\Х2 • ... • ж/с_1 степени к — 1 войдет в Q. Таким образом, полученный полином Q(x\,X2,... ,Xk-\) будет иметь степень к— 1. 3. В полиноме Q отсутствуют два слагаемых степени к — 1: Л = Ж^2 " •• • 'xi-\xi+\ ' •••' хк и В = Х\Х2 • .. . • Xj-\Xj+\ • ... ■ Ж/с, где 1 ^ г < j ^ к. Отождествив Х{ = Xj, получим С = В. Так как слагаемое В отсутствует в полиноме Q, то новое С = х\Х2 •... • Xj-\Xj+\ • ... • ж/с степени fc — 1 войдет в Q. Таким образом, и в последнем случае полином Q(x\,X2,... ,Xk-\) будет иметь степень к — 1. D 1.4.2. Классы Поста булевых функций В основу рекурсивного правила получения новых формул (п. 1.2.2) из элементарных булевых функций положены операции замены переменных и суперпозиции. Класс (множество) булевых функций называется (функционально) замкнутым, если вместе с функциями из этого класса он содержит и все функции, полученные из них с помощью указанных операций. Очевидно, что для доказательства замкнутости класса достаточно проверить его замкнутость лишь относительно элементарных операций суперпозиции. Класс функций, сохраняющих константу О Определение. Функция /(жьж2,... ,жп) сохраняет константу О, если /(О,0,..., 0) =0. Класс функций, сохраняющих 0, обозначают через Tq. Теорема 1.4.2. Класс функций Tq замкнут. Доказательство. Пусть /1(жьж2,... ,жп), /2(^1, ж2,... ..., хп) — функции, сохраняющие 0. Покажем, что и суперпозиция их /з(жьж2,...,жп) = /1(ж1,/2(ж1,ж2,...,жп),...,жгг) сохраняет 0. Действительно, /з(0,0,..., 0) = f\ (0, /2(6,0,..., 0),... ...,0) = /1(0,0,--.,0) = 0. D Замечание. Число функций п переменных, сохраняющих 0, равно половине общего числа функций: |Г0| = 22"/2 = 22"-1.
§ 1.4. Функциональная полнота булевых функций 55 Класс функций, сохраняющих константу 1 Определение. Функция f(x\,x2,... ,хп) сохраняет константу 1, если /(1,1,..., 1) = 1. Класс функций, сохраняющих 1, обозначают через Т\. Теорема 1.4.3. Класс функций Т\ замкнут. Доказательство. Пусть f\{x\,x2,... ,хп), f2{x\,x2,... ••■»жп) — функции, сохраняющие 1. Покажем, что и суперпозиция ИХ /з(жЬЖ2,...,1п)= ft{xUf2{xUX2,...,Xn),...,Xn) СО- храняет 1. Действительно, /3(1, 1,..., 1) = /i(l,/2(l, 1,..., 1),... ...fl) = /i(U,...,l) = l. D Замечание. Число функций п переменных, сохраняющих 1, равно половине общего числа функций: |Ti| = 22n/2 = = 22п~\ Класс монотонных функций Определение. Функция /(ж1,ж2,... ,хп) называется монотонной, если для любых наборов значений А = (а\,а2,... ,an) и В = (b\,b2,...,bn) списка переменных функций таких, что А > В, выполняется f(A) ^ f(B). Класс монотонных функций обозначают через М. Теорема 1.4.4. Класс монотонных функций М замкнут. Доказательство. Пусть f\(x\,x2i... ,хп), f2(x\,x2i... ...,жп) — монотонные функции. Покажем, что и суперпозиция их /з(ж1,ж2, ...,жп) = /lfci, А(жьж2.-...яп),...,жп) есть монотонная функция. Пусть А > В — произвольные наборы. Обозначим наборы, соответствующие суперпозиции функций, через А = (ai,/2(ai,a2, ...,an), ...,Оп) и В= (b\, f2(b\,b2,... ,Ьп),... ,Ьп). Так как сравнение наборов А > В выполняется по координатам и f2(A) ^ /2(В), тоЪВи, значит, ft (A) > ft (В). Монотонность /з следует из соотношения /з(А) = ft(A) ^ f\(B) = = MB). D Класс линейных функций Определение. Функция f(x\,x2,... ,хп) называется линейной, если степень ее полинома Жегалкина не выше первой. Класс линейных функций обозначают через L. Теорема 1.4.5. Класс линейных функций L замкнут.
56 Гл. 1. Введение в математическую логику Доказательство. Пусть f\{x\,x2,... ,жп), f2(x\,x2i... ...,жп) — линейные функции. Покажем, что и суперпозиция их /з(жьж2,...,жп) = f\(x\,f2(x\,x2,...,xn),...,xn) есть линейная функция. Имеем f\ = а0 ф a^i ф а2ж2 ф ... ф апжп и /2 = Ь0 Ф Ь\х\ ф Ь2Я2 Ф • • • Ф Ьп^п- Очевидно, что /3 = а0Ф ®а\Х\ ф(Ь0фЬ\Х\ фЬ2х2 Ф ... фЬпжп)ж2Ф ... (&апхп есть линейная функция. Степень суперпозиции линейных функций может только уменьшиться. D Замечание. Несложно определить, что число линейных функций п переменных равно |L| = 2n+1. Класс самодвойственных функций Определение. Функция f(x\,x2i... ,хп) называется самодвойственной, если для любого набора значений А = (ai,a2,... ,an) списка переменных выполняется f(A) = f(A). Это означает, что самодвойственная функция на противоположных наборах принимает противоположные значения. Класс самодвойственных функций обозначают через S. Замечание. Преобразование f(x\,x2i... ,жп) обозначают как f*(x\,x2l... ,хп). Тогда / — самодвойственная, если f(x\,x29...9xn) = f*(x\9x2,...,xn). Теорема 1.4.6. Класс функций S замкнут. Доказательство. Пусть f\(x\,x2i... ,жп), f2{x\,x2,... ...,хп) — самодвойственные функции. Покажем, что и суперпозиция их fz(xux2i...,xn) = f\(xu f2(xux2,... ,хп),... ,хп) есть самодвойственная функция. Пусть А — произвольный набор. Тогда /3(Л) = /i(ab/2(ai,a2,... ,an),... ,an) = /i(^b/2(aba2>--->an),---,^n) = /i(ab_/2(aba2,...,an),... ,an) = /i(«b /2(^1,02. ...,an),... ,an) = /3(A). Получили, что для произвольного набора Л выполняется /з(Л-) = /з(^.)- Значит, /з — самодвойственная функция. D Замечание. Определим число |S| самодвойственных функций п переменных. Самодвойственная функция определяется значениями на половине 2п/2 = 2п~1 общего числа наборов 2П. На другой противоположной половине наборов ее значения устанавливаются как противоположные первой половине. Следовательно, |5| = 22n_1.
§ 1.4. Функциональная полнота булевых функций 57 Замечание. Классы булевых функций Tq,Ti,M,L,5 неполные и попарно различные. Так, можно привести примеры функций, не принадлежащих ни одному из выделенных классов, а для любой пары из этого множества классов можно указать функцию, которая одному из них принадлежит, а другому нет. Пример. Приведем таблицу (табл. 1.10) перечня функций с оценкой распределения их по выделенным классам To,Ti,M,L,S. Таблица 1.10 заполняется непосредственно по таблице истинности (табл. 1.5) приведенного перечня функций. Для заполнения столбца L линейности функций необходимо составить их полиномы Жегалкина. Таблица 1.10 Функции 0 1 X ->х х-у х V у х -» у хФу х —>у х ~ у х[у * \у Т0 + - + - + + + + - - - - т, - + + - + + - - + + - - М + + + - + + - - - - - - L + + + + - - - + - + - - S - - + + - - - - - - - - 1.4.3. Теоремы Поста о функциональной полноте Рассматриваемые здесь теоремы доказаны Э. Постом в 1921 г. Полученные результаты функциональной полноты булевых функций заложили прочную основу развития современных средств вычислительной техники, алгоритмизации и т. п. Теорема 1.4.7 (ос лабленная, Э. Пост, 1921). Система булевых функций <т, содержащая константу 0 и константу 1, полна тогда и только тогда, когда система а содержит хотя бы одну немонотонную и хотя бы одну нелинейную функции.
58 Гл. 1. Введение в математическую логику Замечания. 1. В теореме речь идет о системе функций <г = {/ь/2./з./4}, где /i — константа О, /2 — константа 1, /з — немонотонная, /4 — нелинейная. Отметим, что множество а объединяет функции со свойствами. Поэтому количество функций в а зависит от наличия у них указанных свойств. Так, а может состоять и из одной функции, если у этой функции будут все необходимые свойства. 2. Отметим, что /3 ф /ь /3 ф h, U Ф h и U Ф h, поскольку /i и /2 - линейные и монотонные функции. Это означает, что а содержит не менее трех функций, две из которых есть f\ и f2. 3. Теорема называется ослабленной, так как система <т включает фиксированые функции — это константа 0 и константа 1. Доказательство. Необходимость. Имеем а — полный набор и /i, /2 Е а. Необходимо показать, что и /3, /4 Gd. Если предположить, что /з ф <т, тогда множество а содержит только монотонные функции, так как /i и /2 — монотонные. Класс монотонных функций замкнут, значит, в условиях предположения в рамках а нельзя получить ни одной немонотонной функции. Это противоречит условию, что а есть полный набор. Значит, предположение неверно и /3 Е а. Подобным образом доказывается, что и /4 G а. Достаточность. Имеем систему функций а = {/i, /2, /3, fa}- Доказать, что а — полный набор. Для доказательства достаточно показать, что из набора а можно получить функции множества {х,ху,х V у). Поскольку система {х,ху,х V у} есть полный набор, то и набор функций а будет полным. Важно, что доказательство имеет конструктивный характер, т. е. выполняется явное построение функций множества {x,xy,xWу} из набора а. Это позволит использовать предложенную технику в условиях конкретного набора функций а. 1. Получение отрицания х из f\, f2 и fy. По условию /з — немонотонная, значит, существуют наборы А я В списка переменных такие, что А > В и h{A) < h(B) — нарушается условие монотонности. Покажем, что существуют и соседние наборы А > В, для которых fz(A) < /з(В). Действительно, свяжем наборы А я В цепочкой соседних наборов А = а\ > а2 >а3 > ... > аг = В, (1.24)
§ 1.4. Функциональная полнота булевых функций 59 где а,{ — соседние наборы. Например, если А = (11111) и В = = (00001), то цепочка соседних наборов может иметь такой вид: А = (11111) > (01111) > (00111) > (00011) > (00001) = В, Среди цепочки соседних наборов (1.24) существует пара соседних о,ц > а^+ь для которых /з(о^) < /3(0^+1). В противном случае можно составить цепочку /з(А) = /зЫ ^ /3(а2) ^ /3(а3) ^ ^ /зЫ=/з(В). Отсюда fo(A) ^ /з(В), что противоречит условию fo(A) < fo(B). Итак, далее полагаем, что А и В — соседние наборы: А = (a1,a2,...,ai_i, l,ai+i,... ,an), В = (ai,a2,...,ai_i,0,ai+i,...,an). Рассмотрим функцию одного аргумента <р(ж)> полученную заменой переменных: ¥>(ж) = /з(аьа2,...,а»_1,ж,а»+1,...,ап). (1.25) Для нее выполняется условие <р(0) = /з(В) и^(1) = h(A) или р(0) = /3(В) > /3(А) = р(1). Отсюда р(0) > р(1) или <р(0) = 1 и <р(1) = 0. Значит, (р(х) = х. 2. Получение конъюнкции ху и дизъюнкции х V у из /ь /г» /4 w х. По условию /4 — нелинейная. Можно считать, что степень функции Д равна двум (см. утверждение 1.4.3) и /4(ж) = жуфажф/?уФ7- (1.26) Избавимся от линейной части ахф/Зу. Для этого рассмотрим суперпозицию функций </>(ж,у) = /4(жф/?,уфа) = = (жф/?)(уфа)фа(жф/?)ф/?(уфа)Ф7 = = жу ф ах ф /?у ф а(3 ф аж ф /?у ф а(3 ф а/? ф 7 = = жуфа/?ф7- Таким образом, / / \ _ /ХУ> если <*/? ф 7 = 0, ПЖ>У,) - |жуф i если а/?ф7= 1- Для второго случая выполним преобразования 'ху, _ (ху, _ (ху, ^Х'У> Лху®1, \ху, \xVJJ.
60 Гл. 1. Введение в математическую логику Отсюда ф{х,у) = ху или ф{х,у) = хУу. Последнее выражение приведем к виду ф(х,у) = ж V у. Итак, из нелинейной функции /4 можно получить ху или ж V у. В том случае, если получили конъюнкцию ху = ф{х,у), то дизъюнкция определяется как суперпозиция фунций ж и найденной ху: _ х У у = ху=ф(х1у). (1.27) Если же получили дизъюнкцию ж Vy =ф(х,у), то конъюнкция есть суперпозиция ж и найденной ж V у: ху =~хУу = ф(х,у). (1-28) D Пример. Рассмотрим набор булевых функций а = {0, 1, —>}. Импликация —> является немонотонной и нелинейной функцией (табл. 1.10). Значит, набор а — полный. Получим, согласно теореме Поста 1.4.3, функции -i, Л, и V. /. Получение х из {0,1, /з = х —> у}. По таблице истинности функции х —> у (табл. 1.5) определяем соседние наборы А = (1,0) и В = (0,0), для которых /з(А) < /3(В) т. е. 0 = 1->0<0-> —►0=1 — нарушается условие монотонности. Тогда из (1.25) находим отрицание х = /з(ж, 0) = х —> 0. 2. Получение ху и х V у из {0, 1, Д = ж —> у и ж}. Как в теореме Поста 1.4.3 составим полином Жегалкина /4(ж, у) = х —> у = жу ф ж ф 1. С помощью подстановки у = у ф 1 вместо у избавимся от линейной части х в последнем выражении ф(х,у)= Ufa у) = х -> у = ж(у ф 1) фж ф 1 =_жу ф 1 = жу = xV у. Подстановка ж и у в ф(х, у) дает ж V у = ж V у= ж" —> у = ^>(сс, у)- Итак, дизъюнкция ж V у = (ж —> 0) —> у. Конъюнкцию находим из (1.28) жу = ж Vy = ф(х,у) = х —> у = (ж —> у) —> 0 = (ж —> (у —> 0)) —> 0. Сведем вычисления в таблицу результатов: ж = ж —> 0, жУу = (ж^0)^у, (1.29) жу = (ж -> (у -> 0)) -> 0. Замечание. Выражения (1.29) позволяют заключить, что набор из двух функций <т = {0, —>} является полным. Теорема 1.4.8 (основ ная, Э. Пост, 1921). Система булевых функций а полна тогда и только тогда, когда система а содержит
§ 1.4. Функциональная полнота булевых функций 61 хотя бы одну f\ не сохраняющую О, хотя бы одну /2 не сохраняющую 1, хотя бы одну /3 немонотонную, хотя бы одну Д нелинейную и хотя бы одну /5 несамодвойственную функции. Доказательство. В теореме речь идет о системе функций а = {/i, /2, /3, /4, /5}- Отметим, что множество а объединяет функции со свойствами. Поэтому количество функций в а зависит от наличия у них указанных свойств. Так, а может состоять и из одной функции, если у этой функции будут все необходимые свойства. Доказательство необходимости повторяет доказательство этого условия в ослабленной теореме Поста 1.4.7, где можно с ним и ознакомиться. Доказательство достаточности. Имеем систему функций ° = {fuffrhJbh}- Доказать, что а - полный набор. Для этого сведем условие теоремы к условию ослабленной теоремы Поста 1.4.7. Для выполнения условий ослабленной теоремы не достает функций константа 0 и константа 1, которые получим из предложенного набора функций а = {/i, /2, /з, /4, /б}- Сравнение условий ослабленной теоремы и настоящей позволяет заключить, что функции константу 0 и константу 1 следует получать из /ь /2, и /5. Получение указанных функций носит конструктивный характер, т. е. выполняется их явное построение. 1. Получение константы 1 или х из f\, не сохраняющей 0. Рассмотрим функцию ср(х) = /i(x, ж,... ,ж). Поведение функции /i на единичном наборе (1, 1,..., 1) не оговорено. Поэтому возможны следующие два случая: а) и Ь). а). <р(0) = /i((0,0,... ,0)) = 1, I Здесь ср(х) = 1 — константа 1. v(i) = Mi,i,....i)) = i. b). ¥>(0) = /i((0,0,...,0)) = l, V(1) = /I((1,1,...,1))=0. 2. Получение константы. 0 или х из fa, не сохраняющей 1. Рассмотрим функцию ф{х) = /2(2,ж,... ,х). Поведение функции /2 на нулевом наборе (0,0,... ,0) не оговорено. Поэтому возможны следующие два случая: с) и d). с). ф(0) = /2((0,0,..., 0)) = 0, I Здесь ф(х) = 0 - константа 0. V>(1) = /2((1,1,...,1))=0. d).V-(0) = /2((0,0,...,0)) = l, V>(i) = /2((i,i,...,i))=o. Здесь (р{х) = х — отрицание. Здесь ф(х) = х — отрицание.
62 Гл. 1. Введение в математическую логику Комбинации случаев а), Ь), с) и d) дают четыре варианта. а)+с). Имеем (р{х) = 1 и ф{х) = 0. Условия ослабленной теоремы выполнены, теорема доказана. a)+d). Имеем ip(x) = 1 и ф(х) =х, суперпозиция которых дает 0=1. Располагаем 0 и 1, теорема доказана. Ь)+с). Имеем (р{х) =хи ф{х) = 0, суперпозиция которых дает 1 = 0. Располагаем 0 и 1, теорема доказана. b)+d). Имеем ip(x) =хи ф(х) = х. В этом случае из f\ и /2 смогли получить лишь отрицание х. Однако теперь для выполнения условий ослабленной теоремы достаточно получить одну из двух констант 0 или 1. Другую определим как отрицание найденной. Тогда и в этом случае будем располагать 0 и 1, теорема доказана. Получение константы 0 или 1 из /5 несамодвойственной функции. Так как /5 — несамодвойственная, то существует набор А = (ai,a2,... ,an), на котором нарушается условие самодвойственности, т.е. выполняется условие fs(A) = f$(A). Рассмотрим суперпозицию функций 0х) = fb(x\9X2, . . . ,Хп)= fa(x9X9 . . . 9х). я—KEi, если a,i=0, (1.30) x^>Xi, если di=\. Тогда £(1) = f$(A) и £(0) = fs(A) и так как выполняется fs(A) = /б(^), то £(1) = £(0). Следовательно, £(ж) — это константа либо 0, либо 1. D Замечание. Результаты теорем Поста дают важные основания к систематическому изучению и подбору полных систем булевых функций. Пример. Набор а = {х I у} из одной функции (стрелка Пирса) явлется полным. Данная функция обладает всеми указанными свойствами (табл. 1.10), обозначенными в теореме Поста. Получим из этого набора а функции {0, 1,5Г, ху9 x V у}. Будем следовать основной теореме Поста. Проверим поведение х I у на нулевом и единичном наборах. Так, 0 I 0 = 1 и 1 j 1 = 0. Это значит, что мы находимся в условиях варианта b)+d) основной теоремы Поста, что позволяет получить отрицание х = х j x. Одну из констант необходимо получить из свойства нарушения самодвойственности функции х [у. Получение констант. Для набора А = (0,1) нарушается условие самодвойственности. Из (1.30) имеем ж |ж = 0 или \х[х)[х= 0. Отсюда 1 = 0 = 0 [ 0 = ((ж [ х) [ х) [ ((ж [ х) [ х).
§ 1.5. Исчисление высказываний 63 Получение конъюнкции и дизъюнкции. Правило получения из нелинейной функции указанных функций рассматривается в ослабленной теореме Поста и предусматривает составление полинома Жегалкина (1.26). Составим (х I у)сднф = ХУ- Отсюда конъюнкция ху — х I у = (х I х) I (у I у). Вернемся к (х I у)сднф = ХУ- Отсюда дизъюнкция ж Vу = Щ = х [у = (х I У) I (х I У)- Сведем вычисления в таблицу результатов: О = (х I х) I ж, 1=((ж4ж)4ж)4((ж|ж)4ж), ж = ж4ж, (1.31) ху = (ж 4 ж) 4 (yly), хУу = (х[у) l(xly). Замечание. Функция называется шефферовой, если она одна составляет полную систему (базис в Р2). Примеры таких функций двух переменных можно найти в таблице 1.10. § 1.5. Исчисление высказываний Исчисление высказываний — это раздел математической логики, который посвящен изучению связей между высказываниями. Указанные связи определяются исключительно тем, каким образом одни высказывания строятся из других. Другое название исчисления высказываний — это логика высказываний. Исчисление высказываний рассматривается как формальная аксиоматическая теория. Формальному введению предварим объяснение отдельных вопросов перехода от булевой алгебры к исчислению высказываний. 1.5.1. Основные понятия Высказывание — это предложение (или набор слов, или утверждение, или суждение), о котором имеет смысл говорить, что оно истинно либо ложно. Простым называется высказывание, которое нельзя разбить на части, чтобы каждая из них являлась высказыванием. Примеры. (1) Тайфун — это грозное синоптическое явление. (2) Небольшие осадки — благо. (3) Большие осадки — бедствие. Сложным называется высказывание, состоящее из нескольких простых, соединенных логическими связками: и, или, если ..., то, нет (не) и подобные им.
64 Гл. 1. Введение в математическую логику Примеры. (1) С приходом тайфуна может выпасть до годовой нормы осадков. (2) Если траектория перемещения тайфуна повторит траекторию кривой его прогноза, то возможно избежать его разрушительных последствий. Содержательное знакомство с формулами логики высказываний можно найти в разделе смысловой интерпретации булевых функций (п. 1.2.5). Таблицы истинности булевых функций дают основание заключить, что в рамках раздела булевой алгебры допустимо решение многих задач, касающихся формул логики высказываний. Существуют более сложные задачи исчисления высказываний, которые не могут быть решены в рамках булевой алгебры. В этом отношении важной причиной является и огромная трудоемость табличного решения задач большой размерности. 1.5.2. Задачи исчисления высказываний Основными задачами исчисления высказываний являются: 1) формализация записи простых и сложных высказываний; 2) установление истинности высказываний. Формализация записи простых и сложных высказываний 1. Для обозначения высказываний используют прописные буквы латинского алфавита: А, В, С\,С2, X, Y\,Y2, У3» ^» которые называют пропозициональными переменными. 2. Вводят пропозициональные связки (символы, операции): ->, Л, V, D,~, эквивалентные логическим связкам: не (->), и (Л), или (V), если ... то (D), эквивалентно (равносильно) (~). 3. Вводят понятие формулы. Формулами объявляются простые высказывания. Другие формулы строятся посредством пропозициональных связок и ранее построенных формул. Так, если А и В — это формулы, то формулами считаются выражения (сложные высказывания): -А, А А В, А У В, A D В, А~ В. 4. Вводят скобки «()» для установления порядка действия пропозициональных связок. Например, (Ad (В D А)) V (-"С). 5. Назначают приоритет операциям: -i, Л, V, э,~ для определения последовательности вычислений в бесскобочных формулах. Например, последовательность вычислений в формуле A D В D А V -\С соответствует следующей ее скобочной записи ((Az>B)D(AV(-C7))).
§ 1.5. Исчисление высказываний 65 Определение. Формула называется тождественно истинной, если она истинна всегда независимо от истинности или лжи составляющих ее формул. Тождественно истинные формулы (ТИФ) еще называют общезначимыми и тавтологиями. Установление истинности высказываний Решение задачи установления истинности высказываний можно проводить двумя способами: 1) содержательно на основе таблиц истинности булевой алгебры; 2) формально с помощью аксиоматико-дедуктивного метода. Замечание. В исчислении высказываний при решении задачи установления истинности предпочтение отдается дедуктивному методу. 1.5.3. Соотношение булевой алгебры и исчисления высказываний. Содержательный аспект Определение формулы как объекта исчисления высказываний ничем не отличается от формул булевой алгебры. Поэтому вполне допустимо проводить анализ подобных формул средствами булевой алгебры, к чему часто и прибегают. Исчисление высказываний как формальная система предлагает свои средства анализа формул, направленные на решение основной ее задачи — установление истинности формул. С этой целью в систему включаются средства дедуктивного анализа логических выражений, когда на основе ряда формул, истинность которых установлена, возможно получение новых истинностных формул. Если в булевой алгебре отношение равенства (=) выполняло роль перехода к эквивалентным формулам в процессе их преобразования, то в исчислении высказываний понятие равенства как отношения между формулами удалено за ненадобностью. Здесь формулы оцениваются лишь на их истинность. В исчислении высказываний в качестве основных операций вводят импликацию (D) и эквивалентность (~). Анализ формул булевой алгебры возможно проводить средствами исчисления высказываний. Для этого необходимо выполнить замену символа равенства (=) на символ эквивалентности (~). Теперь эквивалентные формулы булевой алгебры становятся тождественно истинными формулами в исчислении высказываний, верно и обратно. Так, система аксиом булевой алгебры из 3 Иванов Б.Н.
66 Гл. 1. Введение в математическую логику системы равенств преобразуются в систему тождественно истинных формул. 1.5.4. Содержательный аспект тождественно истинных формул Основными объектами преобразования в исчислении высказываний являются тождественно истинные формулы (с учетом контекста решения задачи). С этой точки зрения необходимо иметь какие-либо правила, закономерности, свойства распознавания тождественно истинных формул. Приведем наиболее важные правила содержательного аспекта распознавания тождественно истинных формул. 1. Тождественно истинные формулы состоят из эквивалентных равносильных частей, соединенных операцией эквивалентности (~). Равносильными называются формулы (высказывания), принимающие одно и то же значение при одинаковых значениях переменных. Например, ж V у ~ у V х. 2. Тождественно истинные формулы соответствуют схемам правильного логического вывода. 3. Тождественно истинные формулы соответствуют законам формальной логики. Схемы правильного логического вывода Перечень рассмотренных схем правильного логического вывода, конечно же, является не всеобъемлющим. Приводятся схемы, наиболее часто используемые в математических рассуждениях, доказательствах. Схемы являются тождественно истинными формулами. Однако каждая из них допускает использование ее как схемы получения новых формул, а значит, и новых знаний. Истинность таких формул, как правило, определяется истинностью посылок соответствующих схем вывода. Будем полагать, что x,y,z — это произвольные формулы (высказывания). Каждое правило будем записывать в виде тождественно истинной формулы и в формате схемы вывода с указанием посылок и заключения. 1. Правило заключения по импликации, или modus ponens (mp), или правило отделения: (хЛ(хЭу))Эу или ±12Л, (1.32) Схема (1.32) понимается как правило перехода от двух формул вида х и х э у к одной формуле у. В выводе этого правила х и х D у являются посылками, у — заключением.
§ 1.5. Исчисление высказываний 67 Интерпретация. Если верно условие х и известно, что верна теорема х D у (из х следует у), то верно и условие у. Отметим, что заключение правила modus ponens истинно настолько, насколько истинны посылки. 2. Правило двойственности, или modus tollens, или правило отрицания: ((хЭу)Л^у)э^х или хЭУ>^Ут (1.33) В выводе этого правила х D у и -\у являются посылками, -1Ж — заключением. Интерпретация. Если верна теорема х э у (из х следует у) и известно, что условие у не выполняется (верно условие -iy), то тогда и условие ж не выполняется (верно -ia). Данная схема вывода лежит в основе доказательства от противного. Допустим, необходимо доказать теорему х э у. Для ее доказательства предполагают, что она неверна. Это означает, что выполняется условие -iy, противоположное заключению теоремы. Далее из условия -iy получают, что выполняется -лх. А так как при доказательстве теоремы х Э у условие х предполагается истинным, то делают вывод, что полученное заключение -гс противоречит условию теоремы и, значит, предположение -iy неверное. Откуда заключают истинность теоремы хЭ у. 3. Правило транзитивности, или цепное правило, или закон силлогизма (syllogismos): ((xDy)A(yDz))D(xDz) или £2JL*2£. (1.34) X ) Z В выводе этого правила х э у и у э z являются посылками, х э z — заключением. Интерпретация. Если из условия х следует у, а из условия у следует 2?, то из условия х следует 2?. 4. Правило приведения к абсурду или reductio ad absurdum: ((пхЭу)Л(пхЭп|/))зж или ^=>|/,-.зО-.^ (1.35) В выводе этого правила формулы -ix D у и -гс D -iy являются посылками, х — заключением. Интерпретация. Если из условия -тс следует у и противоположное ему условие -iy, то посылка -IX является неверной. Значит, выполняется условие х. 5. Правило истины из чего угодно или verum ex quadlibet: х х Э (у Э х) или . (1.36) v* J yDx v В выводе этого правила х является посылкой, у Э х — заключением. Интерпретация. Если условие ж выполняется, з*
68 Гл. 1. Введение в математическую логику то верна любая теорема у D х вне зависимости от условия у. Таким образом, истинное условие х можно доказать из чего угодно у. 6. Правило из лжи что угодно или ex falco quadlibet: -|Ж D (х Э у) или . (1.37) В выводе этого правила формула -ix является посылкой, х э Э у — заключением. Интерпретация. Если условие ж неверное (ложное), то доказать можно любую теорему вида х Э у вне зависимости от условия у. Таким образом, из неверной посылки х можно доказать что угодно у. Законы формальной логики При любом выборе формулы х тождественно истинными являются следующие формулы. 1. х Э х — закон тождества. Значение истинности высказывания не должно изменяться в течение всего времени до нового отрицания. 2. ->(жЛж) — закон противоречия (абсурда). Не верно, что одновременно х и -пж — абсурд. 3. ж V ж — закон исключенного третьего. Истинно либо ж, либо -1Ж, другого не бывает. 4. -1-1Ж э х — закон двойного отрицания. Двойное отрицание ж тождественно исходному. 1.5.5. Формальное введение в исчисление высказываний Определение исчисления высказываний как формальной системы требует удовлетворения определенных положений (правил) с ее стороны. Перечень и содержание такого рода положений приводится ниже. 1. Определяются все формальные объекты исчисления высказываний и правила их образования (построения). 2. Из формального определения исключается все, что нельзя выразить на языке формального описания. 3. Вводится система аксиом, представляющая конечный список первоначальных формул. 4. Вводятся основные операции (правила вывода), только в соответствии с которыми можно преобразовывать формулы. 5. Вводятся формальные понятия доказуемости и выводимости. 6. Рассматриваются общие (внешние) оценки исчисления высказываний — непротиворечивость, полнота, независимость системы аксиом, разрешимость системы в целом.
§ 1.5. Исчисление высказываний 69 (1) Формальные объекты и правила их образования Формальные объекты делятся на три категории. I. Алфавит (символы): 1. Пропозициональные буквы: А,В,Х\,Х2,Х$, 2. Пропозициональные связки (операции): -i, Л, V, э, ~. 3. Скобки: (). II. Формулы. Формулой называется конечная последовательность вхождения символов алфавита. Выделяют правильно и неправильно построенные формулы. Например, А А В, Аэ В ~ -iD — формулы. III. Правильное (рекурсивное) построение формул: 1. Любая пропозициональная буква является формулой. 2. Если А и В — формулы, то формулами являются: (-•Л), (-.В), (А А В), (А V В), (А э В), (А ~ В). 3. Никаких других формул не существует. 4. Приоритет операций: ->, Л, V, D, ~. (2) Исключение из системы невыразимых понятий 1. Из системы исключаются прежде всего содержание и смысл, остаются лишь последовательность букв, цифр, знаков. 2. Исключаются понятия истины и лжи. Формальная система помогает сохранить в процессе доказательства и вывода первоначальный смысл, не уменьшая его и не увеличивая. 3. Исключается знак =, который означает (а) одинаковость объектов, (Ь) одинаковость результатов действия над некоторыми объектами. Потребность в этом знаке равенства (=) отпадает, так как содержание включается непосредственно в объекты, например, в Л и В, и во время выполнения над ними операций, например, А V В, нового содержания и смысла в полученные формулы не привносится. (3) Система аксиом Системой аксиом называется конечная совокупность начальных формул и каким-то образом образующих всю совокупность формул исчисления высказываний. С точки зрения содержательного аспекта аксиомы — это совокупность тождественно истинных формул, которые характеризуют все множество тождественно истинных формул. Существует более десятка систем аксиом. Приведем некоторые из них, которые наиболее известны и которыми будем пользоваться.
70 Гл. 1. Введение в математическую логику Система аксиом расширенного исчисления высказываний В данной системе используется максимальное число операций — пять: -I, ■, V, э, ~. Данная система получена из системы аксиом булевой алгебры путем замены символа равенства (=) на символ эквивалентность (~), где x,y,z — формулы. 1. ж ■ у ~ у • ж. 4. ж V у ~ yV х. 2. (х • у) • z ~ х • (у • z). 5. (х V у) V z ~ х V (у V z). 3. х • х ~ х. 6. уУу^у. 7. ж ■ (у Vz) ~ ж • у V ж • £. 11. -«(ж • у) ~ ->ж V -iy. 8. ж V (у • 2?) ~ (ж V у) ■ (х V 2?). 12. -|(ж V у) ^ -IX ■ -iy. 9. xV х • у ~ х. 10. ж ■ (ж V у) ~ ж. 13. -1-1Ж ~ ж. 16. ж V (у ■-iy) ^ ж. 14. жЭу ~-txVy. 17. ж V (у V-iy) ^ у V-iy. 15. ж ^ у ~ ж • у V -1Ж • -iy. 18. ж • -1Ж -у V 2? ~ 2? . 19. xVnx. 21. £i£2Ji _ У 20. -|(ж • -1ж). modus ponens. Система аксиом исчисления Новикова Операции: -i, Л, V, D. Аксиомы: 1. А э (В э А). 2. (A D (В D С)) D ((А эВ)э(Аэ С)). 3. АлВэА. 4. АлВэВ. 5. (A D В) D ((A D С) D (A D В Л С)). 6. AdAvB. 7. BdAvB. 8. (A Э С) Э ((В D С) D ((A VB)D С)). 9. (iDB)D(nBDnA). 10. А э —А. 11. —AdA. 12. modus ponens. В Система аксиом исчисления Клини Операции: -i, Л, V, Э. Аксиомы: 1. Ad (В э А). 2. (A D В) D ((A d (В D С)) э(Аэ С)). 3. Аэ (В э АЛ В).
§ 1.5. Исчисление высказываний 71 Операции: Аксиомы: 4. АлВэА. 5. АлВэВ. 6. ADAVB. 7. ВэАчВ. 8. (AdC)d((BdC)d((AvB)dC)). 9. {АэВ)э {{А э -.В) Э -.Л). 10. -i-u4 D А. 11. Ad-i-iA. 10 А,Аэ В . 12. modus ponens. н Система аксиом исчисления Фреге ->, э. 1. AD(BDji). 2. (Ad(Bd (7)) э ((Л dB)d(Ad (7)). 3. {Аэ{ВэС))э{Вэ{АэС)). 4. (iDB)D (-.В э -.А). 5. Л D -i-iA 6. ->->А э Л. 7. ^ modus ponens. Добавляются в неявном виде. 8. АЛ В ~п(4э -«В). 9. iVB -пЛэВ. (4) Формальные операции, правила вывода Применяются основные операции вывода и дополнительные. Основные операции применимы во всех системах исчисления. В основу дополнительных операций вывода положены эквивалентные преобразования, а, значит, соответствующие исчисления должны применять каким-то образом операцию эквивалентности (^). Лишь это является ограничением для использования дополнительных операций вывода. Правило подстановки — основная операция Определение. Подстановка — это операция, при которой некоторая пропозициональная буква X в данной формуле А(Х) на всех местах ее вхождения заменяется на некоторую новую формулу В. Формальная запись: А(Х)\В^Х — А(В). Замечание (важное). Операция подстановки применяется только в тождественно истинные формулы А(Х). Смысл замечания раскрывает следующий пример. Пусть А(Х) = X V Y
72 Гл. 1. Введение в математическую логику и В = -Y. Тогда А(Х)\В^Х — ~У v У- Здесь исходная формула X V Y — условно истинная, а -пУ V К — тождественно истинная, т.е. совершенно изменилось содержание формулы. Применение же операции подстановки в тождественно истинные формулы не изменяет их содержания. Правило заключения по импликации modus ponens — основная операция 1 формальная запись операции modus ponens. При- И меняется к любым формулам А и В, при этом результат операции В является настолько же истинным, насколько истинны посылки А и Аэ В. Правило подстановки по эквивалентности — дополнительная операция G(A)\a„b = G(B) ~ формальная запись подстановки по эквивалентности. Если в формуле G(A) имеется подформула А, эквивалентная формуле В, то подстановкой по эквивалентности получается формула G(B) из G(A), в которой подформула А заменена эквивалентной формулой В. Правило замены по эквивалентности — дополнительная операция А,А~В В,А~В и — формальная запись замены по эквивалентности. Очевидно, что истинность заключения В(иА) определяется истинностью посылки А (и В). (5) Формализация доказательства и вывода Определение. Доказательством некоторой формулы А называется конечная последовательность формул, каждая из которых может быть: 1) аксиомой; 2) подстановкой в тождественно истинную формулу: (а) в аксиому, (Ь) в формулу результата операции modus ponens; 3) формулой как результатом применения операции modus ponens, посылками которой выступают предыдущие формулы списка доказательства; 4) доказуемой формулой А — последней формулой списка доказательства.
§ 1.5. Исчисление высказываний 73 Замечание. Конечная формула А называется доказуемой или формальной теоремой. Доказательство формулы А обозначают как \- А. Задача. Доказать формулу \-AdA. (1.38) Доказательство в системе аксиом Клини (mp = modus ponens). 1. Аэ(Вэ А), а.1. 2. A D (A D А), а.1, где А —> В — подстановка. 3. (AdB)d((Ad(BdC))d(AdC)), а.2. 4. (Аэ(АэА))э((Аэ((АэА)эА))э(АэА)), а.2, где (А э А) —> В и А —> С — подстановка. 5. (Аэ((АэА)эА))э(АэА), mp 2,4. 6. Ad ((A D A) D А), а.1, где (A D А) —> В — подстановка. 7. AdA, mp6,5. □ Замечание. Понятие формального вывода является обобщением доказательства, где кроме аксиом дополнительно дается перечень условно истинных формул (УИФ) Г = {(?i,(?2>--. ... ,Gn}, которые не могут быть получены из аксиом формально, но являются (принимаются) истинными на протяжении всего вывода. Например, Аэ В — УИФ. Замечание. В УИФ нельзя делать подстановки. Содержание таких формул может измениться на тождественно истинное или ложное. Например, -А э В {XV^X)^A = = ->(Х V -iX) V -«(У V -Y)) — тождественно ложная функция. Определение. Выводом некоторой формулы Z называется конечная последовательность формул, каждая из которых может быть: 1) аксиомой; 2) УИФ — условно истинной формулой из перечня Г = {G\, (?2, • • •, Gn} без подстановки; 3) подстановкой в тождественно истинную формулу: (а) в аксиому, (Ь) в формулу результата операции modus ponens. 4) формулой как результатом применения операции modus ponens, посылками которой выступают предыдущие формулы списка вывода; 5) выводимой формулой Z — последней формулой списка вывода.
74 Гл. 1. Введение в математическую логику Замечание. Конечная формула Z называется выводимой. Вывод формулы Z при условии Г обозначают как Г Ь Z или G\,G2,...,Gn\-Z. Задача. Доказать ААВэС,А, В\~С. Доказательство в системе аксиом Клини. 1. Аэ(ВэААВ), а.З. 2. А, уиф. 3. Вэ А А В, тр 2,1. 4. В, уиф. 5. А А В, тр4,3. 6. АаВэС, уиф. 7. С, тр 5,6. □ Замечание. Формальный вывод — это строгая последовательность формул. В связи с этим становятся важными любые указания на существование вывода. Теорема о дедукции позволяет делать заключения о существовании вывода какой-либо формулы на основании уже существующих выводов других формул. Теорема 1.5.1 (о дедукции, 193 0). Пусть А,Г — совокупность УИФ, где Г = {G\, G<i, • • •, Gn}. Формула В выводима из совокупности А, Г тогда и только тогда, когда из Г выводима формула Аэ В. Итак, А, Г Ь В &Г\-Аэ В. Доказательство необходимости. По условию имеем вывод формулы Г Ь А э В . Требуется показать, что тогда существует и вывод А, Г Ь В. Построим вывод этой формулы: 1. А, УИФ из условия А, Г Ь В. 2. A D В, УИФ из вывода Г\- Аэ В. 3. В, тр 1,2. Доказательство достаточности — это индукция по длине к существующего по условию вывода А, Г Ь В. Все выводы будем строить в системе аксиом Клини. Установочный шаг индукции. Проверим справедливость условия теоремы А,Г\- В => Г\- Аэ В, если длина существующего вывода А, Г Ь В будет равна 1, т. е. к = 1. Построим в этом случае вывод формулы Г \- Аэ В. Итак, длина списка вывода А, Г Ь В состоит из одной формулы В. В этом случае В может быть лишь одной из формул совокупности А, Г или аксиомой.
§ 1.5. Исчисление высказываний 75 Случай 1. Пусть В — это одна из формул Г или аксиома. Следовательно, при построении вывода Г Ь А э В можно пользоваться и формулой В. Построим этот вывод: 1. В, одна из формул Г или аксиома. 2. Лз(ВзЛ), а.1. 3. В э (A D В), а.1, где А -> В, В -> А — подстановка. 4. Ad В, тр 1,3. Случай 2. Пусть В — это формула А. Тогда следует построить вывод Г Ь A D А и формулой А нельзя пользоваться, ее нет в списке Г. Доказательство тождественно истинной формулы Ь A D А дано выше в примере (1.38). Шаг предположения индукции. Предположим, что условие теоремы А, ГЬВ=>ГЬА1)В выполняется для всех случаев, когда длина вывода А, Г Ь В не превышает fc. Шаг распространения индукции. Рассмотрим некоторый вывод А, Г Ь В длиной fc+ 1. Покажем, что и в этом случае существует вывод Г Ь А э В. В выводе А, Г Ь В формула В может быть: (случай 1) либо одной из списка Г или аксиомой, (случай 2) либо формулой А, (случай 3) либо новой формулой, как результатом операции заключения по импликации modus ponens. Доказательство случаев 1 и 2 повторяет доказательство установочного шага индукции. Случай 3. Полагаем, что в условии вывода А, Г Ь В формула В является новой и получена как результат операции modus ponens, примененной к предыдущим формулам списка вывода. Без ограничения общности можно полагать, что вывод формулы В из А, Г Ь В представляется списком Ai, A2,..., Am, Р, Am+i, Am_|_2> • • • 1 Afc_2,PDB, В , (1.39) где формула В — последняя к + 1 формула списка. Из списка (1.39) имеем выводы А, Г Ь Р и А, Г h P э В, длины которых не превышают значения к. Таким образом, для них выполняется предположение индукции и, значит, существуют выводы формул Г\-АэРиГ\~Аэ(Рэ В). В этих условиях продолжим вывод формулы Г Ь А э В: 1. A D Р, уиф. 2. Лэ(Рэ В), уиф. 3. (АэВ)э ((А э (В э С)) э (А э С)), а.2. 4. (ЛэР)з((Аэ PdB d(AdB , а.2, гдер-в,в-с.
76 Гл. 1. Введение в математическую логику 5. (Ad{PdB))d{AdB), mp 1,4. 6. Ad В, mp 2,5. Теорема о дедукции (ТОД) доказана. D Следствие ТОД. Если формула А выводима из совокупности формул G\,G2,... ,Gn\- А, то доказуемой является следующая формула Ь G\ D (G2 D ... (Gn D А)). Пример. Построим вывод формулы A,B,Ad(BdC)\-C. (1.40) 1. А, уиф. 2. В, уиф. 3. Ad(Bd С), уиф. 4. ВэС, mp 1,3. 5. С, тр2,4. По теореме о дедукции из существования вывода (1.40) заключаем, что существуют следующие выводы и доказательства: 1. B,Ad(BdC)\-AdC. 2. A, A D (В D С) \- В D С. 3. A,B\-(Ad(Bd С)) D С. 4. Ad(BdC)\-Bd(AdC). (1.41) 5. Ad(BdC)\-Ad(Bd С). 6. h (A D (В D С)) d(Bd(Ad С)). 7. \-(Ad(Bd С)) э{Аэ{Вэ С)). Пример. Построим вывод В, А э (В Э С) h АэС, (1.41.1). 1. Bd(AdB), a.l, где А^В, В ^> А. 2. В, уиф. 3. Ad В, тр2,1. 4. (AdB)d ((A d(Bd С)) d(Ad С)), а.2. 5. (Ad(Bd С)) d(Ad С), тр 3,4. 6. A D (В D С), уиф. 7. Ad С, тр 6,5. Характерные выводимости I.AdB,BdC\~AdC — транзитивность. 2. A D (В D С) Ь В D (Ad С) — перестановка посылок. 3. AD (В D С) Ь АЛ В D С - объединение посылок. (1.42) 4. А А В D С \~ AD (В D С) — разъединение посылок. 5. A D В I—\В D -iA — контрапозиция.
§ 1.5. Исчисление высказываний 77 Если пользоваться теоремой о дедукции (ТОД), то нетрудно установить существование приведенных характерных выводимо- стей, построить же сам вывод, как правило, — не такая простая задача. Далее покажем лишь существование указанных выводов, что следует рассматривать в качестве хорошей практики применения теоремы о дедукции. Используются аксиомы Клини. (7) Пример вывода. Ad B,B D С \- АэС. 1. Аэ В, В D С \- Аэ С — исходная задача. 2. A, A D В, В D С \- С, тод 1 — будем решать. 3. А, уиф. 4. Ad В, уиф. 5. В, тр 3,4. 6. В D С, уиф. 7. С, тр 5,6. (2) Пример вывода. Ad (В D С) Ь В D (Ad С). 1. A D (В D С) Ь В D (A D С) — исходная задача. 2. В, Ad (BdC)\- Ad С, тод 1. 3. А, В, A D (В D С) Ь (7, тод 2 — будем решать. 4. А, уиф. 5. A D (В D С), уиф. 6. В DC, mp 4,5. 7. В, уиф. 8. С, тр 6,7. (3) Пример вывода. Ad(BdC)\-AaB d С. 1. Ad(BdC)\-AaB D С — исходная задача. 2. AaB,Ad (В DC)\- С, тод 1 — будем решать. 4. А А В, уиф. 5. AaBdA, а.4. 6. AaBdB, а.5. 7. Д тр 4,5. 8. В, тр4,6. 9. A D (В D С), уиф. 10. В э С, тр 7,9. 11. С, тр 8,10. (4) Пример вывода. ААВ D С \- Ad (В DC). 1. ААВ D С \-Ad (В D С) — исходная задача. 2. ДАЛВ DChflDC, тод 1. 3. В, А, А Л В э С Ь (7, тод 2 — будем решать. 4. Лэ(ВэЛлВ), а.З. 5. А, уиф.
78 Гл. 1. Введение в математическую логику 6. 7. 8. 9. 10. BdAaB, mp 5,4. В, уиф. А А В, mp 7,6. АЛ В D С, уиф. С, mp 8,9. (5) Пример вывода. АэВ h 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Аэ В \--,Bd-iA - ^B Э-Л. - исходная задача. ->В,Аэ В Ь ->А, тод 1 (АзВ)э ((Л э -В) ЛэВ, уиф. (Л D -i£) D ->Л, mp Лэ(ВэЛ), a.l. -■В Э (Л Э-«В), а.1, ->В, уиф. А э -iB, mp 8,7. -пЛ, mp 9,5. э -1 4,3. где — будем решать. А), а.9. ^В^Л, Л^В. Операции введения и удаления логических символов Отметим, что упрощение формул или получение из них новых, как правило, связано с включением или удалением операций и операндов (логических связок, символов и букв). Далее рассматривается перечень таких преобразований формул для каждого символа операции э, Л, V, -i. Пусть Г = {G\, G2i..., Gn) — произвольный список УИФ, А, В, С — произвольные формулы. 1. Введение импликации. Если Г, А Ь В, то Г Ь А э В - ТОД. 1а. Удаление импликации. А,АэВ ЬВ - тр. 2. Введение конъюнкции А, В \- А/\В. 1. Аэ (ВэАлВ), а.З. 2. А, уиф. 3. Вэ А А В, тр 2,1. 4. В, уиф. 5. АЛВ, тр 4,1. 2а. Удаление конъюнкции А Л В Ь А и А Л В Ь В. 1. АлВэА, а.4. 2. А Л В, уиф. 3. А, тр 2,1. 3. Введение дизъюнкции А Ь А V В и В Ь А V В. 1. Аэ AW В, а.6. 2. А, уиф. 3. AVB, тр 2,1.
§ 1.5. Исчисление высказываний 79 За. Удаление дизъюнкции. Если А\- С и В \- С, то А V В \- С. 1. А\-С. 1* ЬЛэС, тод 1. 2. В Ь С. 2* Ь В э С, тод 2. 3. А V В Ь С. 3* Ь (А V В) D С, тод 3. 4. A DC, В DC h(AvB)D(7 -выводим. 5. (i3C)3((BDC)D((AvB)DC)), a.8. 6. A D С, уиф. 7. (В D С) D ((А V В) D С), тр 6,5. 8. В э С, уиф. 9. (AvB)dC, mp8,7. 4. Введение отрицания. Если А Ь В и А I—iB, то I—iA. 1. Ah В. 1* KAdB, тод 1. 2. А Ь -.В. 2* h A D -.В, тод 2. 3. ЛэВ.ЛЭпВ h -iA — выводим. 4. (A D В) D ((A D -.В) D -.А), а.9. 5. Аэ В, уиф. 6. (A D -.В) D -iA, mp 8,7. 7. A D -iB, уиф. 8. -A, mp 5,4. 4a. Слабое удаление отрицания A, -iA h B. 1. 4d(hBd4 a.l, где-iB->B. 2. А, уиф. 3. hBd4, mp2,l. 4. (-.B D A) D ((-.В D -A) D -«-«В), а.9, где ^B -> Д Л -> Б. 5. (-.В D -.A) D -i-iB, mp 3,4. 6. п4з(пВзп4 a.l, где-iA->A, -iB->B. 7. -iA, уиф. 8. ^B D -iA, mp 7,6. 9. -.-.B, mp 8,5. 10. ^Вэ В, a.10. 11. В, mp9,10. 4b. Сильное удаление отрицания -i-iA Ь A. 1. -i-iA, уиф. 2. ппЛэА, a.10. 3. A, mp 1,2. (6) Общие внешние оценки исчисления высказываний В любой формальной теории исчисления основными внешними ее оценками являются: 1) непротиворечивость исчисления; 2) полнота системы аксиом; 3) независимость системы аксиом; 4) разрешимость исчисления.
80 Гл. 1. Введение в математическую логику (1) Непротиворечивость исчисления Определение. Любая формальная система исчисления высказываний, имеющая символ -i для отрицания, называется непротиворечивой, если в ней одновременно недоказуема некоторая формула А и -iA Замечание. Для доказательства непротиворечивости исчисления высказываний необходимо найти некоторое свойство аксиом и правил вывода такое, что 1) все аксиомы обладают этим свойством; 2) правила вывода сохраняют это свойство в формулах, если оно имелось в последних; 3) любая пара формул А и -\А одновременно этим свойством обладать не могут. Искомым свойством является свойство тождественной истинности при нормальной интерпретации. Нормальная булева интерпретация подразумевает, что все пропозициональные переменные могут принимать два значения — 0 и 1, а все пропозициональные связки определяются таблицей истинности булевых функций. Замечание. Формальное исчисление высказываний является непротиворечивой системой. Действительно, ее система аксиом содержательно является совокупностью ТИФ и правила вывода сохраняют это свойство в новых формулах. Поэтому ни для какой формально выводимой формулы А (она ТИФ) нельзя вывести противоположную ей -\А (она не ТИФ). Можно сказать, что формальное исчисление высказываний является замкнутым в области ТИФ. (2) Полнота системы аксиом Определение содержательной полноты. Исчисление высказываний называется содержательно полным, если из его системы аксиом выводима любая тождественно истинная формула (ТИФ). Теорема 1.5.2 (о содержательной полноте). Исчисление высказываний является содержательно полным. Доказательство выполним на примере функций двух переменных для аксиом расширенного исчисления высказываний. Идея доказательства легко распространяется на другие системы аксиом исчисления высказываний и функции произвольного числа аргументов.
§ 1.5. Исчисление высказываний 81 Пусть F(x, у) — произвольная ТИФ двух переменных. Необходимо показать, что она доказуема \-F(x,у). Таблица истинности такой функции на всех значениях переменных ж, у равна 1 (истина в интерпретации). Тогда ее СДНФ имеет вид ху Уху V ху V ху. СДНФ является полной алгебраической формой относительно двух переменных ж, у. Нетрудно заметить, что эта форма представима в виде xyVxyVxyVxy = = (ж Уж)(у Vy). Так как F(x,y) и ее СДНФ — это равные функции, то они эквивалентны. Таким образом, эквивалентность F(x,y) ~ (ж Уж)(у Vy) по построению является тождественно истинной формулой. Следующая последовательность формул является искомым доказательством Ь F(x,y)\ 1. F(x,y) ~ (х Ух){у Vy), ТИФ — по построению. 2. хУх, а.19. 3. j/Vy^ аЛЭ^где у -> х. 4. (ж V ж)(у V у) — введение конъюнкции 2,3. 5. F{x,y) — правило замены по эквивалентности 4,1. О Определение формальной полноты. Система аксиом исчисления высказываний называется формально полной, если при добавлении к ней любой невыводимой из нее формулы система становится противоречивой. Теорема 1.5.3 (о полноте). В исчислении высказываний формальная полнота и содержательная полнота являются эквивалентными понятиями. Доказательство. Докажем, что из содержательной полноты следует формальная полнота исчисления высказываний. Содержательная полнота говорит о том, что любая ТИФ является выводимой из системы аксиом. С другой стороны, из системы аксиом можно получать только тождественно истинные формулы. Поэтому, по определению, для проверки формальной полноты исчисления высказываний следует включить в систему ее аксиом произвольную не тождественно истинную формулу и показать, что в этом случае система становится противоречивой. Пункты доказательства отмечаем порядковыми номерами. 1. Имеем, что из системы аксиом выводима любая ТИФ. 2. Пусть В(х\ух2,... ,хп) — некоторая невыводимая формула, Xi Е {0, 1}. Значит, она не ТИФ. 3. Следовательно, существует такой набор (а\, а2,..., ап) значений переменных, что В(а\, а2,..., ап) = 0. 4. Присоединим формулу В(ж1,ж2,... ,жп) к системе аксиом.
82 Гл. 1. Введение в математическую логику 5. Выполним подстановку В(хих2,...,хп) = С(х) = В(аиа2,...,ап) = О, \х Ух —> Х{, если о>{ = 1, \х Л х —> Х{, если а^ = 0. где С — тождественно ложная формула или -iC — ТИФ. 6. Имеем правило (1.37) из лжи что угодно -а Э (х Э у) — ТИФ. Выполним подстановку С —> х и А —> у. Тогда -iC D D (С э А) — ТИФ, где А — произвольная формула. 7. Применяя к тождественно истинным формулам -iC и -iC D D (С э А) операцию modus ponens, получим С э А — ТИФ. 8. Выполним подстановку -iC ->Св формулу С D Л — ТИФ. Имеем -пСэЛ- ТИФ. 9. Применив к формулам -iC и -iC D Л операцию modus ponens, получим А. 10. Выполним подстановку -и4 —> Л в формулу -iC D Л — ТИФ. Имеем -iC Э -u4 — ТИФ. 11. Применив к формулам -iC и -iC D ~>Л операцию modus ponens, получим -|Л. Таким образом, включение в систему аксиом исчисления высказываний произвольной не тождественно истинной формулы приводит к тому, что такая система позволяет получить пару формул Л и -Л.. Такая система аксиом является противоречивой. Исходная же система аксиом была непротиворечивой. Это доказывает, что из содержательной полноты следует формальная. Докажем, что из формальной полноты следует содержательная полнота. Доказательство выполним от противного. Допустим, что система формально полна, однако содержательной полноты нет. 1. Так как содержательная полнота не выполняется, значит, существует тождественно истинная формула В, которая не выводима из системы аксиом. 2. Добавим указанную В — ТИФ к системе аксиом. 3. Замечая, что добавляемая формула В и аксиомы — это совокупность ТИФ, получаем, что вывод из этой совокупности возможен лишь тождественно истинных формул. 4. По условию исходная система аксиом является формально полной. Поэтому добавление к ней формулы В должно обратить систему в противоречивую, из которой возможен вывод пары формул Л и -|Л. Согласно п. 3 эти формулы должны быть ТИФ. Однако Л и -и4 не могут быть одновременно ТИФ. Следовательно, предположение, что при формальной полноте содержательной полноты нет, является неверным. '-'
§ 1.5. Исчисление высказываний 83 (3) Независимость системы аксиом Определение. Система аксиом исчисления высказываний называется независимой, если никакая из аксиом этой системы не может быть получена из других с использованием допустимых правил вывода. Замечание. С точки зрения использования теории независимость системы аксиом — менее важное свойство, чем полнота. Независимость аксиом важна при переходе от одной теории к другой. Замечание. Определение независимости системы аксиом является непростой задачей. При решении ее используют тот же подход, что и при установлении непротиворечивости системы. Пусть необходимо установить независимость какой-либо выделенной аксиомы, тогда последовательность решений этой задачи состоит в следующем. 1. Находят некоторое свойство формул, которое избирательно выполняется в аксиомах всего списка. 2. Это свойство должно быть в наличии у всех аксиом, кроме выделенной. У выделенной аксиомы это свойство должно отсутствовать. 3. Данное свойство должно сохраняться правилами вывода. 4. Допустим, что это все выполнено и свойство найдено, тогда исключение выделенной аксиомы из всего перечня их списка приведет к следующему эффекту. 5. Оставшаяся часть аксиом позволит нам получать лишь формулы, у которых всегда в наличии выделенное свойство. И, как выше сказано, это свойство сохраняется правилами вывода. 6. С другой стороны, существуют формулы, которые в нормальной булевой интерпретации являются ТИФ и не могут быть получены из оставшейся части списка аксиом. Это те тождественно истинные формулы, которые не обладают выделенным свойством. Например, такой формулой является удаленная аксиома. 7. Таким образом, удалив обозначенную аксиому, мы в целом нарушили полноту системы аксиом. Замечание. Как правило, в качестве указанного выделенного свойства аксиом предлагается использовать их свойство быть тождественно истинными формулами. И это свойство должно сохраняться правилами вывода. Используется нормальная бу-
84 Гл. 1. Введение в математическую логику лева интерпретация: 0 — ложь, 1 — истина. Далее пытаются изменить таблицы истинности некоторых операций (связок) так, чтобы в новой интерпретации пропозициональных связок все аксиомы остались ТИФ, однако выделенная аксиома не должна остаться ТИФ. Это и будет доказательством независимости выделенной аксиомы. Пример. Рассмотрим систему аксиом Клини (п. 1.5.5). Покажем независимость ее четвертой аксиомы А А В D А. Определим таблицу истинности конъюнкции АаВ как В. Итак, в новой интерпретации А А В = В. Отметим, что аксиомы, в которые не входит операция А А В, остались и в новой интерпретации тождественно истинными формулами. Оценим теперь истинность аксиом, в которые входит операция А А В. Аксиома 3. Ad (В D ААВ). Так как в новой интерпретации ААВ = = В, то Ad (Bd AaB)=Ad (Bd В) - ТИФ. Аксиома 4. AABdA. Так как имеем ААВ = В, то AABdA = = В d A — условно истинная формула (не ТИФ). Аксиома 5. AABdB. Так как имеем ААВ = В, то AABdB = = Bd В - ТИФ. Видно, что в предложенной интерпретации А А В = В все аксиомы являются ТИФ, кроме выделенной А А В D А, которая не ТИФ. Следовательно, можем заключить, что аксиома А А В D А является независимой. Ее нельзя получить из других аксиом, которые являются ТИФ в рассматриваемой интерпретации. (4) Разрешимость исчисления высказываний Определение. Формальная теория исчисления высказываний называется разрешимой, если имеется эффективная (значит, конечная) процедура, дающая ответ на вопрос — выводима ли формула А из заданного списка формул G\, (?2, • • •, Gn. Теорема о дедукции позволяет записать условие выводимости Gi,G2)...,Gnhi (1.43) в форме доказательства hGxD(G2D(...(GnDA))). (1.44) Из эквивалентности содержательной и формальной полноты исчисления высказываний заключаем, что G\ D (G2 D (... ...{Gn D A))) — ТИФ. Следовательно, в качестве эффективной
§ 1.6. Исчисление предикатов 85 процедуры ответа на вопрос выводимости какой-либо формулы (1.43) может выступать процедура установления тождественной истинности соответствующей ей доказуемой формулы (1.44). § 1.6. Исчисление предикатов Исчисление высказываний является довольно узкой логической теорией. Несложно привести логические рассуждения, истинность которых не может быть объяснена в рамках исчисления высказываний. Примеры рассуждений. 1). Имеем 2 < 5 и 5<9. Значит 2 < 9. Рассуждение — истинное. Его заключение является следствием посылок. 2). Имеем 2 < 5 и 1 < 9. Значит 2 < 7. Рассуждение — неверное. Его заключение не является следствием посылок. 3). Все птицы — животные. Все воробьи — птицы. Значит все воробьи — животные. Рассуждение — истинное. Его заключение является следствием посылок. 4). Все птицы — животные. Никакая рыба — не птица. Значит никакая рыба — не животное. Рассуждение — неверное. Его заключение не является следствием посылок. 5). Простое число 2 является четным. Следовательно, существуют простые четные числа. Рассуждение — истинное. Его заключение является следствием посылки. Корректность (или некорректность) предложенных умозаключений основана на внутренней структуре самих предложений и на смысле слов всякий и существует. Если же рассматривать их формализацию в рамках теории исчисления высказываний,
86 Гл. 1. Введение в математическую логику то все они укладываются в одну схему — истинные посылки и истинное (или ложное) заключение, что не может отразить действительного содержания рассуждений. 1.6.1. Понятие предиката С целью введения понятия предиката рассмотрим следующие примеры простых высказываний: «Платон есть грек», «7 есть простое число», «Михаил есть брат Владимира». В каждом простом высказывании утверждается тот факт, что некоторые объекты обладают некоторыми свойствами. Содержание таких высказываний является разным, однако форма их всех одинаковая. Возьмем высказывание «Платон есть грек». Обобщением его является высказывание вида «X есть грек». Предложения такого типа называются предикатами, сказуемыми (predicate — сказуемое). Действительно, обобщение распространяется на подлежащее (subject — предмет, субъект). Сказуемая часть остается без изменения и фиксирует некоторое свойство предиката. Нетрудно заметить, что именно свойства объектов находятся между собой в некотором отношении. Последнее высказывание «X есть грек» можно обозначить как функцию одной переменной Гр(ж). Такая функция каждому значению переменной х ставит в соответствие некоторое высказывание. Например, Тр(Аристотель) = «Аристотель есть грек» или Гр(Наполеон) = «Наполеон есть грек». Здесь предикат выступает в роли пропозициональной функции, областью значений которой служат высказывания. Такие высказывания могут быть как истинными, так и ложными. Аргументами (значениями переменных) предикатов также выступают высказывания. Например, обобщением высказывания «Михаил есть брат Владимира» может служить предикат «X есть брат Y», который можно обозначить пропозициональной функцией двух переменных Ър(х,у). На такой предикат можно смотреть и как на некоторое отношение между объектами ж и у. Определение. В общем случае под предикатом понимают некоторое отношение Р(х\,Х2,... >хп) (или пропозициональную функцию), которое устанавливает связь между определенным числом предметных переменных (объектов) х\,х2,... ,хп е е D. В рамках классического исчисления предикатов полагают, что высказывание Р(х\,Х2,... ,жп), соответствующее произвольным значениям предметных переменных х\,Х2,... ,хп е
§ 1.6. Исчисление предикатов 87 Е D, непременно является либо истинным, либо ложным. По количеству переменных отношение Р(х\, ж2,..., хп) называют гс-местным предикатом. 1.6.2. Операции над предикатами В исчислении высказываний с помощью операций (логических связок) -л, Л, V, D, ~ формировались сложные высказывания. Подобным же образом в исчислении предикатов посредством указанных операций формируются новые предикаты. Например, S(xy z) э Р(ху у) V Q(x, у, z). Примеры операций. 1). Рассмотрим два предиката Чет(ж) = {х — четное число] и Пр(ж) = {х — простое число}. На основе обозначенных предикатов построим новые предикаты. Чет(ж) Л Пр(ж) = {х — четное и простое число}. Чет(ж) V Пр(ж) = {х — четное или простое число}. 2). Пусть предикат D(x,y) = {x делит у}. Новый предикат D(x, у) Л D(y, х) = {х = у ^ 0}. 3). Определим следующие предикаты: М(ж,у) = {х — мать у}, Ж(ж,у) = {х — жена у}, Б(ж,у) = {х — бабушка у}, Тщ(ж,у) = {х — теща у]. Новые предикаты: М(ж, у) Л М(у, z) = Б(ж, z), Ж(ж, у) Л М(я, х) = Тщ(г, у). 1.6.3. Определение кванторов Пусть Q(x,y,z) — произвольный предикат и ж, у, z e D. 1. Фиксация всех x,yyz на множестве D значений предметных переменных превращает предикат в единичное высказывание. 2. Суждение в предикате P(x,yyz) обо всем множестве значений какой-либо из переменных x,y,z e D превращает его в обобщенное высказывание.
Гл. 1. Введение в математическую логику Определение. Переход от предиката к обобщенному высказыванию называется операцией квантификации. Квантор общности V. Пусть Р(х) — некоторый предикат, х Е D. Тогда под выражением Ух Р(х) будем понимать обобщенное высказывание, которое истинно, если высказывание Р(х) истинно для каждого значения х е D. Квантор существования 3. Под выражением Зх Р{х) будем понимать обобщенное высказывание, которое истинно, если существует такое значение х Е D, для которого Р(х) истинно. Если положить D = {ai,a2,a3}, тогда определение обобщенных высказываний Ух P(x) и Зх Р(х) представляется в виде Ух Р(х) = Р(ах) Л Р(а2) Л Р(а3), (] д-. Зх Р(х) = Р(ах) V Р(а2) V Р(а3). (iAt}) Утверждение 1.6.1. Пусть Р(х) — произвольный предикат. Тогда справедливы тождества (законы де Моргана) -Vx P(x)=3x -Р(х), -Зх Р{х)=Ух -Р(х). (1ЛЬ) Доказательство. Пусть х € D = {01,02,03}. Тогда -Ух Р(х) = -(Р(а{) Л Р(а2) Л Р(а3)) = = ^P(ai) V -Р(а2) V -Р(а3) = Зх ^Р(х). Подобным образом -Зх Р(х) = ^(Р(а{) V Р(а2) V Р(а3)) = = ^Р(а{) Л ^Р(а2) Л ^Р(а3) = Ух ^Р(х). Q Замечание. Доказанные свойства (1.46) можно рассматривать в качестве правила переноса кванторов через символ отрицания. Свободные и связанные переменные Пусть Vy Q(x,y,z) — произвольный предикат и x,y,z e D. 1. Переменная х называется свободной в предикате Vy Q(x,y,z), если ее можно заменить на любое значение х е D. 2. Переменная у в предикате Vy Q(x,y,z) называется связанной, если она квантифицирована. Такая переменная характеризует все множество ее значений у Е D.
§ 1.6. Исчисление предикатов 89 3. Свободные переменные при их квантификации переходят в разряд связанных. Связывание (квантифицирование) у предиката каждой переменной понижает на единицу его «местность». Так, квантификация переменной у в трехместном предикате Q(x,y,z) превращает его в двухместный предикат Vy Q(x,y,z). Область действия кванторов Приведем пример предиката (\/х Q(x))V(3x P(x)A^R(x))D ^R(x) V 5(ж,у). X — свободная X, у — свободные 1. Область действия квантора определяется скобками. 2. Если скобок нет, то действие квантора распространяется на всю часть предиката, которая стоит после такого квантора. Так, в приведенном примере обозначены свободные переменные, на которые не распространяется действие кванторов. Остальные переменные выражений (составляющие предиката) являются связанными. 1.6.4. Строение исчисления предикатов Приведем основной перечень признаков, который используется при классификации составных частей исчисления предикатов. 1. Количество элементов в множестве значений предикатов Р(ж1,Ж2,... ,хп). В рамках классического исчисления предикатов полагают, что значение непременно должно быть либо истинным, либо ложным. 2. Количество предметных переменных в предикате. Так, Р(х\, Ж2,..., хп) — тг-местный предикат. 3. Количество предметных областей. В общем случае для предиката Р{х\,ж2,..., хп) каждая из таких переменных принадлежит свой области Xi e Di. 4. Количество ступеней подчинения в иерархии переменных предиката. Дадим более подробное определение каждого из указанных пунктов. (1) Классификация по количеству элементов в множестве значений предикатов 1. Теория двузначных предикатов. 2. Теория трехзначных предикатов. 3. Теория fc-значной логики.
90 Гл. 1. Введение в математическую логику 4. Теория бесконечнозначной логики (модальная, вероятностная и др.) (2) Классификация по количеству предметных переменных 1. Теория нульместных предикатов. Это исчисление высказываний. 2. Теория одноместных предикатов или исчисление классов аристотелевых силлогизмов. 3. Теория тг-местных предикатов. (3) Классификация по количеству предметных областей переменных 1. Исчисление предикатов с одной предметной областью. Например, Р(х,у,z), где x,y,z G D. 2. Исчисление предикатов с несколькими разнородными предметными областями. Например, Р(х, у, z), где х е D\, у е £>2, zeD3. (4) Классификация по количеству ступеней подчинения в иерархии переменных предикатов 1. Исчисление предикатов 1-й ступени (узкое исчисление предикатов), одна ступень подчинения. Определим понятие ступени подчинения переменных. Пусть Р{х), Q(x,y), S(y,z) — произвольные предикаты. Переменные x,y,z e D называются предметными переменными. Если же непосредственно сами предикаты выступают в роли переменных, то такие переменные называются предикатными. В исчислении предикатов 1-й ступени квантифицироваться могут лишь предметные переменные. Пусть Р(х) — некоторый предикат. Тогда предикатом 1-й ступени будет предикат VxVy( х = у) D ( Р(х) = Р(у)) — предикат 1-й ступени, VxVj/VQ (х = у) D (Q(x) = Q(y)) — предикат НЕ 1-й ступени. 2. Исчисление предикатов 2-й ступени (расширенное исчисление предикатов), две ступени подчинения. Вводятся понятия предикатных переменных первого ранга и второго. У предикатов первого ранга переменными могут выступать лишь предметные переменные. Предикаты второго ранга в качестве переменных имеют уже предикаты первого ранга. В исчислении предикатов 2-й ступени квантифицироваться уже могут предметные переменные и предикатные переменные первого ранга.
§ 1.6. Исчисление предикатов 91 3. По аналогии вводят исчисление предикатов тг-й ступени, п ступеней подчинения. Рассматриваются предикатные переменные рангов 1,2,...,гг. У предикатов большего ранга в качестве переменных могут выступать предикаты меньшего ранга. В исчислении предикатов тг-й ступени квантифици- роваться уже могут предметные переменные и предикатные всех рангов до п— 1. 1.6.5. Предикаты свойств Определение. Предикат свойства — это логическая функция одной переменной у = Р(ж), где ж G D — область значений предметных переменных, у е {истина, ложь} — множество значений функции. Пользуются интерпретацией значений «истина» и «ложь» соответственно как 1 и 0 или TRUE и FALSE. По общей классификации предикаты свойств — это одноместные предикаты. Содержание таких предикатов Р(х) укладываются в форму (шаблон) «х обладает свойством Р». Приведем примеры таких предикатов. 1. у = Гр(ж) = «ж есть грек», где D = {Платон, Аристотель, Пифагор, Святогор, Наполеон}. 2. у = /(ж) = «ж < 7», где D — действительные числа. 3. у = Пр(ж) = «ж есть простое число», где D = {2,3,4,5,6,7}. 4. у = R(x) = «ж есть река Сибири», где D — множество рек. 5. у = S(x) = «х есть военный крейсер», где D — корабли. Различают следующие способы задания предикатов. 1. Аналитический способ. у = /(ж) = «х < 7», где D — действительные числа. 2. Табличный способ, у = Пр(ж) = «ж есть простое число», где D = {2,3,4,5,6,7}: X Пр(х) 2 3 4 5 6 7 110 10 1 3. Логический способ — смысловая запись предиката. у = Гр(ж) = «ж есть грек». 4. Графический способ — график функции предиката. Замечание. Предикат свойства у = Р(х) разбивает все множество предметных переменных xeD на два подмножества
92 Гл. 1. Введение в математическую логику D = TU F и THF = 0 таких, что Уж е Т Р(х) - истинно uVxeF P(x) — ложно. Для конечного множества D нетрудно подсчитать общее число таких предикатов. Пусть D = {а,Ь,с}. Каждый предикат определяется разбиением множества D на два подмножества Г и F, где D = Т U F и Т П F = 0. Следовательно, количество предикатов свойств равно числу подмножеств множества D. Для D = {а, Ь, с} число подмножеств равно 8: 0> W. {Ь}. {с}, {a, fe}, {fe, с}, {а, с}, {а, 6, с}. Множество Г может быть одним из них, тогда F — дополнение Т до D. Итак, имеем 8 предикатов свойств. В общем случае, если \D\ = га, то число таких предикатов будет 2Ш. 1.6.6. Исчисление одноместных предикатов, исчисление классов Заголовок данного пункта можно продолжить — это исчисление категорических суждений, исчисление аристотелевых силлогизмов или узкое исчисление одноместных предикатов по общей классификации (п. 1.6.4). Определение. Пусть Р(х) — одноместный предикат (свойство), где xeD. Характеристическим множеством данного предиката называется множество таких предметных переменных жеД для которых предикат Р(х) является истинным или «ж обладает свойством Р». 1. С каждым предикатом Р(х) связывается одноименный ему класс (истинности) Р, под которым понимается характеристическое множество этого предиката Р(х). 2. Под универсальным классом (универсумом) понимается множество всех возможных предметных переменных. 3. Пустой класс — пустое множество переменных. Категорические суждения Рассматриваемое исчисление — это логика Аристотеля (384- 322 гг. до н. э.) и его последователей. Данная логика актуальна и востребована в своем применении и в настоящее время. Основная роль отводится четырем видам суждений (умозаключений), называемых категорическими. Название категорическое суждение идет от греческого kategorikos — «не допускающий иных толкований».
§ 1.6. Исчисление предикатов 93 Пусть S(x) и Р(х) — предикаты (свойства), форма их содержания выражается шаблонами «х обладает свойством S» и «ж обладает свойством Р». Полагаем, что S и Р — классы истинности предикатов S(x) и Р(х). Упомянутые четыре основных вида категорических суждений записываются в следующем виде. А. Все S суть Р — общеутвердительное суждение. Е. Никакое S не суть Р — общеотрицательное суждение. I. Некоторое S суть Р — частичноутвердительное суждение. О. Некоторое S не суть Р — частичноотрицательное суждение. Принятое буквенное сокращенное обозначение суждений А, 1,Е,0 восходит к гласным (a, i,e,o) в латинских словах: «affirmo» (утверждаю) и «nego» (отрицаю). Буквы S и Р напоминают о членах предложения, которые называют «subject» (подлежащее) и «predicate» (сказуемое). На языке логики предикатов суждения А,Е, 1,0 представляются в следующем виде. A. Vx S(x) D Р(х) или Все S суть Р. Vx nS(x) V P(x). Е. -Зх S(x) Л Р(х) или Никакое S не суть Р. Vx S(x)D^P(x) или Все S суть не Р. (\ 47) Vx -.S(z) V -iF(x). V ' ; I. Зх S(x) Л Р(х). Некоторое S суть Р. О. Зх S(x) Л -iF(x). Некоторое S не суть Р. Геометрическая интерпретация категорических суждений Геометрическая интерпретация категорических суждений на рис. 1.13 представляется взаимным расположением классов истинности S и Р предикатов S(x) и Р(х). A. Vx S(x) D Р{х) Е. Sx S(x) Л Р(х) I. Эх S(x) Л Р(х) О. Зх S(x) Л -.Р(х) Рис. 1.13. Геометрическая интерпретация категорических суждений Категорические суждения являются обобщенными тождественно истинными высказываниями. Этому условию категори-
94 Гл. 1. Введение в математическую логику ческих суждений отвечает и взаимное расположение соответствующих им классов истинности S и Р. Примеры категорических суждений Пример 1. А. {Все S суть Р.) Все курсанты морского училища (S) умеют плавать (Р). Е. {Никакое S не суть Р.) Ни один курсант морского училища (S) не умеет плавать (Р). I. {Некоторое S суть Р.) Некоторые курсанты морского училища (S) умеют плавать (Р). О. {Некоторое S не суть Р). Некоторые курсанты морского училища (S) не умеют плавать (Р). Пример 2. А. {Все S суть Р.) Все фокусники (S) — обманщики (Р). Е. {Никакое S не суть Р.) Ни один фокусник (S) не является обманщиком (Р). I. {Некоторое S суть Р.) Некоторые фокусники (S) — обманщики О. {Некоторое S не суть Р.) Некоторые фокусники (S) не являются обманщиками (Р). Закон отрицания Категорические суждения А и О, Е и I являются отрицанием друг друга: ^А = 0 и ^E = L (1.48) Доказательство ~^А = 0. Имеем А=\/х S(x)D P(x)=\/x n%)vP(x). Из (1.46) ^A = -tfx -п5(х) V Р(х) = Зх S(x)A^P(x) = 0. q Доказательство -iE = I. Имеем Е = -^Зх S(x) Л Р(х). Тогда ^Е = Зх S(x) Л Р{х) = 1 □ Закон обращения Категорические суждения Е = -Зх S(x) Л Р{х) и / = = Зх S(x) Л Р(х) допускают замену классов S на Р и Р на S. Справедливость утверждения является следствием свойства коммутативности операции конъюнкции Л.
§ 1.6. Исчисление предикатов 95 Структура категорических силлогизмов В классической аристотелевой логике основная роль в познании действительности (в получении новых знаний) отводится дедуктивным (силлогическим) методам (умозаключениям). Учение Аристотеля о силлогизме составляет основу современного направления логики предикатов. Дедукция — это частный случай умозаключений. Умозаключение — это форма мышления, посредством которой из одного или нескольких суждений (посылок) выводится новое суждение (заключение). При дедуктивном анализе связь посылок и заключения опирается на логический закон. В силу этого заключение с логической необходимостью вытекает из принятых посылок. Дедуктивная форма умозаключений из истинности посылок всегда ведет к истинности заключения. Категорический силлогизм состоит из трех категорических суждений (1.47), два из которых являются посылками, а третье — заключением. Первая из посылок называется большой посылкой, вторая — малой. Разновидности силлогизма называются модусами. Приведем пример такого силлогизма, называемый Barbara. А. Все Р суть Q. А. Все S суть Р. А. Все S суть Q. Схема силлогизма Barbara представляется в следующем виде: Р on Q — большая посылка S on P — малая посылка S on Q — заключение где P,Q,S — классы истинности соответствующих предикатов P(x),Q(x)1S(x)1 сокращение «on» — символ операции. В силлогизме классы P,Q,S называются термами: Р — средний терм, Q — большой терм, S — малый терм. Все силлогизмы делятся на четыре группы (рис. 1.14), в зависимости от расположения термов. Геометрический квадрат и линия внутри него — это условное обозначение силлогизма. Линия показывает расположение средних термов Р в посылках силлогизма. Несложно подсчитать общее количество таких силлогизмов. Рассмотрим одну из четырех групп. На место большой по- (ШШ)
96 Гл. 1. Введение в математическую логику I. PQ И. QP III. PQ IV. QP SP SP PS PS SQ SQ SQ SQ н а о и Рис. 1.14. Структурные схемы категорических силлогизмов сылки, малой посылки и заключения можно поставить любое категорическое суждение (А, Е, I, О). Значит, на основе схемы одной группы можно получить 4 • 4 • 4 = 64 модусов силлогизма. А так как групп четыре, то всего различных модусов силлогизма равно 4 • 64 = 256. Из этого формально составленного множества модусов лишь 19 являются правильными в предположении, что классы истинности Р, Q, S являются непустыми. В противном случае их число уменьшается. Силлогизм является правильно составленным, если существуют его посылки, при которых заключение является истинным. Силлогизм неправильный, если при любых его посылках заключение остается ложным. Каждый из 19 правильных аристотелевых силлогизмов имеет свое название. Выше в качестве примера рассмотрен силлогизм Barbara. Приведем еще два таких силлогизма, относящихся ко второй группе их классификации (рис. 1.14). Baroco Festino А. Все Q суть Р Е. Никакое Q не суть Р О. Некоторые S не суть Р I. Некоторые S суть Р О. Некоторые S не суть Q О. Некоторые S не суть Q 1.6.7. Техника преобразования формул в исчислении предикатов Для формул логики предикатов как высказываний выполняются все правила преобразований, установленные в исчислении высказываний. Рассмотрим ряд дополнительных операций пре-
§ 1.6. Исчисление предикатов 97 образования формул предикатов, которые, как правило, будут относиться к квантификации предикатов. Квантификация многомерных предикатов Пусть дан предикат Р(ж,у), где ж, у е D = {01,02,03,04,05}, и его таблица истинности. Заполним (составим) таблицу истинности предикатов Уж Р(ж,у), Зх Р(ж, у), Уу Р(ж,у), Зу Р(ж,у). х\у а\ а>2 аз ал аъ У Vx P(x, у) Зх Р(х, у) ах 0 0 0 0 0 а\ 0 0 а>2 0 1 1 0 1 а2 0 1 а3 1 1 1 1 1 а3 1 1 а\ 0 0 1 1 0 а\ 0 1 «5 1 1 1 1 1 а5 1 1 X а\ U2 аз а4 а5 Vy P(x, у) 0 0 0 0 0 Зу Р(х, у) Перестановка кванторов 1. УжУу Р{х,у) = Уу Уж Р(х,у). 2. ЗжЗуР(ж,у) = ЗуЗжР(ж, у). 3. ЗжУу Р(х,у) D УуЗж Р(х,у). 4. ЗуУж Р(х,у) D УжЗу Р(ж,у). Замена кванторов друг на друга, законы де Моргана 1. 2. 3. 4. 5. 6. Ух Р{х) Зх Р(х) Ух Р(х) Зх Р(х) Ух Р(х) Зх Р(х) Иванов Б.Н. 1. ->Ух Р(х) = Зх ^Р(х); Ух Р(х) =-.Зж ->Р(х). 2. -Вх Р(х) = Ух -Р(ж); Зх Р(х) = -iVz -iP(a). Вынесение кванторов за скобки Л Ух Q(x) = Ух (Р(х) Л Q(x)). V Зж <5(ж) = 3x(P(x)yQ(x)). V Уж <?(ж) ^ Vz (Р(ж) V Q(z)). Л Зх Q(x) ф 3x(P(x)AQ(x)). V С = Ух(Р(х)УС), С - Л С = Зх(Р(х)АС), С - - const - const
98 Гл. 1. Введение в математическую логику Доказательство 5. Уж Р(х) V С = Vx (P(x)VC), где С — const. Пусть множество предметных переменных х е D = = {ai,a2}. Vx P(x) V С = P(ai)P(a2) V С. Ух (P(x)V C) = (P(ax)V C)(P(a2)V С) = = Р(ах)Р{а2) V Р{а\)С V СР(а2) V С = = Р(ах)Р(а2) V С( Р(а{) V Р(а2) V 1) = = P(ai)P(a2)VC. D Замечание. Применение свойства 5: Vx Р(х) V Vx Q(x) = Vx Р(х) V Vy Q(y) = Vx (Р(х) V С) = 4 v ' с = Vx(P(x)WyQ(y))=Vx(CWy Q(y)) = с = Vx(Vy(CvQ(y))=Vx(Vy(P(x)vQ(y)) = = VxVy(P(x)vQ(y)). Вынесение кванторов за знак отрицания При вынесении квантора за знак отрицания квантор меняется на двойственный. В основе данного правила лежат законы де Моргана. Приведем пример для этого свойства: -Nx3y3z^w Зи Р(х, у, z, w, и) = = 3x-3y3zVw Зи Р(х, у, z, w, и) = = 3xVy-i3zViu Зи Р(х, y,z,w,u) = ... = 3xVyVz3w Vu ~iP(x, у, z, w, и). Приведение формул к предваренной нормальной форме Предваренной нормальной формой (ПНФ) называется формула представления предиката, в которой все кванторы стоят вначале формулы (кванторная приставка, префикс), а бескванторная часть (ядро) приведена к некоторой стандартной форме. В качестве такой формы, как правило, принимается ДНФ или КНФ. Предваренная нормальная форма используется в автоматических доказательствах и выводах. Приведенное ядро предиката к стандартному виду позволяет оценивать его доказуемость посредством раздельной оценки доказуемости его составных частей — слагаемых в ДНФ или множителей в КНФ. Задача. Привести 3xVy Р(х,у) э ~Vx Зу Q(x,y) к ПНФ.
§ 1.6. Исчисление предикатов 99 Решение. Свойство импликации Аэ В = -и4 V В. Тогда ЗжУу Р(х,у) э -iVz Зу Q(x,y) = = -ЗжУу Р(х,у) V -iVx Зу Q(x,y) = = УжЗу-1 Р(ж, у) V Зж Vy -iQ(a?, у) = = УжЗу -I Р(х, у) V 3z Vw-iQ(z, w) = = Vx3y3zVw (^P(x,y)V^Q(z,w)). 1.6.8. Формализация некоторых отношений средствами узкого исчисления предикатов Язык узкого исчисления предикатов (1.6.4): 1) многоместные двузначные предикаты; 2) предметные переменные предикатов; 3) кванторы для предметных переменных; 4) логические булевы операции. Пример. Установим связь следующих отношений: Мать(я,у) — «я есть мать у». Отец(х, у) — «я есть отец у». Дед(я, у) — «я есть дед у». «Дед(х, у) = 3z Отец(х, z) Л (Отец(;г, у))У Мать(;г, у))». Свойства бинарных отношений Пусть Р(х,у) — некоторое бинарное отношение (предикат), заданное на множестве ж, у G D предметных переменных. 1. Рефлексивность: Уж Р(ж, ж). Каждый элемент множества ж Е D сам к себе находится в отношении Р(х,х). Например, для отношения чисел Р(х, у) = «ж равен у» условие Уж Р(х, ж) выполняется, так как «ж равен ж». 2. Симметричность: Уж Vy Р(ж, у) э Р(у, ж). Если отношение применимо к двум предметам, то — независимо от их порядка. Например, отношение Р(х,у) = «Прямая х параллельна прямой у» — симметрично. 3. Транзитивность: УжУуУ^Р(ж, у) Л Р(у, z) э Р(х, z). Переносимость отношений между двумя парами элементов (ж, у) и (у, z) на третью пару (ж, z). 4. Антирефлексивность: Уж -пР(ж,ж). Например, отношение Р(х,у) =«ж > у» для чисел является антирефлексивным, так как условие Р(х,х) =«х > ж» не может быть выполнено. 4*
100 Гл. 1. Введение в математическую логику 5. Антисимметричность: Уж Уу Р(х, у) А Р(у, х) э г(ж, у), где г(х,у) = «х равно у». Назначение отношения антисимметричности — обеспечить невозможность одновременного выполнения условий Р(х,у) и Р(у,х) для переменных ж ^ у. Это возможно достичь выполнением отношения Р(х,у) Э -iP(y, ж), противоположного отношению симметричности. Однако оно может нарушаться для равных значений переменных ж и у. Именно это потребовало модификации отношения антисимметричности. Например, отношение Р(х, у) =«ж ^ у» для чисел является антисимметричным. 6. Трихотомия: УжУу Р(х,у) V Р(у,х) = УжУуР(ж,у)А A-iP(y, ж) V -|Р(ж, у) А Р(у, ж) V Р(х, у) А Р(у, ж). Предикат условия трихотомии предполагает обязательное выполнение отношений Р(х, у) или Р(у, ж) для каждой пары элементов х,у е D. Возможно и одновременное выполнение условий Р(ж,у) и Р(у,х). Отношение эквивалентности Бинарное отношение Р(х,у), где ж, у G D, называется отношением эквивалентности, если оно рефлексивно, симметрично и транзитивно. Таким образом, предикат отношения эквивалентности — это конъюнкция трех отношений: УжУуУ^Р(ж,ж) &Р(х,у)эР(у,х) & P(x,y)AP(y,z)D P(x,z). Примером отношения эквивалентности может служить классификация объектов. Отношение Р(х,у) для элементов ж, у G D выполняется, если они имеют выделенные общие признаки. Объекты с общими признаками объединяются в отдельный класс. Элементы ж, у G D, для которых выполняется отношение Р(х, у), называются эквивалентными. Определение. Классом эквивалентности, порожденным элементом Х{ G D, называется подмножество элементов Di = {ж | P(xi, ж) Л ж G D}, эквивалентных данному Х{. Теорема 1.6.1. Пусть Р(х,у) — отношение эквивалентности, где х,у е D, и Di — классы эквивалентности, составленные для каждого элемента ж; G D. Тогда выполняются следующие условия: 1) для каждого Xi G D верно, что Xi G Di принадлежит порожденному им классу эквивалентности',
§ 1.6. Исчисление предикатов 101 2) классы, порожденные эквивалентными элементами Xi,Xj, совпадают Di = Dj\ 3) классы эквивалентности совпадают Di = Vj, если их пересечение непусто Di П Dj ^ 0. Доказате л ьство. 1). Пусть класс D{ порожден элементом Х{ G D. Тогда Di = {х | Р(х{, х) Л х G D}. Рефлексивность отношения Р(х{, ж*) позволяет заключить, что ж; G Di. 2). Пусть z G Dj — произвольный элемент класса, порожденного элементом Xj. Тогда верно отношение P(xj,z). По условию имеем эквивалентность элементов P(xi,Xj). Из транзитивности отношения заключаем эквивалентность P(xi,z). Следовательно, z G Di и, значит, Dj С Д. Подобным образом проверяется включение в обратную сторону Dj D Di. Таким образом, классы эквивалентных элементов совпадают: Dj = Di. 3). Пусть z G А П Dj ^ 0 — непустое пересечение. Тогда выполняются P(xiyz) и P(xjyz). Из симметричности отношения имеем P(z,Xj), а из транзитивности P(xi,Xj). Таким образом, элементы х% и Xj — эквивалентные. По условию пункта 2), классы, порожденные такими элементами, совпадают. D Следствие. Пусть Р(хуу) — отношение эквивалентности, где хуу G D. Тогда множество D разбивается на классы эквивалентности D = D^ U D^2 U... U Atm, где D^ П D^ = 0, если ki t^ kj. Вследствие попарного непересечения Dki9 разложение называется прямым. Совокупность множеств-классов Д^, где г = 1,2, ...,га, называется фактормножеством множества D относительно отношения Р(хуу) и обозначается как D/P. Пример. Пусть D — множество людей. Определим на D бинарное отношение Р(хуу) = «х и у родились в одной и той же стране», где х,у G D. Отношение Р(х, у) является отношением эквивалентности. Классы эквивалентности составляют люди, родившиеся в одной стране. Пример. Пусть D — множество студентов одного города. Определим на D бинарное отношение Р(хуу) = «х и у учатся в одном вузе», где х,у G D. Отношение Р(ху у) будет отношением эквивалентности, если ни один из студентов множества D не является одновременно слушателем нескольких вузов. В этом случае классы эквивалентности будут составлять студенты одного вуза.
102 Гл. 1. Введение в математическую логику Отношение частичного порядка Бинарное отношение Р(хуу)у где хуу G D, называется отношением частичного порядка, если для него выполняется рефлексивность, антисимметричность и транзитивность. Для отношения антисимметричности характерно то, что не все переменные хуу должны быть охвачены выполнением отношения Р(хуу). Антисимметричность не допускает лишь одновременного выполнения отношений Р(хуу) и Р(уух). Предикат отношения частичного порядка — это конъюнкция трех отношений: VzVyV* Р(х, х) ЬР(х,у)ЛР(у,х)э (х = у) kP(x,y)AP(y,z)DP(x,z). Множество D, на котором определено такое отношение Р(хуу)у называется частично упорядоченным. Приведем пример этого отношения. Пусть элементами множества D являются подмножества из элементов множества {1,2,3}. Тогда D = {0 ,{1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3},}. Определим Р(х,у) = «х Э у» — отношение включения множеств. Данное отношение является отношением частичного порядка. Отношение полного порядка, линейный порядок Бинарное отношение Р(хуу)у где хуу G Dy называется отношением полного порядка, если для него выполняется рефлексивность, антисимметричность, транзитивность и трихотомия. Отношение полного порядка — это отношение частичного порядка, для которого выполняется трихотомия. Трихотомия предполагает обязательное выполнение отношения Р(хуу) или Р(уух) для каждой пары элементов хуу G D. Предикат линейного порядка — это конъюнкция четырех отношений: VxVyVz Р(х,х) kP(x,y)AP(y,x)D(x = y) k P(x,y)AP(y,z)D P(x,z) к Р(х, у) Л ^Р(у, х) V -.Р(ж, у) Л Р(у, х) V Р(х, у) Л Р(у, х). Множество Dy на котором определено такое отношение Р(хуу)у называется линейно упорядоченным. Примером такого отношения может служить сравнение чисел с равенством: Р(хуу) = «х ^ у». Изоморфизм частично упорядоченных множеств Определение. Пусть Р(хуу) и Q(xyy) — отношения частичного порядка, определенные на множествах, соответственно, Dp и Dq. Такие множества называются частично
§ 1.6. Исчисление предикатов 103 упорядоченными. Изоморфизмом частично упорядоченных множеств Dp и Dq называется взаимно однозначное соответствие <р : Dp —> Dq, сохраняющее отношение частичного порядка: Vz,у G DpP(xyy) D Q((p(x),<p(y))y и обратно. Очевидно, что в том случае, когда природа элементов не играет роли, изоморфные множества можно считать тождественными. Теорема 1.6.2. Всякое частично упорядоченное множество D изоморфно некоторой системе подмножеств M(D) множества Dy частично упорядоченной по включению (С). Доказательство. По условию имеем два отношения частичного порядка Р(ауЬ)у где ауЪ G Dy и Q(Ay В)у где АУВ G G M(D)y и Q(Ay В) = «Л С В» — отношение включения. Множество AtM(D) определяется как А = {xtD \P(xya) A atD}. Говорят, что a G D соответствует A G M(D)y и обратно. Определим соответствие <р : D —► M(D)y где <р(а) = А и a G G D соответствует A G M(D). Покажем, что это — изоморфное отображение. Докажем, что это — взаимно однозначное соответствие <р. По построению системы подмножеств M(D) для каждого A G M(D) существует прообраз a G D. Таким образом, соответствие <р является отображением «на». Покажем, что для произвольных а^Ъ G D соответствующие им Ау В G M(D) не совпадают, т.е. А ^ В. Предположим, что А = Ву будем иметь а € А вследствие рефлексивности отношения Р(ауа)у где A — {x^D \P{xya) A aeD}. Так как А = Ву то и a G В. В свою очередь В = {х tD \P(xyb) A btD}y a значит, верно Р(ауЪ). Подобным образом можно установить, что верно и Р(Ьуа). Таким образом, имеем Р(ауЬ) и Р(Ъуа). В силу антисимметричности отношения Р(хуу) можем заключить, что а = Ъ. Это противоречит условию а ^ Ъ и доказывает, что соответствие <р является взаимно однозначным. Докажем сохранение отображением <р отношения частичного порядка. Пусть выполняется Р(а, Ь). Тогда для каждого х G Dy для которого верно Р(хуа)у верным будет и Р(хуЬ) вследствие транзитивности отношения Р(хуу). Имеем А = {х€ eD\P(xya) A aeD} и В = {х G D \Р(х,Ъ) А Ъ G D]. Отсюда ЛСВ, т.е. Q(Ay В) = Q((p(a)<p(b)). Итак, из Р(ауЬ) следует сохранение операций Q(<p(a)<p(b)). И обратно. Пусть Q(Ay В), т.е. АС В. Из рефлексивности Р(ауа) имеем a G Ау а значит, и a G В. А так как В = {х tD \P(xyb) A btD}y то заключаем, что выполняется и Р(ауЬ). Сохранение отношения частичного порядка доказано и доказана теорема. D
Глава 2 КОМБИНАТОРНЫЕ СХЕМЫ В этой главе будет сделан обзор комбинаторных формул, наиболее важных для вычислительных задач. Мы не ставим себе целью сделать этот обзор всеобъемлющим, а хотим сосредоточить внимание читателя на таких формулах, которые он мог бы недооценить или даже совсем не заметить. Заинтересованному читателю рекомендуется обратиться к специальной литературе. Введем следующие обозначения. Множества будем обозначать заглавными буквами. Множества состоят из элементов, которые будем обозначать малыми буквами. Так, запись а £ А означает, что элемент а принадлежит множеству А. Такие множества будем изображать перечислением элементов, заключая их в фигурные скобки. Например, {а, Ь, х, у}. Количество элементов в множестве называется мощностью и записывается как \А\. Пусть имеются два множества, А и В. Рассмотрим все пары элементов при условии, что первый элемент берется из множества А, а второй — из множества В. Полученное таким образом множество называется прямым произведением Ах В множеств А и В. Напомним некоторые операции над множествами, которыми время от времени будем пользоваться: Ах В = {(а,Ь) | а € А, Ь € В} — прямое произведение множеств; All В = \х I х € АУ х € В\ — объединение множеств; АпВ = [х \х£АЛх£В} — пересечение множеств; А\ В = {х | х £ А Л х ф В} — разность множеств; U — универсальное множество; 0 — пустое множество; A = U\A = {х | х £ А} — дополнение множества. § 2.1. Правило суммы Пусть А и В — конечные множества такие, что А Г) В = 0, |Л| = т и \В\ = п. Тогда \А U В\ = т + п. Интерпретация. Если элемент а £ А можно выбрать т способами, а элемент Ъ е В — п способами, то выбор элемента х € A U В можно осуществить т + п способами. Пусть Х\,Х2,... ,Xk — попарно непересекающиеся множества,
§2.3. Размещения с повторениями 105 Х{ П Xj = 0, где г 7^ j. Тогда, очевидно, выполняется равенство к к \[jXi\ = j:\Xil i=\ i=\ § 2.2. Правило прямого произведения Пусть А и В — конечные множества, |Л| = га и \В\ = пу тогда \А х В\ =тп. Интерпретация. Если элемент а Е А можно выбрать га способами и если после каждого такого выбора элемент Ъ Е В можно выбрать п способами, то выбор пары (ayb) e Ах В в указанном порядке можно осуществить \А х В\ = т • п способами. В этом случае говорят, что выбор элементов множества А не зависит от способа выбора элементов множества В. Пусть теперь Х\уХ2у ... ,Xk — произвольные множества, \Х{\ = щу i= l,fc. Тогда \Х\ хХ2 х ... х Хк\ = \{(xi,x2,...,xk)\xi eXiyi = T7k}\ = = щ • п2 • ... • щ. Задача. Найти число маршрутов из пункта М в пункт N через пункт К. Из М в К ведут 5 дорог, из К в TV — 3 дороги. Решение. Введем два множества: S = {s\, s2, 53, 54, 55} — дороги из Л! в К, Г = {*ь*2»*з} — Дороги из К в TV. Теперь дорогу из М в N можно представить парой (si,tj), где г = 1,5; j = 1,3. Значит, S хТ — это множество всех дорог из М в JV, количество которых равно \S х Т\ = 5 ■ 3 = 15. § 2.3. Размещения с повторениями Задача формулируется следующим образом. Имеются предметы п различных видов: а\уа2у... ,ап. Из них составляют всевозможные расстановки длины к. Например, а\а2а^а^а^а^а2а\ — расстановка длины 8. Такие расстановки называются размещениями с повторениями из п по к (элементы одного вида могут повторяться). Найдем общее число расстановок, среди которых две расстановки считаются различными, если они отличаются друг от друга или видом входящих в них предметов, или порядком этих предметов. При составлении указанных расстановок длины к на каждое место можно поставить предмет любого вида. Рассмотрим множества Х\уХ2у... уХк такие, что Х\ = Х2 = ... = Xk = {а\уа2у... уап}. Тогда все размещения с по- тю-
106 Гл. 2. Комбинаторные схемы вторениями составят множество Х\ х Х2 х ... х Х&. По правилу прямого произведения получаем, что общее число размещений с повторениями из п по к равно \Х\ х Х2 х ... х Х^\ = пк. Задача. Найти количество всех пятизначных чисел. Решение. Введем пять множеств: Л1 = {1,2,... ,9}, A<i = = Л3 = Л4 = Л5 = {0, 1,2,... ,9}. Тогда все пятизначные числа составят прямое произведение указанных множеств А\ х А2 x х Лз х А/[ х А^. Согласно правилу прямого произведения, количество элементов в множестве А\ х А2 x A$ x A4 x А$ равно 9 10 10 10 - 10 = 90000. § 2.4. Размещения без повторений Имеются п различных предметов: ai,a2,... ,ап. Сколько из них можно составить расстановок длины /с? Две расстановки считаются различными, если они отличаются видом входящих в них элементов или порядком их в расстановке. Такие расстановки называются размещениями без повторений, а их число обозначают Л^. При составлении данных расстановок на первое место можно поставить любой из имеющихся п предметов. На второе место теперь можно поставить только любой из п — 1 оставшихся. И, наконец, на к-е место — любой из п — к + 1 оставшихся предметов. По правилу прямого произведения получаем, что общее число размещений без повторений из п по к равно Л^ = п • (п — 1) • ... • (п — к + 1) = п\/(п — к)\. Напомним, что п\ = п • (п — 1) •... • 1 и 0! = 1. Задача. В хоккейном турнире участвуют 17 команд. Разыгрываются золотые, серебряные и бронзовые медали. Сколькими способами могут быть распределены медали? Решение. 17 команд претендуют на 3 места. Тогда тройку призеров можно выбрать способами А\7 = 17 • 16 ■ 15 = 4080. § 2.5. Перестановки При составлении размещений без повторений из п по к мы получали расстановки, отличающиеся друг от друга либо составом, либо порядком элементов. Но если брать расстановки, которые включают все п элементов, то они могут отличаться друг от друга лишь порядком входящих в них элементов. Такие расстановки называются перестановками из п элементов, а их число обозначается Рп. Следовательно, число перестановок
§2.6. Сочетания 107 равно Рп = Л™ = п\. Перестановки 7г = (7Г\, 7Г2,..., 7гп) элементов 1, 2,..., п записывают и в матричной форме 7г = ( ^ ^ "' ™ ), где верхняя строка — это порядковые номера 1,2,..., п позиций элементов в перестановке; нижняя строка — тот же набор чисел 1,2, ...,тг, взятых в каком-либо порядке; 7Tj — номер элемента на j-u месте перестановки. Порядок столбцов в перестановках, записанных в матричной форме, не является существенным, так как в этом случае номер позиции каждого элемента в перестановке указывается явно в нижней строке. Например, перестановка (3,2,4, 1) из четырех элементов может быть записана как 1234\ /3142\ /2143\ __ 3241/ ^4312/ ^2314^1 И Т* А* Задача. Сколькими способами можно расположить на шахматной доске 8 ладей, чтобы они «не били» друг друга? Решение. Условие «не могли бить» означает, что на каждой горизонтали и вертикали может стоять лишь одна ладья. Ввиду этого, каждому расположению ладей на доске соответствует перестановка 7г =( '" ). Верхняя строка перестановки — это номера горизонталей, нижняя — вертикалей, пересечение которых определяет положение ладей на доске. Следовательно, число расстановок равно числу перестановок Pg =8!. § 2.6. Сочетания В тех случаях, когда нас не интересует порядок элементов в расстановке, а интересует лишь ее состав, говорят о сочетаниях. Сочетаниями из п различных элементов по к называют все возможные расстановки длины fc, образованные из этих элементов и отличающиеся друг от друга составом, но не порядком элементов. Общее число сочетаний обозначают через С^ или (£). Определим это число. Составим все сочетания из п по к. Затем переставим в каждом сочетании элементы всеми возможными способами. Теперь мы получили расстановки, отличающиеся либо составом, либо порядком, т.е. это все размещения без повторений из п по к. Их число равно Л^. Учитывая, что каждое сочетание дает к\ размещений, по правилу произведения можно записать С* х к\ = Л^ . Тогда С* = — —'-^ - или к. г*к _ п- и г*к _ г*п—к п Щп - к)\ п п -
108 Гл. 2. Комбинаторные схемы Задача. Сколько различных прямоугольников можно вырезать из клеток доски, размер которой тх п? Решение. Прямоугольник однозначно определяется положением его сторон. Горизонтальные стороны могут занимать любое из га + 1 положения. Тогда число способов их выбора равно С^+1. Вертикальные стороны можно выбрать С£+1 способами. По правилу прямого произведения заключаем, что количество прямоугольников равно С2Ш+Х хС*+1. § 2.7. Сочетания с повторениями Имеются предметы п различных видов. Число элементов каждого вида неограниченно. Сколько существует расстановок длины fc, если не принимать во внимание порядок элементов? Такие расстановки называют сочетаниями с повторениями, количество и обозначение которых следующее: Сп = С™+к_{ = = Cn+fc-i • Выведем данную формулу. Пусть а, Ь, с,..., d — это исходные различные типы элементов, количество которых п. Рассмотрим произвольное сочетание с повторениями cbbcaccda... ddaccbbb из данных типов элементов. Так как порядок элементов в сочетаниях не учитывается, то расстановку можно записать и так: aa...a\bb...b\cc...c\...\dd...d, где элементы каждого из типов упорядочены и завершаются вертикальной чертой, за исключением последней серии элементов. Длина такой расстановки с учетом вертикальных линий составляет k + (п — I) = п + k — I, где к — количество элементов в расстановке; п - 1 — число вертикальных линий. Очевидно, что любую такую расстановку можно задать выбором п — 1 места из п + к — 1 мест для положений вертикальных линий. Это можно сделать C^~^_j способами. Промежуточные места между линиями заполняются соответствующими типами элементов. Задача. Трое ребят собрали в саду 63 яблока. Сколькими способами они могут их разделить между собой? Решение. Поставим в соответствие каждому делению яблок между ребятами сочетание с повторениями следующим способом. Типами элементов в нашем случае будут ребята. Таким образом, имеем три типа элементов а, Ь, с (п = 3), из которых 1 2 m 2 п
§2.8. Перестановки с повторениями, мультимножества 109 предстоит составить все различные расстановки длины к = 63. Наличие в расстановке какого-либо из элементов а, Ь, с отвечает принадлежности данного яблока соответствующему мальчику. Порядок элементов в такой расстановке не играет роли. При делении яблок между ребятами не важно, какое из них попадет тому или иному мальчику. Тогда число способов разделить яблоки между ребятами равно С3 = С|~^31 = 2080. Задача. Найти количество целочисленных решений системы х\ +Х2 + ... + хп = ку к ^ 0, xi ^ 0, % = 1,2,... ,гг; п ^ 1. Решение. Рассмотрим следующую интерпретацию решения уравнения. Каждое значение х\ — 1; + \% + •. • + \% представим как сумму единиц, количество которых ж^ Индекс у 1^ отмечает ее принадлежность к разложению числа Х{. Таким образом, мы ввели п типов различных элементов {li, I2,..., In}, значение каждого из них равно единице. Теперь любое решение исходного уравнения можно представить как сумму, составленную из к произвольных единиц множества {1ь Ь,..., In}- Суммируя подобные единицы U с одинаковыми индексами, можно составить соответствующие слагаемые х% решения исходного уравнения. Данное соответствие является взаимно однозначным, откуда и следует, что число решений системы равно числу сочетаний с повторениями: 73кп = С^-Хк_х = С*+Л_г § 2.8. Перестановки с повторениями, мультимножества Задача формулируется следующим образом. Имеются предметы к различных видов. Сколько существует перестановок из п\ элементов первого типа, n<i элементов второго типа и т.д., пь элементов fc-ro типа? Рассмотрим, например, мультимножество М = {ауау а,Ь, Ь, с, dy dy dy d}y в котором содержатся 3 элемента а, 2 элемента Ь, 1 элемент с и 4 элемента d. Мультимножество — это то же самое, что и множество, но в нем могут содержаться одинаковые элементы. Повторения элементов можно указать и другим способом: М — {За, 26, lc, 4d}. Таким образом, искомые перестановки с повторениями — это перестановки элементов мультимножества. Если бы мы рассматривали все элементы множества М как различные, обозначив их М = {a\ya2ya^yb\yb2yc\yd\yd2yd^yd4}y то получили бы 10! перестановок, но после отбрасывания индексов многие из них
ПО Гл. 2. Комбинаторные схемы оказались бы одинаковыми. Фактически каждая перестановка множества М встретилась бы ровно 3! 2! 1! 4! раз, поскольку в любой перестановке индексы при буквах а можно расставить 3! способами, при Ъ — 2! способами, при с — одним способом, а при d — соответственно 4! способами. Поэтому число перестановок множества М равно 10!/(3!2! 1!4!). В применении к общему случаю те же рассуждения показывают, что число перестановок любого мультимножества (перестановки с повторениями) равно полиномиальному коэффициенту Р(п\уп2у...упк) = ——j г, ni!n2! • ... ■ nfc! где п = п\ + щ + ... + rik общее число элементов. Перестановки с повторениями имеют тесную связь с сочетаниями. Определим количество этих перестановок следующим образом. Из всех п мест перестановки п\ место занимают элементы первого типа. Выбор мест для них можно сделать С™1 способами. Из оставшихся п — щ мест элементы второго типа занимают гг2 места, которые можно выбрать С7^_щ способами. Те же рассуждения показывают, что элементы fc-ro типа можно расположить в перестановке C^in n ш_п способами. Согласно правилу прямого произведения, число перестановок с повторениями равно Р{щ,п2,...,пк) = С^С^_щ ■...■C£ni_nj_..._nfc_1 = _ П П\\П2\ • ... 'Пк\' Задача. Сколько существует различных перестановок из букв слова «Уссури»? Решение. Р(2у, 1и, 1р,2с) = ^^ = 180. § 2.9. Упорядоченные разбиения множества Подсчитаем число разбиений конечного множества S, где \S\ = пу на к различных подмножеств S = S\ U S2 U ... U Sj^ попарно не пересекающихся, \S{\ = гцу г = 1,2, ...,fc, и щ + + щ + ... + Пк = п. Последовательность различных S\, S2, • • •»&к рассматривается как упорядоченная последовательность подмножеств. При формировании упорядоченной Sj,^,... ,#& последовательности на первое место подмножество S\ можно выбрать С^1 способами, на второе место подмножество S2 можно выбрать
§ 2.9. Упорядоченные разбиения множества 111 из оставшихся п — щ элементов С^1П1 способами и т.д., на последнее место множество S^ можно выбрать из оставшихся п — щ — тг2 — ... — rik-\ элементов СТ^_щ_п<1_..._nfc_, способами. По правилу прямого произведения получаем, что общее число упорядоченных разбиений множества S на к подмножеств равно (-1Щ ГУП2 Г<Пк _ ™ ^п ^п-п\ ' '•• ' ^п-тц-п2-...-пк-1 nin2\-...-nkV что совпадает с числом P(ni,n2, •• • ,пк) перестановок с повторениями. Замечание 1. Установим взаимно однозначное соответствие между упорядоченными разбиениями множества и перестановками с повторениями. Каждой перестановке с повторениями можно поставить в соответствие упорядоченное разбиение множества номеров элементов S = {1,2,..., п} в перестановке на подмножества S\, S2,..., S&, где Si — множество номеров элементов г-го типа в перестановке. Очевидно, что данное соответствие между перестановками с повторениями и разбиениями является взаимно однозначным. Замечание 2. Упорядоченные разбиения множества S на попарно не пересекающиеся подмножества S = S\ U S2 U ... U U Sfc, допускают интерпретацию в терминах «корзин» и «шаров». Обозначим элементы исходного множества \S\ = n «шарами». Под разбиением исходного множества, теперь множества шаров, на различные Si упорядоченные подмножества будем понимать разложение шаров по к различным корзинам (упорядоченные S\, S2,..., S^ подмножества): щ шаров положить в корзину S\, щ шаров положить в корзину S2 и т.д., щ шаров положить в корзину 5^, где ni+n2 + ... ...+Щ —п. Как установлено, число таких разложений равно Q'Cnin, • ••• • C^n|_n2_..._nfc_, = п1{Ы.щ\ •... • -пк\). Задача. В студенческой группе, состоящей из 25 человек, при выборе старосты за выдвинутую кандидатуру проголосовали 19 человек, против — 3, воздержались — 3. Сколькими способами может быть проведено такое голосование? Решение. Имеем три различные корзины: «за», «против», «воздержались», в которые необходимо разложить 25 шаров, соответственно 19 — в первую, 3 — во вторую, 3 — в третью. Количество таких разложений определяется выражением С'59С63С33 = 25!/(19!3!3!).
112 Гл. 2. Комбинаторные схемы § 2.10. Неупорядоченные разбиения множества Подсчитаем, сколькими способами можно разбить множество 5, где \S\ = n, на подмножества, среди которых для каждого % = 1,2,..., п имеется га; ^ 0 подмножеств с % элементами. Тогда верно, что Ya=\ i -mi =п>- Данное разбиение позволяет представить исходное множество следующим образом: ГП\ 7712 ™>п П 771; s = U^uU^u"-uU^ = UU^' j=l j=l j=l i=l j=l где Sij попарно не пересекаются и |5j, | = \S{2\ — ... — \Sim. \ — г для каждого i = 1,2,...,п. Порядок подмножеств в разбиении не является существенным. Так, например, разбиения множества S = {1,2,3,4,5} вида {1,3}, {4}, {2,5}; {1,3}, {2,5}, {4}; {2,5}, {1,3}, {4}; {4}, {1,3}, {2,5}; считаются одинаковыми. Обозначим число неупорядоченных разбиений множества S через N(7711,7712,... ,гпп). Рассмотрим схему формирования упорядоченных разбиений для представления п = 1 • т\ + 2 • т2 + + ... +п-тп\ °nVlV2 ' ••• '°n-l-mi0n-l-mi-l-2°n-l-mi-2-2 x ••• x 4 v ^ v ' 7711 77l2 xCn Cn • = 71—1-7711—2-7712 —...—(tI—l)-77ln_l 71—1-7711—2-7712—...—(т1—1 )-77ln_l—1-71 П! (l!)m,(2!)m2-...-(n!)m-* Воспользуемся интерпретацией формирования упорядоченных разбиений как разложения п различных шаров по различным 1 • т\ + 2 • гп2 + ... + п • тп корзинам так, что в каждую из mi корзину кладут % шаров. Теперь откажемся от упорядоченности подмножеств в разбиении. Пусть все корзины имеют различное число шаров, такие корзины можно рассматривать как различные
§ 2.10. Неупорядоченные разбиения множества ИЗ (они отличаются числом шаров). В этом случае упорядоченные и неупорядоченные разложения шаров совпадают. Пусть теперь в разложении существуют корзины с одинаковым количеством шаров. При упорядоченном разложении такие корзины рассматриваются как различные. Однако при неупорядоченном разложении обмен шарами таких корзин можно рассматривать как соответствующую перестановку указанных корзин, что не приводит к новым разложениям. Если количество корзин с одинаковым числом шаров равно ггц, то неупорядоченных разложений будет в mj меньше, чем упорядоченных. Тогда общее число неупорядоченных разбиений будет в т$т2\ • ... • тп\ раз меньше, чем упорядоченных. Следовательно, ^(т1'т2'---'^) = (1!ГЧ2!Г2-...-(п!Г-т1!т2!.....тп!' Заметим еще раз, что если выполнено упорядоченное разбиение числа п на подмножества различной длины (мощности), то они совпадают с неупорядоченными разбиениями. В этом случае все mi e {0,1}. Задача. Сколькими способами из группы в 17 человек можно сформировать 6 коалиций по 2 человека и 1 коалицию из 5 человек? Решение. Требуется разбить множество из 17 человек на непересекающиеся и неупорядоченные группы людей. Отсюда искомое число равно N(0\,62,03,04,15»Об,О7,...,О17) = = 17!/((2!)6(5!)16!1!). Задача. Сколькими способами можно разделить колоду из 36 карт пополам так, чтобы в каждой пачке было по два туза? Решение. 4 туза можно разбить на 4!/((2!)22!) = 3 различные коалиции по две карты в каждой (неупорядоченные разбиения), т.е. только 3 способами можно разделить тузы пополам. Далее, каждая половина любого из этих трех разбиений тузов выполняет роль различных двух «корзин», куда необходимо разложить пополам оставшиеся 32 карты. Разложение 32 оставшихся карт уже будет упорядоченным, так как «корзины» различные, число разложений равно 32!/( 16! 16!). Согласно правилу прямого произведения, общее число вариантов разделить колоду пополам равно 4!/((2!)22!)-32!/(16! 16!).
114 Гл. 2. Комбинаторные схемы § 2.11. Полиномиальная формула Формула («1 + х2 + ... + хк)п = - Е -—£ -.х?х?-...-х? (2.1) называется полиномиальной, где суммирование выполняется по всем решениям уравнения щ + п2 + ... + щ = п в целых неотрицательных числах, щ ^ О, %— 1,2, . ..,fc. Для доказательства выполним умножение (х\ + х2 + ... + хк) • • • • • (х\ + ж2 + .. • + xk) = s v ^ п = (х{ + х2 + ...+хк)п. (2.2) Чтобы привести подобные в полученном выражении, необходимо подсчитать количество слагаемых вида х\хх^ ■... • ж£* каждого разбиения щ + щ + ... + пк = п. Для получения же слагаемого х^х7^ ■ ... ■ Ж/J* необходимо выбрать #i в качестве множителя в п\ скобках при раскрытии выражения (х\ + х2 + ... + хк)п. Это можно сделать С™1 способами. Из оставшихся гг — щ не раскрытых скобок необходимо выбрать х2 в качестве множителя в п2 скобках. Это можно 2 сделать С™_щ способами и т.д. Тогда количество слагаемых х^х^ • ... • х^к при раскрытии выражения (2.2) будет равно числу C^'C^W|-...-C^JLni^-...^fc.l=wi!w2!W пк] упорядоченных разбиений. § 2.12. Бином Ньютона Частный вид полиномиальной формулы (2.2): п (а + Ь)п = ^^акЬп-к (2.3) k=Q называется биномом Ньютона. Рассмотрим несколько задач, в основе решения которых лежит бином Ньютона. Задача. Доказать тождество Y%=o ^п — 2П-
§2.13. Инверсии 115 Решение. Воспользуемся формулой (2.3) бинома Ньютона, в которой положим а = 1 и 6=1, тогда (1 + 1)п = — \^п Г*к\ к\п—к Задача. Доказать тождество E/b=o^n(m — l)n_/c = тп. Решение. Воспользуемся формулой (2.3), где положим а = = 1 и 6 = т— 1. Задача. Доказать, что £fc?J <%к = E^f1 С**"1 = 2""1. Решение. Воспользуемся формулой (2.3), в которой положим а = -1 и 6 = 1, тогда (-1 + 1)п = ££=<>(-1)*С* = 0. Группируя положительные и отрицательные члены равенства, установим Е^^^ЕИ21^-1- Так как £^ С** + + ЕК1 Ст^"1 = ELo С'п = 2П> то каждая из сумм - это половина числа 2П. Задача. Доказать тождество Е/ь=о кС% =п 2n_1. Решение. Воспользуемся формулой (2.3), из которой, полагая а = 1 и 6 = ж, получим (1 + ж)п = = Е^=о^пж/с- Дифференцирование последнего равенства дает п(\ + х)п~х = Y^k=o^^nxk~l • Пусть х = 1, тогда гг(1 + l)n_1 = Е/ь=о^ Сп^-1' что Доказывает искомое тождество. § 2.13. Инверсии Перестановки особенно важны при изучении алгоритмов сортировки, так как они служат для представления неупорядоченных исходных данных. Чтобы исследовать эффективность различных методов сортировки, нужно уметь подсчитывать число перестановок, которые вынуждают повторять некоторый шаг алгоритма определенное число раз. Пусть (ai,a2,... ,an) — перестановка элементов множества {1,2,... ,тг}. Если г < j, а ai > a,j, то пара (a{,aj) называется инверсией перестановки. Например, перестановка (3,1,4,2) имеет три инверсии (3,1), (3,2), (4,2). Каждая инверсия — это пара элементов, «нарушающих порядок»; следовательно, единственная перестановка, не содержащая инверсий, — это отсортированная перестановка (1,2,...,гг). Таблицей инверсий перестановки (ai,a2,... ,an) называется последовательность (с?1,с?2,... ,cfn), Где 4? ~~ число элементов,
116 Гл. 2. Комбинаторные схемы больших j и расположенных левее j. Другими словами, dj — число инверсий, у которых второй элемент равен j. Например, таблица инверсий перестановки (5,9,1,8,2,6,4,7,3) будет (2,3,6,4,0,2,2,1,0), поскольку 5 и 9 расположены левее 1; 5, 9, 8 — левее 2 и т. д. Всего 20 инверсий. По определению 0 <di <п- 1, 0^d2 ^гг-2, ...,0^dn_! ^ 1, dn = 0. М. Холл установил, что таблица инверсий единственным образом определяет соответствующую перестановку. Из любой таблицы инверсий (d\,d2,... ,dn) можно однозначно восстановить перестановку, которая порождает данную таблицу, путем последовательного определения относительного расположения элементов тг, п — 1,..., 1 (в этом порядке). Например, перестановку, соответствующую таблице инверсий (2,3,6,4,0,2,2,1,0) = (cfhcfe,... ,dg), можно построить следующим образом: выпишем число 9; так как cfg = 1, то 8 стоит правее 9. Поскольку d-j = 2, то 7 стоит правее 8 и 9. Так как d§ = 2, то 6 стоит правее двух уже выписанных чисел; таким образом, получили расположение (9,8,6,7). Припишем теперь 5 слева, потому что d$ — 0; помещаем 4 вслед за четырьмя из уже записанных чисел, 3 — после шести выписанных чисел (т. е. в правый конец) и получаем (5,9,8,6,4,7,3). Вставив аналогичным образом 2 и 1, придем к перестановке (5,9,1,8,2,6,4, 7,3). Такое соответствие между перестановками и таблицами инверсий важно, потому как часто можно заменить задачу, сформулированную в терминах перестановок, эквивалентной ей задачей, сформулированной в терминах таблиц инверсий. Рассмотрим, например, еще раз вопрос: сколько существует перестановок множества {1,2,..., /г}? Ответ должен быть равен числу всевозможных таблиц инверсий, а их легко пересчитать, так как d\ можно выбрать п различными способами, d2 можно не зависимо от d\ выбрать п — 1 способами и т.д., dn — одним способом. Тогда различных таблиц инверсий п(п — 1) •... • 1 = п\. Таблицы инверсий пересчитать легко, потому что все dj независимые, в то время как элементы aj перестановки должны все быть различными. § 2.14. Обратные перестановки Не следует путать «инверсии» перестановок с обратными перестановками. Пусть (ai,a2,... ,an) — различные шары, индексы которых свяжем с номерами шаров. Тогда исходное расположение шаров однозначно определяется тождественной перестановкой е = (1,2, . .. ,Тг). ПуСТЬ 7Г = (7Г1,7Г2, ... ,7ГП) — ПрОИЗ-
§ 2.14. Обратные перестановки 117 вольная перестановка номеров 1,2, ...,гг, где itk — номер шара на fc-м месте. Такая перестановка отвечает расположению шаров (акрила, •• • >аО- Вспомним (см. п.2.5), что перестановка л-= ( ^ " '™ J записана в матричном виде. Данная форма записи позволяет рассматривать перестановку в качестве оператора, который заменяет старые номера шаров (верхняя строка матрицы) на новые номера (нижняя строка матрицы). Тогда результат двух последовательных изменений 7г = (tti , 7г2,... ,тгп) и а = (сг1,сг2,... ,<гп) исходной последовательности 1,2, ...,тг номеров шаров можно рассматривать как операцию умноже- ния перестановок Р = ™ = (l^X) ' (^Х'.'Х)- Упорядо- чим столбцы перестановки а в соответствии с перестановкой 7Г = (7Г1,7Г2,...,7ГП), Т.е. (1 2 "П \ = (^ *2 ~'*п Y ТО- 1 2 ... П \ ( 7Ti 7Г2 .. .7ГЛ гда можно записать, что о = па ■ . , . г \п\ 7Г2 .. .7Гпу у ov, сг^ ... а, (\ 2 ...п \ /12 ...п \ ^ - = ( ) = ( . Этой перестановке отвечает рас- положение шаров {аРх,аР2,... ,аРпу где значение />*. = 0** — это номер шара на fc-м месте. Обратной к перестановке 7г = (^ ^ "'™ j называется перестановка 7г-1 = ( *■ 22"'^п )= ( -1-1 '"^-1 )' которая получается, если в исходной перестановке поменять местами строки, а затем упорядочить столбцы в возрастающем порядке по верхним элементам, т.е. 7г-1 = (xj-1,^1,... ,7т"1). Ясно, что последовательное изменение порядка шаров согласно перестановкам 7Г = (7Г1,7Г2,...,7ГП) И обраТНОЙ 7Г_1 = (7TJ"1, Х^"1, .. . , 7Г"1) ПрИВО- дит к исходному их расположению, т. е. к тождественной пере- становке е=(Ц;;- )• (iT/.^) = (\t\l) ■ Например, обратной к перестановке (5,9,1,8,2,6,4, 7,3) будет перестановка (3 5 9 7 1 6 8 4 2) так как f591826473\ /123456789\ ^, о,^, /, 1,0,8,4,4/, так как ^ 12345 6789 J ~ ^359716842^1 ■ Сортированную последовательность элементов перестановки 7г = (7Г1,7г2,... ,7гп) можно получить, заполнив в цикле вектор ei,e2,... ,еп: for k = 1 to тг do еЖк = 7Г^ или е[к^] = 7Г&. Ясно, что результирующие значения ei,e2,... ,еп будут соответственно 1,2,...,гг. В цикле каждый элемент х^ вста-
118 Гл. 2. Комбинаторные схемы ет на свое упорядоченное место е^к (см. п. 6.7). Подобным образом выполним заполнение элементов перестановки 7г-1 = = (xj-1,^1,... ,7т"1), однако в упорядоченное место 7г~^ элемента 7Tfc будем размещать его номер в исходной перестановке 7Г = (7Г1,7Г2, .. . ,7ГП): for к = 1 to n do х^1 = к или х-1^] = fc. Результирующий вектор 7г-1 = (xj"1,^1,... ,7т"1) будет обратной перестановкой к 7г = (7Ti, 7Г2,..., тгп). X. А. Роте впервые установил связь между обратными перестановками и инверсиями: обратная перестановка содержит ровно столько же инверсий, сколько исходная.
Глава 3 ПРЕДСТАВЛЕНИЕ АБСТРАКТНЫХ ОБЪЕКТОВ Рассматривая решение задачи с абстрактной точки зрения, как правило, избегают каких бы то ни было предположений относительно того, как мы намерены автоматизировать их решение. В идеале структура вычислительной машины должна соответствовать естественной структуре задачи, однако это требование часто не выполняется, хотя приспособляемость современной вычислительной техники такова, что она позволяет обойти эти ограничения без труда. Языки высокого уровня при условии, что они должным образом сконструированы, предоставляют в распоряжение программиста, реализующего алгоритм, более удобную «машину», смягчая несоответствие основной машины требованиям алгоритма. Будем считать, что читатель знаком с элементарными понятиями математики и основными типами данных: целыми и вещественными числами, массивами, строками и т. д. §3.1. Представление последовательностей Любой заданный класс абстрактных объектов может иметь несколько возможных представлений, и выбор наилучшего из них решающим образом зависит от того, каким образом объект будет использован, а также от типа производимых над ним операций. 3.1.1. Смежное представление В алгоритмах на дискретных структурах часто приходится встречаться с представлением конечных последовательностей и операциями с ними. С вычислительной точки зрения простейшим представлением конечной последовательности s\, s2, • • •, sn является точный список ее членов, расположенных по порядку в смежных ячейках памяти. В языках высокого уровня — это одномерные, двухмерные и т.д. массивы данных. Очевидные преимущества последовательного представления имеют и некоторые значительные недостатки. Смежное представление становится неудобным, если требуется изменить последовательность
120 Гл. 3. Представление абстрактных объектов путем включения новых и исключения имеющихся там элементов. Включение между si и s^+i нового элемента требует сдвига Si+ь 5i+2,... , 5П вправо на одну позицию; аналогично исключение требует сдвига тех же элементов на одну позицию влево, как показано в алгоритме 3.1. Алгоритм 3.1. { z i } п =п+1; for j = п — 1 to г by —1 do s^+i = sy, Si = Z. { i > for j = г to n — 1 do Sj = Sj+\; n = n — 1. В обоих случаях включение или удаление элементов при смежном представлении требует перемещения многих элементов. С точки зрения времени обработки такое перемещение элементов может оказаться дорогостоящим из-за сложности 0(п) операций включения и удаления. 3.1.2. Характеристические векторы Важной разновидностью смежного размещения является случай, когда такому представлению подвергается подпоследовательность 3fcp 5j^,..., 3fcm некоторой основной последовательности 3i,52,... ,зп. В этом случае подпоследовательность можно представить более удобно, используя характеристический вектор — последовательность из нулей и единиц, где г-й разряд равен единице, если s% принадлежит рассматриваемой подпоследовательности. Например, для последовательности (1,2,3,4,5,6,7,8,9) характеристический вектор подпоследовательности чисел, кратных 3, имеет вид (0,0, 1,0,0,1,0,0, 1). Характеристические векторы полезны в том случае, когда формирование нужной подпоследовательности выполняется путем последовательного удаления из основной последовательности элементов, которые не входят в подпоследовательность. Главное неудобство характеристических векторов состоит в том, что они не экономичны.
§ 3.1. Представление последовательностей 121 3.1.3. Связанное размещение Неудобство включения и исключения элементов при смежном представлении происходит из-за того, что порядок следования элементов задается неявно требованием, чтобы смежные элементы последовательности находились в смежных ячейках памяти. В результате многие элементы последовательности во время включения или исключения должны передвигаться. Если требование последовательного размещения элементов опущено, то операции включения и исключения можно выполнить без того, чтобы передвигать элементы. При любом размещении элементов необходимо сохранять информацию о способе их упорядочения. При связанном размещении последовательности 5i,52,... ,5П каждому 5^ ставится в соответствие указатель ^, который указывает на следующую подобную пару элементов -s^_|_i, Z^-i-i по списку. Вводится начальный указатель /о, который указывает на первый элемент последовательности. Последний указатель 1п в списке является пустым или нулевым, признак конца списка. Графическое представление связанного списка можно изобразить следующим образом: /о 51 I U S2 | к 1п=0 Рис. 3.1. Однонаправленный связанный список Здесь каждый элемент связанного списка состоит из двух полей. В поле DATA размещен сам элемент последовательности, а в поле NEXT — указатель на следующий за ним элемент. Связанное представление последовательностей облегчает операции включения и удаления элементов из списка. Например, для исключение второго элемента достаточно переустановить указатели NEXT(l\) = NEXT(l2). Графически это изображается следующим образом: до исключения после исключения 51 | U ~ s\ | 1\ —► f S2 \k - 52 | fe - —► > s3 Из - S3 \h - Рис. 3.2. Исключение элемента из списка Чтобы в последовательность включить новый элемент sr после 5i, необходимо установить указатели: NEXT(lr) = NEXT{1\) и NEXT(l\) = lr, начальное значение указателя 1Г установлено
122 Гл. 3. Представление абстрактных объектов на новый включаемый элемент. Графически включение нового элемента изображается так: до включения s\ | U после включения s\ | 1\ S2 I к Sr Lr Sr It S3 I /з S2 I к S3 I /3 Рис. 3.3. Включение элемента в список С помощью связанных распределений мы добились большей гибкости, но потеряли возможность работать с элементами последовательности как с массивами, когда по номеру г можно непосредственно обратиться к элементу si. В связанном размещении такой возможности не существует, и доступ к элементам последовательности не является прямым и эффективным. Например, при поиске среднего элемента последовательности, даже при известной ее длине, требуется просмотреть по связанному списку половину последовательности. В алгоритмах 3.2 и 3.3 приводятся программы, реализованные на языках Pascal и С, связанного формирования списка элементов последовательности. В программу включены операции работы со списком: печать элементов списка, включение новых элементов в список и удаление элементов из списка. Существуют различные модификации представления последовательностей в виде связанных списков. Следующие два примера позволят, при желании, читателю самостоятельно продолжить получение и других модификаций связанных распределений, отличных от приводимых ниже. Циклическая форма представления позволяет эффективно возвращаться с последнего элемента списка к первому. £ S\ | 1\ S2 | к о Рис. 3.4. Циклический список
§ 3.1. Представление последовательностей 123 Еще большая гибкость достигается, если использовать дважды связанный список, когда каждый элемент последовательности вместо одного имеет два связанных с ним указателя. В таком списке для любого элемента имеется мгновенный прямой доступ к предыдущему и последующему элементам. Следует помнить, что выбор того или иного представления последовательности в значительной степени зависит от типа операций, выполняемых с элементами последовательности. 0 =51 \1\ _s2 \ h ^ Рис. 3.5. Дважды связанный список Алгоритм 3.2. Pascal Program Number_List; { } uses CRT; Type Node Pointer=A Node; Node= RECORD { } s :Integer; {} next :NodePointer; { } END; Const first :NodePointer=NIL; { } { } function InitNode: NodePointer; var newNode :NodePointer; begin New(newNode); { } newNode\s:=Random(99)+l; { } new Node", next :=NIL; InitNode:=newNode; end;
124 Гл. 3. Представление абстрактных объектов { } procedure lncludeNode(newNode: NodePointer); begin newNode\next:=first; first:=newNode; end; { } procedure DeleteNode( k: Integer); var previos,current :NodePointer; i :Integer; begin i:=0; current:=first; while currentoNIL do begin if i=k then begin { } if first =current then first:=current\next else previos".next:=current\next; { } dispose(current); break; end; previos:=current; current:=current\next; end; end; {} procedure PrintNodeList; var p :NodePointer; begin WriteLn; p:=first; while ponil do begin Write(p\s:3/ '); p:=pA.next end; end;
§ 3.1. Представление последовательностей 125 Var{ } i,m,n :Integer; begin { } ClrScr; Randomize; n:=17; { } for i:=l to n do IncludeNode(lnitNode); PrintNodeList; WriteLn; m:=17; { } DeleteNode(m); PrintNodeList; ReadKey; end. { } Алгоритм 3.3. Си #include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct tagNode{ int s; tagNode *next; } Node; typedef Node *NodePointer; Node *first=NULL; NodePointer lnitNode( void ){ NodePointer newNode; newNode=new Node; newNode ->s=random(99)+l; newNode ->next=NULL; return newNode; } void lncludeNode( NodePointer newNode ){
126 Гл. 3. Представление абстрактных объектов newNode ->next=first; first=newNode; } void DeleteNode( int к ){ NodePointer previos,current; int i; i=0; current=first; while( current!=NULL ){ i++; if( i==k ){ if( first==current ) first=current ->next; else previos ->next=current ->next; delete current; break; } previos=current; current=current ->next; } void PrintNodeList( void ){ NodePointer p; p=first; while( p!=NULL ){ printf("%3d ",p ->s); p=p ->next; } } void main( void ){ int i,m,n; clrscr(); randomize(); n=17; for( i=0; i<n; i++ ) lncludeNode( lnitNode() ); PrintNodeList(); printf("\n");
§3.2. Представление деревьев 127 m=17; DeleteNode(m); PrintNodeList(); getchQ; Связанное представление предпочтительнее лишь в том случае, если в значительной степени используются операции включения и исключения элементов. § 3.2. Представление деревьев Конечное корневое дерево Т формально определяется как непустое конечное множество упорядоченных узлов таких, что существует один выделенный узел, называемый корнем дерева, а оставшиеся узлы разбиты нат^О поддеревьев Т\, Гг,..., Тш. Корневое дерево на рис. 3.6 содержит 9 узлов, помеченных буквами от а до г. Узлы с метками е, /, с, д, /ь, г являются листьями, остальные узлы — внутренние. Узел с меткой а — корень. Понятие дерева используется в различных аспектах. Деревья — наиболее важные нелинейные объекты, используемые для представления данных в алгоритмах на дискретных структурах. .©: ,© © *® ©' © © © © Рис. 3.6. Корневое дерево с тремя поддеревьями Важной разновидностью корневых деревьев являются бинарные деревья. Бинарное дерево Т либо пусто, либо состоит из выделенного узла, называемого корнем, и двух бинарных поддеревьев: левого Т\ и правого Т^. Лесом называют упорядоченное множество деревьев. Тогда корневое дерево можно определить как непустое множество узлов, такое, что существует один выделенный узел, называемый корнем дерева, а оставшиеся узлы образуют лес с поддеревьями корня.
128 Гл. 3. Представление абстрактных объектов 3.2.1. Представление деревьев на связанной памяти first е 0 £ ), 30 ^ \ 0 Л* 5J0 0 а. V У N, / с 0 0 0 9 0 0 0 ] h j\-\' 0 0 0 / Г 0 0 0 Рис. 3.7. Регулярная связанная структура представления дерева Почти все машинные представления деревьев основаны на связанных распределениях. Каждый узел состоит из поля данных и некоторых полей для указателей. В следующем примере на рис. 3.7 представления дерева каждый узел имеет по три поля указателей. Произвольное дерево с переменным числом поддеревьев всегда можно представить с помощью односторонних списков с использованием двухкомпонентных звеньев (3.8), в которых в первом поле находится либо указатель, либо данные, а во втором — всегда указатель. first b~\ 1/ / е 0 а I 0 / / 0 с 1 0 d | 9 | 0 h | 0 1 1 0 3 / г 0 0 Рис. 3.8. Универсальная связанная структура представления дерева Применение указателей и связанных списков придает памяти гибкость, необходимую для представления различных структур. Но при этом легко и перестараться; поэтому следует избегать слишком большого количества указателей; сложность программной поддержки таких структур возрастает «экспоненциально», теряется четкость основной структуры, которую пытаются представить в памяти (последний пример представления дерева это наглядно подтверждает).
§3.2. Представление деревьев 129 3.2.2. Представление деревьев на смежной памяти Представление деревьев на смежной памяти (одномерный массив) предполагает неявное присутствие ребер, переход по которым выполняется посредством арифметических операций над индексами элементов массива — смежной памяти. Формирование таких деревьев с помощью адресной арифметики можно осуществлять двумя способами. Идея первого способа применима при любом постоянном количестве ребер, выходящих из вершин (регулярное дерево). Рассмотрим данный способ формирования на примере двоичного (бинарного) дерева. Пусть имеется одномерный массив смежных элементов ai,a2,... ,ап. Неявная структура двоичного дерева определяется как на рис. 3.9. По дереву на рис. 3.9 легко перемещаться в обоих направлениях. Переход вниз на один уровень из вершины ak можно выполнить, удвоив индекс к (индекс левого поддерева) или удвоив и прибавив 1 (индекс правого поддерева). Переход вверх на один уровень из вершины аш можно выполнить, разделив га пополам и отбросив дробную часть. Рассмотренная структура применима к любому дереву с постоянным количеством ребер, выходящих из вершин. СЦ <^5 U6 #7 ак ... <*l?J / \ t Рис. 3.9. Двоичное дерево на смежной памяти с последовательной нумерацией вершин Другой способ, основанный на индексной арифметике, применим только для двоичных деревьев. Пусть для представления дерева используется одномерный массив ai,ai+i,... ,бу. Корнем дерева полагают элемент ат, где индекс элемента корня рассчитывается по формуле т— l(i + j)/2\, т.е. середина массива. Левое поддерево располагается в массиве а^а^+ь... ,am_i, а правое поддерево — в массиве ат+ьат+2> •• • >aj- Корни поддеревьев рассчитываются подобным же образом, как и корень основного дерева. Второй способ формирования двоичных деревьев 5 Иванов Б.Н.
130 Гл. 3. Представление абстрактных объектов на смежной памяти имеет довольно ограниченное применение. Основное его использование — поиск данных в сортированных массивах, таблицах и т. д. В качестве примера использования представления регулярных деревьев на смежной памяти рассмотрим решение следующей задачи. Задача. Написать программу поиска всех замкнутых маршрутов длины п < 15 по ребрам треугольника abc. Длину ребра принять равной 1. Начальная и конечная точка искомых маршрутов — вершина а. Длина маршрута п задается в текстовом файле исходных данных. Результаты расчетов всех маршрутов сохранить в выходном текстовом файле. Каждый маршрут представить как последовательную комбинацию меток а,Ь,с посещаемых вершин треугольника при движении по нему. Каждый маршрут должен включать п + 1 метку, где первой и последней меткой должна быть вершина а. Пример файла исходных данных: 4 Выходной файл для данного примера: abcba 1 ababa 2 acaba 3 abaca 4 acaca 5 acbca 6 В алгоритме 3.4 представлена программа расчета всех искомых маршрутов длины п. Алгоритм делится на две части. В первой части (процедура CreateTreeAbc) выполняется формирование двоичного регулярного дерева на смежной памяти рис. 3.11. Алгоритм 3.4. Pascal Program Tree_Abc; { } uses CRT,DOS; const n_max=$fc00; { } Type Vector=array[l..n_max] of Char; Var f :Text; {} z :Vector; { }
§ 3.2. Представление деревьев 131 Procedure CreateTreeAbc( n:lnteger); {} var k,level,m,ml,m2 :LongInt; begin z[l]:='a';{}a level:=l;{} ml:=l;{ } m2:=l; { } while level <=n do begin for k:=ml to m2 do begin { } m:=2*k; case z[k] of 'a': begin z[m]:='b'; z[m+l]:='c'; end; 'b': begin z[m]:='c'; z[m+l]:='a'; end; 'c': begin z[m]:='a'; z[m+l]:='b'; end; end; end; level:=level+l; ml:=2*ml; m2:=2*m2+l; end; end; Procedure RouteTreeAbc( n:lnteger); {} var i,k,ml,m2,r :LongInt; begin r:=0;{} k:=l; for i:=l to n do k:=2*k; ml:=k; { } m2:=2*k-l; { } for i:=ml to m2 do begin { } k:=i; if z[k]='a' then begin r:=r+l; WriteLn(f); repeat Write(f,z[k]); 5*
132 Гл. 3. Представление абстрактных объектов к:=к div 2; until k=0; Write(f,' \r); end; end; end; Var{ } n [Integer; { } begin { } Assign(f,'treeabc.in'); Reset(f); { } Read(f,n); { } Close(f); Assign(f,'treeabc.out'); Rewrite(f); { } CreateTreeAbc(n); { RouteTreeAbc(n); { } Close(f); end. { } При проходе вниз вершины дерева заполняются метками а, Ь, с соответствующими вершинам треугольника при перемещении по нему. Два ребра, выходящих из каждой вершины, показывают возможные варианты выбора дальнейшего маршрута продвижения по треугольнику. В каждом случае из вершин а, Ь, с можно попасть в любые две другие вершины. Индексы меток дерева прохода на рис. 3.11 показывают соответствующее им место в массиве данных (смежной памяти). /\ /\ /\ /\ G8 &9 &ю СП Ь\2 с13 С\4 а\ъ /\ /\ /\ /\ /\ /\ /\ /\ &16 c17 Ci8 aig С2о а2\ а22 &23 ^4 »25 »26 627 a28 629 ho c31 Рис. 3.11. Двоичное дерево маршрутов по треугольнику на смежной памяти
§ 3.3. Представление множеств 133 Во второй части алгоритма выполняется формирование искомых маршрутов (процедура RouteTreeAbc), основой для построения которых служит дерево прохода на рис. 3.11. Для формирования всех маршрутов теперь достаточно подняться по нему от вершин треугольника с метками а к корню, запоминая пройденные метки. Ясно, что число маршрутов будет равно числу вершин (листьев) на последнем уровне с меткой а. § 3.3. Представление множеств Существуют два основных подхода к представлению множеств в памяти. 1. При первом подходе хранят описание каждого элемента, действительно присутствующего в множестве, как это делается, когда выписываются все элементы множества и заключаются в фигурные скобки. 2. При втором подходе изначально определяются все потенциально возможные элементы множества, а затем для любого подмножества этого универсального множества для каждого возможного члена указывается, принадлежит ли он на самом деле данному подмножеству или нет. При первом подходе представления множеств используют как смежное, так и связанное размещение его элементов в памяти (рис. 3.12). Данные методы размещения подробно рассмотрены в п. 3.1 представления последовательностей. с а Ь X У г ~®\ с а Ь X У г 0 Рис. 3.12. Смежное и связанное представление множества в памяти Как и для последовательностей, наилучший метод представления множеств существенно зависит от операций, которые мы собираемся выполнять над ними. Типичные операции над множествами: выяснить, имеется ли конкретный элемент в данном множестве; добавить в множество новые элементы; удалить элементы из множества; выполнить обычные теоретико-множественные операции, такие, как объединение или пересечение двух множеств. Как правило, для представления множеств применяют связанную память. При втором методе множество представляется в виде вектора на смежной памяти. Пусть U — универсальное множество (т.е.
134 Гл. 3. Представление абстрактных объектов все рассматриваемые множества являются его подмножествами), состоящее из п элементов. Любое подмножество S С U представляется в виде характеристического вектора из п элементов. Элемент г в этом векторе равен 1 тогда и только тогда, когда г-й элемент множества U принадлежит 5, в противном случае устанавливается равным 0 (рис. 3.13). Представление в виде 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 ~Т] Рис. 3.13. Представление множества характеристическим вектором характеристического вектора удобнее тем, что можно определять принадлежность г-го элемента множеству за время, не зависящее от его размера. Основные операции над множествами, такие, как объединение и пересечение, можно осуществлять как операции V и Л над двоичными векторами. Недостаток этого представления заключается в том, что операции объединение и пересечение занимают время, пропорциональное мощности универсального множества U, а не рассматриваемого множества S. Данное представление требует дополнительной памяти для хранения характеристического вектора, что для больших п (размер универсального множества U) бывает практически невыполнимо.
Глава 4 МЕТОДЫ ПОДСЧЕТА И ОЦЕНИВАНИЯ Рассмотренные в предыдущих разделах комбинаторные формулы подсчета означают вычисление или определение свойств некоторой последовательности чисел, соответствующие той или иной задаче. В этом разделе предлагается полезный инструмент для работы с последовательностями. Идея состоит в том, чтобы каждой числовой последовательности сопоставить функцию действительного или комплексного переменного, с тем, чтобы обычные операции над последовательностями соответствовали простым операциям над соответствующими функциями. Аналитические методы работы с функциями оказываются проще и эффективнее, чем непосредственные комбинаторные методы работы с последовательностями. § 4.1. Производящие функции Пусть ao,ai,a2,... — произвольная последовательность. Сопоставим последовательности функцию действительного или комплексного переменного: оо А(х) = ^,акхк. (4.1) А;=0 Функция А(х) называется производящей функцией последовательности a0,ai,a2, Как правило, поиск функции А(х) по формуле (4.1) прямыми методами является сложной задачей. Заметим, что последовательность {а^} может быть восстановлена по А(х). Выражение (4.1) является разложением в ряд Тейлора в окрестности точки ж = 0. Воспользуемся этим замечанием и приведем некоторые наиболее распространенные производящие функции и соответствующие им последовательности. Задача. Найти число fc-мерных граней в гг-мерном кубе. Решение. Обозначим через а^ число fc-мерных граней в гг-мерном кубе, где 0 ^ fc ^ гг. Тогда производящую функцию
136 Гл. 4. Методы подсчета и оценивания Производящие функции Л(х) 1 °° . 1 - х к=о 1 °° I — V (к 1 lWfc (\-xY к=о 1 °° 1 1-х к=1к оо /_l\fc+l ln(l+a;)=EL-!t—ar* o+*r=EOfc fc=0 00 1 е* = Е ^ fc=0 Л! оо fc fc=0 Л! 1 _ V^ (r+fc-l\ о-*)- ЬЛ * ; Последовательности {a,k} ak = \, k^O (4-2) afc =fc+l, k^O (4-3) ao = 0,afc = i A;^ 1 <4-4) A; 00 = 0,^ = ^1^,^1 (4-5) A; a* = (£). k^O,r- любое (4-6) afc = i, fc^O <4-7) afc = T7, A; ^ 0, r — любое (4-^) A;! afc = (r+£_1), A: ^ 0, r - любое <4-9) последовательности {a&} можно записать как Ап(х) = ^ а^хк. k=o Индекс п для Ап(х) показывает размерность куба. Например, А0(х) = 1, Л^ж) = 2 + ж, Л2(ж) = 4 + 4ж + ж2. Рассмотрим производящую функцию Ап+\(х) последовательности {а,к} для (п + 1)-мерного куба. Заметим, что (п + 1)-мерный куб можно получить из гг-мерного куба сдвигом последнего по (п + 1)-му измерению. На рисунке показан пример получения трехмерного куба сдвигом по третьему измерению квадрата (двухмерного куба). Отсюда видно, что (п + 1)-мерный куб включает два старых гг-мерных куба и каждая fc-мерная грань при сдвиге переходит в (к + 1)-мерную грань. Из приведенных рассуждений следует, что Ап+{(х) = 2Лп(ж) + ж ■ Лп(ж), где А)(ж) = 1. Отсюда Ап+\(х) = (2 +ж)Лп(ж) = (2 +ж)п+1. Воспользуемся разло- п жением бинома Ньютона: Ап(х) = (2 + х)п = ^ Скхк2п~к = п = ^2 &кхк- Сравнивая коэффициенты при степенях хк, получим, А;=0 что число fc-мерных граней в тг-мерном кубе равно а& = 2п~кСк.
§ 4.1. Производящие функции 137 Например, А3(х) = 23"0С° + 2Ъ~ХС\ + 23"2С32 + 23"3С3 = 8 + + 12ж + 6ж2 +ж3. Простейшие производящие функции (4.2-4.9) будем использовать как «строительные кирпичики» для получения производящих функций более сложных последовательностей. С этой целью рассмотрим наиболее важные из операций над производящими функциями, т. е. способы получения новых производящих функций и соответствующих им последовательностей. Обозначим через {a>k}, {bk}, {с*;} последовательности, а соответствующие им производящие функции — как Л(ж), В(х), С(х). 4.1.1. Линейные операции Если а и (3 — константы, то последовательность ск = аак + + /3bk имеет производящую функцию С(х) = аА(х) + /ЗВ(х). Например, последовательность {1} соответствует производящей функции , а последовательность i — > соответствует производящей функции ех, тогда последовательность Н00 + — > - ^ 10° . к х соответствует производящей функции Ьэе . 4.1.2. Сдвиг начала вправо Пусть последовательность {bk} определяется через последовательность {ak} следующим образом: , _ ГО, для к = О, 1,... , г — 1; \cik-i, для к = г,г+ 1,..., тогда В(х) = хгА(х). Действительно, оо оо оо В(х) = У^ Ъкхк = У^ ak-iXk = хг У^ акхк = хгА(х). к=0 k=i k=0 4.1.3. Сдвиг начала влево Пусть последовательность {6&} определяется через последовательность {а^} следующим образом: 6& = а^, к = 0, 1,..., тогда г-1 В(х)= (А(х)-^акхк\х-\ к=0
138 Гл. 4. Методы подсчета и оценивания Действительно, оо оо оо оо B(x)=J2 bkXk = J2 а*+*ж* = X~l 2 ^i^ = Х~{ 2 ^ = к=0 к=0 к=0 k=i оо г—1 г—1 = х~1(^акхк -^акхк\ = (А(х) -^акхк)х-{ к=0 к=0 к=0 4.1.4. Частичные суммы Пусть последовательность {Ьк} определяется через последовательность {ак} следующим образом: bk = ^ail fc = 0, 1,..., тогда В(х) = —^-. i=0 Действительно, хк. к=0 к=0 г=0 Множество пар точек (&,г), по которым ведется суммирование, представлено на рисунке. Изменим порядок суммирования (сначала по г, затем по к). Выражение для В(х) примет вид оо оо оо оо 4.1.5. Дополнительные частичные суммы Пусть последовательность {Ьк} определяется через последовательность {ак} следующим образом: Ък = ^2о>и к=0, 1,..., тогда В (ж) = А(\)-хА(х) 1 -х =к Действительно, оо оо оо fc=0 А;=0 i=k Множество пар точек (fc,i), по которым ведется суммирование, представлено на рисунке. Изменим порядок суммирования к
§ 4.1. Производящие функции 139 (сначала по г, затем по к). Выражение для В(х) примет вид оо г оо г оо _ *—|— 1 в(х) = ЕЕа^ = Еа*(Хж/г) = Еа*-тт~ = i=0 k=0 г=0 к=0 г=0 i=0 i=0 4.1.6. Изменение масштаба 1. Пусть последовательность {Ьк} определяется через последовательность {ак} следующим образом: Ьк — как, тогда В(х) = хА'(х), Действительно, оо оо А(х) = ^акхк и А'{х) = У^какхк~1 к=о к=о ИЛИ оо хА'(х) = ^(как)хк = В(х). к=0 2. Пусть последовательность {Ьк} определяется через последовательность {ак} следующим образом: X Ьк = тгтт, ™гДа В(х) = - к + 1 v ' х A{x)dx, оо Поскольку А(х) = J2 акхк> то А;=0 х А(х) dx = У2\ akxhdx = Y^ 7~ГжА;+1 = ХУ2^к = хВ(х). к=0 q к=0 к=0 4.1.7. Свертка Последовательность к ск = y^^bk-j, fc = 0, 1,..., тогда С(х) = А(х)В(х). i=0
140 Гл. 4. Методы подсчета и оценивания оо оо Действительно, А(х) = J2 а^хк и В(х) = J2 Ъьхк, тогда А;=0 А;=0 оо оо к оо оо С(Ж) = 2 С^ = 2 (2 aibk-i)xk = ^2Y^ а*Ьк-&к = к=0 к=0 г=0 г=0 /с=г оо оо оо оо = (J^<чх*) (^Ь/fc-iX*-*) = (Ea^)(SЬ***) =^(«)5(х). г=0 А;=г г=0 А;=0 Далее обсудим наиболее общие приемы использования производящих функций на примере решения следующих задач. Задача. Рассмотрим обобщенное биномиальное правило раскрытия выражений тт^г -o-.r-g О* где обобщенный биномиальный коэффициент -Л = (-r)(-r-l)-...-(-r-fc + l) = fey k\ = /_ j 4fcr(r+l)-...-(r + fc-l) = , {.к (г + к - 1 Тогда Рассмотрим полученное выражение при г = —-: оо W1 Л /1 = 1 + E:Hi-')(i-' + ')(_x)t = Л! fc=l = у 1(-1)(-3). .(-2fc + 3) t = А;=1
§ 4.1. Производящие функции 141 2fc_1bb3.5-7.....(2fc-3)„fc_ -l+D-') k=\ = '-E °° 1 -3-5-7-...-(2fc-3) k_ • X 2fc*! 1 • 2 • 3 • 4 • 5 •... • f2fc - 3) • C2ft - 2) xn = oo l-2-3-4-5-...-(2fc-3)-(2*-2) k _ ^ 2fcfc!-2-4.6-...-(2fc-2) l-2-3-4-5-...-(2ft-3)-(2ife-2) k_ 2kk\2k-l(k-l)\ X ~ 2^ 2fcjfc!2fc-'(fc-l)! fc=l 2-(2fc-2)! _fc_, y^2C^_2^ = 1 - V ^ " ^ ~ ^! xfc = 1 - V ^4kk(k-l)\(k-l)\ ^ Akk Таким образом, k=\ ■X Рассмотрим выражение — г^ = (1 — x)r при г = 1: -о-.)--е(-;)(-)*- 1-х fc=0 где 1\ _ (_i)(_i _ 1).....(_! _fe + l) ft! xjfcl-2-...-* = (-ir %;- =(-ir Следовательно, = (1 — ж) 1 = ^ (—l)fc(—x)fc = ^ ж*\ 1"x k=o k=o Задача. Сколькими способами можно разбить выпуклый (п + 3)-угольник, п ^ О, на треугольники диагоналями, не пересекающимися внутри многоугольника? Решение. Пусть гхп+3 — искомое число способов разбить (п + 3)-угольник на треугольники. Перенумеруем вершины исходного многоугольника числами от 1 до п + 3. Заметим, что при любом разбиении найдется треугольник, содержащий ребро
142 Гл. 4. Методы подсчета и оценивания многоугольника с вершинами тг + 2 и тг + 3. Третья вершина этого треугольника может быть любой из остальных 1,2,...,тг + 1. Пусть это будет вершина к. Если удалить треугольник с вершинами п + 2, п + 3, &, то получим два многоугольника с числом вершин к + 1 и тг + 3 — &, которые можно разбить на треугольники г/fc+i и г/п_|_з-А; способами. Суммируя по fe = 1,2,... ,тг+ 1, получим (согласно правилам прямого произведения и суммы) искомое число разбиений исходного (п + 3)-угольника на треугольники: гхп+3 = и2ип+2 + Щип+\ + • • • + ^п+2^2> где п ^ 0, и положили щ — 1. Получили нелинейное рекуррентное соотношение для последовательности {г/п+2}> п ^ 0> Для поиска которой удобно ввести новую последовательность vn, п ^ О, такую, что ^п = гхп+2» га ^ 0. Тогда рекуррентное соотношение перепишется в виде *>n+l = ЩУп + V\Vn-\ + • • • + VnV0 ИЛИ *>n+l = ^VfcVn-fc- fc=0 Заметим, что правая часть является сверткой двух одинаковых последовательностей {уп} и {уп} (см. п. 4.1.7 операции с производящими функциями). Имея это ввиду, составим производящую функцию правой части: оо vn+i хп = ^2 W^ vkvn-k ) х' n=0 71=0 к=0 Пусть V(x) — производящая функция последовательности {уп}, га ^ 0, тогда запишем последнее соотношение: V(x)-v0 =у(хщх) или xV2(x)-V(x) + l=0. Отсюда к (ж) = - . Ранее рассмотренное разложение обобщенного бинома 00 2 С*"1 7T^ = 1_v^^2xfc fc 4fc*
§ 4.1. Производящие функции 143 запишем для случая л/1 -4х = 1 -^ Z°2fc-2 xk^ к=\ Поскольку результат V(x) должен быть рядом по неотрицательным степеням хк, то решение V(x) = (1/2х)(1 + \Л — 4х) является посторонним. Окончательно 1 - VI - 4х _ v^ C2k_2 k_x _sr^ О v^= 2" =Е^Р^"1=Е 2fc xfc 2z ^ fc ^ fc + 1 Отсюда гхп+2 = ^n = C^n/i71 + О» ™ ^ 0. Значит, число способов разбить выпуклый (п + 2)-угольник на треугольники непересекающимися диагоналями равно С^ДтгН- 1), п ^ 0. Задача. Найти сумму I2 + 22 + ... + к2 = ^ г2. г=1 Решение. Определим четыре последовательности и их производящие функции: к а к = 1, fcfc = fcafc, с& = &bfc, dfc — / i г=0 Л(х), B(x), C(x), £(x). Для решения задачи необходимо найти d^. С этой целью определим D(x), что позволит нам установить значения d^, ОО D(x) = Y^ dkxk. Последовательности 6^ и ак связаны «измене- к=о нием масштаба», значит, В(х) =хА'(х). Последовательности с& и Ъь также связаны «изменением масштаба», следовательно, С(х) = хВ'(х) = х(хА'(х))' = xAf(x) + x2A"(x). Последовательности dk и Ск связаны «частичной суммой» тогда _, ч С(х) хА'(х) + а?А"(х) D(x) = Т^ = —* —. 1 — х 1-х к=0 1 ,/, х [_ (1-х)*' V/ (l-xf Л(х) = £1.х* = т-^, А^) = —f-гг, A^) = 71-^j.
144 Гл. 4. Методы подсчета и оценивания х(\ + х) Окончательно: D(x) = — j. Для получения коэффициентов [I — х) dk воспользуемся разложением (4.9): v ' k=0 ^ / к=0 Теперь можно записать, что оо П(х) = (х + х2)^С1+3хк = к=0 ОО СХ) СХ) = Е с^к+1+Е с^к+2=°h+Е(^44+ct3)*fc+2 = fc=0 СХ) СХ) = Cjx + Е(С|+2 + C|+i )** = Е ^ к=0 к=0 к=0 СХ) СХ) ■мкХк к=2 к=0 Сравнивая коэффициенты при одинаковых степенях ж, получим d0=0, d[=C3, dk = Ск+х + Ск+2, fc = 2,3,— Таким образом, i» + a' + ... + *»-eiH+<tH-(M + "6(*+"*. Задача. Показать, что £ C*+i = С*+Л.+1 или г=0 СО . /nrl , , /nrfc j^ik r+0 "+" W+l "Г • • • T- ^r+k — W+fc+1' Решение. Заметим, что —;—^- = ^ Ск+кхк является 1 оо (1+хГ+1 "£>" производящей функцией последовательности а& = Cy+fc- Следо- fc к вательно, искомая сумма равна J2 С*+1 = J2 щ. Рассмотрим по- г=0 г=0 к следовательность bk = Y^ai- Так как Ьк и ак связаны частичной г=0 А(х) 1 суммой (п. 4.1.4), то В(х) = -г-^- = ^т^. Разложение (4.9) 1 % у\ — X) позволяет записать последнее выражение в виде:
§4.2. Линейные рекуррентные соотношения 145 1 °° отсюда к к h = Cr+fc+1 = ^аг = ^ Ck+i' i=0 i=0 Определение. Пусть X — целочисленная случайная величина и определен ее ряд распределения. Характеристической функцией распределения случайной величины (св.) X называется функция оо к=0 Таким образом, дх($) — это производящая функция последовательности чисел Р(Х = к), где к = О, 1,... . Задача. Пусть X и Y — независимые целочисленные случайные величины и определены их ряды распределений и пусть 9x(s) = ЕГ=о р(* = к)*к и 9у(*) = Z?=oP(Y = к>к ~ их ха" рактеристические функции. Рассмотрим св. Z = X + Y. Очевидно, что к P(Z = k) = P(X + Y = k) = ^P(X = i) P(Y = k-i), i=0 Согласно свойству свертки производящих функций (4.1.7) характеристическая функция с. в. Z может быть записана таким образом: оо *,(«) = £p(Z = *)•* = ** (*Ы*)- к=0 §4.2. Линейные рекуррентные соотношения Рассмотрим последовательность {ип}, п = 0, 1,2,... . Будем говорить, что задано однородное линейное рекуррентное соотношение с постоянными коэффициентами порядка г, если для членов последовательности {ип} выполняется равенство ип+г = ciun+r-i + с2ип+г_2 + ... + сгип, (4.10) где ci,c2,...,cr — постоянные величины. Выражение (4.10) позволяет вычислить очередной член последовательности по
146 Гл. 4. Методы подсчета и оценивания предыдущим г членам. Ясно, что, задав начальные значения щ,щ,... ,гхг_ь можно последовательно определить все члены последовательности. Мы рассмотрим общий метод решения (т. е. поиска ип как функции от п ) рекуррентного соотношения. Для решения задачи достаточно найти производящую функцию оо U(x) = ^ukxk (4.11) к=0 последовательности {ип}. Введем обозначение для полинома К(х) = 1 — С\Х — С2Ж2 — ... — СГХГ и рассмотрим произведение U(x)K(x) = С(х). Непосредственным умножением можно убедиться, что С(х) — это полином, степень которого не превышает г — 1, так как коэффициенты при хп+г (п = 0,1,...) в U(x)K(x), согласно уравнению (4.10), удовлетворяют соотношению Un+r — (c\Un+r-\ + C2*Un+r_2 + . . . + CrUn) = 0. Характеристическим полиномом соотношения (4.10) называется F(x) = хг — с\хг~х — С2ХГ~2 — ... — сг-\х — сг. (4.12) Выполним разложение F(x) на линейные множители F{x) = {x-ax )ei (ж - а2)е2... (ж - аг)€г, где в\ + е2 + ... + ег = г. Сравнивая К(х) и .Р(ж), запишем ^(ж) = жг,Р(1/ж). Отсюда Щж)=ж^(1-а1)е1(1-а2)е2.....(1-аг)еГ = = (1 -а1ж)е1(1 -а2х)е2 • ...■ (1 -агж)ег, е\ + е2 + ... + ег = г. Разложение на множители используем для представления в виде суммы простых дробей:
§ 4.3. Неоднородные рекуррентные соотношения 147 Таким образом, U(x) является суммой функций вида оо /? */„ + *._ 1\ ,k„k ,-/>ЕГ * К* (\-ах)п г^\ k I v ' к=0 ч J Тогда выражение (4.13) примет вид "м = Щ = £Х>Е ("+* ~ 'bv- <«••«> V ; г=\ п=\ к=0 ^ J Данное разложение является производящей функцией U(x) = ОО = ^2 ипхп последовательности {ип}. Для определения ип необ- п=0 ходимо найти коэффициент при хп в разложении (4.14). Задача. Найти последовательность {ип}, удовлетворяющую рекуррентному соотношению ип+2 — 5un+i — бгхп, щ = = и\ = 1. Решение. Решение. К(х) = 1 — 5ж + 6ж2, K(x)U(x) = — С{х). Выполним данное умножение: (1 — 5ж+ бж2)(гх0+^i^ + + щх2 + ...) = щ + (u\ — 5щ)х + (г/2 — 5г/1 + 6г/о)ж2 + • • • = ^о + + (и\ — 5и0)х = 1 — 4ж. Таким образом, С{х) = 1 — 4ж. Характеристический полином /(ж) = ж2 — 5ж + б = (ж — 2)(ж — 3). От- тт( ч С{х) 1 - Ах А В сюда щх) = __ = (1_2ж)(1_3ж) = у^ + у^- Значения величин Л и В находим методом неопределенных коэффициентов: А = 2, В = — 1. Наконец, принимая во внимание (4.2), 0 оо оо оо c/^ = Ti+T^ = 2E2^fc-E3^=E(2fc+1-3V- fc=0 k=0 k=0 оо С другой стороны, U(x) = Y^ ukxk • Сравнивая коэффициенты к=о при одинаковых степенях хк, заключаем, что щ = 2fc+1 — Зк. § 4.3. Неоднородные линейные рекуррентные соотношения Неоднородное линейное рекуррентное соотношение имеет вид Un+r = C\Un+r-\ + C2Un+r_2 + .. . + CrUn + 6n, (4.15) где величина Ьп в общем случае является функцией от п. Общее решение соотношения (4.15) представляет собой сумму частного
148 Гл. 4. Методы подсчета и оценивания решения неоднородного уравнения (4.15) (т.е. любого решения, которое удовлетворяет (4.15)) и общего решения соответствующего ему однородного соотношения (4.10), которое находится рассмотренным способом. Общих способов определения частного решения нет, однако для специальных значений Ьп существуют стандартные приемы определения ип. Рассмотрим на примере в некотором роде универсальную процедуру, которая позволяет сразу находить общее решение неоднородного уравнения (4.15). Задача. Найти {ип}, если известно, что ип+\ = ип + (га + 1) и и0 = 1. Решение. Умножив левую и правую части рекуррентного соотношения на хп, получим ип+\хп = ипхп + (га + \)хп. Суммирование последнего уравнения для всех га дает оо оо оо ^ ип+1хп = ^ ипхп + ^(п + 1)жп. 71=0 71=0 71=0 Свойства операций с производящими функциями позволяют данное выражение привести к виду Щх)-щ=Щх)+ 1 Учитывая, что щ = 1, запишем 2 оо оо U(x) = 1~Х_\Х3 = (1 -х + *2)£с2+2х" = ^ипх\ [[ Х) 71=0 71=0 Сравнивая коэффициенты при ж71, заключаем, что „, _ г*2 Г2 хгЪ— п2 + П + 2 Un — Оп+2 — Чг+1 + °7i — 2 ' Задача. Найти число замкнутых маршрутов длины га по ребрам треугольника ABC. Длину ребра принять равной единице. Начальная и конечная точка маршрутов — вершина А. Решение. Введем обозначения: ап — число замкнутых маршрутов длины га из вершины А в вершину А] Ьп — число
§ 4.3. Неоднородные рекуррентные соотношения 149 маршрутов длины п из вершины А в вершину В; Сп — число маршрутов длины п из вершины А в вершину С. Очевидно, что из условия симметрии задачи Ьп = Сп. Величины же ап,Ъп,сп связаны системой рекуррентных соотношений: ( fln+l = Ьп + Сп, I Ьп_н = а>п + Ъп, 1Сп+\ =ап + Сп, Ьп — сп. В виду того, что Ьп = сп, система приводится к виду ап+\ — 26n, bn+\ — ап + Ьп, Выражая Ьп из первого уравнения и подставляя во второе, получим однородное рекуррентное соотношение относительно последовательности {ап}. Запишем его в принятых обозначениях, полагая ип = ап\ ип+2 = ^п+1 +2гхп, гл0 = 1, гл! = 0, где гг = 0, 1,2 Решение данного соотношения найдем согласно изложенной выше теории: К(х) = \-х- 2х2, Щх)К(х) = С(х) = 1 - х. Характеристический полином F(x) = х2-х-2 = (х- 2)(ж + 1). Отсюда Щх) = 1-х =J/3_ + _2Zl. V > (1-2х)(1 + ж) 1-2* 1+х Перепишем U(x) в развернутом виде по степеням хп: оо оо C/H = i^2V + |^(-l)V = П=0 71=0 ^2" + (-1)"2 п ^ п = 2^ —г~^х = 2^ UnX ■ п=0 п=0 Сравнивая коэффициенты при ж71, заключаем, что число замкну- 2п + (-1)п2 тых маршрутов длины п равно ип = ^—-—.
150 Гл. 4. Методы подсчета и оценивания § 4.4. Обобщенное правило произведения Пусть 5i,52,... ,Sn — произвольные множества и пусть Q, — {cji ,cj2, •• •} — множество весов, где под с^, будем понимать любой из символов l,x,y,z,x~l,y~l,z~l и их произведения. В отличие от элементов, вес — это есть число либо переменная, которая может принимать любые числовые значения. Назначим каждому элементу s Е Si (i= 1,2,..., гг) вес u(s) Е fi. Во многих задачах требуется определить количество элементов с определенными свойствами, а не их вес. В этом случае полагают u>(s) = 1. Пусть CiU — количество элементов множества S{ с весом cj, тогда A(Si) = J2 Сии — сумма весов элементов множества Si. Рассмотрим прямое произведение множеств S = S\ х S2 x ... х Sn = {s = (s\,S2,...,sn) | Sie S^ i =T/n}. Положим вес элемента множества равным п U)[S) =Cj(51,52,...,5ri) =Uj(Si)u(s2) ' ... -U>(S) = Д^(^) E $1 i=\ Пусть Еш — количество элементов € Е S с весом и, тогда А(&) — 2 Еф> — сумма весов элементов множества S. Теорема 4.4.1. A(S) = A(S{)A(S2) •... • A(Sn). Доказательство. A(S) = ^Еии= Y^ S ••••• 2 "(*b*2,...,*ri) = ueQ s\eS\ s2£S2 snesn = E E ■•••■ E w(si)w(s2)-...-w(s„) = S\£S\ S2E.S2 sn£Sn = (e ы(5')) (e ^V •••• (E w(*»)) = Vies, / \s2e52 / \snesn J = A(Sl)A(S2)^...-A(Sn). D Задача. Найти количество замкнутых маршрутов длины 2п по ребрам трехмерного куба. Начальное и конечное положение — вершина Aq куба.
§4.4. Обобщенное правило произведения 151 \ л, з/\ z К7 Мб Решение. Исходное положение — вершина Aq. Каждый шаг перемещения по кубу — это выбор одного из трех ре- | ах | | | Аа бер. Пусть 1 означает выбор ребра вдоль оси ОХ, 2 — вдоль оси OY', 3 — вдоль оси OZ. В соответствии с этим введем множества S\,S2,... ,S2n такие, что ^° Лз SX=S2 = ... =S2n = {1,2,3}. Тогда все маршруты длины 2тг составят множество S = S\ x S2 х ... х S2n. Например, маршрут 2113 означает, что из А0 пошли в Л5, затем в Ле, вернулись в А$ и поднялись в А2. Назначим веса элементам множества: cj(1) = ж, cj(2) = у, cj(3) = z. По правилу обобщенного произведения сумма весов всех маршрутов длины 2тг равна A(S) = A(S\)A(S2) • ... ■ A(S2n) = = (ж + у + z)2nt так как A(S{) — x+y + z. После возведения в степень получим, что A{S) = (х + у + z)2n = Е Е Е «v^V**. (4-16) г j к где xly^zk — вес маршрута, включающего г шагов вдоль оси OX, j — вдоль OY и к — вдоль OZ (i+j + k = 2тг), аф — количество маршрутов с весом xly^zk. Заметим, что только маршрут, заканчивающийся в Aq, имеет вес xlyJzk с четными степенями itjtkt так как в замкнутом маршруте, сделав шаг вдоль оси, необходимо вернуться по этой оси. Для выделения таких маршрутов положим х2 = у2 = z2 = 1 (x,y,z — произвольные). Тогда выражение (4.16) примет вид (ж + у + z)2n = C0 + C2yz + C4xz + Сбжу, (4.17) где Со — число маршрутов, заканчивающихся в А$\ С2 — в А2\ С4 — в А*; Се — в Лб. Учитывая симметрию точек А2,А4,А§ относительно Д>, можно заключить, что С2 = С4 = Cq = С. Тогда из системы (4.17) следует, что (ж + у + *)2п = С0 + C(y* + ж* + ху), (4.18) Уравнение (4.18) содержит два неизвестных, С0 и С, при ж2 = = у2 = z2 = 1. Для их определения составим систему уравнений из выражения (4.18), полагая х =у = z =I nx = y=ltz = — 1. Это возможно, так как выполняется условие х2 — у2 — z2 — \.
152 Гл. 4. Методы подсчета и оценивания Получим систему Г (1 + 1 + 1 )2п = С0 + С( 1 + 1 + 1) Г 32п = С0 + ЗС, Ч о ИЛИ S « ^ ^ \ (1 +1 - \)2п = с0 + c(-i - 1 +1) I 1 = с0 - а 32п + 3 Отсюда Со = —- число искомых маршрутов. Задача. Найти число решений р, q уравнения 2р + 3д = тг, где n,p,q G {0, 1,2,...} . Решение. Введем множества: S\ = {2р \р = 0, 1, 2,... ...}, S2={3?|? = 0,1,2,...} и 5 = 5i xS2 = {(2p,3?)|p,? = = 0,1,2,...)}. Назначим веса элементам множеств следующим образом: uj(2p)=x2p, uj(3q)=x3q и)(е) = ы((2р, 3?)) = x2^+3^n = A3* = ы(2р)ы(3?). Веса элементов определены таким образом, что выполняется правило обобщенного произведения A(S) = A(S\)A(S2). Легко заметить, что степень веса x2p+3q=n любого элемента £ = (2р, 3q) Е S дает одно из решений исходного уравнения 2р + 3q = тг. Раскроем выражение A(S) = A(5i)A(52): гг0 + щх + гг2ж2 + ... + unxn + ... = = (1+ж2+ж4+ )(1+жЗ+жб+ )= 1 1 1-х2 1-х3' где ип — число решений уравнения 2р + 3q = тг. Фактически, сумма весов A(S) элементов множества S является производящей функцией числа решений уравнения 2р + 3q = п. Таким образом, A(S) = т " v Разложим данное выражение на 1 — X 1 — Я; множители: л, as 1/4 , 1/6 7/12-х/12 + х2/4_ ~ 12 ^1+х (1-х)2 1-х3 J"
§4.5. Принцип включения и исключения 153 / оо оо оо \ = -^ 3^(-l)fcxfc + 2^(fc+l)fcxfc + (7-x + 3x2)^x3M = \ к=0 к=0 к=0 ) оо к=0 где щ — число решений уравнения 2p + 3q = п. Сравнивая коэффициенты при одинаковых степенях, получим: _ 3(-1)3п+2(3п+ 1) + 7 _ 2п + 3 + (-1)3п Щп- 12 4 3(-l)3n+1 +2(3n + 2)- 1 2/г+1-(-1)3п ^Зп+1 = 12 = 4 ' _ 3(-1)3п+2 + 2(Зтг + 3) + 3 _ 2тг + 3+(-1)3п Щп+2 — 12 ~~ 4 ' где тге{0, 1,2,...}. § 4.5. Принцип включения и исключения Введем обозначения: S = fs\, s2,5з> • • •} — произвольное множество элементов. ft = {cji,(J2,cj3i •••} ~~ множество весов, cj(sfc) — вес элемента Pi, Р2> -Рз> • • •. Рп — свойства элементов или индикаторы свойств элементов. 1, если элемент s^ обладет свойством Д; 4 ' '0 — в противном случае. W{P%) = Y^ Pi(sk)u(sk) — веса элементов со свойством Pim skes W(Pi{Pi2 • ... • Р{т) — сумма весов элементов множества 5, которые обладают каждым из свойств РгР Рг2> •• • i PL- V^(m) = ^ И^Р^ Д2 ' •••' -f*m)» суммирование выполняет- (i\i2...im) ся по всем сочетаниям (i\i2---im) длины т из п свойств, количество сочетаний равно °п • Таким образом, в W(m) суммируются веса только тех элементов, которые имеют как минимум т свойств. Пусть элемент
154 Гл. 4. Методы подсчета и оценивания s обладает к свойствами и fc)m, тогда его вес u>(s) в W(m) войдет С^ раз. Так, W(l) = Y,W(Pi{) = W(P{) + W(P2) + ... + W(Pn) ft) содержит С\ = п слагаемых и W(2)=Y,W(PilPi2) = W(PlP2) + W(PlP3) + ... + W(Pn_lPn) (чч) содержит С\ — п(п — 1)/2 слагаемых. Распространим определение W(m) на га = 0, положив W(0) = Y^sesu(s) ~ СУММЫ весов элементов исходного множества S. Данное определение W(0) выполнено корректно, так как сумма должна включать элементы, обладающие нуль свойствами и более. Действительно, любой из элементов множества S удовлетворяет этим условиям. Положим: Е(т) — веса элементов, обладающих ровно га свойствами; Е(0) — веса элементов, которые не имеют ни одного из указанных свойств. Теорема 4.5.1. Сумма весов элементов, обладающих точно га свойствами из п свойств Р\, Р2» • • •, Рты равна E(m) = W(m) - C™+1W(m+ 1) +... + (-l)n-mC™W(n)) или n—m E(m) = ^(-lyC^Wim + i). (4.19) 2=0 Доказательство. Достаточно показать, что вклад веса u>(s) произвольного элемента s е S в правую и левую части (4.19) одинаковый. Пусть s e S обладает точно t свойствами. Возможны следующие соотношения между t и га: 1) £<га, тогда u>(s) не входит в Е(т) и не входит в W{m+i) для г = 0,1,..., п — га. Равенство (4.19) примет вид 0=0; 2) t = га, тогда u(s) входит один раз в Е(т) и в W(m)\ 3) t > га, тогда u>(s) не входит в Е{т) и левая часть 4.19 равна 0. Покажем, что в этом случае и правая часть рассматриваемого выражения равна нулю. Вес u(s) в W(m + i) входит С^1^1 раз, т + г ^ t. Правая часть (4.19) для веса u(s) одного элемента примет вид
§4.5. Принцип включения и исключения 155 C™u>{s)C? - C-+1u,(*)Cr+1 + .. • + {-\)1-шС?и>{8)С\ = t—m = ы(5)£(-1гс™+,сг+*. г=0 Заметим, что Я rm rm+i _ (m + i)\ m\i\ (m + i)\(t- (m + i))\ t\ (t-m)\ m\(t-m)\ i\((t-m) + i)\' Значит, С™+{С™+г = С™С\_Ш, а исходная сумма составит t—m t—m «(•) £(-iyc™+icr+i = Ц.) ^(-1)^те_т = = W(,)cr £(-irq_m = «(e)CT(i - l)*-™ = о. 2=0 И в третьем случае выражение (4.19) справедливо. D Следствие. E(0)=W(0)-W(l)+W(2)-...+(-l)nW(n). Задача. В группе 23 студента. Из них 18 знают английский язык, 9 — немецкий и 6 — оба языка. Сколько студентов в группе не знают ни одного языка? Сколько студентов знают один язык? Решение. Пусть S множество всех студентов \S\ = 23. Назначим вес u(s) = 1 всем элементам s e S. Теперь под суммой весов будем понимать количество студентов. Назначим свойства элементам s € S: Р\ — знание английского языка, Рч — знание немецкого языка. Е(0) — студенты, не знающие языков (не обладают указанными свойствами): E(0) = W(0)-W(l) + W(2), W(0)= ^cj(s) = 23, ses W(l) = W(Pi) + W(P2) = 18 + 9 = 27, W(2) = W(PXP2) = 6. Тогда Е(0) =23-27 + 6 = 2.
156 Гл. 4. Методы подсчета и оценивания Е{\) — студенты со знанием ровно (только) одного языка: Е{\) = C\W{\) - C\W{2) = 1 • (18 + 9) - 2 ■ 6 = 15. Задача. Найти число перестановок га шаров, в которых ровно г шаров остаются на месте. Решение. Введем обозначения. Pi — свойство, состоящее в том, что при перестановке шаров г-й шар остается на месте, i= 1,2, ...,m. E(r) — количество перестановок, обладающих ровно г свойствами, т. е. при перестановке шаров ровно г из них остаются на своих места. Тогда по формуле включений и ис- т—г ключений запишем: Е(г) = ^ (— l)lCl+iW(r + г). Рассмотрим W(r) = Yl W(PixPi2 • ... • Р{г), где суммирование выполня- (i\i2...ir) ется по всем сочетаниям (i\i2...ir) длины г из m свойств, количество сочетаний равно Стш. W(Pix Д2 ■ ... ■ Дг) = {га— т)\ — количество перестановок из га — г шаров, так как г шаров должны оставаться на месте. Тогда значение W(r) = Стш{га — 771—Г -г)!. Следовательно, и Е(т) = £ (-1)гС^+{С^{(га - г - г)! г=0 или E(r) = ^ E Ц^^^£_. г! Г^0 г! г! § 4.6. Ладейные многочлены и многочлены попаданий Основная цель данного подраздела — показать возможности применения методов подсчета и оценивания при решении конкретных задач. В то же время обсуждаемые здесь задачи сами по себе не лишены интереса и в большей степени для тех, кто впервые знакомится ними. 4.6.1. Ладейные многочлены Определение. Доской запрещенных позиций называется произвольный набор выделенных клеток шахматной доски, сохраняющих свое расположение относительно других клеток доски. Пример доски запрещенных позиций показан на рис. 4.1. Определение. Пусть С — доска запрещенных позиций. Введем обозначения: г*. — количество способов расставить к ладей на доске запрещенных позиций так, чтобы они не били # # # # # Рис. 4.1
§4.6. Ладейные многочлены и многочлены попаданий 157 друг друга; го = 1 — количество способов расстановки 0 ладей на доске запрещенных позиций, т. е. способов не ставить ладьи на доску. Ладьи считаются неразличимыми. Производящую функцию последовательности {г^} будем называть ладейным многочленом доски С и обозначать оо Щх,С) = ^гкхк- (4.20) к=0 Свойства ладейных многочленов # # Задача. Найти ладейный многочлен для доски С\ с одной клеткой (рис. 4.2). Решение. Непосредственным подсчетом мож- Рис. 4.2 но установить, что го = 1, г\ = 1 и Т{ = 0, % ^ 2. Тогда R{x,C\) = 1 +х. Задача. Найти ладейный многочлен доски С2 q на рис. 4.3. Решение. Непосредственным подсчетом можно установить, что г0 = 1, т\ = 2, т2 = 1 и г; = 0, Рис. 4.3 г ^ 3. Тогда R(x, С2) = 1 + 2ж + ж2. Задача. Найти ладейный многочлен доски С$ на рис. 4.4. Решение. Непосредственным подсчетом можно установить, что г0 = 1, т\ = 3, т2 = 1 и г* = 0, Рис. 4.4 г ^ 3. Тогда Д(ж, Сз) = 1 + Зж + ж2. Определение. Доски С\ и С2 называются независимыми, если их клетки располагаются на различных горизонталях и вертикалях. Пример независимых досок показан на рис. 4.5. Сз # # # F1 1* ▲ А # # А ы Рис. 4.5 Свойство 1. Правило произведения. Пусть R{x,C\) и R(x, С2) — ладейные многочлены независимых досок С\ и С2. Если доска С = С\ U С2, то R(x, С) = R(x, C\)R(x, C2). Доказательство. Пусть -к\— расстановка ладей на доске Сь 7г2 — расстановка ладей на доске С2. Тогда 7г = (7ri, 7г2) — перестановка ладей на доске С — С\ U С2. Верно и обратное. Пусть SVj и S^ — множество расстановок ладей на доске, соответственно С\ и С2. Тогда прямое произведение 5Л = 571, х 5Л, — множество расстановок ладей на доске С.
158 Гл. 4. Методы подсчета и оценивания Обозначим веса расстановок: cj(7Ti) = xkl, где к\ — число ладей в перестановке 7п; и>(тг2) = ж^2, где k<i — число ладей в перестановке 7Г2. Тогда вес перестановки 7г равен ы(тг) = хк>+к* = хк'х^ =ы(7г1)ы(тг2). В соответствии с тем, как введены веса перестановок, ладейные многочлены можно записать как сумму весов элементов множеств: Д(С,)= £ *(*,), Д(С2) = £ ы(7г2), Д(С) = £>(тг). TTlG&ri ^ES^ тге^тг Многочлены R(xtC\)t R(x,C2) и R(xtC) удовлетворяют всем условиям правила обобщенного произведения (см. п. 4.4), в соответствии с которым R(x, С) = R(x, C\)R(x, С2). □ Задача. Найти ладейный многочлен доски С запрещенных позиций из п клеток (рис. 4.6). Решение. Пусть С\ — доска из одной клетки, R(x,C\) = 1 + х. Ясно, что доска С состоит из п независимых досок С\. Отсюда следует, что R(x, С) = (R(x, С\))п = (1 + х)п. Свойство 2. Правило суммы. Пусть С — доска запрещенных позиций. Введем обозначения: Cia — доска с ладьей в клетке а (г — index); Се<ж — доска с удаленной клеткой а (е — erase). Тогда R(x,C) = xR(x,Cia) + R(x1Cea) или R(xia + га) = xR(ia) + R(ea) (рис. 4.7). Доказательство. Для доказательства данного свойства вновь рассмотрим ладейный многочлен как сумму весов перестановок. Все расстановки множества разобьем на два подмножества Sni„ и Sne , где Sni„ — перестановки с ладьей на клетке а; # # Ри< # а # "#] :. 4.6 # Рис. 4.7 >*** перестановки, которые не занимают клетку а. Тогда R(x, С) = Y, ы(тг) = Y, aajKJ + ^ "(**■) = = xR(xiCioc) + R(xiCeo(). *Ч* €SV. Ъеос ^^7геа
§4.6. Ладейные многочлены и многочлены попаданий 159 Множитель х перед скобкой — это вес ладьи в перестановке 7r;a, которая поставлена на выделенную клетку a. О Задача. Найти R(x,C) для доски на рис. 4.7. Решение. Воспользуемся правилом суммы, по которому R{x,C) = xR(ia)+ R(ea) = х(1 +х) + (1 +ж)3 = 1 +4ж + 4ж2 + + ж3. Отметим, что по виду полученного ладейного многочлена (производящей функции) можно сказать, что число способов расставить две ладьи на доску С равно 4. Свойство 3 для прямоугольных досок. Пусть С — прямоугольная доска запрещенных позиций размером тх п, т — число горизонталей] п — число вертикалей (рис. 4.8). На квадратной доске размером k x к можно к\ способами расставить к ладей. Различных досок к х к на доске тх п можно выбрать способами С^Ск. Отсюда r^ = C^C^kl — число способов расставить к ладей на исходной прямоугольной min(m,n) доске. Тогда R(x, С) = £ CM*;! xk. к=0 Задача. Найти R(xt С) для прямоугольной доски С размером 2x3 (рис. 4.8). 2 Решение. R(x,C) = J2C2C3klxk = С§С§0!ж° + к=0 + Сх2хС\\\хх +С|С|2!ж2 = 1 +6ж + 6ж2. Коэффициент при х2 показывает, что число способов поставить две ладьи на такую доску равно 6. 4.6.2. Многочлены попаданий Определение. Пусть дана квадратная доска размером п х п с запрещенными позициями (рис. 4.9). Обозначим через Ь)п(к) количество перестановок на квадратной доске п ладей, к из которых занимают запрещенные позиции. Многочленом попадания называется производя- п щая функция E(t) = ^ En(k)tk последовательного ста {Еп(к)}. Установим связь между многочленом попаданий и ладейным многочленом. Введем обозначения: Рис. 4.9 #|#|# # # # # # # #
160 Гл. 4. Методы подсчета и оценивания Sn = {7гь7Г2,...,7гП!} — множество всех перестановок п ладей на доске п х гг; ft = {cji , cj2, •..} — множество весов; и) : Sn —► ft — весовая функция, cj(7t) eft) — вес перестановки 7г е 5П; {1,2,..., га} — номера запрещенных клеток на доске гг х гг; Р\, Я?» • • •. Рт — свойства перестановок; я- е Sn обладает свойством Pj, если ее ладья занимает запрещенную позицию j\ „ , v fl, если 7г обладает войствомР7-, рз(7Г) = \г\ J (0, в противном случае; W{Pj) = Y^ -Pj(7r)CJ(7r) ~~ веса перестановок со свойством Pj\ nesn w(Php32.....pjk)= y, р01(к)Ык)-----р^Мк)- neSn веса перестановок со свойствами Р P Р • Г3\Г32 " ' Г3к> W(k) = Y W(Pj{Pj2... Pjk) — суммирование выполняется-...-j*) ся по всем сочетаниям (j\J2---Jk) длины А; из га свойств, число сочетаний равно С^. Принцип включения и исключения позволяет определить En(k) = CkW(k)-Ckk+lW(k+l) + ...+ + (-ir-bCkk+{m_k)W(k + (m-k)). Так как нас интересует лишь количество перестановок, то будем полагать u)(jr) = 1. Не трудно установить, что W(k) = — гк(п — ^)!» где Тк — количество способов расставить к ладей на запрещенных позициях доски п х п. Тогда En(k) = Ctrk(n-k)\-Ckk+lrk+l(n-(k + l))\ + ...+ + (-l)m-fcC*rm(n-m)!. Заметим, что г^ = 0 для всех к > п. С другой стороны, если m < тг, то Гк = 0 для всех к > га. Поэтому последнее выражение примет вид En(k) = Ckrk(n-k)\-Ck+lrk+l(n-(k + l))\ + ...+ + (-\f-kCkrn{n-n)\
§ 4.6. Ладейные многочлены и многочлены попаданий 161 или п—к Еп(к) = Ec-O'qUiWn- (fc + i))!. г=0 Теперь многочлен попаданий можно записать в виде TL TL TL К E(t) = Y,En(k)tk = ]Г J>l)^+irfc+i(n- (fc +i))!ife к=0 к=0г=0 Суммирование выполняется по координатам узлов сетки на рис. 4.10. Замена переменных суммирования А/ = & + гиг' = гв последнем выражении позволяет упростить многочлен попаданий и приводит его к виду ДО = ЕЕ(-1)*С5[гк(п-*)!<*-*, к=0 г=0 где суммирование уже выполняется по узлам сетки на рис. 4. И. Таким образом, ОД = |>(£(-1)*С^)(п-А0! Рис. 4.10 ИЛИ к=0 i=0 п E(t) = ^rk(t-l)k(n-k)l к=0 Для более компактной записи последнего выражения введем оператор £-1, действие которого распространим на функции целочисленного аргумента: £-Ч/Н) = /(*- О и s-k(f(n))=f(n-k). Например, к Z V у / i Рис. 4.11 е-1(п\) = (п- 1)! и £-к(п\) = (п-к)\. Заметим, что ((* - 1)е~1)кп\ = (t - \)кЕ~кп\ = (t - 1)к(п-к)\. Тогда многочлен попаданий перепишем в виде к=о ^(*) = Х>(*- l)fc(n- fc)! = £>((*- l)e-l)kn\ = k=0 k=0 k=Q 6 Иванов Б.Н.
162 Гл. 4. Методы подсчета и оценивания где х = (t— \)е 1. Таким образом, E(t) = R((t — l)s l)n\. Задача. Найти многочлен попаданий для доски 3x3 с запрещенными позициями на рис. 4.12. Запрещенные позиции отмечены темным цветом. Решение. Найдем ладейный многочлен доски запрещенных позиций, которая состоит из двух независимых досок С\ и С3. Тогда R(x) = R(CX )ЩС3) = (1 + я?)(1 + Зх + х2) = 1 + Ах + Ах2 + ж3. E(t) = R((t - 1)е-{)п\ = = (1 +4(t- l)e-1 +4((t- l)e~1)2 + ((* - 1)е'1)*)3\ = = 1 • 3! + 4(t - l)£~l3\ + 4(t - 1)V23! + (t- 1)3£"33! = = 3! + 4(t- l)2! + 4(t- l)2l! + (t- 1)30!. Итак, E(t) = 1 + 3t + t2 + t3. Анализ коэффициентов E(t) при tk показывает, что число перестановок, в которых ладьи не занимают запрещенных клеток, равно 1 (коэффициент при £°); перестановок с одной ладьей на запрещенных позициях — 3 (коэффициент при i1); перестановок с двумя ладьями на запрещенных позициях — 1 (коэффициент при £2); перестановок с тремя ладьями на запрещенных позициях — 1 (коэффициент при £3). #
Глава 5 ГЕНЕРАЦИЯ КОМБИНАТОРНЫХ ОБЪЕКТОВ В комбинаторных алгоритмах часто необходимо порождать и исследовать все элементы некоторого класса комбинаторных объектов. Наиболее общие методы решения таких задач основываются на поиске с возвращением, однако во многих случаях объекты настолько просты, что целесообразнее применять специализированные методы. Задачи, требующие генерации комбинаторных объектов, возникают при вычислении комбинаторных формул. Например, часто приходится вычислять суммы, имеющие вид y^J(x\,x2,...,xn), ,х2,.. где суммирование выполняется по всем последовательностям х\, ...,хп, удовлетворяющим некоторым ограничениям. В алгоритмах порождения комбинаторных объектов нас прежде всего будет интересовать сложность алгоритмов, т. е. общее количество времени, требующегося для порождения всего множества объектов. §5.1. Поиск с возвращением Использование компьютера для ответа на такие вопросы, как «сколько существует способов...», «перечислите все возможные. ..» или «есть ли способ...», обычно требует исчерпывающего поиска множества решений. Метод поиска с возвращением постоянно пытается расширить частичное решение. Если расширение текущего частичного решения невозможно, то возвращаются к более короткому частичному решению и пытаются снова его продолжить. Идею поиска с возвращением легче всего понять в связи с задачей прохода через лабиринт: цель попасть из некоторого заданного квадрата в другой заданный квадрат путем последовательного перемещения по квадратам. Трудность со- н к 6*
164 Гл. 5. Генерация комбинаторных объектов стоит в том, что существующие преграды запрещают некоторые перемещения. Один из способов прохода через лабиринт — это двигаться из начального квадрата в соответствии с двумя правилами: • в каждом квадрате выбирать еще неисследованный путь; • если из исследуемого в данный момент квадрата не ведут неисследованные пути, то нужно вернуться на один квадрат назад по последнему пройденному пути, по которому пришли в данный квадрат. Первое правило говорит о том, как расширить исследуемый путь, если это возможно, а второе правило — о том, как выходить из тупика. В этом и состоит сущность поиска с возвращением: продолжать расширение исследуемого решения до тех пор, пока это возможно, и когда решение нельзя расширить, возвращаться по нему и пытаться сделать другой выбор на самом близком шаге, где имеется такая возможность. Общий алгоритм В самом общем случае полагаем, что решение задачи состоит из вектора (аьа2,аз,...) конечной, но неопределенной длины, удовлетворяющего некоторым ограничениям. Каждое a* Е А*, где Ai — конечное линейно упорядоченное множество. Таким образом, при исчерпывающем поиске должны рассматриваться элементы множества (аьа2,аз,... ,а$) Е А\ х А2 х ... х А% для % — О, 1,2,... в качестве возможных решений. В качестве исходного частичного решения принимается пустой вектор () и на основании имеющихся ограничений выясняем, какие элементы из А\ являются кандидатами в а\. Обозначим это подмножество кандидатов через S\ С А\. В результате имеем частичное решение (а\). В общем случае для расширения частичного решения от (аьа2,а3,... ,afe_i) до (аьа2,а3,... ,а^) кандидаты на роль аь выбираются из S^ С А^. Если частичное решение (ai, a2, аз,..., a>k-\) не представляет возможности для выбора элемента а&, то Sk — 0; возвращаемся и выбираем новый элемент а^-х. Если новый элемент а^-х выбрать нельзя, возвращаемся еще дальше и выбираем новый элемент а^_2 и т.д. Этот процесс удобно представлять в терминах прохождения дерева поиска в глубину (см. п. 7.3). Процедура поиска с возвращением для нахождения всех решений формально представлена в алгоритме 5.1.
§ 5.2. Перестановки различных элементов 165 Алгоритм 5.1. 5, =AV,{} k = V,{ } while k > 0 do begin while Sk ф 0 do begin ak £Sk;{} Sk = Sk- {ak}; { } if (ai,a2,...,afe) then {} ft = ft+l; { } Sfc cAk;{} end; ft = ft-l;{ } end. Поиск с возвращением приводит к алгоритмам, экспоненциальной сложности, так как из предположения, что все решения имеют длину не более гг, исследованию подлежат приблизитель- п но П \А^\ элементов. В предположении, что все \Аь\ = С — кон- k=\ n станты, получаем экспоненциальную сложность ]\ \^к\ — Сп- к=\ Нужно помнить, что поиск с возвращением представляет собой только общий метод. Непосредственное его применение обычно ведет к алгоритмам, время работы которых недопустимо велико. Поэтому, чтобы метод был полезен, к нему нужно относиться как к схеме, с которой следует подходить к задаче. Схема должна быть хорошо приспособлена (часто это требует большой изобретательности) к конкретной задаче, так, чтобы в результате алгоритм годился для практического использования. § 5.2. Перестановки различных элементов Перестановки множества {ai,a2,... ,Оп} различных элементов относятся к часто порождаемым комбинаторным объектам. Без ограничения общности можно полагать, что элементами множества являются целые числа от 1 до гг, т. е. рассматриваются перестановки целых чисел {1,2,..., п}. Порождение перестановок на основе метода поиска с возвращениями выполняется в алгоритме 5.2.
166 Гл. 5. Генерация комбинаторных объектов Алгоритм 5.2. «1 = 1; О * = !;{ } while к > 1 do begin while Sfc ^ n do begin a/c = sk'y { } sfc =sfc + 1; { } while Sk ^ n and not flag(sk) do s^ = Sfc + 1; \f к = n then (ai, a2,..., an) else begin ft = ft + l;{ } 5/c = l; while Sk ^n and not flag(sk) do s^ = s^ + 1; end; end; ft = ft-l;{ } end; function flag(sk) sk (ai,a2,...,afc_i) /teg = ГДС/В; г=1; while г < A; and /fag do begin if a^ = Sfc then flag = FALSE, г = г+ 1; end. Заметим, что в процессе приспосабливания общего алгоритма 5.1 поиска с возвращениями к задаче порождения перестановок мы не вычисляли и не хранили явно множества 5^. В этом случае легче и достаточно хранить только наименьшее значение из Sk, т.е. sk, и следующее значение вычислять по мере необходимости. Проверка условия Sk ^ 0 соответствует условию sk < п; поскольку алгоритм устроен так, что перебор значений элемента Sk выполняется в порядке их возрастания. Поэтому неравенство sk>n соответствует пустому множеству кандидатов Программа на языке Pascal реализации рассмотренного метода генерации перестановок приводится в алгоритме 5.3. Следует отметить, что в программе размерность (длина) п перестановок
§ 5.2. Перестановки различных элементов 167 читается из файла и порождаемые перестановки также сохраняются в файле. Попутно программа вычисляет время порождения всех перестановок с точностью до сотых долей секунд, которое сохраняется в конце файла сгенерированных перестановок. Алгоритм 5.3. Pascal Program Start_BackTrack; {} uses CRT,DOS; Const max_n=20; Type Vector=array[l..max_n] of Longlnt; Function Flag( Var a:Vector; sk:Longlnt; k:lnteger): Boolean; { } Var i :Integer; yes : Boo lean; begin; yes:=TRUE; while (i<k) and yes do begin if a[i]=sk then yes:=FALSE; i:=i+l; end; Flag:=yes; end;{ } Procedure BackTrack( var f:Text; Var a:Vector; n:lnteger); { > Const m :LongInt=0;{} Var s : Vector; i,k :Integer; begin; for i:=l to n do s[i]:=0; s[l]:=l;
168 Гл. 5. Генерация комбинаторных объектов к:=1; while k>0 do begin while s[k]<=n do begin a[k]:=s[k]; repeat { } s[k]:=s[k] + l; until (s[k]>n) or Flag(a,s[k],k); if k=n then begin {} m:=m+l; Write(f,m,') '); for i:=l to n do Write(f,a[i],' '); WriteLn(f); end else begin{ } k:=k+l; s[k]: = l; while (s[k]<=n) and Not Flag(a,s[k],k) do s[k]:=s[k] + l; end; end; k:=k-l; end; end;{ } Var{ } a :Vector; n [Integer; f :Text; {} Hour,Minute,Second,SeclOO,rHour,rMinute,rSecond,rSeclOO :Word; delta :LongInt; begin{ } Assign(f,'BkTrack.in'); Reset(f);{ } ReadLn(f,n);{ } Close(f); Assign(f,'BkTrack.out'); Rewrite(f); { } GetTime(Hour,Minute,Second,SeclOO); BackTrack (f,a,n); GetTime(rHour,rMinute,rSecond,rSeclOO); delta:=rHour-Hour; delta:=delta*60+rMinute-Minute;
§5.3. Эффективное порождение перестановок 169 delta:=delta*60+rSecond-Second; delta:=delta*100+rSeclOO-SeclOO; WriteLn(f,'BpeMH счета=\с!еЙа div 100,'.\delta mod 100,' сек'); Close(f); end.{ } § 5.3. Эффективное порождение перестановок Последовательность тг! перестановок на множестве {1,2,... ...,гг}, в которой соседние перестановки различаются так мало, как только возможно, — лучшее, на что можно надеяться с точки зрения минимизации объема работы, необходимого для порождения перестановок. Для того чтобы такое различие было минимально возможным, любая перестановка в нашей последовательности должна отличаться от предшествующей ей транспозицией двух соседних элементов. Такую последовательность перестановок легко построить рекурсивно. Для п = 1 единственная перестановка {1} удовлетворяет нашим требованиям. Предположим, мы имеем последовательность перестановок 7Г1,7Г2,7Гз,... на множестве {1,2,..., тг}, в которой последовательные перестановки различаются только транспозицией смежных элементов. Расширим каждую из этих (тг — 1)! перестановок, вставляя элемент тг на каждое из тг возможных мест. Порядок порождаемых таким образом перестановок будет следующим: 12 1 < 123 132 312 321 21 I 231 213 2 3 14 2 3 4 1 2 4 3 1 4 2 3 1 4 2 13 2 4 13 2 14 3 2 13 4
170 Гл. 5. Генерация комбинаторных объектов Данную последовательность перестановок можно порождать итеративно, получая каждую перестановку из предшествующей ей и небольшого количества добавочной информации. Это делается с помощью трех векторов: текущей перестановки 7г = = (я"ья"2»..., 7гп), обратной к ней перестановки р = (pi,р2,..., рп) и записи направления с?^, в котором сдвигается каждый элемент г (—1, если он сдвигается влево; +1, если вправо; и 0, если не сдвигается). Элемент сдвигается до тех пор, пока не достигнет элемента, большего, чем он сам; в этом случае сдвиг прекращается. В этот момент направление сдвига данного элемента изменяется на противоположное и передвигается следующий меньший его элемент, который можно сдвинуть. Поскольку хранится перестановка, обратная к 7г, то в 7г легко найти место следующего меньшего элемента. Алгоритм 5.4 представляет собой реализацию рассмотренного метода. Корректность алгоритма доказывается индукцией по п. Алгоритм порождения всех п\ перестановок линеен, сложность его определяется как п\ + о(п\). Алгоритм 5.4 — один из наиболее эффективных алгоритмов для порождения перестановок. Алгоритм 5.4. for г = 1 to n do begin щ = pi = i\ di = —\\ end; d\ =0; 7Го = 7Tn+i = m = n + 1; {} while m ф 1 do begin (7Ti,7T2, ...,7Tn); m = n; while 7rpm^dm > m do begin #771 = #771 > m = m — 1; end; Ркртп ^ Pm\ P — K~X, 7l>m+dm = ™ end. Рабочая программа на языке Pascal реализации эффективного метода генерации перестановок приводится в алгоритме 5.5. В качестве примера в алгоритме 5.6 приводится программа реализации эффективного метода генерации перестановок, написанная на языке С.
§5.3. Эффективное порождение перестановок 171 Алгоритм 5.5. Pascal Program Start_Effect; { } uses CRT,DOS; Const max_n=20; { } Type Vector=array[0..max_n+1] of Integer; Var f :Text; { } Procedure Effect( Var z:Vector; n:lnteger ); Const к :LongInt=0; {} Var p,d :Vector; pm,dm,zpm :Integer; i,m,w :Integer; begin; for i:=l to n do begin z[i]:=i; p[i]:=i; d[i]:=-l; end; d[l]:=0; m:=n+l; z[0]:=m; z[n+l]:=m; while mol do begin k:=k+l; Write(f,k,') '); {} for i:=l to n do Write(f,z[i],' '); WriteLn(f); m:=n; while z[p[m]+d[m]]>m do begin d[m]:=-d[m]; m:=m-l; end; pm:=p[m]; dm:=pm+d[m]; w:=z[pm]; z[pm]:=z[dm]; z[dm]:=w; zpm:=z[pm]; w:=p[zpm]; p[zpm]:=pm; p[m]:=w; end; end;{ } Var{ } z :Vector; n :Integer; {} Hour,Minute,Second,Sec 100 :Word; rHour,rMinute,rSecond,rSeclOO :Word;
172 Гл. 5. Генерация комбинаторных объектов delta :LongInt; begin Assign(f,'Effect.in'); Reset(f); { } ReadLn(f,n); { } Close(f); Assign(f,'Effect.out'); Rewrite(f); { } GetTime(Hour,Minute,Second,SeclOO); Effect(z,n); GetTime(rHour,rMinute,rSecond,rSeclOO); delta:=rHour-Hour; delta:=delta*60+rMinute-Minute; delta:=delta*60+rSecond-Second; delta:=delta*100+rSecl00-Secl00; WriteLn(f,'BpeMH счета=',delta div 100,'.',delta mod 100,' сек'); Close(f); end. Алгоритм 5.6. С #include <stdio.h> #include <stdlib.h> #include <time.h> #include <dos.h> void main(){ [1] [2] [n] int n; int *z,*p,*d; FILE *f; struct dostime_t t,tnew; long delta; unsigned long k; int pm,dm,zpm; int i,m,w; _dos_gettime(&t); f=fopen(Mprimer.inM,MrtM); fscanf(f,M%dM,&n);
§5.4. Порождение подмножеств множества 173 z=(int*)malloc((n+2)*sizeof(int)); p=(int*)malloc((n+2)*sizeof(int)); d=(int*)malloc((n+2)*sizeof(int)); fclose(f); f=fopen(" primer, out M,"wtM); for( i=l; i<=n; i++ ){ z[i]=p[i]=i; d[i]=-l; } d[l]=0; z[0]=z[n+l]=m=n+l; k=0; while( m!=l ){ k++; fprintf(f,"\n%ld) ",k); for( i=l; i<=n; i++ )fprintf(f,M%d",z[i]); m=n; while( z[p[m]+d[m]]>m ) d[m]=-d[m]; m-; pm=p[m]; dm=pm+d[m]; w=z[pm]; z[pm]=z[dm]; z[dm]=w; zpm=z[pm]; w=p[zpm]; p[zpm]=pm; p[m]=w; } free(z); free(p); free(d); _dos_gettime(&tnew); delta=tnew.hour; delta-=t.hour; delta*=60; delta+=tnew.minute; delta-=t.minute; delta*=60; delta+=tnew.second; delta-=t.second; delta*=100; delta+=tnew.hsecond; delta-=t.hsecond; fprintf(f,"\nBpeMH счета %ld.%ld ceKM,(long)(delta/100), (long)(delta%100)); fclose(f); } § 5.4. Порождение подмножеств множества Порождение подмножеств множества {&\, &2,. •., &п} — эквивалентно порождению тг-разрядных двоичных наборов щ, принадлежащих подмножеству, если и только если г-й разряд равен единице. Таким образом, задача порождения всех подмножеств множества сводится к задаче порождения всех возможных двоичных последовательностей длины п. Очевидно, что наиболее прямым способом порождения всех двоичных наборов длины п является счет в системе счисления с основанием 2, как
174 Гл. 5. Генерация комбинаторных объектов показано в алгоритме 5.7. Перевод этого алгоритма на язык подмножеств множества {а\, а2,..., ап} осуществляется согласно алгоритму 5.8, где добавлен фиктивный элемент ап+\. Алгоритм 5.7. 2 п for г = 0 to n do bi = 0; while bn ф 1 do begin (ьп_1,ьп_2,...,Ьо); г = 0; while bi = 1 do begin г = г+1; end; bi = U end. Алгоритм 5.8. S = 0\ while an+\ ф S do begin г = 0; while a; € S do begin S = S-{oi}\ г = г + 1; end; 5 = 5U{oi}; end. Задача. Счастливая сумма. Дано тг(тг ^ 2) произвольных цифр: ai,a2, ...,an, где a^ Е {1,2,... ,9}, и произвольное целое число т. Написать программу, которая расставляла бы между каждой парой цифр: ai,a2,...,an, записанными именно в таком порядке, знаки «+», «—» так, чтобы значением получившегося выражения было число га. Например, если aj,a2,... ,an соответственно равны 1,2, ,9 и га = 5, то подойдет следующая расстановка знаков: 1 -2 + 3 — 4 + 5-6 + 7 — 8 + 9. Результаты расчетов сохранить в текстовом файле. Исходные дан-
§5.4. Порождение подмножеств множества 175 ные представляются в текстовом файле со следующей структурой. Первая строка — целое число п. Вторая строка — целое число т. Третья строка — цифры а\, а2,..., ап через пробелы. Пример файла исходных данных 14 71 65884752345789 Выходной файл для данного примера 6+5+8+8+4+7+5+2+3+4-5+7+8+9=71 6+5+8+8+4+7+5-2-3+4+5+7+8+9=71 6+5+8+8+4+7-5+2+3+4+5+7+8+9=71 6-5+8+8+4+7+5+2+3+4+5+7+8+9=71 Время счета = 0.60 с. Ясно, что для решения данной задачи достаточно выполнить полный перебор всех возможных вариантов расстановки знаков между каждой парой цифр аьаг, ...,Оп и выбрать те расстановки знаков «±», которые удовлетворяют условию равенства суммы величине га. Всего позиций для расстановки «±» равно тг— 1, а значит, для полного перебора необходимо проверить 2n_1 двоичных наборов, если «+» будет соответствовать 1, а «—» будет соответствовать 0. Программа решения задачи «счастливый билет» представлена алгоритмом 5.9. Процедура SubSet (подмножество) этой программы реализует рассмотренный выше алгоритм 5.7 счета в системе счисления с основанием 2 для порождения всех (п— 1)-разрядных наборов. Порожденные двоичные наборы используются в процедуре Summa (сумма) для формирования суммы, соответствующей данному набору знаков «±», где «+» соответствует 1, а «—» соответствует 0. Алгоритм 5.9. Pascal Program Lucky_Ticket; { } uses CRT,DOS; Const max_n=20; Type
176 Гл. 5. Генерация комбинаторных объектов Vector=array[l..max_n] of Longlnt; Procedure Summa( var f:Text; var a,b:Vector; n,m:lnteger); { } Var S :LongInt; i :Integer; begin S:=a[l]; for i:=l to n-1 do S:=S+(2*b[i]-l)*a[i+l]; if S=m then begin Write(f,a[l]); for i:=l to n-1 do begin if b[i] = l then Write(f,'+') else Write(f,'-'); Write(f,a[i+1]); end; WriteLn(f,' = ',S:4,' - число найдено!'); end; end; Procedure SubSet( var f:Text; var a:Vector; n,m:Integer); { 2} Var b: Vector; i :Integer; begin for i:=l to n do b[i]:=0; while b[n]ol do begin Summa(f,a,b,n,m); i:=l; while b[i] = l do begin b[i]:=0; i:=i+l; end; b[i]:=l; end; end; Var{ }
§5.5. Генерация размещений с повторениями 177 a :Vector; n,m,i :Integer; f :Text; {} Hour,Minute,Second,Sec 100 :Word; rHour,rMinute,rSecond,rSeclOO :Word; delta :LongInt; begin { } Assign(f,'Number.in'); Reset(f);{ } Read(f.n); { } Read(f,m); { } for i:=l to n do Read(f,a[i]); Close(f); Assign(f,'Number.out'); Rewrite(f); { } GetTime(Hour,Minute,Second,SeclOO); SubSet(f,a,n,m); GetTime(rHour,rMinute,rSecond,rSeclOO); delta:=rHour-Hour; delta:=delta*60+rMinute-Minute; delta:=delta*60+rSecond-Second;delta:=delta*100+rSecl00-Secl00; WriteLn(f); ШгйеЬп^/Время cqeTa=',delta div 100,'.',delta mod 100/ c'); Close(f); end. { } § 5.5. Генерация размещений с повторениями Порождение множества всех размещений с повторениями длины к из элементов {ао,бч,... ,an_i} эквивалентно генерации множества fc-разрядных чисел в системе счисления с основанием п: на г-м месте в размещении будет располагаться элемент а^, если цифра в г-м разряде соответствующего числа равна г. Всего размещений с повторениями пк. Например, для к = 2 и п = 3 все наборы длины два в системе счисления с основанием три можно записать: 00, 01, 02, 10, 11, 12, 20, 21, 22. Тогда эквивалентные размещения примут вид (а0а0), (а0а\), (а0а2), (а\а0), (а\а\), (а\а2), (а2а0), (а2а\), (а2а2). Алгоритм 5.10 использует фиктивный элемент Ь^ при порождении наборов длины к в системе счисления с основанием
178 Гл. 5. Генерация комбинаторных объектов п, где hi е {О, 1,... ,п — 1}, г = О, 1,... ,fc, т. е. Ь{ — это цифры генерируемого числа в системе счисления с основание п. Алгоритм 5.10. п к for г = 0 to к do Ъ{ = 0; while bk ф 1 do begin (bfc_i,bfc_2, ...,6o); г = 0; while bi = n — 1 do begin *г = О; г = г+ 1; end; bi = bi+ 1; end. § 5.6. Порождение сочетаний Обычно требуются не все подмножества множества {а\ ,а2,... ... ,ап}, а только те, которые, удовлетворяют некоторым ограничениям. Особый интерес представляют подмножества фиксированной длины fc, C^ сочетаний из п предметов по к штук. Как обычно, предполагаем, что основным множеством является множество натуральных чисел {1,2,... ,гг}; таким образом, будем порождать все сочетания длины к из целых чисел {1,2,... ,гг}. Так, например, С| = 20 сочетаний из шести предметов по три (т.е. трехэлементные подмножества множества {1,2,3,4,5,6}) записываются в лексикографическом порядке следующим образом: 123 124 125 126 134 135 136 145 146 156 234 235 236 245 246 256 345 346 356 456 Сочетания в лексикографическом порядке можно порождать последовательно простым способом. Начиная с сочетания {1,2, ...,fc} следующее сочетание находится просмотром текущего сочетания справа налево для того, чтобы определить место самого правого элемента, который еще не достиг своего мак-
§5.6. Порождение сочетаний 179 симального значения. Этот элемент увеличивается на единицу, и всем элементам справа от него присваиваются новые возможные наименьшие значения, как показано в алгоритме 5.11. Алгоритм порождения всех С^ сочетаний линеен, его сложность СЙ + о(С*). Алгоритм 5.11. со = -1; for г = 1 to к do с* = г; i = i; while j Ф О do begin (ci,C2 с*); j = k; while Cj=n — k+jdoj=j— 1; Cj=Cj+ 1; for г = j + 1 to A; do c$ = q_i + 1; end. Задача. Выпуклый многоугольник. Дано множество пар целых чисел (х\,у\), (я?2,У2)» •••> (жп,2/п) — координаты точек на плоскости. Написать программу выделения тех точек из заданного множества, которые являются вершинами выпуклого многоугольника, содержащего все остальные точки. Исходные данные представлены в текстовом файле, имеющем следующую структуру. Первым числом в файле является целое п — количество точек. Последующие числа определяют п пар целых (х{,у{) — координаты точек. Результаты расчетов, признаки принадлежности исходных точек выпуклому многоугольнику: 0 — точка не принадлежит, 1 — точка принадлежит, сохранить в текстовом файле. Пример файла исходных данных 15 00 99 51 23 27 11 54 67 15 67 34 57 78 87 64 Выходной файл для данного примера 1110 10001 0000 1 0 Решение. Если не применять специальных методов, то в качестве решения можно использовать следующий алгоритм. Ясно, что точка (х{,у{) является вершиной выпуклого многоугольника, если она не лежит ни в одном треугольнике, вер-
180 Гл. 5. Генерация комбинаторных объектов шинами которых являются исходные точки (zi,j/i), (ж2>2/2)> ••• . ..,(жп,уп) без рассматриваемой точки (хихц). Всего треугольников из п точек можно составить С„ + о(С*). Тогда сложность задачи полного перебора треугольников для каждой точки (хигц) составит 0(пА). Реализация данного подхода представлена программой на языке Pascal в алгоритме 5.12. Алгоритм 5.12. Program Start_Evelope; { } uses CRT,DOS; Const n_max=100; Type Vector=array[l..n_max] of Integer; Combine=array[0..3] of Integer; Var f :Text; {} x,y : Vector; {} z :Vector; { } Procedure Envelope( var c:Combine; nrlnteger); {} Const k :Integer=3; Var i,a :Integer; kl,k2,k3 :Integer; signl,sign2,sign3 :Integer; begin kl:=c[ll; k2:=c[2J; k3:=c[3]; for i:=l to n do begin if (i=kl) or (i=k2) or (i=k3) then continue; a:=(x[kl]-x[i])*(y[k2]-y[i])-(x[k2]-x[i])*(y[kl]-y[i]); if a=0 then continue; signl:=a div abs(a); a:=(x[k2]-x[i])*(y[k3]-y[i])-(x[k3]-x[i])*(y[k2]-y[i]); if a=0 then continue; sign2:=a div abs(a); a:=(x[k3]-x[i])*(y[kl]-y[i])-(x[kl]-x[i])*(y[k3]-y[i]); if a=0 then continue; sign3:=a div abs(a);
§5.6. Порождение сочетаний 181 if (signl=sign2) and (sign2=sign3) then z[i]:=0; end; end; Procedure Print( var c:Combine; nrlnteger); Var i :Integer; begin WriteLn(f); for i:=l to ndo Write(f,c[i],' '); end; Procedure Combination( nrlnteger); { 3} Const к :Integer=3; { } Var с :Combine; {} i,j [Integer; begin c[0]:=-l; for i:=l to к do c[i]:=i; while j<>0 do begin { } Envelope(c,n); j:=k; while c[j]=n-k+j do j:=j"^ c[j]:=c[j] + l; for i:=j+l to к do c[i]:=c[i-l] + l; end; end; Var{ } i,n :Integer; { } begin { } Assign(f,'Envelope.in'); Reset(f); { } Read(f.n); { }
182 Гл. 5. Генерация комбинаторных объектов for i:=l to n do begin Read(f,x[i],y[i]); z[i]: = l;end; Close(f); Assign(f,'Envelope.out'); Rewrite(f); { } Combination(n); WriteLn(f); { } for i:=l to ndo Write(f,z[i],' '); Close(f); end. { } § 5.7. Порождение композиций и разбиений Рассмотрим задачу порождения разбиений положительного числа п в последовательность неотрицательных целых чисел {z{lz2....1zk}1 так что zx + z2 + ... + zk = n. Разбиение {z\,Z2—,zk} называется композицией числа гг, если учитывается порядок чисел ^. Как правило, интересуют композиции, в которых либо все z% ^ 0, либо все z% > 0. Разбиение {z\,Z2 ,zk} называется разбиением числа гг, если все ^>0и порядок чисел zi не важен. По сути разбиение {z\,Z2 ,zk] числа п является мультимножеством (см. п. 2.8). Рассмотрим примеры разбиения числа п = 3: (1,2), (2, 1) — все композиции числа три из двух частей, ^ > 0; (1,1,1) — все композиции числа три из трех частей, zi > 0; (0,3), (1,2), (2, 1), (3,0) — все композиции числа три из двух частей Zi ^ 0; (3), (1,2), (1,1, 1) — все разбиения числа три. Композиции Zi ^ О Композицию {z\, 22,..., £&}, где zi ^ 0, числа z\ + z2 + ... + + zk = п можно интерпретировать следующим образом. Каждое значение Zi— \i + lj + ... + \i представим как сумму единиц, количество которых Z{. Индекс у элемента 1^ показывает его принадлежность разложению числа z%. Таким образом, мы ввели к типов различных элементов {1ь 1г,..., Ц}, значение каждого из них равно единице. Теперь любую композицию можно представить как сумму, составленную из п произвольных единиц множества {li, 12,..., U}- Суммируя подобные единицы 1; с одинаковыми индексами, получим соответствующие значения Zi композиции. Данное соответствие является взаимно одно-
§ 5.7. Порождение композиций и разбиений 183 значным, откуда и следует, что число композиций равно числу k , , сочетаний с повторениями: Сп = С^+к_{ = С™+к_{. Каждое из сочетаний С^_хк_х можно интерпретировать как расстановку 1 и 0 длины п + к — 1, в которой п единиц и к — 1 нуль, т.е. каждому сочетанию ставим в соответствие (п + к — 1)-разрядное число из единиц и нулей; верно и обратно. Суммируя в таком числе слева направо единицы между нулями (всего к — 1), будем получать соответствующие значения членов композиции Zi (всего к). Например, одному из С^_хк_х = C^7_j сочетаний 11011100111101111111010 соответствует композиция (2,3,0,4,7,1,0) числа 17. Ясно, что методы предыдущего раздела генерации подмножеств множества легко применить к последовательному порождению рассмотренных композиций z% ^ 0. КОМПОЗИЦИИ Zi > О Удобное представление композиций получается из рассмотрения целого числа п как отрезка прямой, состоящего из отрезков единичной длины. Линия разделена п— 1 точками, и композиция получается пометкой некоторых из них. Элементами композиции являются просто расстояния между смежными точками. -* 2 *~*— 1—*~< 2 *~* 2 *~*— 1—► • @ @ • @ • @ На рисунке показано графическое представление композиции (2,1,2,2, 1) для числа п = 8. Очевидно, что каждая композиция числа п соответствует способу выбора подмножества из п — 1 точек. Каждой точке можно сопоставить двоичную цифру, и, таким образом, композиции п будет соответствовать (п— 1)-разрядное число. В этой интерпретации композиция из к частей соответствует (п — 1)-разрядному числу ровно с к — 1 единицами, и поэтому существует C%Z\ таких композиций. Воспользуемся методами предыдущего раздела для генерации композиций Zi > 0. Учитывая, что в композиции z\ + z2 + ... + + Zk=n каждый из Zi > 0, тогда для новых переменных т^ = Zi — — 1 (ri ^ 0) получаем соответствующую композицию {Vi,r2,... ..., Гк} для числа п — к = т\ + г2 + ... + г^, т^ ^ 0. Генерация слагаемых т% ^ 0 композиции {т\, г2,..., г&} подробно разобрана
184 Гл. 5. Генерация комбинаторных объектов в предыдущем разделе добавляя к каждому из ri по единице, получим слагаемые z% > О композиции {z\,z2,..., Zk]. Разбиения Разбиения п отличаются от композиций п тем, что порядок компонент не важен, так что, например, не делается различия между, скажем, 1 + 1+2, 1+2 + 1,2 + 1 + 1. Таким образом, разбиение п можно рассматривать как мультимножество, которое записывается следующим способом: {mi • zum2*z2,...,mk*zk}, где имеется т\ вхождений z\, т2 вхождений z2, ra3 вхождений к z$ и т. д. и п = ^ттад. Каждое разбиение удовлетворяет z\ > i=\ > z2 > ... > Zk. Рассмотрим пример генерации разбиений для п = = 7. Последовательность генерации разбиений данного примера далее будет положена в основу алгоритма порождения полного списка разбиений. Идея приведенного списка разбиений состоит в том, чтобы переходить от одного разбиения к следующему, рассматривая самый правый элемент тк • z^ разбиения. Если m^Zk достаточно велико (rrik > 1), можно исключить два z^ для того, чтобы добавить еще одно z^ + 1 (или включить одно z^ + 1, если в текущий момент его нет). Если тк = 1, то rrik-\Zk-\ +rrikZk достаточно велико для того, чтобы добавить z^-x + 1. Все, что остается, превращается в соответствующее число единиц и формируется новое разбиение.
§ 5.7. Порождение композиций и разбиений 185 Алгоритм 5.13 использует рассмотренный процесс для порождения всех разбиений числа п. Алгоритм 5.13. п z-\ = 0; m_i = 0; z0 = п + 1; mo =0; z\ = l; ш\ = n; while k ф 0 do begin (mi . 2?i, rri2 . Z2>..., rrik . Zk); Summa = m^z^', if rrik = 1 then begin k = k- 1; Summa = Summa + т^^; end; if £fc_i = Zk + 1 then begin k = k- 1; ^fc = ^fc + 1; end else begin Zk = *k + l; mk = 1; end; if Summa > zk then begin ^fc+i = l; mfc+i = Summa — z^\ k = k+ 1; end; end. Алгоритм 5.13 линеен, так как число операций, необходимых для перехода от одного разбиения к другому, ограничено константой, не зависящей от п и к. Программа на языке Pascal реализации рассмотренного метода генерации разбиений чисел приводится в алгоритме 5.14. Отметим, что в программе число для разбиения п читается из
186 Гл. 5. Генерация комбинаторных объектов файла, а порождаемые разбиения сохраняются в файле. Попутно программа вычисляет полное время генерации всех разбиений с точностью до сотых долей секунд. Алгоритм 5.14. Pascal п Program Start_Divide; { } uses CRT,DOS; Const max_n=100; { } Type Vector=array[-l..max_n] of Integer; Var f :Text; z,m :Vector; Procedure Print( var m,z:Vector; k:lnteger);{} Var i [Integer; begin Write(f,'{'); for i:=l to k do begin Write(f,m[i],'*\z[i]); if iok then Write(f,7); end; WriteLn(f,'}'); end; Procedure Divide( n:lnteger);{ } Var k,Sum :Integer; begin; k:=l; z[-l]:=0; m[-l]:=0; z[0]:=n+l; m[0]:=0; z[l]:=l;
§ 5.7. Порождение композиций и разбиений 187 m[l]:=n; while к<>0 do begin Print (m,z,k); Sum:=m[k]*z[k]; if m[k] = l then begin k:=k-l; Sum:=Sum+m[k]*z[k]; end; if z[k-l]=z[k]+l then begin k:=k-l; m[k]:=m[k]+l; end else begin z[k]:=z[k] + l; m[k]:=l; end; if Sum>z[k] then begin z[k+l]:=l; m[k+l]:=Sum-z[k]; k:=k+l end; end; end; Var{ } n :Integer; { } Hour,Minute,Second,SeclOO :Word; rHour,rMinute,rSecond,rSec 100 :Word; delta :LongInt; begin { } Assign (f,'Divide.in'); Reset (f); { } ReadLn(f,n); { } Close (f); Assign (f/Divide.ouf); Rewrite©; { } GetTime(Hour,Minute,Second,SeclOO); Divide(n); GetTime(rHour,rMinute,rSecond,rSeclOO); delta:=rHour-Hour; delta :=delta*60+rMinute-Minute; delta :=delta*60+rSecond-Second; delta:=delta*100+rSecl00-Secl00;
188 Гл. 5. Генерация комбинаторных объектов WriteLn(f,'BpeMH счета=\delta div 100,'.\delta mod 100,' сек); Close(f); end. { } § 5.8. Генерация случайных перестановок Пусть 7г = (я*!, 7Г2,..., тгп) — произвольно выбранная перестановка целых чисел 1, 2,..., га, например, 7г = (1, 2,..., га) — тождественная. Случайную перестановку можно получить за линейное время О(га) из выбранной перестановки 7г = (7Г1,7г2,... ,7гп), выполнив в ней га транспозиций (см. п. 8.6). Для промежуточных перестановок введем верхний индекс, значение которого будет соответствовать количеству выполненных транспозиций. Один из элементов в каждой транспозиции выбирается случайным образом. Индекс такого элемента устанавливается функцией rand(fe,i), которая порождает независимые случайные целые числа на отрезке [kj] с равномерным распределением. Положим 7г(°) = (7г| ',7Г£ ',..., 7г^ М равной исходной перестановке 7г = (7Г1,7Г2,... ,7гп). Каждая следующая перестанов- (к) ( (к) (к) (к)\ ка 7rw = 17Tj ,7Г2 ,... ,7Гп ) получается из предыдущей пе- (к-\) ( (к-\) (к-\) (к-\)\ рестановки 7г^ 1) = 1щ ;,7г^ ',..., яй М транспозицией элементов 7г£ ~ ' и ^and^n)' где к = 1,2, ...,га. Между элементами перестановок ir^°\ir^\ ... ,7г^ выполняются равенства ^п)=^п-|) = ... = 4*),где* = 1,2,...,п. Покажем, что после выполнения всех указанных га транспозиций равновероятно получение любой из га! возможных перестановок <7 = (<7i,<72, .. . ,СГП) ИСХОДНЫХ ЧИСеЛ 7Г = (7Г1,7Г2, .. . ,7Гп)- Для этого достаточно проверить, что Рг(7г^ = а) = 1/га!. С этой целью введем события А\, А2,..., Ап: Ах = |тг[1} = (л } = {*$nd{ltn)) = °\ } , А ( (к) I (к~\) д (к~\) Ак = \*к =(Тк\*\ =<7\&К2 = = <72& ... &1Гк-\ =ак-\\ =
§5.8. Генерация случайных перестановок 189 Г (fc-l) I (k~\) g (fc-1) = |7rrand(ifeIn)=(T*Fl "*1&*2 = = (72& ... &^V =^-l| = = i71"^ =(7л|7Г11) =^1&7Г22) = <72& ■•• ^^-"l^ =(7k-A , fe = 2,...,n. Вероятности данных событий, согласно схеме формирования перестановок 7г(°), я^1),..., 7rW, равны Рт(Ак) = 1/(п-к+ 1), где к = 1,2,...,гг. Условие 7г[ ~ ' = cti & 7г^ ~ ' = сг2 & ... &я"[_~[ ' = сг^_1 в событии Аь, к = 1, 2,... ,гг, обеспечивает выбор элемента ^ancKfc п) из мно" Г (fc-i) (fc-i) №-1)1 жества ^7Г^. »я"д.+1 , -. -, тг^ >, которое совпадает с множеством {<7fc,<7fc+i,... ,<тп}. Индекс же rand(fc,n) элемента ^п^п) является независимой случайной величиной с равномерным распределением на отрезке [к,п] целых чисел. Теперь заметим, что Рг (*<"> = а) = Рг (тг<п) = (л &4П) = а2 & .-. &4П) = *п) = = РГ (тг[1} = (71 &7Г^2) = (72 & . . . &*£>> = (7П) = = Рг(Лп)Рг(Лп_1) ■... .Рг(Л0 = IxIx...xl = l Рассмотренный метод генерации случайной перестановки представлен в алгоритме 5.15. Алгоритм 5.15. 7Г = (7Г1,7Г2, ,7ГП) for к = 1 to n do 7Tfc = fc; {} for fc = 1 to n - 1 do begin {} { 7Tfc <-► 7Trand(fcin)} m = rand(k,n)\ w = 7r[fc]; 7r[fc] = 7r[ra]; 7г[ш] = гу; end.
190 Гл. 5. Генерация комбинаторных объектов Если генерацию перестановки вести с конца, то алгоритм примет следующий вид. for к = 1 to n do 7Tfc = к; {} for к = п downto 2 do begin {} { 7Tfc <-► 7Trand(iffc)} m = rand(\,k); w = 7r[fc]; 7r[fc] = 7r[ra]; тг[т] = w\ end.
Глава 6 СОРТИРОВКА И ПОИСК Рассматриваемые здесь вопросы можно отнести к наиболее часто встречающимся в задачах машинной обработки данных. Почти во всех компьютерных приложениях множество объектов должно быть переразмещено в соответствии с некоторым заранее определенным порядком. Очевидно, что с сортированными данными легче работать, чем с произвольно расположенными. Сортировка больших объемов данных составляет значительную часть коммерческой обработки данных, эффективные алгоритмы для сортировки важны и с экономической точки зрения. Эффективность оценивается с точки зрения памяти и времени, а также простоты программирования. Простота программирования предполагает и простоту понимания используемого метода, поскольку для того, чтобы написать хорошую программу, важно хорошо понять соответствующий метод. В наших же оценках мы будем учитывать только число сравнений. Самые простые алгоритмы сортировки, основанные на сравнении элементов, имеют сложность порядка 0(п2), а лучшие из них обходятся количеством сравнений 0(nlog2(n)). Задачу сортировки можно сформулировать так: дана последовательность из п элементов а^аг,... ,ап, выбранных из множества, на котором задан линейный порядок, т.е. для любых ai,a,j выполняется ЛИбО CLi < CLj, ЛИбО CLi ^ <Zj, ЛИбО, <Zf = aj, ЛИбО CLi > CLj, ЛИбО CLi ^ CLj. Требуется найти перестановку 7г = (7Ti,7T2, ... ,7гп) этих п элементов, которая отобразит данную последовательность в неубывающую последовательность Отг, ^ аК2 ^ ... ^ аКп. Как правило, далее будем получать саму упорядоченную последовательность, а не упорядочивающую перестановку 7Г. Методы сортировки классифицируются на внутренние (когда данные размещаются в оперативной памяти) и внешние (когда данные размещаются на внешней памяти). Внешняя сортировка составляет часть таких приложений, в которых в работу вовлекается гораздо больше элементов, чем можно сразу запомнить в оперативной памяти. Поэтому методы внешней сортировки применимы к данным, находящимся на внешних устройствах памяти, и имеют огромное коммерческое значение. Внутренняя сортировка важна как для разработки алгоритмов, так и для коммерческих приложений. Сортируемые данные размещаются в оперативной памяти. Здесь рассматриваются именно методы внутренней сортировки данных. Известно много алгоритмов сортировки дан-
192 Гл. 6. Сортировка и поиск ных. Почему же так много методов сортировки? Ответ состоит в том, что каждый метод имеет свои преимущества и недостатки, поэтому он оказывается эффективнее других при некоторых структурах данных и аппаратной части. Здесь же мы не пытаемся охватить даже те из них, которые считаются важными; скорее, мы ограничимся методами, оказавшимися полезными в разработке алгоритмов и в практической их реализации. Рассматриваемые здесь методы сортировки активно используются при разработке алгоритмов во многих разделах данного пособия. Полезно изучить характеристики каждого метода сортировки, чтобы можно было производить разумный выбор для конкретных приложений. К счастью, задача изучения этих алгоритмов не столь уж громоздка. §6.1. Сортировка вставками Сортировка вставками элементов а\, a<i,...,ап относится к наиболее очевидным методам (алгоритм 6.1). Для компактности алгоритма вводится фиктивный элемент ао, значение которого устанавливается равным —оо. Сортировка проходит цикл для j = 2,3,... , п; для каждого j элемент aj вставляется в свое правильное место среди ai,a2,... ,aj_i. При вставке элемент aj временно размещается в w и просматриваются имена aj_i,aj_2,... ,а\\ они сравниваются с и> и сдвигаются вправо, если обнаруживается, что они больше w. Имеется фиктивный элемент ао, значение которого —оо служит для остановки просмотра слева. Алгоритм 6.1. а0 = -оо; for j = 2 to n do begin i = j — 1; w = aj', while w < di do begin di+\ = <ц\ i = i — 1; end; CLi+\ =W\ end. Сложность алгоритма определяется числом проверок в цикле условия w < а,{. Не уменьшая общности, полагаем, что ai,a2,...,an — перестановка элементов множества {1,2, ...,п}.
§ 6.2. Пузырьковая сортировка 193 Сравнение w < щ для конкретного w = a,j = k (j ^ 2) выполняется 1 + djs раз, где d^ — число элементов, больших к и стоящих слева от него, т. е. d^ — это число инверсий, у которых второй элемент равен к. Числа dk составляют таблицу инверсий, а так как O^di ^n—l,0^d2^n— 2, ...,0^ dn_i ^ l,dn = 0, то в худшем случае сортировка элементов а^аг,... ,ап потребует п п числа сравнений не больше, чем ^ (1 + d^) ^ ^(1+n — fc) = к=\ к=\ = —Цг—- = 0(п2). Сложность сортировки является квадратичной. § 6.2. Пузырьковая сортировка Рассматриваемый метод пузырьковой сортировки последовательности ai,a2,... ,an представляет собой наиболее очевидный метод систематического обмена местами слева направо смежных элементов, не отвечающих выбранному порядку, до тех пор пока не оказывается на правильном месте. Эта техника получила название пузырьковой сортировки, так как большие элементы пузырьками всплывают вверх в конец списка. Реализация метода представлена алгоритмом 6.2. В алгоритме используется переменная 6, значение которой при каждом проходе цикла устанавливается равным наибольшему индексу £, такому, что все элементы at+i,at+2,... ,an уже находятся на своих окончательных позициях. Ясно, что не имеет смысла продолжать просмотр для указанных элементов. Алгоритм 6.2. Ъ = п; while Ь ф О do begin t = 0; for j = 1 to b - 1 do begin if a,j > a^+i then begin aj <-><b+i; t = 3\ end; end; b = t- end. 7 Иванов Б.Н.
194 Гл. 6. Сортировка и поиск Сложность алгоритма определяется числом проверок условия aj > aJ+i в цикле и числом обменов aj <-► aJ+i, которое равно числу инверсий в исходной перестановке элементов ai,a2,... ,an. Определим число сравнений. В худшем случае верхняя граница Ь - 1 вложенного цикла far на каждом шаге внешнего цикла while будет уменьшаться на 1, тогда число сравнений равно £(b_1) = (n_l) + (n_2) + ... + i=I*L^ = 0(n2). b=n В алгоритме 6.3 представлена полная пузырьковая сортировка. Это наиболее популярный и упрощенный вариант алгоритма 6.2. Ясно, что основным достоинством алгоритма полной пузырьковой сортировки является легкость программирования. Сложность же алгоритма 6.3 остается постоянной, не зависящей от расположения исходных данных, и равной £(n_i) = (n_l) + (n_2) + ... + i=I*^ = 0(n2). Алгоритм 6.3. for i = 1 to n do begin for j = 1 to n - г do begin if aj > aj+\ then begin aj ^ aj+i > { ) end; end; end. § 6.3. Сортировка перечислением Идея сортировки последовательности ai,a2,... ,an данных перечислением состоит в том, чтобы сравнить попарно все элементы ai,a2,... ,an и подсчитать, сколько из них меньше каждого отдельного элемента (алгоритм 6.4). Для подсчета числа элементов, меньших данного, в алгоритме используется вспомогательный вектор счетчиков ci,c2, ...,сп. После завершения алгоритма значения с3; + \,j = 1,2,... ,п, определяют окончательное положение элементов aj в сортированной последовательности
§6.4. Сортировка всплытием Флойда 195 Алгоритм 6.4. for г = 1 to n do Ci = 0; {} for г = п downto 2 do begin for j = г — 1 downto 1 do begin if di > a,j then Ci = Ci + 1 else Cj = Cj + 1; end; end; for г = 1 to n do begin rCi+i = <ц1 {ri } end. Сложность алгоритма сортировки перечислением определяется парой вложенных циклов и составляет 0(п2). Величина сложности не зависит от расположения данных в исходной последовательности а\, а2,..., ап. Пусть перестановка 7г = (тг\, 7Г2,..., 7гп), где 7Tj = с$ + 1, г = = 1, 2,... ,тг. Алгоритм 6.4 сортировки перечислением определяет перестановку 7г-1, которая соответствует расположению исходных данных а-\ ^а-\ ^ ... ^ а-\ (см. п. 2.14). 71 j Tig 7ln § 6.4. Сортировка всплытием Флойда Все ранее упомянутые методы сортировки последовательности ai,a2,... ,an требовали сравнений порядка 0(п2), и «это никуда не годится». Рассмотрим один из наиболее элегантных и эффективных методов сортировки сложности 0(nlog2(n)), предложенный Флойдом. До сих пор он остается самым лучшим из существующих методов. В алгоритме активно используется упорядоченное двоичное дерево, пример которого представлен на рис. 6.1. Значение в каждой его вершине не меньше, чем значение в его дочерних вершинах. Двоичное дерево называется частично упорядоченным, если свойство упорядоченности выполняется для каждой из его вершин, однако для корня это свойство может нарушаться. Пример частично упорядоченного дерева приведен на рис. 6.2. Интересно отметить, что в ранее рассмотренных методах сортировки сложности 0(п2) при выборе наибольшего (наименьшего) элемента, забывали информацию о других, забракованных элементах на эту роль, хотя эта проверка и выполнялась. 7*
196 Гл. 6. Сортировка и поиск Рис. 6.1. Пример упорядоченного двоичного дерева Структура же дерева позволяет сохранить состояние процесса сортировки последовательности ai,a2,... ,an на каждом его шаге, с целью использования этого состояния в дальнейших расчетах и уменьшения числа операций сравнений при поиске наибольшего (наименьшего) из оставшихся элементов. 22 17 2 28 Рис. 6.2. Пример частично упорядоченного двоичного дерева Метод сортировки Флойда представлен в алгоритме 6.5, где исходная последовательность а\, a<i,..., ап данных представляется в виде дерева на смежной памяти (одномерный массив a[l..n]). В таком дереве ребра присутствуют неявно и вычисляются с помощью арифметических операций над индексами элементов массива — смежной памяти. Пример двоичного дерева показан на рис. 6.3. Корень дерева — а[1], за каждой вершиной а[к] следуют вершины а[2к] и а[2к + 1]. Использование смежной памяти для представления дерева имеет и другие преимущества, которые становятся очевидными после анализа алгоритма 6.5. а[4] а[5] а[6] а[7] Рис. 6.3. Пример двоичного дерева на смежной памяти Основу алгоритма 6.5 составляет процедура Surface(a[i..k]) всплытия Флойда, которая за 0(log2(n)) сравнений преобразует почти упорядоченное поддерево в упорядоченное. Поддерево представляется на одномерном массиве a[i..fc], рис. 6.4, где а [г] —
§6.4. Сортировка всплытием Флойда 197 а[к] Рис. 6.4. Двоичное поддерево на смежной памяти a[i..k] корень поддерева, а[к] — максимальный элемент массива, который еще может принадлежать поддереву. Определим сложность процедуры Surface всплытия Флойда. Процедура заключается в том, что значение из корня (здесь может нарушаться условие упорядоченности) всплывает по направлению к листьям (последний уровень вершин в дереве) до тех пор, пока дерево не преобразуется в упорядоченное. Во время всплытия на каждом уровне выполняется конечное число С операций сравнения элементов. Если положить, что высота дерева (число уровней в дереве) равна /i, то сложность одного всплытия составит С • h = 0(h). Высота h регулярного двоичного дерева из п вершин легко находится из соотношения п ^ 2° + 21 + ... + 2/l_1, где 2г_1 — количество вершин на г-м уровне дерева, %— l,...,/i. Отсюда высота дерева h = |~log2(n + 1)]. Таким образом, сложность процедуры Surface всплытия Флойда составляет 0(log2(n)). Рассмотренная процедура Surface всплытия Флойда позволяет в почти упорядоченном дереве найти наибольший (наименьший) элемент за число сравнений 0(log2(n)), преобразуя дерево к упорядоченному виду. В результате найденный элемент будет располагаться в вершине дерева. Для сортировки же множества элементов ai,a2,... ,an из них по алгоритму 6.5 сначала организуется почти упорядоченное двоичное дерево при помощи повторного применения алгоритма Surface всплытия Флойда сначала к самым мелким его поддеревьям от листьев и затем ко все более крупным. Листья тривиально упорядочены, поэтому можно начать с минимальных поддеревьев, содержащих несколько вершин, и укрупнять их, каждый раз полностью, применяя алгоритм всплытия до тех пор, пока таким образом не будет достигнут корень дерева. Заметим, что каждое из поддеревьев, к которым применяется алгоритм всплытия, удовлетворяет условию почти упорядоченности, поскольку упорядочивание проходит от листьев к корню. Именно таким способом в алгоритме 6.5 осуществляется формирование исходного почти упорядоченного дерева.
198 Гл. 6. Сортировка и поиск После того как дерево упорядочено, наибольший (наименьший) элемент оказывается в его корне. По алгоритму 6.5 найденный элемент меняют местами с самым последним листом в дереве (последний элемент рассматриваемого массива), дерево уменьшается на одну вершину и все готово для определения нового наибольшего (наименьшего) элемента множества при помощи следующего применения процедуры Surface всплытия Флойда. На рис. 6.5 показана полная последовательность перестановок и всплытий, которые происходят после формирования из исходного множества почти упорядоченного дерева и вплоть до того, как в этом дереве останется всего одна вершина, а исходное множество окажется отсортированным. -► 18 -► всплытие -► 66 -► треста- -► 56 / Ч / Ч новка / Ч. 65 66 65 63 65 63 /\ /\ /\ /\ /\ / 4 37 63 56 4 37 18 56 4 37 18 66 почти упорядоченное дерево всплытие -► 65 -► треста- _► jg _► всплытие -► 63 / Ч новка / Ч S ч 56 63 56 63 56 18 /\ / /\ /\ 4 37 18 66 4 37 65 66 4 37 65 66 треста- _► 37 -► всплытие -► 56 -► треста- -► 4 новка / Ч УК новка / Ч 56 18 37 18 37 18 / / 4 63 65 66 4 63 65 66 56 63 65 66 всплытие -► 37 -► переста- _►!§_► всплытие -► 18 S Ч новка / / 4 18 4 37 4 37 56 63 65 66 56 63 65 66 56 63 65 66 перестановка -► \ 18 37 56 63 65 66 56 63 65 66 Рис. 6.5. Пример сортировки чисел 18,4,56,65,37,63,66 методом Флойда
§6.4. Сортировка всплытием Флойда 199 Алгоритм 6.5. 0(log2(n)) Program Floid; { } uses CRT; Const n = 1000; { } Type Vector = array[l..n] of Integer; Var f :Text; { } procedure lnit( var a: vector; n: integer); { } var i: integer; begin Randomize; for i:=l to n do a[i]:=Random(100); end; procedure Surface( var a: Vector; i,k: integer); { } var j,m,copy :Integer; begin copy:=a[i]; m:=2*i; while m<=k do begin if m=k then j:=m else if a[m]>a[m+l] then j:=m else j:=m+l; if a[j]>copy then begin а[1]:=аШ; m:=2*i; end else break; { } end; a[i]:=copy; end;
200 Гл. 6. Сортировка и поиск procedure Sort( var a: Vector; n: integer); { } var i,k,w :Integer; begin { > for i:=n div 2 downto 2 do Surface(a,i,n); { } for k:=n downto 2 do begin Surface(a,1,k); { } w:=a[k]; a[k]:=a[l]; a[l]:=w; end; end; Var{ } a : Vector; { } i : Integer; begin { } Assign(f,'sort.out'); Rewrite(f); { } Init(a,n); { } for i:=l to n do WriteLn(f/a[\i:l/]=\a[i]:3); Sort(a,n); { } WriteLn(f); for i:=l to n do WriteLn(f,'s[\i:l,']=\a[i]:3); Close(f); end. { } Оценим общую сложность алгоритма сортировки данных рассматриваемым методом. Процедура Surface всплытия Флойда выполняется п раз сначала для формирования исходного почти упорядоченного дерева (процедура применяется для каждой вершины дерева) и затем п раз для всплытия каждого наибольшего (наименьшего) элемента в почти упорядоченном дереве. Так как сложность процедуры Surface всплытия Флойда составляет 0(log2(n)), общая сложность алгоритма сортировки данных ai,a2,... ,an равна 0(nlog2(n)).
§6.4. Сортировка всплытием Флойда 201 Это — лучшая оценка, на что вообще можно надеяться при сортировках, в основу которых положены сравнения данных. Действительно, число возможных перестановок из элементов ai,a2,... ,an равно п\ и только одна из них удовлетворяет условию нашей сортировки. Двоичный же поиск перестановки среди множества п\ перестановок требует log2(ra!) числа сравнений. Для упрощения воспользуемся формулой Стирлинга п\ f>j у/2-кпппе~п. Тогда log2(n!) ~ 0(nlog2(ra)). Задача. Длина объединения отрезков. Текстовый файл содержит целые числа: ai,bi,a2,b2,... ,an,bn. Данная последовательность чисел определяет на прямой п отрезков [а^Ь^], г — = 1,2,... ,гг. Найти длину объединения указанных отрезков. Исходные данные представлены в текстовом файле со следующей структурой. Первая строка файла: п — количество отрезков. Вторая, третья и т. д. строки файла содержат целые числа a^, bi — границы соответствующих отрезков. Результаты расчетов длины объединения отрезков сохранить в текстовом файле. Пример файла исходных данных 3 0 2 -1 1 0 1 Выходной файл для данного примера 3 Решение. Алгоритм 5.6 решения задачи основывается на предварительной сортировке абсцисс а\, b\, a2, Ь2,..., ап, Ьп в массиве ab[1..2n]. Создается вспомогательный массив #[1..2ra], который поддерживает после сортировки массива ab[1..2n] отношение границ отрезков: д[г] = 1 — левая граница, g[i] = 0 — правая граница. Вычисление завершается простым просмотром массива ab[l„2n] за линейное время. Общая сложность алгоритма определяется сложностью сортировки данных. В данном случае используется алгоритм пузырьковой сортировки сложности 0(п2). Алгоритм 6.6. Program MeasureLength; { } uses CRT,DOS; Const n_max=100; Type
202 Гл. 6. Сортировка и поиск Vector=array[0..2*n_max] of Integer; Var f :Text; {} ab :Vector; { } g :Vector; { } Procedure Measure( Var m: Longint; n:lnteger); о Var i,c :Integer; begin ab[0]:=ab[l]; m:=0; {} c:=0; { } for i:=l to n do begin if c<>0 then m:=m+ab[i]-ab[i-l]; if g[i] = l { } then c:=c+l else c:=c-l; end; end; Procedure SortBubble( n:lnteger); { } Var i,j,w :Integer; begin for i:=l to n do begin for j:=l to n-i do begin if ab[j] > ab[j+l] then begin w:=ab[j]; ab[j]:=ab[j+l]; ab[j+l]:=w; w:=g[j]; g0]—g[j+l]; g[j+l]:=w; end; end; end; end; Var{ } i,k :Integer; n :Integer; { } m :LongInt; { }
§ 6.5. Последовательный поиск 203 begin { } Assign(f,'Measure.in'); Reset(f);{ } Read(f.n); {} for i:=l to n do begin k:=2*i; Read(f,ab[k-l],ab[k]); g[k-l]:=l; {} g[k]:=0; {} end; Close(f); Assign(f,'Measure.out'); Rewrite(f); { } SortBubble(2*n); Measure(m,2*n); WriteLn(f,m); {} Close(f); end. { } § 6.5. Последовательный поиск Задача поиска является фундаментальной в алгоритмах на дискретных структурах. Удивительно то, что, накладывая незначительные ограничения на структуру исходных данных, можно получить множество разнообразных стратегий поиска различной степени эффективности. При последовательном поиске подразумевается исследование элементов множества аьаг, ...,ап в том порядке, в котором они встречаются. «Начни сначала и продвигайся, пока не найдешь нужный элемент; тогда остановись». Такая последовательная процедура является очевидным способом поиска. Алгоритм 6.7 выполняет последовательный поиск элемента z в множестве ai,a2,...,an. Несмотря на свою простоту, последовательный поиск содержит ряд очень интересных идей. Алгоритм 6.7. с = 0; z for г = 1 to n do begin if z = <Xi then do begin
204 Гл. 6. Сортировка и поиск с=1; break; end; end; if с = 1 then else Оценим среднюю сложность поиска элементов множества а\, а>2,..., ап. Для нахождения г-го элемента а; требуется г сравнений. Для вычисления же среднего времени поиска необходимо задать информацию о частоте обращения к каждому элементу множества. Будем предполагать, что частота обращения распределена равномерно, т. е. что ко всем элементам обращаются одинаково часто. Тогда средняя сложность поиска элемента мно- 1 " П+1 n, v м м жества является - > г — —-— = О In) линейной. Рассмотрим распределение частот обращения к элементам в общем случае. Пусть pi обозначает частоту (распределение п вероятностей) обращения к элементу а*, где pi ^ 0 и J2 pi = 1. В этом случае средняя сложность (математическое ожида- п ние) поиска элемента будет равна ^ ipi. Хорошим приближе- нием распределения частот к действительности является закон Зипфа: pi = с/г для г = 1,2, ...,гг. (Дж. К. Зипф заметил, что п-е наиболее употребительное в тексте на естественном языке слово встречается с частотой, приблизительно обратно пропорциональной п.) Нормирующая константа с п выбирается так, что J2 Рг — 1- Пусть элементы множества ai,a2,... ,an упорядочены согласно указанным частотам. Тогда п с = 1/(J^ 1/i) = \/Нп ^ l/ln(n) и среднее время успешного г=1 п п поиска составит J2^Pi — S с = пс = пЩп ~ п/ 1п(тг), что много г=1 г=1 меньше (гс + 1)/2. Последний пример показывает, что даже простой последовательный поиск требует выбора разумной структуры данных множества, который повышал бы эффективность работы алгоритма. Более того, это общепринятая стратегия, состоящая в том, чтобы время от времени переупорядочивать данные, для большинства
§6.6. Логарифмический поиск 205 последовательных файлов во внешней памяти, когда последовательная природа файла диктуется техническими характеристиками носителя информации. Алгоритм последовательного поиска данных одинаково эффективно выполняется при размещении множества аьаг,... ,ап на смежной или связанной памяти. § 6.6. Логарифмический поиск Логарифмический (бинарный или метод деления пополам) поиск данных применим к сортированному множеству элементов а\ < а2 < ... < ап, размещение которого выполнено на смежной памяти. Для большей эффективности поиска элементов надо, чтобы пути доступа к ним стали более короткими, чем просто последовательный перебор. Наиболее очевидный метод: начать поиск со среднего элемента, т. е. выполнить сравнение с элементом а.\+пг Результат сравнения позволит определить, в какой по- ловине последовательности ai,a2,... , a,\±n,, •• • ,^п продолжить I- 2 -I поиск, применяя к ней ту же процедуру, и т.д. Основная идея бинарного поиска довольно проста, однако «для многих хороших программистов не одна попытка написать правильную программу закончилась неудачей». Чтобы досконально разобраться в алгоритме, лучше всего представить данные а\ < а2 < ... < ап в виде двоичного дерева сравнений, которое отвечает бинарному поиску. Двоичное дерево называется деревом сравнений, если для любой его вершины (корня дерева или корня поддерева) выполняется условие: ( Вершины | , ч ( Вершины | левого < кР < правого I, поддерева ) \ к ) \ поддерева ) Пусть на очередном шаге деления пополам оказалось, что необходимо выполнить поиск среди элементов а* < сц+i < ... ... < clj. В качестве корня принимается элемент a ^ где |_—т^-J — наибольшее целое, меньшее или равное —^-. Левое поддерево располагается в векторе <н,а{+\,... ,а г+i, а правое L 2 -I-1 поддерево — в векторе а г+^ ,... ,aj_i,aj. На рис. 6.6 показан пример двоичного дерева сравнений, ребра которого неявно вы-
206 Гл. 6. Сортировка и поиск ражаются рассмотренными выше отношениями между индексами элементов. Рис. 6.6. Пример дерева сравнений, отвечающего бинарному поиску среди сортированных элементов: 3,5,7,9,12,19,21,41,47,52 Поиск элемента z среди а\ < а2 < ... < ап методом деления пополам представлен в алгоритме 6.8. Средняя сложность бинарного поиска среди элементов а\ < а2 < ... < ап сравнима с высотой двоичного дерева (рис. 6.6). В худшем случае искомый элемент может оказаться либо на последнем уровне, либо вообще не будет найден. На каждом уровне необходимо выполнить определенное число сравнений. В п. 6.4 установлено, что уровней в дереве [log2(n+ 1)] . Значит, сложность поиска является логарифмической 0(log2(n)), что оправдывает и название самого метода поиска. Алгоритм 6.8. z а\ < а,2 < < ап find = 0; { } <=!;{ } 3 =п\{ } while г ^ j do begin ™=l^J;{ } if z = am then begin find = I; {} break; end; else if z > аш then i = m + 1; { } else j = m — 1; { } end; if find = 1 then else Необходимо отметить, что рассмотренный метод бинарного поиска предназначен, главным образом, для сортированных
§ 6.7. Сортировка с вычисляемыми адресами 207 элементов а\ < a<i < ... < ап на смежной памяти фиксированного п размера. Если же размерность вектора динамически меняется, то экономия от использования бинарного поиска не покроет затрат на поддержание упорядоченного расположения а\ < а>2 < ... < о>п- § 6.7. Сортировка с вычисляемыми адресами Пусть ai,a2, ...,ап — исходная последовательность сортируемых целых чисел и 7г = (7ri, 7г2,... ,7гп) — упорядочивающая перестановка этих элементов ащ < аП2 < ... < аПп. Принятое ограничение, что a>i — целые числа, не ведет к потере общности рассматриваемых ниже алгоритмов. Сортированная последовательность a>i подсказывает очевидный способ использования значений этих элементов в качестве индексов (адресов) их расположения в массиве Ьг,Ьг+ь... ,bs, где bai = а;. Получим упорядоченную последовательность Ьг < br+\ < ... < bSl а значит, и упорядоченную последовательность исходных данных а\, a<i,..., ап. В качестве примера рассмотрим частный случай сортировки элементов последовательности ai,a2,... ,07, равных соответственно 6,3,5,7,2,4,1 — различные целые числа от 1 до 7. Значение каждого элемента ai показывает его место в сортированном списке Ь\ < Ь2 < ... < bj, гле bi определяются в цикле for г = 1 to 7 do bai = a^. Сложность данного метода сортировки является линейной О(п), где п = 7. Фактически, значения а; определяют перестановку 7г = (7Г1,7г2,... ,7гп) = (7, 5,2,6,3,1,4), которая упорядочивает элементы ащ < аП2 < ... < аПп. Значения щ устанавливаются в цикле for г = 1 to 7 do 7rai = г. Отметим, что перестановка 7Г является обратной к исходному расположению элементов ai,a2, ...,an (см. п. 2.14). Сортировка же стала возможной благодаря тому, что значения исходных данных 6,3,5,7,2,4,1 заполняют сплошной интервал последовательности натуральных чисел. Рассмотрим обобщение идеи сортировки с вычисляемыми адресами на случай произвольных целых ai, аг,..., ап. Алгоритм сортировки существенно упрощается, если все значения а\,а2,...,ап различные. Значения а\, аг,..., ап — различные Реализация метода сортировки представлена в алгоритме 6.9. Временный массив 6r>br+i,... ,bs, где г = min(ai,a2,... ,an) и s = max(ai,a2,... ,an), используется для сортированной
208 Гл. 6. Сортировка и поиск упаковки элементов ai,a2, ...,ап. Свободные места в массиве Ьг,Ьг+1,... ,bs инициализируются значением 5+1, отличным от значений элементов а\, а2,..., ап. Алгоритм 6.9. { а\,а2, ,ап} for г = 2 to n do begin if r > a^ then r = a^; else if 5 < a,i then s = a*; end; { b» 5 + 1 a^} for г = r to s do 6; = s + 1; { aba2, ,an} for г = 1 to n do bai = di, { a\,a2, ,an br,br+\, ,bs} k = 0; for г = г to s do begin if 6; ф s + 1 then begin fc = fc+l; ajb = b*; end; end. Сортированный вектор ai < a2 < ... < an является результатом последовательного просмотра массива 6r,br+i,... ,bs при удалении из него оставшихся незанятыми элементов, равных значению 5+1. Алгоритм не содержит вложенных циклов, а значит, сложность его линейная: 0(п). Допускаются одинаковые значения среди а\, аг,..., ап Реализация метода представлена в алгоритме 6.10. Наличие одинаковых элементов среди а\, а2,..., ап, например, ai = aj, при упаковке bai = а>{ и baj = aj ведет к потере данных в исходном множестве ai,a2,... ,an. Ситуация, когда одновременно несколько элементов претендуют на одно место, называется коллизией. Такие элементы необходимо переразмещать на свободные места, сохраняя свойства сортировки с вычисляемыми адресами. С этой целью на основании величин а\, а2,..., ап рассчитывается
§ 6.7. Сортировка с вычисляемыми адресами 209 вектор индексов dr,dr+i,... ,ds сортированной упаковки данных ai,a2,... ,an в массиве Ъ\,Ъ2,... ,Ъп. В алгоритме 6.9 роль индексов упаковки могли выполнять непосредственно сами значения элементов ai,a2,... , an, так как они были различные. В данном случае значения dr,dr+i,... ,ds настраиваются таким образом, что одинаковые по величине элементы из сц,а2,... ,an оказываются смежными при их упаковке в массиве bi,b2,... ,ЬП. Вектор cr,cr+i,... , cs используется для подсчета количества элементов каждого значения среди ai,a2,... ,ап и формирования индексов упаковки dr, dr+i,..., ds. Алгоритм 6.10. ai,a2, ,an { aba2, ,an} r = s = a\\ for г = 2 to n do begin if r > a^ then r = a*; else \f s < di then 5 = a*; end; { a*} for г = r to 5 do Ci = 0; for г = 1 to n do cai = cai + 1; { d^dr+ь , ds} dr = 1; for г = r + 1 to 5 do di = cf^-i + <k-\"» { aj,a2, ,an bi,b2, ,6n} for г = 1 to n do begin k = di, bdk = a>i\ dk = dk + 1; end. Результирующий сортированный вектор исходных данных ai,a2,... ,an располагается в массиве bi ^ Ь2 ^ ... ^ Ьп. Алгоритм не содержит вложенных циклов, а значит, сложность его линейная 0{п). Сортировка с вычисляемыми адресами является очень быстрым методом, но она может быть крайне неэффективной при больших значениях s — г с точки зрения использования оперативной памяти, необходимой для хранения временных массивов данных cr,Cr.+i,... ,cs и dr,dr+i,... ,ds.
Глава 7 ТЕОРИЯ ГРАФОВ. АЛГОРИТМЫ НА ГРАФАХ Множество самых разнообразных задач естественно формулируется в терминах точек и связей между ними, т. е. в терминах графов. Так, например, могут быть сформулированы задачи составления расписания, анализа сетей в электротехнике, анализа цепей Маркова в теории вероятностей, в программировании, в проектировании электронных схем, в экономике, в социологии и т.д. Поэтому эффективные алгоритмы решения задач теории графов имеют большое практическое значение. § 7.1. Основные понятия и определения Определение. Конечным графом называется тройка Г = (X, U, Ф), где X — конечное множество вершин; U — конечное множество ребер (дуг); Ф — отношение инцидентности; X П U = 0. Отношение инцидентности Ф является трехместным отношением Ф(х,и1 у), где ж,у Е X, и eU, которое может либо выполняться (быть истинным), либо не выполняться (быть ложным) и удовлетворяет свойствам: 1. Уи е U Зж,у е X Ф(х,и,у) — ребро соединяет пару вершин; 2. Ф(ж, и, у) А Ф(х', и, у') => (х = х' А у = у') V (х = у' А у = х') — ребро и соответствует не более чем одной паре вершин ж, у. Графическое Элементы графов 1. х € X — вершина. 2. Ф(х, и, у) А -«Ф(у, и, х) — ориентированное ребро, дуга. 3. Ф(х, и, у) А Ф(у, и, х) — неориентированное ребро. 4. Ф(х, и, х) — петля. представление графов Геометрические элементы 1. х ■ — точка в пространстве. 2. х в ». у — направленный отрезок. 3. х ■ ■ у — отрезок. 4. х "О — замкнутый отрезок. Определение. T\{X\,U\,$\) и Г2(Х2,С/2, $2) называются изоморфными {Г\ = Г2), если существуют два взаимно однозначных соответствия <р : Х\ —> Х2 и ^ : C/i —► С/"2, со-
§ 7.1. Основные понятия и определения 211 храняющих отношение инцидентности: Ф2(<р(х[),ф(и[),<р(у[)) = = Ф\(х1,щ,ух). Из определения следует, что изоморфные графы можно одинаково изображать графически и отличаться они будут только метками вершин (рис. 7.2). Определение. Граф называется ориентированным (орграф), если каждое его ребро ориентировано: Ух ф у G X Уи G U Ф(ж,и,у) => -|Ф(у,и,х). Иногда удобно преобразовать неориентированный граф в ориентированный — заменой каждого неориентированного ребра парой ориентированных ребер с противоположным направлением. Определение. Подграфом графа Г(Х, £/, Ф) называется такой граф Г'(Х', £/', Ф), что X' С^С/'С U. Обозначают Г' С Г. Определение. Граф называется псевдографом, если в нем допускаются петли и кратные ребра, т. е. две вершины могут быть соединены более чем одним ребром. Псевдограф без петель называется мулыпиграфом (рис. 7.3). Определение. Неориентированный граф называется простым, если он не имеет петель и любая пара вершин соединена не более чем одним ребром. •- Рис. 7.1. Графы с тремя вершинами и двумя ребрами Рис. 7.2. Три изоморфных графа Рис. 7.3. Псевдограф (слева) и мультиграф (справа)
212 Гл. 7. Теория графов. Алгоритмы на графах Определение. Простой граф называется полным, если каждая пара вершин соединена ребром. Такой граф с п вершинами содержит С\ ребер (рис. 7.4). Рис. 7.4. Полные неориентированные графы Определение. Пополнением простого графа Г называется граф Г, имеющий те же вершины, а его ребра являются дополнением Г до полного графа (рис. 7.5). Рис. 7.5. Исходный граф Г и дополнительный Т Определение. Граф называется плоским (планарным), если он может быть изображен на плоскости так, что все пересечения ребер являются его вершинами. ш • • • • 11111 11111 Рис. 7.6. Граф Г\ — плоский, а граф Г2 — неплоский Определение. Если вершины ж и у соединены ребром и, то говорят, что вершины х, у смежные, а ребро и инцидентно вершинам ж и у. Два ребра называются смежными, если они имеют общую вершину. Определение. Степенью вершины графа называется количество ребер, инцидентных данной вершине. Вершина графа,
§ 7.1. Основные понятия и определения 213 имеющая степень 0, называется изолированной, а если степень ее равна 1, то такая вершина называется висячей. Определение. Граф называется помеченным (или перенумерованным), если его вершины отличаются друг от друга какими-либо метками (рис. 7.7). Рис. 7.7. Граф Ti — помеченный, а граф Г2 — непомеченный. Вершины х3, Х4 — висячие, а вершина х5 — изхолированная Определение. Путь (маршрут) на графе Г(Х, U, Ф) есть последовательность вершин и ребер ххихх^и^х^.. .хпипхп+\, где Xi Е X, щ Е U. Ребро щ соединяет вершину Х{ с вершиной ж^+ь т.е. выполняется отношение инцидентности ^{х^щ,х^\). о Маршрут называется цепью, если все его ребра различные. о Маршрут называется замкнутым, если х\ =хп+\. о Замкнутая цепь называется циклом. о Цепь называется простой, если не содержит одинаковых вершин. о Простая замкнутая цепь называется простым циклом. о Гамильтоновой цепью называется простая цепь, содержащая все вершины графа. о Гамильтоновым циклом называется простой цикл, содержащий все вершины графа. Определение. Граф Г(Х, U, Ф) называется связным, если для всех х, у G X существует путь из вершины х в вершину у (вершины х и у связаны маршрутом). Связный ориентированный граф называется сильно связным. Орграф называется слабо связным, если соответствующий ему неориентированный граф (игнорируется ориентация ребер) связный (рис. 7.8). Рис. 7.8. Ti — слабо связный, Г\ — сильно связный
214 Гл. 7. Теория графов. Алгоритмы на графах Определение. Связный неориентированный ациклический граф называется деревом, множество деревьев называется лесом. Г, Г2 • 11» • 1 1 • Рис. 7.9. Г\ — дерево, Г2 — не дерево Большинство задач на графах касается определений компонент связности, поиска маршрутов, расстояний и т. п. Далее будут рассмотрены решения подобных вопросов. Однако при решении реальных задач соответствующие им графы весьма велики, и анализ возможен лишь с привлечением современной вычислительной техники. Поэтому конечной целью рассмотрения каждой из задач будет являться описание и реализация практического алгоритма решения данной задачи на ЭВМ. § 7.2. Представления графов Наиболее известный и популярный способ представления графов состоит в геометрическом изображении точек (вершин) и линий (ребер) на бумаге. При численном решении задач на вычислительных машинах граф должен быть представлен дискретным способом. Существует довольно много способов такого рода представления графов. Однако простота использования представления графа, как и эффективность алгоритма, в основе которого он лежит, в полной мере зависит от конкретного выбора этого представления. Одно из направлений теории графов связано с их матричным представлением. Существуют различные виды матриц, ассоциированные с графами. Эти алгебраические формы используются для решения многих задач теории графов. Ниже рассматриваются две такие матричные формы и несколько нестандартных представлений, которые наиболее широко используются в алгоритмах на графах. 7.2.1. Матрица смежности графа Определение. Матрицей смежности ориентированного помеченного графа с п вершинами называется матрица А = [а^], i,j = 1,2,... ,тг, в которой _ f 1, если существует ребро (xiyXj)y lJ [0, если вершины XitXj не связаны ребром (xiyXj).
§ 7.2. Представления графов 215 Матрица смежности однозначно определяет структуру графа. Примеры орграфа и его матрицы смежности приведены соответственно на рис. 7.10 и рис. 7.11. Отметим, что петля в матрице Рис. 7.10. Ориентированный граф смежности может быть представлена соответствующим единичным диагональным элементом. Кратные ребра можно представить, позволив элементу матрицы быть больше 1, но это не принято, обычно же представляют каждый элемент матрицы одним двоичным разрядом. 1 2 3 4 5 6 7 1 0 1 0 1 0 0 0 2 1 0 0 0 0 0 0 3 1 1 0 0 0 0 0 4 0 1 0 0 0 1 0 5 0 1 1 1 0 1 1 6 0 0 0 0 0 0 0 7 0 1 0 1 0 1 0 Рис. 7.11. Матрица смежности ориентированного графа (рис. 7.10) 7.2.2. Матрица инцидентности графа Определение. Матрицей инцидентности для неориентированного графа с п вершинами и т ребрами называется матрица В = [6^], г = 1,2,... ,гс, j = 1,2,... , га, строки которой соответствуют вершинам, а столбцы — ребрам. Ее элементы _ Jl, если вершина Х{ инцидентна ребру Uj\ ъэ [0, если вершина Х{ не инцидентна ребру Uj.
216 Гл. 7. Теория графов. Алгоритмы на графах Определение. Матрицей инцидентности для ориентированного графа с п вершинами и т ребрами называется матрица В = [Ьу], г = 1,2,... ,тг, j = 1,2,... ,га, строки которой соответствуют вершинам, а столбцы — ребрам. Ее элементы { + 1, если ребро Uj выходит из вершины xi\ — 1, если ребро Uj входит в вершину х%\ О, если вершина Х{ не инцидентна ребру Uj. Матрица инцидентности однозначно определяет граф. На рис. 7.12 представлена такая матрица для орграфа на рис. 7.10. 1 2 в= з 4 5 6 7 1 12222234446 231345751574 + 1+1-10 0 0 0 0-1000 -10+1+1+1+1+100000 0-10-1000+10000 0 0 0 0-1000+1+1+1-1 0 0 0 0 0-1 0-1 0-1 0 0 6 6 7 5 7 5 0 0 0 0 0 0 0 0 0 0 0 0 -1 0-1 00000000000+1+1+10 0 0 0 0 0 0-1 0 0 0-1 0 0-1 +1 Рис. 7.12. Матрица инцидентности ориентированного графа (рис. 7.10) 7.2.3. Матрица весов графа Определение. Граф называется взвешенным, если каждому его ребру сопоставлено число. Простой взвешенный граф может быть представлен своей матрицей весов W = [гиу], где Wij — вес ребра, соединяющего вершины i,j = 1,2, ...,тг. Веса несуществующих ребер полагают равными ±оо или 0 в зависимости от приложений. Заметим, что матрица весов является простым обобщением матрицы смежности. 7.2.4. Список ребер графа При описании графа списком его ребер каждое ребро представляется парой инцидентных ему вершин. Это представление можно реализовать двумя массивами: г = (г\,Г2,... ,гш) и t = (<ь <2. •• • >*т), где т — число ребер в графе. Каждый элемент в массиве есть метка вершины, а г-е ребро графа выходит из
§ 7.3. Метод поиска в глубину 217 вершины Ti и входит в вершину U. Например, соответствующие массивы представления графа на рис. 7.10 имеют вид г = (1, 1,2,2,2,2,2,3,4,4,4,6,6,6,7), 4 = (2,3, 1,3,4,5,7,5, 1,5,7,4,5,7,5). • Интересно, что данное представление позволяет легко описать петли и кратные ребра. 7.2.5. Структура смежности графа Ориентированный или неориентированный граф может быть однозначно представлен структурой смежности своих вершин. Структура смежности состоит из списков Л*//[ж] вершин графа, смежных с вершиной ж. Списки Adj[x] составляются для каждой вершины графа. В качестве примера на рис. 7.13 представлена структура смежности графа на рис. 7.10. Структуры смежности могут быть удобно реализованы массивом из п (число вершин в графе) линейно связанных списков. Каждый список содержит вершины, смежные с вершиной, для которой составляется список. Хранение же списков смежности на сцепленной памяти желательно в алгоритмах, в основе которых ле- Рис. 7.13 жат операции добавления и удаления вершин из списков. Следует отметить, что во многих задачах на графах выбор представления является решающим для эффективности алгоритмов. § 7.3. Метод поиска в глубину Один из наиболее естественных способов систематического исследования всех вершин графа исходит из процедуры прохождения графа методом поиска с возвращением, который исследует граф в глубину (см. п. 5.1). На неориентированном графе Г(Х, U, Ф) поиск в глубину осуществляется следующим образом. Когда посещаем вершину х Е X, то далее идем по одному из ребер (ж, у), инцидентному вершине у Е X. Если вершина у уже пройдена (посещалась ранее), то возвращаемся в ж и выбираем другое ребро. Если вершина у не пройдена, то заходим в нее и применяем процесс прохождения рекурсивно уже с вершиной у. Если все ребра, инцидентные вершине ж, просмотрены, то идем назад по ребру (s, ж), по которому пришли в ж, и продолжаем исследование ребер, инцидентных вершине s e X. Процесс X 1 2 3 4 5 6 7 Adj[x] 2, 3 1, 3, 4,5, 7 5 1, 5, 7 - 4, 5, 7 5
218 Гл. 7. Теория графов. Алгоритмы на графах заканчивается, когда попытаемся вернуться из вершины, с которой начали просмотр графа. Поиск в глубину можно также осуществлять и на ориентированном графе. Если граф ориентированный, то, находясь в узле ж, необходимо выбирать ребро (ж, у), только выходящее из х. Исследовав все ребра, выходящие из у, возвращаемся в х даже тогда, когда в у входят другие ребра, еще не рассмотренные. Данная техника просмотра в глубину полезна в практических приложениях при определении различных свойств как ориентированных, так и неориентированных графов. Метод поиска в глубину на простом неориентированном графе представлен в алгоритме 7.1. Рекурсивная процедура Depth(x,w) осуществляет поиск в глубину на графе Г(Х, £/, Ф), содержащем х е X, и строит для графа дерево Т поиска, которое является ориентированным остовным деревом Го(Х, Г, Ф) (если исходный граф не связен, то Г0 будет лесом); w e X является отцом х е X в строящемся дереве, где х — исследуемая вершина. Граф задан структурой смежности Adj[x]t где Л*//[ж] означает множество вершин, смежных с х е X. Элементы Т — это ребра строящегося дерева поиска, а элементы В — это обратные ребра, которые не могут принадлежать Го, так как они ведут назад в пройденные ранее вершины. Заметим, что обратное ребро должно идти от потомка к предку по дереву поиска. Чтобы отличить уже пройденные вершины от непройденных, вводится вектор Магк[х] меток вершин, которые постепенно нумеруются от 1 до \Х\ по мере того, как попадаем в них. Сначала полагается Магк[х] = 0 для всех х е X в знак того, что ни одна вершина не пройдена, и когда попадаем в вершину х первый раз, Матк[х] получает ненулевое значение. Ребро (x,v) Е т1\ если метка вершины Mark[v] = 0. Если же Mark[v] ф 0, то условием того, что (x,v) e В будет обратным ребром, являются соотношения Mark[v] < Mark[x] и v ф w. Условие Mark[v] < Mark[x] означает, что вершина v была пройдена раньше вершины х. Поэтому ребро (x,v) G В будет обратным, если оно не является ребром дерева Г, пройденным от отца w к ж, т. е. v ф w. • Сложность поиска в глубину. Поскольку для каждой вершины, которую проходим впервые, выполняется обращение к процедуре Depth ровно один раз, то всего обращений будет |Х|. При каждом обращении количество производимых действий пропорционально числу ребер, инцидентных рассматриваемой вершине. Поэтому сложность поиска составляет 0(\Х\ + \U\).
§ 7.3. Метод поиска в глубину 219 Алгоритм 7.1. for г; € X do Mark[v] = 0; count = 0; Т= 0; Б = 0; for г; € X do if Mark[v] = 0 then Depth(v, 0); Procedure Depth(x,w); count = count + 1; Mark[x] = count] for v € -Аф"[х] do begin if Mark[v] = 0 then begin T = TU{(x,v)};{ } Depth(v,x); end else if Mark[v] < Mark[x] and v ф w then В = BU {(*,*)};{ } end; end. Программная реализация алгоритма 7.1 представлена алгоритмом 7.2. Реализация близко соответствует основному алгоритму 7.1. Программа представлена тремя процедурами Init, Depth, WayDepth, где WayDepth — основная программа поиска в глубину; Depth — рекурсивная процедура поиска, один к одному соответствующая аналогичной процедуре в алгоритме 7.1; Init — процедура контроля исходных данных и изменения меток вершин. Изменение нумерации меток вершин является существенным для алгоритма. Новые метки вершин — это натуральные числа от 1 до 1-Х" |. Данная нумерация позволяет обращаться к элементам массивов, содержащих информацию о вершинах, по номерам соответствующих вершин. Такой прием позволяет очень близко подойти в программной реализации структуры смежности Adj[x] к ее множественному описанию. В этом случае множественное описание выражения for v G Adj[x] do ... в программной реализации представляется как for г — 1 to Nbr[x] do v = Adj[Fst[x] + i]..., где Nbr[x] — количество вершин в структуре смежности для вершины х G X; Adj[x] — вектор, содержащий все вершины структуры смежности по строкам; Fst[x] + 1 — номер первой вершины в структуре смежности для соответствующей вершины х е X, тогда Fst[x] +i — номер г-й
220 Гл. 7. Теория графов. Алгоритмы на графах вершины в структуре смежности для igI. Например, для следующей структуры смежности Adj[x] графа: X 1 2 3 4 5 6 7 Adj[x] 2, 3, 5 1, 3, 4 1, 2, 4, 5 2, 3 1,3,6,7 5, 7 5, 6 соответствующие массивы в программной реализации принимают вид Nbr[x] 3 3 4 2 4 2 2 Fst[x] | 0 3 б 10 12 16 18 Adj[x] | 2 3 5 134 1245 23 1367 57 56 Исходные данные для расчета по программе алгоритма 7.2 представляются в текстовом файле со следующей структурой смежности Adj[x]: • в первой строке файла содержится количество строк в структуре смежности, которое равно числу вершин в графе; • далее для каждой вершины в отдельной строке указывается номер самой вершины, количество вершин смежных с данной и список этих вершин. Рассмотрим пример расчета по программе алгоритма 7.2 обхода графа, представленного на рис. 7.14. Жирными линиями отмечены ребра, которые были пройдены во время обхода графа в глубину, тонкими — обратные ребра. Рис. 7.14. Пример обхода графа в глубину
§ 7.3. Метод поиска в глубину 221 Исходные данные структуры смежности графа рис. 7.14 задаются в текстовом файле Depth.in: 7 13 2 3 5 2 3 13 4 3 4 12 4 5 4 2 2 3 5 4 13 6 7 6 2 5 7 7 2 5 6 Результаты расчетов сохраняются в выходном файле Depth.out со следующей структурой: 1 2334355671 хг 2314251675^ 110 10 10 11 o|tv£ Каждая колонка таблицы выходного файла соответствует ребру (х{,у{) прохода графа, где последнее значение является признаком 1 или 0, что отвечает при проходе либо основному ребру, либо обратному. Алгоритм 7.2. Program PgmWayDepth; { } uses CRT,DOS; Const nVertex=100; { } ib4d/acent=1000; { } Type TypeVertex=array[l..nVertex] of Integer; Typey4d/acent=array[l..ny4d/acent] of Integer; Var f :Text; {} n :Integer; {} nT Tnteger; { } Adj :TypeAdjaceni; { } Fst :TypeVertex; { } Nbr :TypeVertex; { } Vtx :TypeVertex; { } Mark :TypeVertex; { } T :TypeVertex; { }
222 Гл. 7. Теория графов. Алгоритмы на графах В : Type Vertex; { } Procedure lnit( Var yes :Boolean ); { } { } { } Var i,j,m :Integer; begin for i:=l to n do for j:=l to Nbr[i] do begin yes:=FALSE; for m:=l to n do if i4d/[Fst[i]+j]=Vtx[m] then begin yes:=TRUE; i4d/[Fst[i]+j]:=m; break; end; if not yes then exit; end; end; Procedure Depth( x,u:lnteger; var count :lnteger); { } Var i,v :Integer; begin count:=count+l; Mark[x]:=count; for i:=l to Nbr[x] do begin v:=i4d/[Fst[x]+i]; if Mark[v]=0 then begin nT:=nT+2; T[nT-l]:=x; T[nT]:=v; B[nT div 2]:=1; Прямое ребро Depth(v,x,count); end else if (Mark[v]<Mark[x]) and (vou) then begin {} nT:=nT+2; T[nT-l]:=x; T[nT]:=v;
§ 7.3. Метод поиска в глубину 223 B[nT div2]:=0; {} end; end; end Procedure WayDepth; { } Var v,count :Integer; begin nT:=0; { } count:=0; for v:=l to n do Mark[v]:=0; for v:=l to n do if Mark[v]=0 then Depth(v,0,count); end; Var{ } i,j :Integer; yes :Boolean; begin { } Assign(f,'Depth.in'); Reset(f);{ } { } Read(f,n);{ } Fst[l]:=0;{ } for i:=l to n do begin Read(f,Vtx[i]); {} Read(f,Nbr[i]); { } for j:=l to Nbr[i] do Read(Mrf/[Fst[i]+j]); { } Fst[i+l]:=Fst[i]+Nbr[i]; { } end; Close(f); Assign(f,'Depth.out'); Rewrite(f); { } Init(yes); if not yes then begin WriteLn(f,TInoxaH структура смежности графа!'); Close(f); exit;
224 Гл. 7. Теория графов. Алгоритмы на графах end; WayDepth; for i:=l to nT div 2 do Write(f,Vtx[T[2*i-l]]:3); Writeln(f); for i:=l to nT div 2 do Write(f,Vtx[T[2*i]]:3); Writeln(f); for i:=l to nT div 2 do Write(f,B[i]:3); Writeln(f); Close(f); end. { } § 7.4. Отношение эквивалентности Бинарное отношение ~, определенное на множестве S, называется отношением эквивалентности, если оно удовлетворяет свойствам рефлексивности, симметричности и транзитивности (п. 1.6.8): 1. V$i G S S\ f>j 8\\ 2. V^i, 52 G S s\ ™ S2 —> S2 ~ s\; 3. V^i, 52, 53 G S S\ ™ S2 Л 52 ^ 53 —> S\ rv 53. Элементы Si, Sj G S, для которых выполняется отношение Si ~ ~ Sj, называются эквивалентными. Определение. Классом эквивалентности, порожденным элементом Si€S, называется подмножество Si = {5 eS\ Si ~ ~ s} элементов, эквивалентных данному 5$. Теорема 7.4.1. Пусть на множестве S задано отношение эквивалентности ~. Для каждого элемента Si G 5 составим соответствующий ему класс эквивалентности Si — {se G S | si rsj 5}. Данные классы Si удовлетворяют следующим условиям: 1) для каждого Si G S верно, что Si G Si принадлежит порожденному им классу эквивалентности', 2) классы, порожденные эквивалентными элементами Si ~ ~ Sj, совпадают: Si — Sj; 3) классы эквивалентности совпадают (Si = Sj), если их пересечение непусто: SiC\Sj ф 0. Доказательство. 1). Пусть класс Si — {s g5| Si ~ 5} порожден элементом Si G S. Рефлексивность отношения эквивалентности Si ~ Si позволяет заключить, что Si G Si.
§ 7.4. Отношение эквивалентности 225 2). Пусть z G S3; = {s eS\ Sj ~ s} — произвольный элемент класса. Следовательно, sj ~ z . По условию S{ ~ Sj. Из транзитивности отношения имеем S{ ~ Sj Л sj ~ z —> S{ ~ z, а значит, z G S{. Отсюда Sj С Si. Подобным образом проверяется включение в обратную сторону Sj D S^ Итак, классы эквивалентных элементов совпадают Sj = Si. 3). Пусть s G SiOSj ф 0 — непустое пересечение. Тогда верно, что Si ~ s и Sj ~ s. Из симметричности отношения имеем Sj ~ s —> 5 ~ 5j, а из транзитивности имеем з* ~ 5 Л s ~ sj —> з* ~ 5j. Итак, 5г и Sj — эквивалентные. Классы, порожденные такими элементами, совпадают: Si = Sj (см. условие 2). D Следствие. Пусть на множестве S задано отношение эквивалентности (~). Тогда множество S разбивается на классы эквивалентности S = S^ U S&2 U ... U 5&т, где S^ n skj = 0, если ki ф kj. Вследствие попарного непересечения 5^, разложение является прямым. Совокупность классов 5^, где г = 1,2, ...,га, называется фактормножеством множества S относительно отношения ~ и обозначается как S/~. Пример. Пусть S — множество треугольников. Определим на S бинарное (~) отношение. Будем считать, что для треугольников Ла, ЛЬ G S выполняется отношение Ла ~ ЛЬ, если они подобные. Данное отношение является отношением эквивалентности, так как свойства 1-3 выполняются для подобных треугольников. Введенное отношение разбивает множество треугольников на классы эквивалентности подобных треугольников. Пример. Пусть S — множество тг-мерных векторов. Определим на S бинарное (~) отношение. Будем полагать, что для а,Ъ G S выполняется отношение а~Ъ, если они колинеарные. Данное отношение является отношением эквивалентности, так как свойства 1-3 выполняются для колинеарных векторов. Множество векторов под действием введенного отношения разбивается на классы эквивалентности колинеарных векторов. Пример. Пусть S = {1,2,..., п}. Определим на S бинарное (~) отношение. Будем полагать, что для р, q G S выполняется отношение р ~ q, если они имеют одинаковые остатки от деления на целое положительное число т. Данное отношение является отношением эквивалентности. Множество S под действием 8 Иванов Б.Н.
226 Гл. 7. Теория графов. Алгоритмы на графах введенного отношения разбивается на классы эквивалентности чисел с одинаковыми остатками от деления на т. Пример. Примером отношения эквивалентности (~) может служить какая-либо классификация объектов множества S. Отношение si ~ Sj для элементов si, Sj G S выполняется, если они имеют выделенные общие признаки. Объекты с общими признаками объединяются в отдельный класс эквивалентности. Пример. Пусть S — множество звезд. Определим на S бинарное (~) отношение S{ ~ Sj = «Звезды S{ и Sj принадлежат одному созвездию», где Si, Sj G S. Данное отношение является отношением эквивалентности. Произвольный класс эквивалентности такого отношения может состоять либо из звезд одного созвездия, либо из одной звезды, если такая звезда не входит ни в одно из созвездий. § 7.5. Связные компоненты Пусть псевдограф Г(Х, U, Ф) является неориентированным. Две вершины х\,Х2 G X называются связанными, если существует маршрут из х\ в Ж2- Определим на множестве вершин X бинарное (~) отношение. Для х\,Х2 G X отношение ~ будет выполняться, т.е. х\ ~ x<i, если эти вершины связанные. Введенное отношение является отношением эквивалентности. Действительно, если вершина х\ связана с Х2, а вершина х^ связана с ж3, то очевидно, что вершина х\ связана с ж3. Следовательно, существует такое разложение множества вершин X = {JXi г на попарно непересекающиеся подмножества, что все вершины в каждом Х{ связаны, а вершины из различных Х% не связаны. Тогда можно записать разложение графа Г(Х, U, Ф) на непересекающиеся связные подграфы T(Xi, Щ, Ф). Вследствие попарного непересечения подграфов, разложение называется прямым, а сами подграфы называются компонентами связности графа Г. Таким образом, справедливо следующее утверждение.
§ 7.6. Выделение компонент связности 227 Утверждение 7.5.1. Каждый неориентированный граф распадается единственным образом в прямую сумму своих компонент связности. Количество компонент связности находится в определенном отношении с основными параметрами графа — числом вершин и его ребер. Утверждение 7.5.2. Пусть Г(Х,11, Ф) является простым графом с п вершинами и к компонентами связности. Число ребер в таком графе не может превосходить величины C2n_k+l = (n-k+l)(n-k)/2. Доказательство. Рассмотрим прямое разложение Г = к ^ = [J Г(Хг, Щ, Ф) исходного графа на компоненты связности. Ес- i=\ ли положить, что число вершин в компоненте связности Х{ равно к щ, то число ребер в таком графе не превосходит ^ С%.. Данная величина достигается в том случае, когда каждая из компонент связности является полным подграфом. Допустим, что среди компонент связности Г(Хг, U{, Ф) найдутся хотя бы две, которые имеют более одной вершины, например, n<i ^ щ > 1. Перенесем одну вершину из Т\ в Г2. Легко видеть, что это увеличивает число ребер в модифицируемом исходном графе с к компонентами связности. Отсюда следует, что максимальное число ребер должен иметь граф, состоящий из к — 1 изолированной вершины и одного полного подграфа с п— к + 1 вершинами. D Следствие. Граф с п вершинами и числом ребер, большим чем С^_! = (п— 1)(п— 2)/2, связен. § 7.6. Выделение компонент связности Рассмотрим алгоритм нахождения числа компонент связности, а также выделения этих компонент на неориентированном графе. Подобным образом решается задача и для ориентированного графа. В основу рассматриваемого алгоритма 7.3 выделения компонент связности положена описанная ранее техника поиска в глубину на графе Г(Х, U, Ф). Структура алгоритма 7.3 является модификацией в сторону упрощения основного алгоритма 7.1 поиска в глубину. Работа алгоритма 7.3 направлена 8*
228 Гл. 7. Теория графов. Алгоритмы на графах на формирование вектора Магк[х] меток вершин х е X графа. Элементу присваивается общий номер той компоненты, которой принадлежит вершина х <Е X. Сложность алгоритма 7.3, как и алгоритма 7.1, составляет 0(\Х\ + \U\). Алгоритм 7.3. for v € X do Mark[v] = 0; {} count = 0; { } for v € X do if Mark[v] = 0 then begin count = count + 1; Component(v, count); end; Procedure Component(x, count)', Mark[x] = count; for v € Adj[x] do if Mark[v] = 0 then begin Component^, count); end; end. Программная реализация выделения компонент связности представлена в алгоритме 7.4, который близко соотносится с соответствующим множественным описанием алгоритма 7.3. Рассмотрим пример расчета по программе алгоритма 7.4 выделения компонент связности графа, представленного на рис. 7.15. 15 8 • 21 -9 Рис. 7.15. Пример выделения компонент связности графа Для программы алгоритма 7.4 исходные данные структуры смежности Лф'[ж] графа на рис. 7.15 задаются в текстовом файле Connecnt.in. Структура (правило) заполнения файла одинакова с той, которая описана в рассмотренном примере поиска в глубину при расчете по программе алгоритма 7.2. Данные файла Connect.in для примера на рис. 7.15: 11 13 2 3 4 2 2 3 1
§ 7.6. Выделение компонент связности 229 9 1 7 8 1 7 12 3 14 15 21 14 2 12 15 3 3 2 14 4 2 13 7 2 9 8 15 2 14 12 21 1 12 Результаты расчетов сохраняются в выходном файле Connect, out со следующей структурой: 1 2 9 8 12 14 3 4 7 15 21 - номера вершин графа; 11223311233 — номера компонент связности. Алгоритм 7.4. Program ConnectComponent; { } uses CRT,DOS; Const nVertex=100; { } ib4d/acent=1000; { } Type TypeVertex=array[l..nVertex] of Integer; Typey4d/acent=array[l..ny4d/acent] of Integer; Var f :Text; {} n :Integer; {} Adj :Typey4d/acent; { } Fst :TypeVertex; { } Nbr :TypeVertex; { } Vtx :TypeVertex; { } Mark :TypeVertex; { } Procedure lnit( Var yes : Boolean ); {} { } { } Var i,j,m :Integer; begin
230 Гл. 7. Теория графов. Алгоритмы на графах for i:=l to n do for j:=l to Nbr[i] do begin yes:=FALSE; for m:=l to n do if i4rf/[Fst[i]+j]=Vtx[m] then begin yes:=TRUE; i4d/[Fst[i]+j]:=m; break; end; if not yes then exit; end; end; Procedure Component x,count -.Integer); { } Var i,v :Integer; begin Mark[x]:=count; for i:=l to Nbr[x] do begin v:=Ai/[Fst[x]+i]; if Mark[v]=0 then Component(v,count); end end; Procedure Connect; { } Var v,count : Integer; begin for v:=l to n do Mark[v]:=0; count:=0; { } for v:=l to n do begin if Mark[v]=0 then begin count:=count+l; Component(v,count); end; end; end;
§ 7.7. Эйлеровы графы 231 Var{ } i,j :Integer; yes :Boolean; begin { } Assign(f,'Connect.in'); Reset(f); { } { } Read(f.n); { } Fst[l]:=0;{ } for i:=l to n do begin Read(f,Vtx[i]); {} Read(f,Nbr[i]); { } for j:=l to Nbr[i] do Read(Md/[Fst[i]+j]); { } Fst[i+l]:=Fst[i]+Nbr[i]; { } end; Close(f); Assign(f,'Connect.out'); Rewrite(f); { } Init(yes); if not yes then begin WriteLn(f,'rinoxaH структура смежности графа!'); Close(f); exit; end; Connect; for i:=l to n do Write(f,Vtx[i]:3); Writeln(f); for i:=l to n do Write(f,Mark[i]:3); Close(f); end. { } § 7.7. Эйлеровы графы Классической в теории графов является следующая задача. Город стоит на реке. Имеются два острова Ли Д соединенных семью мостами с берегами реки С и В и друг с другом, как показано на рис. 7.16. Задача состоит в следующем: осуществить
232 Гл. 7. Теория графов. Алгоритмы на графах прогулку по городу таким образом, чтобы, пройдя по каждому мосту один раз, вернуться обратно. Решение этой задачи сводится к нахождению некоторого специального маршрута на графе. Определение. Пусть Г(Х, U, Ф) — неориентированный псевдограф. Цепь в Г называется эйлеровой, если она проходит по одному разу через каждое ребро псевдографа Г. Такой граф называется эйлеровым. Замкнутая эйлерова цепь называется эйлеровым циклом. Поставим в соответствие плану расположения суши и мостов на рис. 7.16 мультиграф, в котором каж- D дой части суши соответствует вершина, а каждому мосту — ребро, соединяющее соответствующие вершины. Теперь задача звучит так: найти Рис. 7.16. План расположе- эйлерову цепь (цикл) в мультиграфе. ния мостов и соответствую- Решение этой задачи было дано Л. щий ему мультиграф Эйлером. Теорема 7.7.1 (Л. Эйлера). Эйлерова цепь в Г(Х, U, Ф) — псевдографе без изолированных вершин существует тогда и только тогда, когда выполняются следующие условия: 1) граф связный] 2) степени внутренних вершин четные (внутренние вершины не являются началом и концом цепи)] 3) если вершины а и Ъ являются началом и концом цепи и а ^ ^ Ь, то степени их нечетные] 4) если вершины а и Ь являются началом и концом цепи и а = = Ь, то степени их четные. Доказательство. (=>) Дано, что существует эйлерова цепь au\X2U2.. .хпипЪ, где а,Ь,Х{ Е X, щ Е U, в которой содержатся все ребра по одному разу. Такая цепь включает все вершины графа, так как граф не содержит изолированных вершин. Докажем условия 1)-4): 1) по данной цепи из любой вершины можно попасть в любую другую, значит, граф связный; 2) каждая тройка цепи щ-\х%щ привносит вершине х% степень два, а так как все ребра щ в цепи различные, то степени внутренних вершин четные; доказательства 3) и 4) повторяют доказательство 2). (<=) Даны условия 1)-4). Построим эйлерову цепь. Предварительно приведем условие 3) к условию 4) включением в граф $>
§ 7.7. Эйлеровы графы 233 фиктивного ребра и*, которым свяжем вершины а и Ь. Теперь и в случае 3) все вершины будут иметь четную степень. Пусть А е X — произвольная вершина (рис. 7.17). Из нее будем строить цепь, выбирая в качестве продолжения пути ребро, которое еще не пройдено. Эта цепь (цикл Г\) может закончиться только в вершине А, так как, войдя в любую другую вершину, всегда существует ребро, по которому можно выйти из нее (степени вершин четные). Возможны два случая: 1) построенный цикл Г\ содержит все ребра графа, тогда теорема доказана; 2) Г\ содержит не все ребра графа. Во втором случае рассмотрим граф Г\Гь полученный удалением из Г всех ребер, входящих в Г\. Граф Г \ Ti вновь содержит вершины только с четными степенями (у каждой вершины удалили по четному числу ребер). Так как Г — связный граф, то существует вершина в Гь инцидентная ребру из Г\Гь Пусть это вершина В € X. Построим из нее цикл Г 2 так же, как строили цикл Г\. Построим общий цикл Г12 из Г\ и Г2 так, как это сделано на рис. 7.17. Для Г12 вновь проверяем рассмотренные выше два случая, как для Г\. Рис. 7.17. Объединение двух циклов в один цикл Процесс расширения продолжаем до тех пор, пока не будут включены все ребра графа в один цикл: Au\x<i.. .au*b.. .unA. Разрывая данный цикл по ребру и*, получим эйлерову цепь aw\t2 ... tnwnb, где t{ G X,wi E £Л □ Конструктивный характер доказательства теоремы позволяет на формальном уровне в алгоритме 7.5 записать рассмотренный поиск эйлеровой цепи. Исходный граф представлен своей структурой смежности Adj[x], где Л^/[ж] — множество вершин, смежных с х G X. Результирующая эйлерова цепь формируется в множестве Z. Алгоритм 7.5. 3* € X; { } Z = {v};{ } R=0;{ }
234 Гл. 7. Теория графов. Алгоритмы на графах repeat Сус1е(г;,Д); Z = ZUR;{ } until Not Зг; € Z \Adj[v]\ > О Procedure Сус1е(г>, R) R = {v};{ } repeat w = Adj[v]\ R = RU {w}\ Adj[v] = Adj[v] \{w}; { (ti.to)} if v ф w then Adj[w] = Adj[w] \ {v}\ { (w, v)} until Not \Adj[v}\ > 0 { } end. Частные же циклы, расширяющие Z, представляются множеством R. Ребра, включенные в частный цикл R (а значит, и в Z), удаляются как пройденные из структуры смежности Л^/[ж] (из графа). Формирование расширяющих циклов R осуществляется до тех пор, пока структура смежности графа содержит хотя бы одно ребро. • Сложность алгоритма поиска эйлеровой цепи. Число обращений к процедуре Cycle выполняется не более, чем число вершин \Х\. При каждом обращении количество производимых действий пропорционально числу ребер, входящих в выделенный цикл. Сложность суммарной работы процедуры Cycle пропорциональна количеству ребер U в графе. Поэтому сложность выделения эйлеровой цепи составляет 0(\Х\ + \U\). Программная реализация поиска эйлеровой цепи представлена в алгоритме 6.6, который соответствует множественному описанию соответствующего алгоритма 6.5. Алгоритм 7.6. Program EilerWay; { } uses CRT,DOS; Const nVertex=100; { } rb4d/acent=1000; { } Type TypeVertex=array[l..nVertex] of Integer;
§ 7.7. Эйлеровы графы 235 Type^d/acent=array[l..n/ld/acent] of Integer; Var f :Text; {} ks :Integer; { } n :Integer; {} Adj :Type/ld/acent; { } Fst :TypeVertex; { } Nbr :TypeVertex; { } Vtx :TypeVertex; { } Deg :TypeVertex; { } kz :Integer; { } z :Type/ld/acent; { } r :Type/ld/acent; { } Procedure lnit( Var yes : Boolean ); Var i,j,k,m :Integer; begin { } { } { } for i:=l to n do for j:=l to Nbr[i] do begin yes:=FALSE; for m:=l to n do if >ld/[Fst[i]+j]=Vtx[m] then begin yes:=TRUE; >ld/[Fst[i]+j]:=m; break; end; if not yes then exit; end; { } for i:=l to n do begin k:=l; for j:=l to Nbr[i] do if y4d/[Fst[i]+j]=i then begin i4d/[Fst[i]+j]:=i4d/[F'st[i]+k]; i4d/[Fst[i]+k]:=i; k:=k+l;
236 Гл. 7. Теория графов. Алгоритмы на графах end; end; {} for i:=l to n do begin Deg[i]:=0; for j:=l to Nbr[i] do begin Deg[i]:=Deg[i] + l; if >ld/[Fst[i]+j]=i then Deg[i]:=Deg[i] + l; {} end; end; { } k:=0; ks:=l; for i:=l to n do if ( Deg[i] mod 2 ) > 0 then begin k:=k+l; ks:=i; end; if ( k<>2 ) and ( k<>0 ) then yes:=FALSE; { } end; Procedure Cycle( v :lnteger; var count :lnteger ); { } Var w :Integer; i,j :Integer; begin count:=l; r[count]:=v; repeat w:=/L//[Fst[v] + l]; { } count:=count+l; r[count]:=w; { (v,w) v} Fst[v]:=Fst[v] + l; Nbr[v]:=Nbr[v]-l; { (w,v) } { w} if vow then for i:=l to Nbr[w] do if /ld/[Fst[w]+i]=v then begin for j:=i+l to Nbr[w] do >ld/[Fst[w]+j-l]:=i4d/[Fst[w]+j]; Nbr[w]:=Nbr[w]-l; break; end;
§ 7.7. Эйлеровы графы 237 v:=w; until Not( Nbr[v]>0 ); end; Procedure Eiler; { } Var v,w :Integer; i,j,kt :Integer; count :Integer; yes :Boolean; begin v:=ks; kz: = l; kt:=kz; z[kz]:=v; Write(f,'Z='); {} for i:=l to kz do Write(f,Vtx[z[i]]:3); WriteLn(f); repeat Cycle(v,count); Write(f,'R='); for i:=l to count do Write(f,Vtx[r[i]]:3); WriteLn(f); for i:=l to count-1 do begin z[kz+i]:=z[kt+i]; z[kt+i]:=r[i+l]; end; kz:=kz+count-l; Write(f/Z='); {} for i:=l to kz do Write(f,Vtx[z[i]]:3); WriteLn(f); yes:=FALSE; for i:=kz downto 1 do if Nbr[z[i]]>0 then begin v:=z[I]; kt:=i; yes:=TRUE; break; end; until Not yes; end; Var{ } i,j :Integer; yes :Boolean;
238 Гл. 7. Теория графов. Алгоритмы на графах begin { } Assign(f,'Eiler.in'); Reset(f); { } { } Read(f,n); { } Fst[l]:=0;{ } for i:=l to n do begin Read(f,Vtx[i]); {} Read(f,Nbr[i]); { } for j:=l to Nbr[i] do Read(W/[Fst[i]+j]); { } Fst[i+l]:=Fst[i]+Nbr[i]; { } end; Close(f); Assign(f,'Eiler.out'); Rewrite(f); { } Init(yes); if not yes then begin WriteLn(f,TLnoxaH структура смежности графа'); WriteLn(f,' или граф не эйлеровый!'); Close(f); exit; end; Eiler; Write(f,'0='); for i:=l to kz do Write(f,Vtx[z[i]]:3); WriteLn(f); Close(f); end. Main Рассмотрим пример расчета по программе алгоритма 7.6 поиска эйлеровой цепи в графе, изображенном на рис. 7.18. 3 7 2 6 5 Рис. 7.18. Пример расчета эйлеровой цепи графа 1 ^^М 1 ■ 1 1
§ 7.8. Остовные деревья 239 Для программы алгоритма 7.6 исходные данные структуры смежности Аф'[ж] графа на рис. 7.18 задаются в текстовом файле Eiler.in. Структура (правило) заполнения файла совпадает с той, которая описана в рассмотренном примере поиска в глубину при расчете по программе алгоритма 7.2. Данные файла Eiler.in для примера на рис. 7.18: 9 14 2 3 4 5 2 4 13 6 7 3 4 12 7 8 4 4 15 8 9 5 4 14 6 9 6 2 2 5 7 2 2 3 8 2 3 4 9 2 4 5 Результаты расчетов сохраняются в выходном файле Eiler.out со следующей структурой: Z= 1 R= 12 3 14 5 1 Z= 12 3 14 5 1 R= 562738495 Z= 123 145627384951 0= 123145627384951 На каждом шаге показана строящаяся эйлерова цепь Z, которая расширяется выделенным R циклом. Результирующая эйлерова цепь графа отмечена признаком О в начале строки. § 7.8. Остовные деревья Определение. Остовным деревом связного неориентированного графа Г(Х, Uу Ф) называется дерево Го(-Х",С/Ь,Ф), являющееся подграфом графа Г и содержащее все его вершины (рис. 7.19). Рис. 7.19. Связный граф и два остовных дерева Утверждение 7.8.1. В дереве с п вершинами имеется п - 1 ребро.
240 Гл. 7. Теория графов. Алгоритмы на графах Доказательство проведем по индукции числа вершин. Заметим, что в дереве найдется вершина, степень которой равна единице (висячая вершина). Действительно, в противном случае, если все степени вершин ^ 2, можно построить цикл, что противоречило бы определению дерева. Цикл строится следующим образом. Выполним проход по ребрам графа, начиная с произвольной вершины. Так как степени ^ 2, то, попав в вершину первый раз, можно всегда из нее выйти. Исходный граф — конечный и связный. Следовательно, наступит момент, когда вновь попадем в пройденную уже вершину, что доказывает существование цикла. Условие индукции для п = 2 выполняется, дерево с двумя вершинами содержит одно ребро. Предположим теперь, что утверждение выполняется для деревьев, число вершин у которых меньше п. Рассмотрим дерево с п вершинами. Удалим из этого дерева висячую вершину и инцидентное ей ребро. Очевидно, что оставшийся граф будет связным и без циклов, т. е. будет деревом сп-1 вершиной. Тогда по предположению индукции оставшаяся часть графа содержит п — 2 ребра, а значит, исходное дерево должно иметь их п- 1. D Практическую значимость остовных деревьев дает популярная форма задачи Кэли. Необходимо соединить п городов железнодорожными линиями так, чтобы не строить лишних дорог. Известна стоимость строительства дорог для каждой пары городов. Какова должна быть сеть дорог, соединяющая все города и имеющая минимальную возможную стоимость? Аналогичные вопросы возникают при проектировании линий электропередач, сетей ЭВМ и др. В терминах теории графов задачу можно сформулировать следующим образом. Рассмотрим граф Г(Х, U, Ф), где X — города, U — дороги. Каждому ребру и е U назначим вес и)(и) — стоимость строительства дороги и. Задача состоит в том, чтобы построить связный граф Г0(Х, Щ^Ф), содержащий все вершины, с минимальным весом И^Го) = ^ и)(и). Очевидно, что иеи0 Го — дерево, в противном случае можно было бы удалить одно ребро, не нарушая связности Го и уменьшая сумму весов его ребер. Определение. Минимальным остовным деревом (лесом) называется остовное дерево (лес) с минимальным общим весом его ребер.
§ 7.8. Остовные деревья 241 7.8.1. Жадный алгоритм построения минимального остовного дерева Минимум остовных деревьев графа Г(Х, U, Ф) можно найти, применяя процедуру исследования ребер в порядке возрастания их весов. Другими словами, на каждом шаге выбирается новое ребро с наименьшим весом, не образующее циклов с уже выбранными ребрами. Процесс продолжается до тех пор, пока не будет выбрано \Х\ — 1 ребро. Рассмотренная процедура называется жадным алгоритмом. Реализация данной схемы может быть выполнена следующим образом. Для каждой вершины X = {х\,Х2,... ,хп} графа Г(А,(У,Ф) формируются начальные тривиальные компоненты связности Ti(Xi,Ui,Ф), где X = {xi}, Щ = 0,Х{Г\Xj = 0, i ф j, \х\ X = [J X{, i,j = 1,2, ...,|Х|. Компоненты Т{ являются деревья- г=1 ми, объединение Т = \JTi которых дает начальное приближение г строящегося остовного дерева Го(Х,Щ^Ф). Включение в строящееся остовное дерево Го выбранного ребра на очередном шаге жадного алгоритма выполняется слиянием Ti = Ti U Tj (Xi = Xi U Xj и Ui = UiU Uj) двух компонент Г» и Tj, которым принадлежит по вершине нового ребра, и включением самого ребра в объединенное множество Ui = UiUUj ребер. Процесс роста объединения Т = [JTi компонент к остовному г дереву Го(Х, С/о, Ф) продолжаем до тех пор, пока не будет включено \Х\ — 1 ребро. Справедливость жадного алгоритма является следствием следующих двух лемм. Лемма 7.8.1. Пусть Г(Х, U, Ф) — связный неориентированный граф и Го(Х, С/о, Ф) — произвольное остовное дерево для него. Тогда: 1) \/х\,Х2 G X существует единственная между ними цепь *Г0; 2) если к Го добавить ребро из U \ Щ, то возникнет ровно один цикл. Доказательство. Утверждение 1 верно, так как в противном случае в Го существовал бы цикл, что противоречит дереву Tq. Утверждение 2 верно, поскольку между вершинами добавляемого ребра уже есть одна цепь, а значит, возникнет один цикл. D
242 Гл. 7. Теория графов. Алгоритмы на графах Лемма 7.8.2. Пусть Г(Х, U, Ф) — связный неориентированный граф, для каждого ребра и е U определен вес и (и), и Ti(Xi,Ui,§) — компоненты связности жадного алгоритма, объединение которых Т = \jTi, согласно алгоритму, растет г к остовному дереву Го(Х, С/о,Ф), где г = 1,2, ...,к и к > 1. Пусть следующим найденным для включения ребром является ребро £ = (х,у) наименьшего веса из оставшихся U \\jUi г и пусть х G Х\ и у ф Х\. Тогда найдется остовное дерево Г0 для T(X,U, Ф), содержащее ребра [JUi U {s}, вес которого не г больше любого другого остовного дерева, содержащего ребра и Ui. г Доказательство. Допустим противное. Пусть существует остовное дерево Го(Х, ?7q, Ф) для Г, содержащее [JUi и не г содержащее ребра £, вес которого меньше веса любого остовного дерева для Г, содержащего \jUiU{e}. По утверждению 1 леммы 7.8.1, при добавлении е к Г'0 образуется цикл. Этот цикл должен содержать такое ребро ef = (xf,yf), отличное от £, что х' € Х\ и у1 ф Х\, так как цикл входит в U\ по ребру (х,у) и у £ X, то он должен и выйти из U\ (рис. 7.20). Из условия следует, что вес u(s) < uj(s/), так как [JUiCUo и [JUi С Uq г г и ребро £ выбиралось с минимальным весом из оставшихся ребер U \ (Jj Ui без образования циклов, в противном же случае выбор должен был бы пасть на е', так как оно тоже не образует циклов i Рассмотрим граф Tq(X, Uq, Ф), образованный добавлением £ к TfQ и удалением £f из Г0. В Г0 нет циклов, так как единственный цикл разорван удалением ребра £f. Го остался связным, так как осталась цепь между я/ и у'. Таким образом, Г0 — остовное дерево. ис' ' Учитывая, что и(£) < u(£f), то вес дерева Го не больше веса Г'0. Остовное дерево Г0 содержит {J Щ и £, а это противоречит предположению г минимальности Г'0, что доказывает справедливость жадного алгоритма. О
§ 7.8. Остовные деревья 243 Реализация «жадной» схемы формирования остовного дерева представлена в алгоритме 7.7. Используемые при его описании обозначения соответствуют тому, что вводилось при обосновании жадной схемы. Вектор Магк[ж] меток вершин х е X графа поддерживает их принадлежность компонентам связности Uu из которых формируется реберный список остовного дерева. Начальные величины Магк[жг] устанавливаются равными порядковым номерам соответствующих вершин х% Е X. Далее значения Магк[жг] корректируются по мере слияния компонент Uu сохраняя соответствие принадлежности им вершин. Исходный граф задается реберным списком U, выходное остовное дерево также формируется реберным списком Uq. Алгоритм 7.7. for Xi £ X do Mark[xi] = г; Sort(Uy} { } while \U0\ < \X\ - 1 do begin (*,»)€ CM } if Mark[x] ф Mark[y] then begin U0 = U0U{(x,y)y}{ } z = Mark[y]t{Ux Uy) for v € X do if Mark[v] = z then Mark[v] = Mark[x}\ end; U = U\{(x,y)};{ } end. • Сложность жадного алгоритма. Жадный алгоритм требует предварительной сортировки ребер по их весам. Стандартные методы сортировки имеют сложность 0(|С/|2). Сложность алгоритма 7.7 помимо сложности сортировки зависит от сложности реализации слияния подмножеств Ux и Uy. Сложность данной операции при полном переборе вершин данных подмножеств (как представлено в алгоритме 7.7) составляет 0(|Х|2). Значит, сложность жадного алгоритма 0(|Х|2 + \U\2). Программная реализация жадного алгоритма представлена в алгоритме 7.8, который близко соответствует множественному описанию соответствующего алгоритма 7.7.
244 Гл. 7. Теория графов. Алгоритмы на графах Алгоритм 7.8. Program HungryOstov; { } uses CRT,DOS; Const nVertex=50; { } nRib=1000; { } Type TypeVertex=array[l..nVertex] of Integer; TypeRib=array[l..nRib] of Integer; Var f :Text; {} nX :Integer; { } nU :Integer; { } Mark :TypeVertex; { } X :TypeVertex; { } U :TypeRib; { } nUo :Integer; { } Uo :TypeRib; { } We :TypeRib; { } Wt :LongInt; { } Procedure Init; { } Var i,j,m :Integer; begin for i:=l to2*nU doUo[i]:=l; for i:=l to 2*nU do for j:=i+l to 2*nU do if Uo[j] = l then if U[j]=U[i] then Uo[j]:=0; nX:=0; for i:=l to 2*nU do if Uo[i] = l then begin nX:=nX+l; X[nX]:=U[i]; end; for i:=l to 2*nU do Новые метки
§ 7.8. Остовные деревья 245 for m:=l to nX do if U[i]=X[m] then begin U[i]:=m; break; end; end; Procedure Sort; { } Var i,j,k :Integer; w :Integer; begin for i:=l to nU do for j:=l to nU-i do if We[j]>We[j+l] then begin w:=We[Jl; We[j]:=We[j+l]; We[j+l]:=w; w:=U[2*j-ll; U[2*j-l]:=U[2*(j+l)-l]; U[2*(j+l)-l]:=w; w:=U[2*Jl; U[2*j]:=U[2*(j+l)]; U[2*(j+l)]:=w; end; end; Procedure Ostov; { } Var i,x,y,z :Integer; sU :Integer; begin for i:=l to nX do Mark[i]:=i; Sort;{ } nUo:=0;{ U0) sU:=l;{ U) while nUo<nX-l do begin x:=U[2*sU];{ } y:=U[2*sU-ll; if Mark[x]<>Mark[y] then begin nUo:=nUo+l; Uo[nUo]:=sU; { } z:=Mark[y];{C/x Uy) for i:=l to nX do if Mark[i]=z then Mark[i]:=Mark[x]; end; sU:=sU+l;{ (x,y) U}
246 Гл. 7. Теория графов. Алгоритмы на графах end; end; Var{ } i,j :Integer; begin { } Assign(f,'Hungry.in'); Reset(f);<J>aiM открыт для чтения Read(f.nU); { } for i:=l to nU do Read(f,U[2*i-l]); { } for i:=l to nU do Read(f,U[2*i]); { } for i:=l to nU do Read(f,We[i]); { } Close(f); Assign(f,'Hungry.out'); Rewrite(f); { } Init; Sort; WriteLn(f,'nU =',nU:3); WriteLn(f,'nX =',nX:3); Write(f,'X =');for i:=l to nX do Write(f,X[i]:3);WriteLn(f); Write(f,'ul =');for i:=l to nU do Write(f,X[U[2*i-l]]:3);WriteLn(f); Write(f,'u2 =');for i:=l to nU do Write(f,X[U[2*i]]:3);WriteLn(f); Write(f,'We =');for i:=l to nU do Write(f,We[i]:3);WriteLn(f); Ostov; Write(f,'uol=');for i:=l to nUo do Write(f,X[U[2*Uo[i]-l]]:3);WriteLn(f); Write(f,'uo2=');for i:=l to nUo do Write(f,X[U[2*Uo[i]]]:3);WriteLn(f); Write(f,'Woe=');for i:=l to nUo do Write(f,We[Uo[i]]:3);WriteLn(f); Wt:=0; for i:=l to nUo do Wt:=Wt+We[Uo[i]]; Write(f,'Bec=',Wt:3); Close(f); end. { } Рассмотрим пример построения минимального остовного дерева графа, изображенного на рис. 7.21, по программе алгоритма 7.8.
§ 7.8. Остовные деревья 247 Хз Х& хъ 17 х4 хъ 17 х4 Рис. 7.21. Пример расчета остовного дерева Для программы этого алгоритма исходные данные графа на рис. 7.21 задаются реберным списком в текстовом файле Hun- gry.in со следующей структурой: • в первой строке файла содержится количество ребер в списке (12); • во второй и третьей строках указываются ребра своими вершинами: одна вершина во второй строке, другая вершина ребра в третьей строке; • в четвертой строке располагаются значения весов соответствующих ребер. 12 7 1 1 7 7 7 7 7 1 2 3 4 5 6 2 4 9 16 25 36 20 2 3 3 4 15 3 4 5 6 5 6 1 17 28 23 nU пХ X ul u2 We uol uo2 Woe Bee nU nX X (ul, We Результаты расчетов сохраняются в выходном файле Hungry.out со следующей структурой: 12 7 7 7 1 1 7 1 1 57 15 16 17 20 23 25 28 36 4 6 5 1 17 23 и2) Обозначения данных в файле Hungry.out: — число ребер в графе; — число вершин в графе; — список вершин графа; — сортированный список ребра графа; — веса ребер согласно их сортировке;
248 Гл. 7. Теория графов. Алгоритмы на графах (uol, uo2) — ребра остовного дерева; Woe — веса ребер остовного дерева; Вес — сумма весов ребер остовного дерева. 7.8.2. Алгоритм ближайшего соседа построения остовного дерева Данный метод построения минимального остовного дерева не требует ни сортировки, ни проверки на цикличность на каждом шаге. 1. Построение остовного дерева Го начинается с произвольной вершины х\. 2. Затем среди ребер, инцидентных х\, выбираем ребро (х\,Х2) с наименьшим весом и включаем его в дерево Г0. 3. Повторяя процесс, выполняем поиск наименьшего по весу ребра, соединяющего вершины х\ или х^ с некоторой другой вершиной графа х%. 4. Процесс включения ребер продолжаем до тех пор, пока все вершины исходного графа Г не будут включены в дерево Го- Построенное дерево будет минимальным остовным. Доказательство того, что последовательность шагов 1-4 приводит к построению минимального остовного дерева, аналогично доказательству для жадного алгоритма. Реализация схемы ближайшего соседа формирования остовного дерева выполнена в алгоритме 7.9, где исходный граф Г(Х, U, Ф) представляется матрицей весов We = [гиу], веса несуществующих ребер полагаются равными +оо. Под весами ребер понимаются их длины. Остовное дерево Г0(Х0,и0,Ф) формируется посредством реберного списка [/"о и списка вершин Xq. В качестве меток вершин устанавливаются их порядковые номера X = {1,2,... ,тг}. Для каждой вершины х е X графа, еще не включенной в остовное дерево, поддерживается минимальное расстояние до множества ранее включенных вершин в Xq. Это осуществляется с помощью двух векторов сКз£[ж] и prev[x], где сКз£[ж] равно минимальному расстоянию от х Е X до вершины ргеи[ж] Е Xq. Обновление значений векторов d£s£[cc] и ргеи[ж] выполняется на каждом шаге алгоритма при пополнении Xq новой вершиной. Алгоритм 7.9. ДГ = {1,2....,*»};{ } пХ=\Х\;{ } v = rand(l,\X\);{ v € X}
§ 7.8. Остовные деревья 249 Х0 = W; { } X = X\{v};{v X) Uo = 0;{) WT = 0; { } for x G X do begin dis£[x] = We [ж, г;]; { prev[x] = v; { (v,x) end; while \Xq\ Ф nX do beg X V £ Xo} dist[x]} in di5i[v] = mindi5i[x]; {v € X } X0=X0U%};{} X = X\{v};{) l/o = l/oU{(pret;[t;]ft;)}; {} WT = WT + dist[v}\ { } { dist[x] } for x G X do if dist[x] > We[v,x] then begin di5i[x] = We[v,x]; prev[x] = v\ end; end. • Сложность алгоритма ближайшего соседа. Сложность алгоритма определяется двумя вложенными циклами по числу вершин. В каждом из циклов выполняется константное число операций. Следовательно, сложность составляет 0(|Х|2). Программная реализация алгоритма ближайшего соседа представлена в алгоритме 7.10, который близко соответствует множественному описанию соответствующего алгоритма 7.9. Алгоритм 7.10. Program NearOstov; { } uses CRT,DOS; Const nVertex=50; { } nRib=1000; { } Type TypeVertex=array[l..nVertex] of Integer; TypeRib=array[l..nRib] of Integer;
250 Гл. 7. Теория графов. Алгоритмы на графах TypeWeight=array[l..nVertex,l..nVertex] of Integer; Var f :Text; {} nX :Integer; { } nXo :Integer; { } nUo :Integer; { } X :TypeVertex; { } Xo :TypeVertex; { } Uo :TypeRib; { } Prev : Type Vertex; { } Dist :TypeRib; { } We :TypeWeight; { } Wt :LongInt; { } Procedure minDist( Var v :Integer); {v } Var i,d :Integer; begin v:=X[l]; d:=Dist[v]; for i:=2 to nX do if d>Dist[X[i]] then begin v:=X[i]; d:=Dist[v]; end; end; Procedure newDist( v :Integer); { dist\\ } Var i [Integer; begin for i:=l to nX do if Dist[X[i]]>We[X[i],v] then begin Dist[X[i]]:=We[X[i],v]; Prev[X[i]]:=v; end; end; Procedure Ostov; { } Var
§ 7.8. Остовные деревья 251 i,nStop,v:Integer; begin nStop:=nX; for i:=l to nX do X[i]:=i; v: = l; for i:=l to nX do begin Dist[i]:=We[i,v]; Prev[i]:=v; end; nXo:=0; { } nUo:=0; { } nXo:=nXo+l; Xo[nXo]:=X[v]; { } X[v]:=X[nX]; nX:=nX-l; {X = X\{v} v X) Wt:=0; while nXoOnStop do begin minDist(v); nXo:=nXo+l; Xo[nXo]:=v; {X0 = X0 U {v} v } for i:=l to nX do {X = X \ {v} v X} if X[i]=v then begin X[i]:=X[nX]; break; end; nX:=nX-l; nUo:=nUo+l; {U0 = U0 U {(prev[v],v)} } Uo[2*nUo-l]:=Prev[v]; Uo[2*nUo]:=v; Wt:=Wt+Dist[v]; { } newDist(v); end; end; Var{ } i,j :Integer; begin { } Assign(f,'Near.in'); Reset(f); { }
252 Гл. 7. Теория графов. Алгоритмы, на графах Read(f,nX); { } for i:=l to nX do begin for j:=i to nX do begin Read(f,We[i,j]); { } if We[i,j]=0 then We[i,j]:=$7fff; { } We[j,i]:=We[i,j]; end; end; Close(f); Assign(f,'Near.out'); Rewrite(f); { } nUo:=0; { } for i:=l to nX do for j:=i+l to nX do begin if We[i,j]=$7fff then continue; nUo:=nUo+l; Uo[2*nUo-l]:=i; Uo[2*nUo]:=j; end; WriteLn(f,'nU =',nUo:3); WriteLn(f,'nX =',nX:3); Write(f,'X =');for i:=l to nX do Write(f,i:3);WriteLn(f); Write(f,'ul =');for i:=l to nUo do Write(f,Uo[2*i-l]:3);WriteLn(f); Write(f,'u2 =');for i:=l to nUo do Write(f,Uo[2*i]:3);WriteLn(f); Write(f,'We =');for i:=l to nUo do Write(f,We[Uo[2*i-l],Uo[2*i]]:3); WriteLn(f); Ostov; Write(f,'uol=');for i:=l to nUo do Write(f,Uo[2*i-l]:3);WriteLn(f); Write(f,'uo2=');for i:=l to nUo do Write(f,Uo[2*i]:3);WriteLn(f); Write(f,'Woe=');for i:=l to nUo do Write(f,We[Uo[2*i-l],Uo[2*i]]:3); WriteLn(f); Wt:=0; for i:=l to nUo do Wt:=Wt+We[Uo[2*i-l],Uo[2*i]]; Write(f,'Bec=',Wt:3); Close(f); end. {Main} Рассмотрим пример расчета по программе алгоритма 7.10 построения минимального остовного дерева графа, изображенного на рис. 7.21. Исходные данные графа представляются матрицей
§ 7.9. Кратчайшие пути на графе 253 весов его ребер в текстовом файле Near.in со следующей структурой: • в первой строке содержится количество вершин в графе; • в следующих строках задаются верхние диагональные элементы (нулевые диагональные элементы включаются) строк матрицы весов. 7 0 20 0 0 15 0 0 0 3 0 0 0 0 17 0 23 0 0 0 28 0 1 4 9 16 25 36 0 Результаты расчетов сохраняются в выходном файле Near.out со следующей структурой: nU = nX = X = ul = u2 = We = uol = uo2 = Woe = Bee = 12 7 1 1 2 20 1 7 1 57 2 1 6 23 7 2 4 3 1 7 1 7 3 9 4 2 3 15 3 4 3 5 2 7 4 4 5 17 6 3 4 3 1 6 23 7 3 7 9 4 4 5 5 6 5 7 6 7 7 17 16 28 25 36 Обозначения данных в файле Near.out соответствуют принятым обозначениям в файле Hungry.out при контрольном расчете остовного дерева по жадному алгоритму 7.8 (см. п. 7.8.1). § 7.9. Кратчайшие пути на графе Рассматриваемый алгоритм определяет расстояния между вершинами в простом орграфе с неотрицательными весами. К таким орграфам сводятся многие типы графов. Если граф не является простым, его можно сделать таковым, отбрасывая все петли и заменяя каждое множество параллельных ребер кратчайшим ребром (ребром с наименьшим весом) из этого множества; каждое неориентированное ребро заменяется парой ориентированных ребер. Если граф не взвешен, то можно считать, что все ребра имеют один вес. Пусть Г(Х, U, Ф) — простой орграф, для каждого ребра и eU определен вес и(и) ^ 0. Найдем кратчайший путь между
254 Гл. 7. Теория графов. Алгоритмы на графах выделенными вершинами xq и z (рис. 7.22). Несуществующие ребра будем считать ребрами с бесконечными весами. Сумму весов ребер в пути будем называть весом или длиной пути. 2 х2 5 *з 7 Рис. 7.22. Простой взвешенный орграф Обозначим Wij =u)(u) — вес ребра и = (xi,Xj). Алгоритм поиска кратчайшего пути, начиная из вершины ж0, просматривает граф в ширину, помечая вершины xj значениями-метками их расстояний от xq. Метки могут быть временные или окончательные. Временная метка вершины xj — это минимальное расстояние от xq до xj, когда в определении пути на графе учитываются не все маршруты из xq в xj. Окончательная метка xj — это минимальное расстояние на графе от ж0 до Xj. Таким образом, в каждый момент времени работы алгоритма некоторые вершины будут иметь окончательные метки, а остальная их часть — временные. Алгоритм заканчивается, когда вершина z получает окончательную метку, т. е. расстояние от xq до z. Вначале вершине xq присваивается окончательная метка О (нулевое расстояние до самой себя), а каждой из остальных вершин |X | — 1 присваивается временная метка оо (бесконечность). На каждом шаге одной вершине с временной меткой присваивается окончательная и поиск продолжается дальше. На каждом шаге метки меняются следующим образом. 1. Каждой вершине Xj, не имеющей окончательной метки, присваивается новая временная метка — наименьшая из ее временной и числа (wij+ окончательная метка xi), гДе х% ~ вершина, которой присвоена окончательная метка на предыдущем шаге. 2. Определяется наименьшая из всех временных меток, которая и становится окончательной меткой своей вершины. В случае равенства меток выбирается любая из них.
§ 7.9. Кратчайшие пути на графе 255 Циклический процесс п.1+п.2 продолжается до тех пор, пока вершина z не получит окончательной метки. Легко видеть, что окончательная метка каждой вершины — это кратчайшее расстояние от этой вершины до начала ж0. Рассмотрим пример поиска кратчайшего пути на графе, представленного на рис. 7.22. Процесс назначения меток вершинам графа на каждом шаге удобно представить в виде таблицы рис. 7.23. 0 1 2 3 4 5 Хо Lo-L Х\ оо 7 ш! х2 оо ;ш S3 оо оо 7 ТЛ^ я4 оо оо оо 10 "ш хъ оо оо оо оо 13 12 Z оо оо оо 15 15 ГПБ Рис. 7.23. Результаты вычислений кратчайшего пути Квадратами выделены окончательные метки, т.е. расстояния от них до жо. По такой таблице легко восстановить путь перемещения от z к ж0, который отмечен ломаной кривой. Реализация рассмотренной схемы поиска кратчайшего пути представлена в алгоритме 7.11, где граф Г(Х, U, Ф) представляется матрицей весов We = [wij], веса несуществующих ребер полагаются равными оо. Вектор Магк[х] меток вершин устанавливает принадлежность вершины х е X постоянной (TRUE) или временной (FALSE) метке. Вектор di$4[sc] в алгоритме фиксирует текущие значения меток вершин. Вектор prev[x] позволяет восстановить в обратной последовательности вершины кратчайшего пути. Вектор ргег;[ж] указывает на ранее пройденную вершину с окончательной меткой, ближайшую к вершине ж. Последовательность вершин кратчайшего пути будет имеет следующий вид: ^,2?rev[^],prev[prev[^]],prev[prev[prev[^]]], ...,жо, а значение dist[z] составит длину пути из xq в z. Очередная новая вершина, претендующая на постоянную метку, обозначается через у.
256 Гл. 7. Теория графов. Алгоритмы на графах Алгоритм 7.И. for х € X do begin Mark[x] = FALSE; dist[x] = oo; end; y = x0; Mark[x0] = TRUE; dist[x0] = 0; while not Mark[z] do begin for x G X do begin if not Mark[x] and dist[x] > dist[y] + w[y,x] then begin dist[x] = dist[y] + w[y, x]; prev[x] = y; end; end; { yzx > distly] = min distlx]; хвХ and Mark[x] = FALSE Mark[y] = TRUE; end. • Сложность алгоритма. Алгоритм обращается к телу цикла while не более \Х\ — 1 раз, и число операций, требующихся при каждом таком обращении, равно 0(|Л|). Тогда сложность алгоритма составит 0(|Х|2). Интересно заметить, что если требуется найти длины кратчайших путей от х0 до всех вершин графа, то в алгоритме 7.11 условие цикла while not Mark[z] do begin надо заменить на условие дизъюнкции while х£х not Mark[x] do begin. При этом сложность алгоритма останется прежней. Справедливость алгоритма поиска кратчайшего пути 7.11 является следствием следующей леммы. Лемма 7.9.1. Пусть Г(Х, U, Ф) — простой орграф с длинами (jj{u) ^0 ребер и € U. На этом графе, согласно алгоритму 7.11, осуществляется поиск кратчайшего пути из вершины х0 G X в вершину z G X. Тогда для каждой вершины х G X с окончательной меткой величина dist[x] является минимальным расстоянием от xq до х. Доказательство — это индукция по количеству вершин с окончательными метками. Отметим, что на каждом шаге (цик-
§ 7.9. Кратчайшие пути на графе 257 ле) алгоритма одна из вершин с временной меткой переходит в разряд вершин с окончательными метками. Установочный шаг индукции. Вершина х0 е X — начало пути. Ей назначается первая окончательная метка и значение dist[x0] = О — это минимальное расстояние от ж0 до х0. Условие индукции выполнено. Шаг предположения индукции. Пусть верно, что если в графе Г(Х, U, Ф) количество вершин х е X с окончательными метками не превосходит к, то для каждой такой вершины х величина dist[x] — это минимальное расстояние для нее от х0. Шаг распространения индукции. Обозначим через М = = {ж0,Ж1,Ж2,... ,£fc_i} С X множество вершин с окончательными метками, установленными в течение первых к шагов алгоритма. По предположению индукции значения dist[xi\ являются минимальными расстояниями от ж0 до xi Е М. Пусть у G X — это вершина, которой на (к + 1)-м шаге назначается окончательная метка. Необходимо показать, что установленное значение dist[y] является минимальным расстоянием от х0 до у. Обозначим этот маршрут и его длину как Ws(y). Допустим противное. Пусть существует маршрут Wt(y) из xq в у, длина которого меньше dist[y], т.е. Wt(y) < Ws(y). Для нового пути Wt(y) возможны два случая конфигурации составляющих его ребер. Случай 1. Новый маршрут Wt(y) включает ребро (ж2,у), где Х2 G М (рис. 7.24, а)). По предположению индукции величина dist[x<2\ — минимальное расстояние от xq до х^. По алгоритму построения маршрута Ws(y) его величина Ws(y) = dist[x\] + + ги[жьу] = min{dist[x] + w[x, у]} ^ dist[x<2\ + ги[ж2»у] = Wt(y), где х\,Х2 G М. Это противоречит предположению Wt(y) < Ws(y), а значит, в рассматриваемой конфигурации ребер маршрута Wt(y) его длина не меньше длины алгоритмического пути Ws(y) = dist[y]. Случай 2. Новый маршрут Wt(y) включает вершины с временными метками. Не уменьшая общности, полагаем, что этот а) V • х2 S\ Ь) Рис. 7.24. Случаи а) и Ь) изменения минимального маршрута 9 Иванов Б.Н.
258 Гл. 7. Теория графов. Алгоритмы на графах маршрут Wt(y) включает ребра (ж2,ж3), (жз,у), где х^ е М, ж3 ф М, ж3 т^ У (рис. 7.24, Ь)). По предположению индукции величина dist[x<i\ — это минимальное расстояние от xq до х^. Если считать, что Wt(y) — это минимальный путь из х0 в у через жз $. М, то Wt(x^) < Wt(y), так как Цжз,у] > 0. Это означает, что по построению в алгоритме маршрута Ws(y) на его (к + 1)-м шаге в качестве вершины у Е X должны были бы выбрать вершину жз G X, так как И^(жз) = dist[x<2\ + ги[ж2,жз] < Wt(y) < Ws(y) =dist[x\] +w[x\,y], где жьж2 € М. Следовательно, и эта возможная конфигурация ребер нового маршрута Wt(y) (рис. 7.24, Ь)) не позволяет построить маршрут меньшей длины, чем путь Ws(y) в алгоритме (лемма доказана). D Программная реализация алгоритма поиска кратчайшего пути представлена в алгоритме 7.12 на Pascal'e, который близко соответствует множественному описанию алгоритма 7.11. Алгоритм 7.12. Program Short; { } uses CRT,DOS; Const nVertex=50; { } Type ТуpeMark=array[0..nVertex] of Boolean; TypeDist=array[0..nVertex] of LongInt; TypePrev=array[0..nVertex] of Integer; TypeWeight=array[0..nVertex,0..nVertex] of Integer; Var f :Text; {} nX :Integer; { } Mark :TypeMark; { } Dist :TypeDist; { } Prev :TypePrev; { } We :TypeWeight; { } xO :Integer; { } z :Integer; { } у :Integer; { } Var i,j,x :Integer; weight :LongInt;
§ 7.9. Кратчайшие пути на графе 259 begin Assign(f,'Short.in'); Reset(f); { } { } Read(f,xO); { } Read(f.z); { } Read(f,nX); { } nX:=nX-l; for i:=0 to nX do begin for j:=0 to nX do begin Read(f,We[i,j]); { } if We[i,j]=0 then We[i,j]:=$7fff; { } end; end; Close(f); Assign(f,'Short.out'); Rewrite(f); { } for x:=0 to nX do begin Mark[x]:=FALSE; Dist[x]:=$7fffffff; end; y:=xO;{ } Mark[y]:=TRUE; Dist[y]:=0; while not Mark[z] do begin {} for x:=0 to nX do if not Mark[x] and ( Dist[x]>Dist[y]+We[y,x] ) then begin Dist[x]:=Dist[y]+We[y,x]; Prev[x]:=y; end; { } weight:=$7fffffff; for x:=0 to nX do if not Mark[x] then if weight>Dist[x] then begin weight:=Dist[x]; y:=x; end; Mark[y]:=TRUE; 9*
260 Гл. 7. Теория графов. Алгоритмы на графах end; Write(f,'BepuiHHbi пути='); x:=z; while xOxO do begin Write(f,x:2); x:=Prev[x]; end; WriteLn(f,x:2); А^п1еЬп({,'Длина пути= ',Dist[z]); Close(f); end. Рассмотрим пример расчета по программе алгоритма 7.12 поиска кратчайшего пути на графе, показанном на рис. 7.22. Исходные данные графа представляются матрицей весов его ребер в текстовом файле Short.in со следующей структурой: • в первой строке — номер вершины х0 начала пути; • во второй строке — номер вершины z окончания пути; • в третьей строке указывается количество пХ вершин в графе; • в следующих пХ строках определяются строки матрицы весов [wij] графа. 0 6 7 0 0 0 0 0 0 7 0 3 0 0 0 2 0 0 0 8 0 0 1 5 0 0 0 0 5 0 3 0 5 0 0 0 7 3 0 0 10 0 0 2 6 0 0 0 0 0 0 0 Результаты расчетов сохраняются в выходном файле Short.out со следующей структурой: Вершины пути =643120 Длина пути = 11. § 7.10. Потоки в сетях Определение. Транспортной сетью называется связный ориентированный граф без петель Г(Х, U, Ф) с выделенной парой вершин xq и z (рис. 7.25). Вершина xq — начало транспортной
§ 7.10. Потоки в сетях 261 сети, из которой дуги только выходят. Вершина z — конец транспортной сети, в которую дуги только входят. На множестве дуг и G U задана целочисленная функция с(и) ^ 0, где с(и) — пропускная способность дуги. Х2 Рис. 7.25. Транспортная сеть Определение. Потоком по транспортной сети называется целочисленная функция ср(и) ^ 0, заданная на множестве дуг и е U и обладающая следующими свойствами: VueU <р(и)^с(и) и ^ <РЫ)= ^ <р(и), (7.1) иеи+ иеи- где х — внутренняя вершина графа, т.е. х ф xq,хф z\ U+ — множество дуг, входящих в вершину х\ U~ — множество дуг, выходящих из вершины х (рис. 7.25). На рис. 7.25 напротив каждой дуги стоит дробь, числитель которой — пропускная способность дуги, знаменатель — поток по дуге. Свойство 7.1 утверждает, что поток, входящий в вершину, равен выходящему потоку (поток в вершинах не скапливается). Обозначим ¥>(*) = 2 *№ и ^о) = £ *№> (7'2) ueuf ueu^ где <p(z) — поток, входящий в вершину z\ <p(xo) — поток, выходящий из вершины xq. Утверждение 7.10.1. <p(z) = <p(xq). Доказательство. Действительно, сумма X) [ S vi4) ~ хехиеи+ — J2 Pi4)] — О» так как Vu G J7 величина <р(и) суммируется иеи~
262 Гл. 7. Теория графов. Алгоритмы на графах дважды — со знаком «+» и «—». Здесь £[J>(u)- £>(«)] = хех иеи+ иеи- = Е [ Е ^и) - Е *>Ц + №*) - рЫ] = ^ xex\{x0,z} ueu+ иеи~ где первая часть выражения равна нулю вследствие (7.1). D Определение. Пусть Ас X — множество вершин транспортной сети: xq £ A,z € А. Обозначим через U\ множество дуг, входящих в А. Это множество дуг будем называть разрезом транспортной сети. Рис. 7.26. Разрез транспортной сети С(^4) = Y1 с(и) ~ называется мощностью разреза. Это мак- иеи+ симально возможный поток, входящий в А по дугам разреза. <р(А) — X) фЫ) ~ поток, входящий в А, по дугам разре- иеиХ за. Ясно, что <р(А) ^ С(А), так как Уи € Е U <р(и) ^ с(и). Утверждение 7.10.2. <p(z)^C(A). Действительно, из рис. 7.26 видно, что не весь поток, входящий в А, скатывается в z. Часть потока может выходить из А. Значит, (p(z) ^ <р(А), но <р(А) ^ С(А), тогда и <p(z) ^ C(A). О Теорема 7.10.1 (Форда и Фалкерсона). Максимальный поток по транспортной сети равен мощности минимального разреза, т.е. max(p(z) = minC(A). Доказательство теоремы — это алгоритм определения максимального потока по сети. Алгоритм состоит из двух частей. 1. Насыщение потока. Поток называется насыщенным, если любой путь из xq в z содержит дугу и G U, для которой
§ 7.10. Потоки в сетях 263 ср[и) = с(и). Задача первой части алгоритма состоит в насыщении потока. 1.1. Зададим произвольный начальный поток. Например, нулевой на всех дугах: \/и eU ср(и) = 0. 1.2. Поиск пути из х0 в z. Если путь найден, то переход к пункту 1.3. Если путь не найден, то переход к пункту 1.5. 1.3. Увеличиваем поток по найденному пути таким образом, чтобы одна из дуг стала насыщенной. 1.4. Условно разрываем насыщенную дугу и переходим к пункту 1.2 на поиск пути из xq в z. 1.5. Сеть насыщена и «разорвана». 2. Перераспределение потока. Итак, поток насыщен, как в примере на рис. 7.27. Пометим рекурсивным образом все возможные вершины Х{ сети. х2 +0 х2 Рис. 7.27. Насыщенная транспортная сеть и пометка вершин 2.1. Вершину xq пометим —0. 2.2. Пусть Xi — любая из уже помеченных вершин; у — произвольная непомеченная вершина, смежная Х{. Вершину у помечаем +г, если данные вершины соединены ненасыщенным ребром Xi —> у(+г), и помечаем —г, если соединены непустым ребром х% <— у(—г). После пометки вершин возможны два случая: вершина z оказалась либо помеченной, либо непомеченной. 2.3. Вершина z оказалась помеченной. Значит, существует последовательность помеченных вершин от xq к z. В этой последовательности каждая последующая вершина помечена номером предыдущей, как на рисунках 7.27 и 7.28. Определим на дугах новый поток, увеличивая на единицу поток на дугах, ориентированных по направлению движения от xq к z, и уменьшая поток на единицу на дугах, направленных против этого движения, как на рис. 7.28.
264 Гл. 7. Теория графов. Алгоритмы на графах -О +0 +1 > ш * Xq X2 Х\ Z Xq X2 X\ Z Рис. 7.28. Перераспределение потока на основе пометки вершин Заметим, что поток можно увеличивать (уменьшать) на прямых (обратных) дугах настолько, пока одна из дуг не станет насыщенной (пустой). Далее вновь переходим к пометке вершин (пункт 2.1). Выполненное перераспределение потока сохраняет все его свойства и увеличивает на единицу поток в вершину z. Таким образом, пометка вершины z позволяет увеличить поток как минимум на единицу, а значит, алгоритм конечен, т. е. наступит момент, когда вершина z останется непомеченной. Вершина z осталась непомеченной. В рассматриваемом примере это показано на рис. 7.29. Пусть А* — множество всех непомеченных вершин. Тогда дуги, входящие в эти вершины, насыщенные, а выходящие — пустые. В примере А* = {x\,z}. Множество А* определяет разрез, так как х0 fi A*,z e А*. Таким образом, мы нашли поток ср* и разрез А*, для которых выполняется ср*(А*) = С (А*). Так как выходящие дуги из А* пустые, то весь поток ср*(А*) скатывается в z, т.е. <p*(z) = С(А*). х\ А* 2.4. 1 1 ^Н 1 \Л 1 ^^^ 0 {—«J z г—• +0 Х2 Рис. 7.29. Максимальный поток VJ Покажем, что ср* — максимальный поток, а А* определяет минимальный разрез. Так как для любого потока <р и любого разреза А справедливо <p(z) ^ С(А), то выполняется соотношение <p*(z) К maxip(z) < minC(A) < С(А*). <р А Для найденного разреза и потока справедливо равенство <p*(z) = = С (А*). Отсюда следует, что m&x<p(z) = minC(A). Рассмотрен- <р А
§7.11. Клики, независимые множества 265 ный алгоритм позволяет найти именно максимальный поток ср* и множество А*, определяющее минимальный разрез. В рассматриваемом примере <p*(z) =3 и С (А*) = с(х0,х\) + + с(ж2, хх) + с(ж2, z) = 1 + 1 + 1 = 3. D Для примера на рис. 7.25 найдем все разрезы рассмотренной транспортной сети: Ах = {z}, С(АХ) = с(х\, z) + c(x2,z) = 3+1=4; А2 =\z,x\\ С(А2) = с(хо,х\) + с(х2ух\) + c(x2yz) = 1 + 1 + 1 = 3; Аъ = \z,х2}, С(А3) = с(хо, х2) + с(х\, х2) + с(х\,z) = 3 + 1 + 3 = 7; Аа = {z,х\, х2}, С{Аа) = с(х0,х\) + с(х0, х2) = 1+3=4. • Сложность алгоритма. Если следовать утверждению теоремы, то значение максимального потока можно найти прямым перебором всех разрезов. Подсчитаем общее число разрезов. Обозначим через п = \Х\ — 2, п — количество узлов в сети без вершин хо и z. Число сочетаний С% равно числу разрезов, каждый из которых содержит к вершин х% и вершину z. Тогда число разрезов равно С^ + Схп + ... + С% = 2П, из которых надо выбрать один разрез. Следовательно, сложность полного перебора всех разрезов является экспоненциальной 0(2\х\). Оценим количество операций в алгоритме Форда и Фалкер- сона. Часть алгоритма, относящаяся к пометке вершин, требует перебора всех вершин, т. е. количества операций порядка 0(|Х|). Каждое увеличение потока приводит к появлению дуги с нулевым или насыщенным потоком по ней. Такая дуга далее не участвует в пометке вершин. Всего дуг \U\, а значит, для окончания алгоритма требуется не более 0(|-Х"| • \U\) операций приращения потока. Сложность алгоритма является степенной. § 7.11. Клики, независимые множества Определение. Пусть Г(Х, U, Ф) — ориентированный или неориентированный граф. Подмножество D С U называется доминирующим множеством для графа, если каждая не принадлежащая D вершина является конечной вершиной некоторого ребра от вершины, принадлежащей D. Например, если рассмотреть Г как граф, представляющий игру, с вершинами, соответствующими позициям, и ребрами-ходами, то доминирующим множеством D будет такое множество позиций, что во все остальные позиции можно попасть из D за один ход.
266 Гл. 7. Теория графов. Алгоритмы на графах Определение. Минимальным доминирующим множеством называется такое доминирующее множество, что никакое его подмножество не обладает этим свойством. Числом доминирования <5(Г) графа называется наименьшее число вершин, составляющих минимальное доминирующее множество. Число 8(Г) появляется в различных задачах. Например, требуется разместить на шахматной доске минимальное число ферзей так, чтобы они держали под боем каждую клетку доски. Для решения задачи достаточно 5 ферзей; меньшего числа недостаточно. Тогда для графа этой игры число доминирования <5(Г) = 5, где клетки доски — это вершины графа; две клетки связаны неориентированным ребром, если ферзь, поставленный на одну из клеток, угрожает другой. В качестве примера рассмотрим вариант этой игры, когда расстановка ферзей выполняется на доске 3x3 (рис. 7.30, а)). На рис. 7.30, Ь) представлен граф данной игры. Вершины 1 и 9 соединены ребром, так как ферзь в клетке 1 держит под боем клетку с номером 9. Вершины 1 и 8 не соединены, так как ферзь в клетке 1 не может угрожать клетке 8 и т. д. Вершины 1 и 8 (рис. 7.30, с)) составляют доминирующее множество D = {1,8}, так как из этих вершин по ребрам графа можно за один ход попасть в любую другую вершину. Одна вершина с номером 5 (рис. 7.30, d)) также составляет доминирующее множество D = {5}. Ясно, что для графа этой игры число доминирования равно 5(Г) = 1. П" 4 7 2 5 8 Т] 6 9 а) Определение. Пусть граф Г(Х, U, Ф) — неориентированный и без петель. Множество I CU вершин называется независимым, если между любыми его вершинами нет соединяющих ребер. В зависимом множестве хотя бы две вершины соединены ребром. Множество Q полностью зависимое, если каждая пара его вершин соединена. Вершины графа, составляющие Q, образуют полный подграф.
§7.11. Клики, независимые множества 267 Определение. Максимальное независимое множество есть независимое множество, которое становится зависимым после добавления к нему любой вершины. Заметим, что каждое независимое множество содержится в некотором максимальном независимом множестве. Максимальное число /?(Г) вершин, составляющих независимое множество, называется числом {вершинной) независимости графа. Определение. Подобно независимым множествам вершин рассматриваются независимые множества ребер, состоящие из ребер, не имеющих общих вершин. Каждое независимое множество ребер содержится в некотором максимальном независимом множестве. Число ребер в максимальном независимом множестве называется числом реберной независимости МП При представлении игр графами независимые множества вершин являются такими множествами позиций, что никакая из них не может быть достигнута из другой за один ход. Примером является задача о расположении максимального числа ферзей на шахматной доске так, чтобы ни один из них не мог побить другого. Это максимальное число равно /3(Г) = 8. Утверждение 7.11.1. Независимое множество максимально тогда и только тогда, когда оно доминирующее, а значит, /?(Г) ^ <5(Г) — число (вершинной) независимости не может быть меньше числа доминирования. Доказательство. (=>) Если / С U — максимальное независимое множество, то не может быть вершин k Е /, не соединенных с множеством / ребром, так как в противном случае множество kU I также было бы независимым, но / — максимальное по условию. Отсюда / — доминирующее. (<^=) Пусть / — независимое доминирующее множество. Тогда никакое к нельзя перевести из 1 в 1 так, чтобы 1 С U осталось независимым, а значит, / — максимальное. D Определение. Клика есть полностью зависимое множество, которое теряет это свойство после добавления любой вершины. Клики графа представляют «естественные» группировки вершин в максимальные полные подграфы. Определение клик графа полезно в кластерном анализе в таких областях, как информационный поиск, в социологии и др. В качестве примера на рис. 7.31 показан граф и его клики.
268 Гл. 7. Теория графов. Алгоритмы на графах 7 1 4 4 6 Рис. 7.31. Граф и его клики Замечание. Если предположить, что граф Г(Х, U, Ф) простой, то полностью зависимые множества (клики) в Г становятся максимально независимыми множествами в дополнительном графе Г, верно и обратное. При алгоритмическом подходе к выделению клик в графе применяют метод поиска с возвращением по специальному дереву поиска, устроенному следующим образом. Каждый узел в дереве поиска соответствует полному подграфу исходного графа, и каждое ребро дерева поиска соответствует вершине исходного дерева. Вершины (множества) дерева поиска определим рекурсивно. Корень дерева поиска — пустое начальное множество S = 0. Пусть теперь S — произвольная вершина дерева поиска какого-либо уровня. Тогда вершиной следующего уровня дерева поиска будет вершина S U {ж}, если х ф S и х смежна с каждой вершиной из S. В дереве поиска такие вершины S и S U {х} соединяются ребром, которое соответствует вершине х. На рис. 7.32 показаны некоторый граф Г и дерево поиска Т, которое исследуется в процессе поиска с возвращениями клик графа полным перебором. 5 2 {1} {2} {3} {4} {5} /\ /\ и\ /\ i {13} {12} {21} {23} {31} {32} {34} {45} {43} {54} {123} {123} {213} {231} {312} {321} Рис. 7.32. Граф Г и полный перебор дерева Т поиска клик
§7.11. Клики, независимые множества 269 Заметим, что каждая клика порождается много раз: клика {1,2,3} порождается 3! раз, клики {3,4}, {4,5} порождаются 2!. В общем случае клика размера к порождается А;! раз. Все тонкие ребра на рис. 7.32 исследования дерева поиска можно оборвать, они не приводят к новым кликам. Следующие два утверждения позволяют обрывать такие «тонкие» ребра (не исследовать их), обеспечивая целенаправленный проход по дереву поиска клик графа. Утверждение 7.11.2. Пусть Г(Х,1/,Ф) — исходный граф, S — узел в дереве поиска Т (S С X — подмножество вершин графа). Вершина S дерева поиска уже обработана и первой вершиной, которую надо исследовать, является множеством S U {х}, как на рис. 7.33, вершина х смежна с каждой вершиной из S. Пусть все поддеревья узла S U {х} в дереве Т уже исследованы и порождены все клики, включающие 5иЫ. Тогда необходимо исследовать только те из вершин S U {vi}, для которых V{ $. Adj[x] (рис. 7.33). Su{x} Su{v\} Su{vt} AAA Рис. 7.33. Поддеревья с корнями Su{vi} (эти вершины смежны с S) Утверждение 7.11.3. Пусть S — узел в дереве поиска Т, и пусть S С S — предок S в Т. Если все поддеревья узла S U {х} уже исследованы, так что порождены все клики, включающие SU{x}, то все неисследованные поддеревья с корнями S U {х} можно игнорировать. Алгоритм 7.13 порождения клик графа представляет собой процедуру поиска с возвращением и является наиболее сложным из всех ранее рассмотренных алгоритмов. Рекурсивная процедура CLIQUE имеет два параметра N и D. Для рассматриваемого узла поиска S объединение N U D представляет множество вершин, смежных с каждой вершиной из S, т. е. N U D — множество вершин, которые могут выступать в качестве продолжения поиска клик из вершины S. Множество N состоит только из новых вершин, которые могут быть добавлены к S в процессе поиска
270 Гл. 7. Теория графов. Алгоритмы на графах клик, т. е. N = {х G X | (ж, s) G UVs G S Л V5 С S ни одно из поддеревьев Su{x} не исследовано}. Алгоритм 7.13. S = 0; { Т) N = X; D = 0; Z = X\ CLIQUE(N,D,Z); { T) Procedure CLIQUE(Ny D, Z)\ if N U D = 0 then S else if N ф 0 then begin xGN-A } View(x)\ { } { } Z = Z\{x}', Z = Z\Adj[x]\ while Z ф 0 do begin vG Z\ View(y)\ { } Z = Z\{v}\ end; end; end; Procedure View(v)\ { } N = N\{v}; S = SU {v}; CLIQUE{N П Adj[v], D n Adj[v], N n Adj[v])\ S = S\{v}; D = DU {v}; end. Процедура CLIQUE выбирает произвольную вершину х G G X, удаляет ее из JV и исследует поддерево S = S U {ж}, обращаясь к процедуре View. Далее, согласно утверждениям 7.11.2 и 7.11.3 при помощи процедуры исследуются только поддеревья S = S U {г>}, где v G N, v £ Adj[x], что соответствует условию v G Z. Множество Z состоит из вершин одного уровня дерева, которые должны быть исследованы при рекурсивном проходе по дереву поиска, чтобы не потерять ни одной клики графа.
§ 7.11. Клики, независимые множества 271 Второй параметр D процедуры CLIQUE представляет собой множество вершин, смежных со всеми вершинами из 5, но таких, которые не надо добавлять к 5 на предмет продолжения формирования клик. D = {х е X \(x,s) eU Vs е S и поддерево S U {x} исследовалось для некоторых S С S}. По алгоритму множество S С X является полным подграфом графа Г(Х, U, Ф) и N U D — множество всех вершин, смежных с каждой вершиной в S. • Множество S будет кликой тогда и только тогда, когда N U UD = 0. • Условие N = 0 и D ф 0 обозначает, что все клики, включающие 5, уже ранее порождались. • При N ф 0 могут оставаться клики, включающие 5, которые еще не порождались. Исследование таких поддеревьев S U U {x},x e N, необходимо продолжить. Основные усилия алгоритма 7.13 порождения клик графа направлены на поддержание множеств N и D, текущее состояние которых, согласно перечисленным выше условиям, предопределяет исследования по дереву поиска. Программная реализация алгоритма порождения клик графа представлена в алгоритме 7.14 на Pascal'e, который близко соответствует множественному описанию алгоритма 7.13. Отметим, что в программной реализации передача множеств N, D, Z в качестве параметров процедур выполнена посредством указателей kN,nN,kD,nD,kZ,nZ, где kN, kD, kZ — указатели начала вершин в множествах соответственно N,D,Z, a nN.nD.nZ — количество вершин в каждом из этих множеств. Алгоритм 7.14. Program PgmClique; { } uses CRT,DOS; Const nVertex=100; { } n4d/acent=1000; { } Type TypeVertex=array[l..nVertex] of Integer; Type/ld/acent=array[l..n/ld/acent] of Integer; Var f :Text; { }
272 Гл. 7. Теория графов. Алгоритмы на графах m : Integer; { } Adj :TypeAd/acent; { } Fst :TypeVertex; { } Nbr : Type Vertex; { } Vtx :TypeVertex; { } S :TypeVertex; { } nS :Integer; { } N :TypeVertex; { } { } D :TypeVertex; { } { } Z :TypeVertex; { } { } Procedure PrintClique; FORWARD; Procedure Subtract( x:Integer; Var kZ,nZ:Integer ); FORWARD; Procedure InterSection( v,kM,nM:Integer; Var kMw,nMw:Integer; Var M:TypeVertex ); FORWARD; Procedure View(v:Integer; Var kN,nN, kD,nD, kZ,nZ:Integer ); FORWARD; Procedure Clique( kN,nN,kD,nD,kZ,nZ:Integer ); FORWARD; Procedure lnit( Var yes :Boolean ); { } { } { } Var i,j,k :Integer; begin for i:=l to m do for j:=l to Nbr[i] do begin yes:=FALSE; for k: = l to m do if i4d/[Fst[i]+j]=Vtx[k] then begin yes:=TRUE; A//[Fst[i]+j]:=k; break; end;
§ 7.11. Клики, независимые множества 273 if not yes then exit; end; end Procedure PrintClique; { } Var i :Integer; begin for i:=l to nS do Write(f,Vtx[S[i]]:3); WriteLn(f); end; Procedure lnterSection( v,kM,nM:lnteger; Var kMw,nMw:Integer; Var MrTypeVertex ); { Adj Adj } Var i,j,k :Integer; yes :Boo lean; begin { Adj } { Adj } kMw:=kM+nM; nMw:=0; for i:=l to nM do for j: = l to Nbr[v] do if M[kM+i]=/ld/[Fst[v]+j] then begin nMw:=nMw+l; M[kMw+nMw]:=M[kM+i]; break; end; end; Procedure Subtract( xrlnteger; Var kZ,nZ:lnteger); Z = Z\{x} Z = Z\Adj[x] Var i,j,k :Integer; yes :Boo lean; begin Z = Z\{x} for i:=l to nZ do if Z[kZ+i]=x then begin
274 Гл. 7. Теория графов. Алгоритмы на графах nZ:=nZ-l; for k:=i to nZ do Z[kZ+k]:=Z[kZ+k+l]; break; end; Z = Z\Adj[x] for j:=l to Nbr[x] do for i:=l to nZ do if Z[kZ+i]=4d/[Fst[x]+j] then begin nZ:=nZ-l; for k:=i to nZ do Z[kZ+k]:=Z[kZ+k+l]; break; end; end Procedure Clique( kN,nN,kD,nD,kZ,nZ:lnteger); { } Var i,j,x :Integer; begin if (nN=0) and (nD=0) then { } PrintClique {} else if nN<>0 then begin { } x:=N[kN+nN]; { } View(x,kN,nN,kD,nD,kZ,nZ); { } Subtract(x,kZ,nZ); Z = Z\{x} Z = Z\Adj[x] while nZ<>0 do begin { } x:=Z[kZ+nZ]; View(x,kN,nN,kD,nD,kZ,nZ); nZ:=nZ-l; Z = Z\{x} end; end; end; Procedure View( v:lnteger; Var kN,nN,kD,nD,kZ,nZ:lnteger); { } Var i,k :Integer; kNw.nNw :Integer;
§ 7.11. Клики, независимые множества 275 kDw,nDw :Integer; kZw,nZw :Integer; begin N = N\{v} for i:=l to nN do if N[kN+i]=v then begin nN:=nN-l; for k:=i to nN do N[kN+k]:=N[kN+k+l]; break; end; S = S + {v} nS:=nS+l; S[nS]:=v; InterSection(v,kN,nN,kNw,nNw,N); N и Adj[v] InterSection(v,kD,nD,kDw,nDw,D); D и Adj[v] kZw:=kZ+nZ; nZw:=nNw; for i:=l to nNw do Z[kZw+i]:=N[kNw+i]; Clique(kNw,nNw,kDw,nDw,kZw,nZw); S = S\{v} nS:=nS-l; D = D + M nD:=nD+l; D[kD+nD]:=v; end; Var kN,nN, kD,nD, kZ,nZ :Integer; i,j :Integer; yes :Boolean; begin Assign(f,'Clique.in'); Reset(f); { } { } Read(f,m); { } Fst[l]:=0;{ }
276 Гл. 7. Теория графов. Алгоритмы на графах for i:=l to m do begin Read(f,Vtx[i]); {} Read(f,Nbr[i]); { } for j:=l to Nbr[i] do Read(Mc(/[Fst[i]+j]); { } Fst[i+l]:=Fst[i]+Nbr[i]; { } end; Close(f); Assign(f,'Clique.out'); Rewrite(f); { } Init(yes); if not yes then begin WriteLn(f,'Плохая структура смежности графа!'); Close(f); exit; end; { } nS:=0; S - пустое kD:=0; nD:=0; { } kN:=0; nN:=m; { } for i:=l to m do N[i]:=i; kZ:=0; nZ:=m; { } for i:=l to m do Z[i]:=i; Clique(kN,nN,kD,nD,kZ,nZ); { } Close(f); end. Воспользуемся данной программой, в качестве примера, для решения следующей задачи. Задача. Симпатичный прием. Генерал желает устроить свой юбилей с максимальным числом гостей из своих знакомых. Стремясь сделать юбилейный вечер приятным, он должен организовать все так, чтобы на нем присутствовали люди, симпатизирующие друг другу. Для достижения цели ему придется находить максимальную клику графа своих знакомых. Этот граф устроен следующим образом. Вершины его — знакомые юбиляра. Две вершины смежные, если соответствующие
§ 7.12. Циклы, фундаментальные множества циклов 277 1 2 знакомые симпатизируют друг другу. Нетрудно понять, что клика этого графа с максимальным числом вершин и представляет тот самый максимальный контингент приглашенных, который может позволить себе юбиляр. «Сим- Рис. 7.34. Пример порождения патичный» граф знакомых гене- клик гРаФа рала представлен на рис. 7.34. Для программы алгоритма 7.14 исходные данные структуры смежности Аф'[ж] этого графа задаются в текстовом файле Clique.in. Структура (правило) заполнения файла совпадает с той, которая описана в примере поиска в глубину при расчете по программе алгоритма 7.2. Данные файла Clique.in для примера на рис. 7.34: 7 3 3 14 7 14 3 4 5 2 4 4 3 12 5 7 2 3 6 2 4 14 5 6 5 4 4 12 6 6 3 7 5 2 Результаты расчетов сохраняются в выходном файле Clique.out со следующей структурой: 6 5 2 6 7 4 5 2 1 4 3 1 3 7 Строки файла Clique.out — это номера вершин соответствующих клик «симпатичного» графа на рис. 7.34. Отсюда видно, что в данном случае на вечер могут быть приглашены лишь четыре близких друга генерала. §7.12. Циклы, фундаментальные множества циклов В данном разделе рассматриваются алгоритмы решения задач, имеющих отношение к структуре циклов графа. Подобного рода задачи возникают при изучении вычислительных программ, в системах контроля при размыкании обратных связей и т. п. Рассмотрим остовное дерево Го(Х, Щ, Ф) графа Г(Х, U, Ф). Любое ребро, не принадлежащее С/о, т. е. любое ребро из U \ Щ, т»
278 Гл. 7. Теория графов. Алгоритмы на графах порождает в точности один цикл при добавлении его к Щ. Такой цикл является элементом фундаментального множества циклов графа Г относительно дерева Г0. Так как каждое остовное дерево графа Г включает \Х\ — 1 ребро, в фундаментальном множестве циклов относительно любого остовного дерева графа Г имеется \U\ — \Х\ + \ циклов. Полезность фундаментального множества циклов вытекает из того факта, что это множество полностью определяет циклическую структуру графа: каждый цикл в графе может быть представлен комбинацией циклов из фундаментального множества. Пусть F = {С\, С2,... ,Cjc/|_|x|+i} — Фундаментальное множество циклов, где каждый цикл С; является подмножеством ребер Q С U. Тогда любой цикл графа Г можно записать в виде ((...(С^ ф С;2) ф ...) ф С;г), где символ ф обозначает операцию симметрической разности, Ср ф Cq = {и | U e Cp U Cq Л U ф Ср П Cq). Например, на рис. 7.35 показан граф и фундаментальное множество циклов, получающихся из выделенного жирной линией остовного дерева графа. Цикл графа (ж1,Ж2,ж5>жз) есть С\ ф Сз Ф С\ или цикл (ж1,Ж2,Ж4,жз) есть ^ ® ^2' 0™етим' что в общем случае не каждая сумма циклов будет являться циклом графа. Рис. 7.35. Граф, его остовное дерево и фундаментальное множество циклов При порождении фундаментального множества циклов удобно использовать метод поиска в глубину; он строит остовное дерево и каждое обратное ребро порождает цикл относительно этого дерева. Для того чтобы следить за ребрами дерева, используется поиск в глубину со стеком, в котором хранятся все текущие вершины пройденного пути в данный момент. Когда попадаем на обратное ребро, обнаруженный цикл будет состоять из этого ребра и ребер, соединяющих вершины из верха
§ 7.12. Циклы, фундаментальные множества циклов 279 стека. Реализация рассмотренного подхода представлена в алгоритме 7.15, который строит фундаментальное множество циклов F = {Ci,C2,...,Cm_m+l} графа T(X,U,$). Программная реализация поиска фундаментального множества циклов представлена в алгоритме 7.16. Алгоритм 7.15. for v € X do Mark[v] = 0; { } count = 0; jC = 0;{ } nC = 0; { } for v € X do if Mark[v] = 0 then begin nC = nC + 1; C[nC] =v;{ } Cycle(v,0); nC = nC- 1; end; Procedure Cycle(x,y); count = count + 1; Mark[x] = count', {} for v € Adj[x] do begin nC = nC + 1; C[nC] =v;{ } if Mark[v] = 0 then Cycle(v,x) else if Mark[v] < Mark[x] A v ф у then begin jC = jC+\; { (x,v) } WriteCycle(v,C,nC); { } end; nC = nC-l;{ } end; end; Procedure WriteCycle(x,C,nC); print jC; { } repeat print C[nC]\ { } nC = nC- 1; until C[nC] = x\ end.
280 Гл. 7. Теория графов. Алгоритмы на графах Алгоритм 7.16. Program GraphCycle; { } uses CRT,DOS; Const nVertex=100; Максимальное количество вершин ni4rf/acent=1000; Максимальная длина списка смежности Туре TypeVertex=array[l..nVertex] of Integer; Typei4rf/acent=array[l..ni4rf/acent] of Integer; Var f :Text;{} n : Integer; {} nC : Integer; { } Adj :Typei4d/acent; { } Fst :TypeVertex; { } Nbr :TypeVertex; { } Vtx : Type Vertex; { } Mark : Type Vertex; { } С :TypeVertex; { } В :TypeVertex; { } jC :Integer; { } count:Integer; { } Procedure lnit( var yes :Boolean ); { } { } { } Var i,j,m :Integer; begin for i:=l to n do for j:=l to Nbr[i] do begin yes:=FALSE; for m:=l to n do if i4d/[Fst[i]+j]=Vtx[m] then begin yes:=TRUE; i4d/[Fst[il+j]:=m;
§ 7.12. Циклы, фундаментальные множества циклов 281 break; end; if not yes then exit; end; end; Procedure PrintCycle( x:lnteger; var C:TypeVertex; nC:Integer); { > begin Write(f,jC,')'); repeat Write(f,Vtx[C[nC]]:3); nC:=nC-l; until C[nC]=x; Writeln(f); end; Procedure Cycle( x,y:lnteger); Var i,v :Integer; begin count:=count+l; Mark[x]:=count; for i:=l to Nbr[x] do begin v:=i4d/[Fst[x]+i]; nC:=nC+l; C[nC]:=v; if Mark[v]=0 then Cycle(v,x) else if (Mark[v]<Mark[x]) and (voy) then begin { } jC:=jC+l; PrintCycle(v,C,nC); end; nC:=nC-l; end; end; Procedure DepthCycle; { } Var v: Integer;
282 Гл. 7. Теория графов. Алгоритмы на графах begin jC:=0; { } nC:=0; { } count:=0; { } for v:=l to n do Mark[v]:=0; for v:=l to n do if Mark[v]=0 then begin nC:=nC+l; C[nC]:=v; Cycle(v,0); nC:=nC-l; end; end; Var{ } i,j :Integer; yes :Boolean; begin { } Assign(f,'Cycle.in'); Reset(f); { } { } Read(f,n); { } Fst[l]:=0;{ } for i:=l to n do begin Read(f,Vtx[i]); {} Read(f,Nbr[i]); { } for j:=l to Nbr[i] do Read(W[Fst[i]+j]); { } Fst[i+l]:=Fst[i]+Nbr[i];{ } end; Close(f); Assign(f,'Cycle.out'); Rewrite(f); { } Inlt(yes); if not yes then begin WriteLn(f,'rinoxaH структура смежности графа!'); Close(f); exit; end;
§ 7.13. Листы и блоки 283 DepthCycle; Close(f); end. { } Рассмотрим пример расчета по программе алгоритма 7.16 фундаментального множества циклов для графа, представленного на рис. 7.35. Исходные данные структуры смежности графа задаются в текстовом файле Cycle.in: 5 12 3 2 2 4 13 4 5 3 4 12 4 5 4 3 2 3 5 5 3 2 4 3 Результаты расчетов сохраняются в текстовом файле Cycle.out со следующей структурой: 1) 1 2 3 2) 3 4 2 3) 2 5 4 4) 3 5 4 2 Каждая строка в выходном файле — это найденный цикл, который представляется последовательностью вершин. Начальный номер в строке — номер цикла по порядку. § 7.13. Листы и блоки В данном разделе рассматриваются вопросы, позволяющие глубже проникнуть в структуру произвольных графов, понять их устройство. Важное место в этом будут занимать такие понятия, как цикличность и связность. В завершении будут приведены практические алгоритмы выделения рассматриваемых здесь структур графа. 7.13.1. Листы Определение. Пусть Г(Х, U, Ф) — неориентированный граф. Ребро и = (a,fe) eU называется циклическим ребром, если оно принадлежит некоторому циклу. Петля является циклическим ребром. Никакое концевое ребро (инцидентное висячей вершине) не может быть циклическим. Например, дерево не имеет циклических ребер, и, обратно, связный граф без циклических ребер является деревом.
284 Гл. 7. Теория графов. Алгоритмы на графах Определение. Ребро и = (х,у) eU называется разделяющим ребром (или мостом, или разрезающим ребром) в Г, если в графе Г, получающимся после удаления ребра и, вершины х и у не связаны. Тогда граф Г можно представить как объединение графов _ Г=Г!иГ2, (7.3) где Г\ П Г2 = 0 и Т\ содержит ж, Г2 содержит у. Утверждение 7.13.1. Ребро и = (х,у) е U является разделяющим тогда и только тогда, когда оно не является циклическим. Доказательство. (=>) Допустим, что разделяющее ребро и является циклическим. Тогда после его удаления вершины х и у останутся связанными, а значит, разложение 7.3 невозможно, что противоречит условию: и — разделяющее ребро. (<^=) Теперь и = (х,у) — не циклическое ребро, т.е. не существует цепей, соединяющих х и у и не содержащих и. Отсюда и — разделяющее ребро. D Определение. Будем говорить, что две вершины х$ и хп циклически-реберно связаны, если существует такая последовательность ПрОСТЫХ ЦИКЛОВ С\, С2, .. . ,Cfc, ЧТО Xq G С\,Хп G Ck и каждая пара соседних циклов имеет хотя бы одну общую вершину. Условно взаимное расположение вершин и циклов можно представлять так, как показано на рис. 7.36. Х\ Х2 Хп-\ Рис. 7.36. Вершины связаны циклически-реберно Утверждение 7.13.2. Циклически-реберная связность определяет отношение эквивалентности (см. п. 7.4) на множестве вершин графа Г(Х, U, Ф). На рис. 7.37 показано разбиение Г на компоненты циклически-реберной связности. Определение. Множество всех вершин, циклически- реберно связанных с данной вершиной ж, называется листовым множеством L(x), которому принадлежит х. Отметим, что листовое множество может состоять только из одной вершины ж, тогда листовое множество называется особым. Далее будет по-
§ 7.13. Листы и блоки 285 Рис. 7.37. Компоненты T{Lij) циклически-реберной связности графа. Компоненты r(Lfc) связности графа. Компоненты T{Lij) С T{Li) связаны мостами казано, что это возможно тогда и только тогда, когда все ребра, инцидентные вершине х, являются петлями или разделяющими ребрами. Определение. Подграф Т(Ь), определяемый листовым множеством L, называется листом. Утверждение 7.13.3. Отметим следующие очевидные свойства листа Т(Ь). 1. Граф T(L) циклически замкнут, т.е. если какой-нибудь простой цикл С в Г имеет общую вершину с L, то весь простой цикл С содержится в T(L). 2. Не может быть более одного ребра, связывающего два различных листовых множества L\ и L2, так как иначе эти ребра оказались бы циклическими и множества L\ и L2 должны были бы совпадать. Связывающие одиночные ребра различные листовые множества L\ и L2 являются мостами для графа. Ниже показано, что они будут являться и блоками, состоящими из одного ребра. 3. Все ребра в T(L) являются циклическими. Пусть ребро (х,у) лежит в Г(Х). Покажем, что оно циклическое. Действительно, если, например, вершины х и у в L соединены ребром, тогда (х, у) циклическое по построению L. Если же х и у в L не соединены ребром, то, добавив данное ребро (х,у) к L, получим цикл, так как вершины х,у связаны в L по построению. Отсюда следует, что ребро (х,у) циклическое. 4. По определению граф Г(Ь) связный. Из предыдущего пункта следует, что маршрут в Г(Ь), соединяющий произвольные две его вершины, будет состоять исключительно из циклических ребер.
286 Гл. 7. Теория графов. Алгоритмы на графах 7.13.2. Блоки Определение. Пусть Г(Х, U, Ф) — неориентированный граф. Два ребра u,v eU называются сильно циклически связанными, если существует такая последовательность простых циклов С\, С2,..., С/с, что и G C\, v e С^ и любая пара соседних циклов Q, Сг+i имеет, по крайней мере, одно общее ребро. Условно взаимное расположение ребер и циклов можно представлять так, как показано на рис. 7.38. Рис. 7.38. Сильно циклически связанные ребра u,v Определение. Множество всех ребер, сильно циклически связанных с ребром и eU, образует некоторую часть графа T(Lb), называемую блоком, определяемым ребром и. Множество вершин этого графа называется блоковым множеством, определяемым ребром и. Блок является связным графом и может состоять из единственного ребра. Лемма 7.13.1. Два ребра сильно циклически связаны тогда и только тогда, когда существует простой цикл, содержащий оба эти ребра. Справедливость данного утверждения следует непосредственно из структуры сильно циклической связанности ребер (рис. 7.38). Лемма 7.13.2. Если Р(х,у) — простая цепь, связывающая две различные вершины х,у е Lb блокового множества, то все ребра цепи Р(х,у) принадлежат блоку F(Lb). Доказательство. Если предположить, что утверждение леммы не выполняется, то существует участок цепи Р(х,у), ребра которого не принадлежат данному блоку T(Lb). He уменьшая общности, будем считать, что этим участком является исходная цепь Р(х,у). Так как х, у Е Lb, то в блоке T(Lb) существует простая цепь Q(x,y), связывающая х,у. Тогда объединение простых цепей P(x,yUQ(x,y)) составит простой цикл. Согласно лемме 7.13.1 ребра этого цикла будут сильно циклически связаны, а значит, все ребра простой цепи Р(х,у) должны лежать в T(L6), что противоречит предположению. О
§ 7.13. Листы и блоки 287 Утверждение 7.13.4. Из леммы 7.13.2 следует, что блок Г(ЬЬ) является подграфом. Он циклически сильно замкнут, в том смысле, что если простой цикл С имеет хотя бы две вершины, общие с Lb, то все ребра цепи С принадлежат T(L6). Поэтому два различных блока могут иметь не более одной общей вершины (рис. 7.39, 7.41). В противном случае блоки должны совпадать. Утверждение 7.13.5. Из определения блокового множества Lb следует, что все его вершины являются циклически- реберно связанными при условии, что число ребер в блоке T(Lb) более одного. Отсюда заключаем, что Lb С L, где L — листовое множество вершин Lb, и каждый лист T(L) имеет непересекающееся по ребрам разложение на семейство блоков , , r(L) = |Jr(Lj). (7.4) Определение. В графе Г(Х, U, Ф) вершину х Е X называют разделяющей вершиной (разрезающей или точкой сочленения), если имеет место прямое по ребрам разложение (рис. 7.41) Г(Ь) = Г(Х{) U Г(Х2), X = Х{ U Х2, Х{Г)Х2 = х, (7.5) Утверждение 7.13.6. Блок F(Lb) не имеет разделяющих вершин, так как все его вершины циклически-реберно связаны. На основании разложения 7.4 любого листа T(L) на непересекающееся по ребрам разложение на блоки T(Lb) и последнего утверждения составление листа T(L) из блоков Г(ЬЬ) может быть представлено кактусо- образной фигурой, как на рис. 7.39, в которой различные блоки соприкасаются в своих со- _ ч^. - единяющих вершинах. Соединяющие верши- Г) ны блоков являются разделяющими вершина- \^/ ми графа. Разложение 7.4 листов на блоки О T(Lij) = \jr(Lbjk) позволяет теперь уточнить рис 739 к структуру графа (рис. 7.37): каждый лист Г^. можно представить в виде кактусообразной схемы (рис. 7.39) составляющих его блоков T(Lbjk). оЛо
288 Гл. 7. Теория графов. Алгоритмы на графах 7.13.3. Поиск блоков в глубину Разложение графа на блоки и выделение их имеет важное практическое значение. Иногда недостаточно знать, что граф связен; может интересовать насколько «сильно связен» связный граф. Рис. 7.40. Исходный граф (а); блоки графа (Ь); листы (с), (е) и один мост (d); точки сочленения: Ь, /, /', i Например, удаляя вершину сочленения двух блоков (рис. 7.41) и инцидентных ей ребер, нарушим связность графа. Связность графа не нарушится, если удалить внутреннюю вершину блока и инцидентные ей ребра. Про такие компоненты графа говорят, что они двусвязные. Отыскание точек сочленения и блоков графа важно при изучении надежности коммуникационных и транспортных сетей. Это важно также и при изучении других свойств графа, таких, например, как планарность, так как часто полезно разложить граф на его двусвязные компоненты (блоки) и изучать каждую из них в отдельности. На рис. 7.40 в качестве примера изображен связный граф и его блоки (двусвязные компоненты). Здесь же показано разложение графа на листы. Для нахождения блоков и точек сочленения применим известный метод поиска в глубину на неориентированном графе Г(Х, U, Ф). Основу алгоритма выделения блоков и точек их сочленения легче понять, рассмотрев пример на рис. 7.41, где схематически изображен связный граф, состоящий из ше-
§ 7.13. Листы и блоки 289 сти блоков Г{, i= 1,2, ,6, и четырех точек сочленения Xjy Рис. 7.41. Схематическое изображение графа с шестью блоками и четырьмя точками сочленения Если начать поиск в глубину, скажем, из вершины s e Г2, то можем перейти из Г2 вГь проходя через вершину х\. Из свойства поиска в глубину, все ребра в Т\ должны быть пройдены до того, как вернемся в х\. Поэтому Т\ состоит в точности из ребер, которые проходятся между входом и выходом из вершины х\. Для других блоков дело обстоит несколько иначе. Так, например, если уйти из Г2 в Г5, а оттуда — в Ге через х±, то окажемся в Г$, пройдя ребра из Гг, Г5 и Г$. И ел и хранить ребра в стеке, то во время прохождения назад из Ге в Г5 через вершину х± все ребра Гб будут наверху стека. После их удаления наверху стека останутся ребра Г5 и снова продолжим проход блока Г5. Таким образом, если можно распознавать точки сочленения во время обхода, то применяя поиск в глубину и храня ребра в стеке в той очередности, в которой они проходятся, можно также определить и блоки (двусвязные компоненты). Ребра, находящиеся на верху стека в момент обратного прохода через точку сочленения, составляют блок. Реализация рассмотренного подхода выделения блоков графа представлена в алгоритме 7.17. В векторе Mark[x] меток вершин х G X графа фиксируются порядковые номера обхода соответствующих вершин. В этом случае метка вершины сочленения при входе в блок получит наименьший номер из всех остальных вершин блока. Таким образом, для определения точки сочленения выхода из блока достаточно найти вершину этого блока с минимальной меткой. Свойство циклической замкнутости блока позволяет это сделать лишь на основе вектора меток Mark[x], не привлекая допол- Jf нительной информации. На рис. 7.42 схематич- /\^ но представлен блок, где вершина w — точка х/ \2/ входа в блок и точка сочленения. Вершина х — следующая обследованная вершина блока Рис. 7.42 после w. 10 Иванов Б.Н.
290 Гл. 7. Теория графов. Алгоритмы на графах Свойство циклической замкнутости блока позволяет утверждать, что существует по крайней мере еще одна вершина j/, смежная w. Рекурсивный характер алгоритма поиска в глубину на графе позволяет утверждать, что в этом случае ребро блока (у, w) будет пройдено как обратное, и, значит, метка Mark[w] точки сочленения блока будет доступна до выхода из блока по ребру входа (w,x). Поэтому, сохраняя минимальное значение меток обследованных вершин (включая и по обратным ребрам поиска в глубину), будем проверять при рекурсивном выходе из поиска в глубину, совпадает ли это минимальное значение с меткой вершины выхода. Если ответ положительный, то найдена точка сочленения. В алгоритме значения минимальных меток фиксируются в векторе Virtual[x] для каждой вершины х G X, как наименьшее значение из Магк[у], где у — вершины графа, которые достижимы из х при проходе графа в глубину. Алгоритм 7.17. count = 0; Stack = 0; for v € X do Mark[v] = 0; { } for v € X do if Mark[v] = 0 then Block(vy 0); Procedure Block(x,w) count = count + 1; Mark[x] = count; {} Virtual[x] = count, { } for v € Adj[x] do begin if Mark[v] = 0 then begin Stack = Stack U {(x,v)}\ Block(y,x); Virtual[x] = imxi(yirtual[x],Virtual[v})', if Virtual[v] > Mark[x] begin x (x,v) end; end else if Mark[v] < Mark[x] and v ф w then begin (x, v) — обратное ребро Stack = Stack U {(xyv)}\ Virtual[x] = min (Vir tual[x]y Mar к [v])\
§ 7.14. Двудольные графы 291 end end; end. § 7.14. Двудольные графы Определение. Граф Г(Х,UyФ) называется двудольным, если множество его вершин можно разбить на два независимых подмножества V\yV2 таких, что X = V\ U V£ и V[ П V2 = 0. Такой граф будем обозначать как На рис. 7.43 изображен типичный двудольный граф. Двудольные графы играют заметную роль в различных приложениях. 7.14.1. Условия существования двудольных графов Теорема 7.14.1. Граф Г(ХУ1/УФ) является двудольным тогда и только тогда, когда любой его простой цикл имеет четную длину. Доказательство. (=>) Ясно, что данное условие для двудольного графа всегда выполняется. (<=) Разобьем граф Г на компо- v ненты связности ГьГ2, ...,Гт. Пусть Tk(Xk> Uk,$) одна из них и а е Х^ — произвольная вершина. Разобьем множество V<n вершин Xk на непересекающиеся V^ и Vk2> где Vfc, — вершины, расстояние до которых от а нечетно; V^2 — вершины, расстояние т2 до которых от а четно, а е Vfc2. Множества Vk\ и ^ являются независимыми. Действительно, если предположить, что вершины Ь и с — смежные и Ь,с е V^ или Ь,с е V^2, то существовал бы цикл нечетной длины, соответственно (а — нечетная длина — Ь — длина единица — с — нечетная длина — а) или (а — четная длина — Ь — длина единица — с — четная длина — а), что противоречит условию. Рассмотренное разбиение вершин выполним для каждой компоненты ГьГг, ...,Гт связности. На рис. 7.44 показано объединение независимых компонент V^ и V^2 в независимые компоненты V\ = (J Vk\ и V£ = [j V^2. Й Vi Vt, Рис. 7.44 10*
292 Гл. 7. Теория графов. Алгоритмы на графах 7.14.2. Паросочетания Определение. Паросочетанием в двудольном графе T(Vi U V2i U, Ф) называется независимое подмножество ребер 7г С U, ребра 7г не имеют общих вершин. 5i * ^* 1 Для графа, изображенного на рис. 7.45, s2 •— ^' • 2 в качестве паросочетания можно взять мно- s3s^ жество ребер щ = {(su 1), (s2,2)}, тг2 = Рис. 7.45 ={(*3>1),(*2,2)} И Т.П. Определение. Паросочетание называется максимальным, если любое другое паросочетание содержит меньшее число ребер. 7.14.3. Алгоритм определения максимального паросочетания Пусть r(Ki иК2,(У,Ф) — двудольный граф и 7г — произвольное паросочетание. Множество вершин А\ QV\ и А2 С V2 (рис. 7.46). Чередующейся цепью относительно паросочетания 7г называется цепь С, в которой ребра поочередно принадлежат U и 7г и которая начинается ребром, не принадлежащим 7г. Заметим, что ребра в цепи не повторяются. Пусть а\ € А\ — произвольная вершина и и\ = (аь^тг) — ребро, инцидентное вершинам из А\ и У2ж. Построим чередующуюся цепь С — {u\-k\u2-k2 .. .un_i7rn_iun) и допустим, что по такой цепи можно достичь вершины а2 G А2. Такую цепь С можно использовать для lv получения нового паросочетания 7г, которое содержит на одно ребро больше, чем исходное паросочетание 7г. Действительно, в 7г можно включить все ребра 7г, удалив 7Г1,7г2,... ,7Tn_i и добавив щ,и2,... ,ип. Полученное таким образом 7г содержит несмежные ребра, а значит, 7г — паросочетание. Говорят, что 7г получено из 7г чередующимся расширением. Пример. Дан двудольный граф r(Vi U V2, U, Ф), где Vi = {si,S2, ...,3б} и V2 = {1,2,... ,6}, Соединение вершин V\ и V2 задано соотношениями: s\ —> {4}, 52 —> {1,6}, 53 —> {4,5,6}, 54 —> {1,3}, 55 —> {2}, 5б —> {1,3}. На рис. 7.47 дано его графическое представление. Найти максимальное паросочетание.
§ 7.14. Двудольные графы 293 Выберем начальное паросочетание 7г таким образом, что вершину si e V\ соединяем с вершиной j € V2 — первой незанятой ранее из списка соединений для si. Тогда начальное паросочетание будет равно тг = {(5i,4), (52, l),(s3,5),(s4,3),(s5,2)}, |7г| = 5. Вершины «б и б не вошли в паро- р 747 сочетание. Попытаемся увеличить 7г, используя алгоритм чередующихся цепей. Обозначим -^-> переход по ребрам графа из V\ в V2 и —^> переход по ребрам паросочета- ния из V2 в V\. Так, s§ -% {1,3} означает, что из s^ можно перейти в вершины 1 и 3, и {1,3} -^ {s2,$4} означает, что из вершин 1 и 3 можно достичь по ребрам паросочетания вершин s2 и $4- По алгоритму исходной вершиной цепи является s6. Тогда множество всех чередующихся цепей, начало которых в s6, можно представить так: s6 -% {1,3} -^-> {$2,54} ~~^ {1,3,6}. Переходы следует закончить, если вершина 6 достигнута или подмножество вершин V2i доступных из s6, повторилось в чередующейся цепи. В последнем случае вершина 6 недоступна из 5б и, значит, исходное паросочетание 7г максимальное. В нашем случае вершина 6 оказалась доступной. Для выделения исходной чередующейся цепи из всего множества расширяющихся цепей выполним обратный ход: 6 -% s2 -^-> 1 -^-> s^. Теперь новое паросочетание строим из старого, исключая из него ребро ($2,1) и включая ребра (6,52), (1, s^). Максимальное паросочетание содержит ребра (Sb4),(s2,6),(s3,5),(s4,3),(s5,2),(s6,1) И |7Г| = 6. Теорема 7.14.2 (о максимальном паросочета- нии). Пусть T(V{ U V2, U, Ф) — двудольный граф. Тогда количество ребер в максимальном паросочетании 7г(Г) равно |7г(Г)| = |^|-тах(|Л|-|лЛ|), (7.6) где АА = {у е V2\3x e AC V{ Л (ж,у) е Щ CV2. Доказательство. Пусть 7г(Г) — максимальное паросочетание в исходном двудольном графе (рис. 7.48). Паросочетание 7г позволяет рассматривать его как отображение 7г : V2 -^-> VI вершин множества V2 в вершины множества V\ по ребрам паросочетания 7г. Аналогично, под Л будем понимать отображение
294 Гл. 7. Теория графов. Алгоритмы на графах Л: V\ —> V2 вершин множества V\ в вершины множества V2 по ребрам U графа. Вершины множеств со и Z (рис. 7.48) несмежные, так как паро- сочетание является максимальным. Рассмотрим процесс насыщения множества со. Под со —> Асож будем по- Vi V2 нимать последовательное выполнение Рис. 7.48. Максимальное па- двух отображений 7г(Д(ы)) С V\ мно- росочетание тг жества со. Далее применим отображения Ли тг к полученному множеству: долл- —> д(ды7Г)7Г С Vi и т.д. Ясно, что каждая пара отображений приводит к расширению исходного множества Асож С д(ды7Г)7Г. Учитывая конечные размеры исходного графа, наступит момент, когда отображаемое множество перестанет расширяться. Таким образом, процесс насыщения отображаемого множества можно представить следующим образом: СО —> дОЛд —> д(ди;71).;1 —> ... —> д(. . . д(д^71)'л . . .)vi = А Для множества А выполняется условие |А| = | ЛА|, в противном случае множество А можно было бы еще расширить. Следствием расширения множества Аыв процессе его отображения является включение Асо СдА Обозначим множество со U А = В. Покажем, что найденное множество В удовлетворяет условию (7.6) теоремы, т.е. тг(Г) = = |Vi| - (|В| - \аВ\). Имеем | ДВ| = \A(u>UA)\ = \AcoUAA\ = = |ЛА|, следовательно, |Vi| - (|В| - | АВ\) = |Vi| - (|cj| + |A| - -\аА\) = \У{\-\со\ = \тг(Г)\. Покажем теперь, что VA С V\ условие (7.6) теоремы записывается в следующем виде: |тг(Г)| ^ |Vi| — (|А| — | АА\). Тогда ранее найденное множество В, для которого данное неравенство обращается в равенство, будет доказательством условия (7.6) теоремы. Пусть А\ = А \ (со П А), тогда А = (со П A) U А{. Отметим, что VAi С V\ \ (со П Vi) выполняется неравенство \А\ | ^ | аА\ |, так как вершины множества V\ \ (со П V\) составляют паросочетание. Тогда верно, что |Л| = \со П А\ + \А\\ ^ \со\ + + |Ai| ^ |cj| + | Л Ai| ^ |cj| + | ЛА| или |А| - |лА| ^ \со\. Теперь количество ребер в максимальном паросочетании можно оценить: |тг(Г)| = |Vi| - \со\ < |Vi| - (|А| - | ДА|). D Следствие (обоснование справедливости алгоритма определения максимального паросочетания). Пусть 7г — произвольное паросочетание, относительно которого ни одна из не-
§ 7.14. Двудольные графы 295 редующихся цепей с началом в вершинах множества и не достигает вершин множества Z. Именно это свойство максимального паросочетания использовалось при доказательстве формулы числа ребер в максимальном паросочетании (7.6). Следовательно, количество ребер и в i определяется по этой же формуле (7.6), а значит, паросочетание 7г является максимальным. 7.14.4. Системы различных представителей Рассмотрим пять множеств: S\ = {2,3}, S2 = {1,2,4}, 53 = = {1,2,5}, 54 = {3,4,5}, S5 — {3,4,5}. Требуется выбрать такие различные числа х\,х2,хз,Х4,х$, что ^ G 5^, г = 1,2,3,4,5. Для данного примера х\ = 2, х2 = 1, ж3 = 5, х$ = 3, х$ = 4. Однако если взять множества Т\ = {1,2}, Т2 = {1,2}, Т$ = {1,2}, Т4 = {3,4,5}, Т5 = {3,4,5}, то такой выбор оказывается невозможным. Рассмотрим данную задачу в общем случае. Пусть S = = {1,2,... ,n}. M(S) — система подмножеств S\,S2,... ,Sn множества S. Будем говорить, что M(S) имеет систему различных представителей, если для всех г = 1,2,..., п существуют различные Х{ е Si. 7.14.5. Связь системы различных представителей и двудольных графов Определим двудольный граф r(ViUV2, U, Ф), соответствующий системе подмножеств. Пусть M(S) = {S\,S2,... ,Sn} — система подмножеств множества S. Положим S\,S2,... ,Sn — вершины V\ графа, которые соединены ребрами со своими элементами — смежными им вершинами из V2 (рис. 7.49). Лемма 7.14.1. Двудольный граф T(V\ иЦ,1/,Ф), отвечающий системе подмножеств M(S) = {S\, S2,..., Sn}, имеет максимальное паросочетание из п ребер тогда и только тогда, когда M(S) имеет систему различных представителей. Доказательство вытекает из определения построения двудольного графа, отвечающего системе различных представителей). Теорема 7.14.3 (Ф. Холла о существовании системы различных представителей). Система M(S) = {S\,S2,... ,Sn} имеет систему различных представителей тогда и только тогда, когда для любой подси-
296 Гл. 7. Теория графов. Алгоритмы на графах стемы {Si{,Si2,... ,Sik} С M(S) выполняется неравенство к | У SiA ^ fc, т.е. количество элементов в объединении любых i=i ' к подмножеств должно быть не менее к. Доказательство. (=>) Необходимое условие теоремы следует из определения системы различных представителей. Каждое подмножество <% содержит элемент а^. Е <% , отличный от элементов других подмножеств, а значит, (<^=) Пусть r(Vi U Ц, U, Ф) — двудольный граф, соответствующий системе подмножеств М(5) = {5i,52,... ,5П}. Покажем, что в данном графе существует максимальное паро- сочетание, количество ребер в котором равно п. Тогда из леммы (7.14.1) будет следовать достаточное условие теоремы. Из теоремы (7.14.2) имеем, что число ребер в максимальном паросочетании равно |тг(Г)| = |Vi| — max( |Л| — |лЛ|), где Л А = {у € V2 \3x Е А Л (ж, у) Е U} С V2. В рамках принятой к интерпретации А = {Si{,Si2,... ,Sifc}> |A| = к и АА= (J Sir i=i По условию теоремы | Л А\ ^ к. Таким образом, VA С Vj |Л|-|ЛЛ| ^0, а значит, |тг(Г)| = |Vi| - max( |A| - |дА|) ^ |Vi|. Однако |тг(Г)| ^ |Vi|, следовательно, |тг(Г)| = |Vi| = п. Достаточное условие доказано. D 7.14.6. Задача о назначениях Существует ряд задач, постановки которых укладываются в рамки задачи о назначениях. Рассмотрим две такие постановки. Задача. Предположим, что вычислительная сеть объединяет п специализированных ЭВМ. Известно, что наибольшая производительность конкретной ЭВМ сети достигается на определенном классе задач. Это выражается коэффициентом а^ использования г-й ЭВМ при решении j-ro класса задач. Найти оптимальное распределение задач по сети таким образом, чтобы эффективность ее использования была наибольшей. Задача. Группа лиц может выполнить п видов работ. Эффективность использования г-ro лица на j-й работе определяется мерой ценности ац. Найти оптимальную расстановку людей по видам работ.
§ 7.14. Двудольные графы 297 Теорема 7.14.4 (алгоритм поиска оптимальной перестановки 7г). Пусть А = [а^], г, j = 1,2,..., гг, — матрица целых чисел. Тогда максимум тахУ^а^ (7.7) г=\ по всем перестановкам 7г равен минимуму п п min (У^гч + У^ил (7.8) 2=1 J=l по вс£л« числам щ и Vj таким, что Щ + Vj ^ ay Vi, j = 1, гг. (7.9) Минимум суммы (7.8) достигается на перестановке -к такой, что Щ + ^ТГг — ai7Ti Vi = 1, П. Доказательство. Пусть 7Г — произвольная перестановка. При изменении г от 1 до гг величины 7Гг принимают все значения множества {1, 2,..., п}. По условию щ + Vj ^ ац Vi, j = 1, гг, а значит, и для j = щ верно г^ + ьщ ^ ai7Fi. Установим связь сумм (7.7) и (7.8): гг гг гг гг гг гг г=1 j=l г=1 г=1 г=\ г=\ Таким образом, сумма (7.7) для любой перестановки 7Г не больше суммы (7.8). Отсюда следует, что теорема будет верна, если мы найдем такие щ и vj и перестановку 7г, что (7.7) и (7.8) совпадут. В алгоритме определяется перестановка 7г и величины Ui,Vj, для которых щ + ущ = а«^, г = 1,гг, что доказывает теорему. Шаг 0. Поиск начальных щ и Vj, удовлетворяющих ограничениям щ + Vj ^ a^ Vi,j = I, п. Положим vj = О и щ = = тахау — максимальный элемент в г-й строке; условие (7.9) з щ +Vj = maxay ^ a^ выполняется. Для матрицы ценностей на з рис. 7.50 справа и снизу указаны начальные значения, соответственно Щ И Vj. Шаг 1. Фиксируем все Vj, j = 1,гг, и уменьшаем значения щ, г= 1,тг, до тех пор, пока одно из неравенств щ +vj ^ а^ не
298 Гл. 7. Теория графов. Алгоритмы на графах и\ Щ Щ Щ V\ 3 1 6 6 0 V2 4 4 5 4 0 V3 2 3 2 5 0 V4 1 3 5 5 0 4 4 6 6 Рис. 7.50. Начальная матрица ценностей обратится в равенство щ + Vj = a^. Эту процедуру выполняем для каждой строки г = 1, гг. В рассматриваемом примере на рис. 7.51 звездочками отмечены совпадения. щ Щ Щ U\ V\ * * 0 V2 * * 0 vz 0 V4 0 4 4 6 6 Рис. 7.51. Матрица совпадений Шаг 2. Для каждого щ, i= l,rc, определим множества совпадений S% = {j\ui + Vj = а^}, i= 1, п. Если обратиться к примеру, то S\ = {2}, <% = {2}, £3 — {1}' S4 ={1}- Система множеств Si,i = 1,гг, может иметь систему различных представителей: j\ e S\, J2 G 62, ..., jn € Sn, где j\,J2>--->jn — все различные. Тогда на перестановке 7г = = ( • • " п ) выполняется соотношение щ + Vji =щ + vni = а^, а значит, найденная перестановка 7г является оптимальной. Шаг 3. Предположим, что 5i,52,... ,5П не имеют системы различных представителей, как в рассматриваемом примере. Тогда нарушается условие теоремы Ф. Холла (7.14.3), т.е. существуют Si{, Si2,..., Sik такие, что \Si{ U Si2 U ... U Sik \ < k. В нашем примере \S\ U S2 U S3 U S4I = 2 < 4. Перейдем к новым
§ 7.14. Двудольные графы 299 значениям и*; и vj, полагая и v* = vj + 1, если индекс j G 5», U Si2 U ... U 5ifc. Остальные щ и ^ остаются без изменений. Обратимся к нашему примеру. На рис. 7.52 показаны новые значения переменных U* И Vj. U\ Щ Щ UA V\ 3 1 6 6 0 1 V2 4 4 5 4 0 1 V3 2 3 2 5 0 0 V4 1 3 5 5 0 0 4 3 4 3 6 5 6 5 Рис. 7.52. Новые значения щ и Vj При такой замене переменных не нарушается основное условие: щ + Vj ^ o>ij Vi, j = 1, гг. Действительно, возможны два случая: 1). jeSi{ U5i2U...U5ifc, тогда u\+v* = (щ- 1) + (^- + 1) = 2). 3} Ф Si{ U Si2 U ... U <S;fc, а значит, Vj = Vj и щ + ^ > а^- или и* + ^' ^ aij + 1 • Отсюда и\ + v^j = (щ - I) + Vj ^ dij + I - I = = а^. Обозначим \Six U Si2 U ... U Sik \ = t, тогда новая сумма (7.8) 71 71 71 71 £«*+£«; = (EM0 -* + (£«*)+*= г=1 ji=l г=1 jf=l n n Сумма уменьшилась на к — t. Если теперь перейти на шаг 2, то в случае существования различных представителей для новых значений и* и vj, задача будет решена, в противном случае шаги 2 и 3 алгоритма продолжаем. Так как каждое повторение ша-
300 Гл. 7. Теория графов. Алгоритмы на графах п п гов алгоритма приводит к уменьшению суммы (7.8) J2 иг + J2 уз г=\ 3 = 1 на к — t единиц, следовательно, процесс закончится, что доказывает теорему. D Замечание. При решении практических задач изменение переменных щ и Vj на 1 может затянуть получение ответа. Заметим, что алгоритм допускает изменение переменных щ и Vj на любую величину, не нарушая при этом основного условия (7.9): щ + Vj ^ ац Vi, j = 1, п. В рассматриваемом примере сумма уменьшилась на 2, так как \S\ U 52 U 5з U 541 = t = 2 и к = 4. Необходимо вернуться на шаг 2. Матрица совпадений примет вид, представленный на рисунках 7.52, 7.53. Составим для нее систему множеств совпаде- щ Щ Щ UA V\ * * 0 1 V2 * * 0 1 V3 * * 0 0 V4 * * * 0 0 4 3 4 3 6 5 6 5 Рис. 7.53. Матрица совпадений для новых значений щ и Vj ний 5i = {2}, 52 = {2,3,4}, 53 = {1,4}, 54 = {1,3,4}. Проверим наличие системы различных представителей для данных множеств. Обращаясь к интерпретации системы различных представителей в терминах двудольного графа, надо проверить, что максимальное паросочетание равно 4 для графа T(V[ U V2, U, Ф) , где V{ ={5ь52,5з,54}, V2 = {1,2,3,4}, и связь вершин S{ -> {2}, 52 -> {2,3,4}, 53 -> {1,4}, 54 -> {1,3,4}. Решая, можно установить, что существуют три таких паросочетания: m=USl,2),(S2,3),(S5,l),(S4,4)}, n2 = USl,2),(S2,3),(S3,4),(S4A)\, 7гз = {(5ь2),(52,4))(5з)1),(54,3)}. Таким образом, существуют три оптимальных назначения: ,, _/ 1234\ _/1234\ _/1234\ *1 -{ 23 1 А)> Ъ -{ 234 1)' ^3 -{ 24 1 3)■ Ценность назначения составляет а\2 +«23 +°3i +044 = 18.
§7.15. Хроматические графы 301 § 7.15. Хроматические графы Пусть Г(Х, U, Ф) — простой граф. Граф Г называется к- раскрашиваемым, если существует такое разложение множества его вершин X на к непересекающихся подмножеств (компонент) С\, С2,..., Cfc таких, что к X = \Jd, Cif)Cj=0 при гфэ (7.10) г=\ и вершины в каждой компоненте Q независимы, т.е. ребра в Г соединяют вершины только из разных компонент (рис. 7.54). Представление (7.10) называется к-раскраской графа Г. Вершины этого графа можно раскрасить к красками так, чтобы смежные вершины всегда были окрашены в разные цвета. Для этого достаточно вершины каждой компоненты Ci покрасить своей краской. Наименьшее возможное число к = х(Г) компонент в разложении (7.10) называется хроматическим числом графа. Рассмотрим несколько примеров хроматического разложения графов. Утверждение 7.15.1. Полный граф Г(Х, U, Ф) на \Х\=п вершинах имеет хроматическое число х(Г) = п. Здесь каждая компонента С\, i = 1,2,... ,п, разложения (7.10) состоит из одной вершины, \С{\ = 1. Утверждение 7.15.2. Граф Г(Х,и,Ф) содержит максимальный подграф (клику) из к вершин тогда и только когда, когда его хроматическое число х(Г) равно к. Доказательство. (=>) Пусть {xi,X2,... ,ж&} С X вершины максимального подграфа. Для разложения (7.10) максимального подграфа требуется к компонент С\, С2,..., С^ таких, что Xi e С{. Покажем, что этого числа компонент достаточно для разложения (7.10) всего графа Г. Пусть у Е X — произвольная вершина и у ф {х\,х2,... , ж&}. Среди Х{, г = \,к, существует такая вершина Xj e Cj, которая несмежна с у, в противном случае существовал бы максимальный подграф из к + 1 вершины. Вершину у включаем в компоненту Cj. Следовательно, х(Г) = к.
302 Гл. 7. Теория графов. Алгоритмы на графах (<^=) Имеем х(Г) = к. Предположим, что максимальный подграф в Г содержит т вершин и т ^ к. Необходимое условие теоремы в этом случае утверждает: хСО = тп, что противоречит условию. D Утверждение 7.15.3. Граф Г(А,У,Ф) является двудольным тогда и только тогда, когда х(Г) = 2. Утверждение 7.15.4. Хроматическое число дерева равно 2, так как дерево является двудольным графом. Теорема 7.15.1. Для числа (3(Г) вершинной независимости и хроматического числа х(Г) графа Г(Х, U, Ф), \Х\ —п, выполняется соотношение Р(Г)хР)>п. (7.11) Доказательство. В разложении (7.10) все компоненты С% являются независимыми. Из определения числа /3(Г) следует, что \С{\ ^/?(Г). Суммируя по всем компонентам, получим п = = £|С;|0|/?(Г)|,гдеА; = х(Г). D г=1 Задача. Для графа Г на рис. 7.55 найти разложение (7.10) и установить, что хроматическое число х(Г) = 3. Задача. Пусть / — длина самой длинной простой цепи в графе Г. Показать, что х(г)^ + 1. Рис 755 Решение. Предположим, что х(Г) ^ I + 2. Тогда утверждение 7.15.2 позволяет сделать заключение, что граф Г содержит максимальный подграф (клику) из / + 2 вершин или более. Такой подграф содержт простой цикл из / + 2 ребер и простую цепь длиной / + 1. Это противоречит условию задачи, так как любая простая цепь графа не может превосходить длины /. Отсюда следует, что х(Г) ^ I + 1. § 7.16. Диаметр, радиус и центры графа 1. Пусть T(XyUyФ) — конечный связный псевдограф. Обозначим через d(x,y) длину минимального маршрута между вершинами х,у е X. Величина d(T) — max d(x,y) называется диаметром графа. х,у
§ 7.16. Диаметр, радиус и центры графа 303 2. Пусть х е X — произвольная вершина графа. Величина r(x) = maxd(x, у) называется максимальным удалением в гра- уех фе Г от вершины х. 3. Радиусом графа Г называется величина г (Г) = minr(x). Х€:Х 4. Любая вершина z е X, для которой r(z) = г(Г), называется центром графа. Задача. Для графа Г на рис. 7.56 найти диаметр, радиус и все центры. Решение. Диаметр й(Г) = max d(x, у) = 3, яз хА х,у€Х r(xi) = 3, r(x4) = 2, г(х2) = 2, г(х5) = 3, г(х3) = 3, г(хб) = 2. Следовательно, радиус графа г (Г) = minr(x) = 2. Центры графа: Х2, Х4, Хб-
Глава 8 ВВЕДЕНИЕ В ТЕОРИЮ ГРУПП. ПРИЛОЖЕНИЯ § 8.1. Определение группы Определение. Группой называется непустое множество G с бинарной алгебраической операцией • (будем называть умножением) такой, что выполняются следующие аксиомы: 1. Va,b e G3c e G a -b = с — замкнутость операции •. 2. Va,b,c e G a- (b- с) = (a-b) • с — ассоциативность операции •. 3. 3!е G GVa eGe-a = a-e=a — существование единичного элемента е. 4. Va eG3\a~l eG a • a-1 = a-1 • a = e — существование обратного элемента a-1. Определение. Группа называется коммутативной, если выполняется аксиома коммутативности: 5. Va, b e G a-b = b • а — коммутативность операции ■. Примеры групп 1. G\ = {п\п е Z) — группа с операцией сложения чисел, где Z — множество целых чисел. Действительно, 0 — единица группы; п~х = (—п) — обратный элемент к п е G\. 2. (?2 — {2™\п е Z} — группа с операцией сложения чисел. 3. G3 = {2п \пе Z} — группа с операцией умножения чисел. 4. (?4 — множество квадратных матриц порядка гг, определитель которых не равен нулю, является группой с операцией умножения матриц. 5. (?5 — множество ортогональных матриц порядка п является группой с операцией умножения матриц. 6. (76 = {—1,1} — группа с операцией умножения чисел. 7. G-j — множество рациональных чисел является группой относительно операций сложения и умножения (без нуля).
§ 8.2. Гомоморфизм групп 305 8. G% — множество вещественных чисел является группой относительно операций сложения и умножения (без нуля). 9. G9 = Sm — множество подстановок (перестановок) является группой с операцией умножения подстановок (симметрическая группа Sm, см. п. 8.6). Определение. Н С G называется подгруппой группы G, если Н — группа относительно бинарной операции, определенной в G, т.е. для элементов Н выполняются аксиомы 1-4. Так, например, являются подгруппами: (?2 С Gi, G5 С Сч, Gj С G%. Утверждение 8.1.1. Пусть М — подмножество группы G и Va,b G М выполняется ab~x G М. Показать, что М — подгруппа. Данное условие можно рассматривать как характеристическое свойство группы. Доказательство. Проверим выполнение аксиом группы. 1. Существование единичного элемента. Пусть а е М, тогда aa~l G М или е G М. 2. Существование обратного элемента. Пусть a G М и так как е G М, то ea"1 G М или a"1 G М. 3. Замкнутость. Пусть а,Ь е М, тогда и b~l G М. Значит, и a(b-1)-1 G Л/ или ab еМ. □ § 8.2. Гомоморфизм групп Определение. Гомоморфизмом группы G\ в (?2 называется отображение / : G\ —► (?2, сохраняющее операции: Va, Ь G См /(а о Ь) = /(а) • /(b), где о — операция умножения в группе G\\ % — операция умножения в группе G2. Если / — взаимно однозначное отображение, то / называется изоморфизмом. Свойства гомоморфизма Свойство 1. Единичный элемент переходит в единичный. Пусть е\ G G\ — единица G\, тогда f(e\) = e2 G G2 — единица G2. Действительно, Va G G\f(a) = f(a)f(e\) = f(e\)f(a)t так как /(a) = f(ae{) = f(a)f(e{) и /(a) = f(e{a) = f(ei)f(a). В группе 3!e2 G G2f(a) = f(a)e2 = e2/(a). Значит, /(ei) = e2.
306 Гл. 8. Введение в теорию групп. Приложения Свойство 2. Обратный элемент переходит в обратный. Пусть а G G\, тогда /(а-1) = (/(а))-1. Действительно, /(а)/(а-!) = f(a-l)f(a) =_е2, так как /НДа"1) = f{aa~x) = = /(ei) = f{a~la) = /(а_1)/(а), где f(e\) = е2. В группе ЗК/И)"1 G G2f(a)(f(a))-{ = (f(a))-lf(a)=e2. Следовательно, Определение. Образом гомоморфизма / называется подмножество Im/ = {а2 G G2 | За\ £ G\a2 = f(o>\)} Q G2, Определение. Ядром гомоморфизма / называется подмножество Ker/ = {a\ G G\ \ f(a\) = е2 G G2} С Gp Утверждение 8.2.1. Im/ С G2 — подгруппа. Доказательство. Проверим выполнение аксиом группы. 1. Замкнутость. Va2,b2 elm f 3a\,b\ eG\ f(a\)=a2Af(b\) = = b2. Тогда a2b2 = f(a\)f(b\) = f(a\b\) G Im/. 2. Существование единичного элемента. Так как е2 = f(e\) G elm/. 3. Существование обратного элемента. Уа2 G Im/ 3a\ G (?i /(ai) = a2 . Тогда и a"1 = (/(ai))_1 = /(а^1) G Im/. О Утверждение 8.2.2. Кег/ С G\ — подгруппа. Доказательство. Проверим выполнение аксиом группы. 1. Замкнутость. Vai,6i G Ker/ f(a\b\) = f(a\)f(b\) = e2e2 = = е2. Следовательно, а\Ъ\ G Кег/. 2. Существование единичного элемента. Так как /(ei) = e2, значит, ei G Ker/. 3. Существование обратного элемента. Vai G Ker/ /(а[~ ) = = (/(ai))_1 = e2_1 = е2, отсюда aj~* G Ker/. □ § 8.3. Смежные классы Определение. Пусть Я" = {е, h\9 h2,..., um_i} — подгруппа группы G. Множество gH = {ge,gh\,gh2,... ,#/im_i}, полученное умножением элементов Н слева на элемент #, называется левым смежным классом группы G по подгруппе Н. Лемма 8.3.1. Пусть Н — подгруппа группы G, тогда \/heH hH = H.
§ 8.3. Смежные классы 307 Доказательство. Пусть Н = {e,h\, h2y... ,hm-\}. Vfcfc G H hhk G H — замкнутость подгруппы, значит, hH С H. С другой стороны, V/ifc E H hk = eh^ = {hh~x)hk = h{h~xhk) G G /ii?, отсюда Н С ЛЯ". Таким образом, V/iGff /ii? = Я. D Лемма 8.3.2. Пусть Н — подгруппа группы G. Если gxHC\g2H ф 0, то gxH = g2H, где gug2 G G. Доказательство. Пусть t E g\H П д2Н, тогда З/ц, /12 G G Я" такие, что t = g\h\ = g2h2. Рассмотрим левый смежный класс Ш = (g\h\)H = (g2h2)H = g\(h\H) = g2(h2H), отсюда gxH = g2H. О Лемма 8.3.3. Пусть Н — подгруппа группы G, тогда MgeG \gH\ = \Н\. Доказательство. Достаточно показать, что все элементы в дН различные. Пусть 3h\ ф h2 G Н такие, что gh\ = gh2. Тогда g~x{ghx) = g~l(gh2) или (g~lg)h{ = (g~lg)h2. Отсюда h\ = h2, что противоречит предположению. D Лемма 8.3.4. Группа G распадается на непересекающиеся левые смежные классы по подгруппе Н, т.е. G = = g\H U g2H U ... U gsH, где все д\, д2у..., gs — различные; д{Н П д^Н = 0, если д{ ф д$. Доказательство. Пусть G = {дк{, д^,..., дкт}- Ясно, что G = д^Н Uдь2Ы U ... Ugj^H. Воспользовавшись леммой 8.3.2 и удалив совпадающие левые смежные классы из последнего разложения, получим искомое разложение группы G = giHUg2HU...UgsH. О Теорема 8.3.1 (Лагранжа). Порядок конечной группы G кратен порядку любой из ее подгрупп Н и \G\ = \H\\G : Н\, где \G : Н\ — целое число, называется индексом подгруппы Н в группе G. Доказательство. Лемма 8.3.4 позволяет записать разложение группы G = g\H U g2H U ... U gsH, где giH П gjH = 0 при gi ф gj. Из леммы 8.3.3 имеем V<# \giH\ = \Н\9 тогда \G\ = = \gxH\Jg2H\J...\JgsH\ = \дхН\ + \д2Н\ + ... + \gaH\ = s\H\. Следовательно, |G| = \H\\G : Н\, где \G : Н\ = s. О Определение. Пусть G — группа. Порядком элемента g G G (g ф е) называется наименьшее целое к такое, что дк = е.
308 Гл. 8. Введение в теорию групп. Приложения Утверждение 8.3.1. Пусть G — группа и g e G — произвольный элемент порядка к. Тогда множество Н = {g,g2,... • • •, 9к = е} называется циклической подгруппой, a g есть образующий ее элемент. Утверждение 8.3.2. Порядок группы G кратен порядку любого элемента g Е G. Следствие теоремы 8.3.1 Лагранжа и утверждения 8.3.1. Утверждение 8.3.3. Всякая циклическая группа коммутативна (абелева). Теорема 8.3.2. Всякая подгруппа циклической группы сама является циклической. Доказательство. Пусть G — циклическая группа с образующим элементом geGuHCG — подгруппа. Предположим, что наименьшая положительная степень элемента д, содержащаяся в Н, есть дк. Покажем, что элемент дк — образующий элемент подгруппы Н. Допустим, что в Н содержится элемент д1, где I ^ 0 и I не делится на к. Пусть d = (l,k) — наибольший общий делитель, тогда существуют такие целые числа и wv, что к • и + 1 • v = d (см. п. 9.1). Следовательно, подгруппа Н в этом случае должна содержать элемент gd = (gk)u(gl)v =gk'u+lvm Так как d < к, то приходим к противоречию относительно выбора элемента дк. Таким образом, дк — образующий элемент подгруппы HCG. О Утверждение 8.3.4. Число образующих циклической группы G = {д1, д2,..., дп = е} равно значению функции Эйлера <р(п) — количество чисел из множества {1,2,... ,гг - 1}, взаимно простых с п (см. п. 9.7). Доказательство. Пусть г е {1,2,... ,гг — 1} и (г,п) = = 1 — НОД (см. п. 9.1), т.е.гип- взаимно простые. Если предположить, что наступит (gr)k = grk = е для некоторого к < п, то г • к = п • t для некоторого £, так как п — порядок элемента д. Из г • к = п • t следует, что п делит fc, так как (г,тг) = 1. Это противоречит предположению к <п. Следовательно, порядок элемента \дг\ = п . Пусть теперь (ryn) = s и s > 1, т. е. г = s • р и п = s • q, где (р>?) = 1. Тогда {9ГУ = {д*?У = gs™ = (gaq)p = (9n)p = ер = е, а значит, порядок элемента \gr\ = q < п. Действительно, порядок \дг\ не меньше q, в противном случае имеем (gr)q = (gr)k = е,
§ 8.3. Смежные классы 309 где k < q, и г • к = п • i, так как п — порядок элемента д. Как и в первом случае, из т • к = п • £, s-pk = s-qtyp-k = q-t следует, что g делит fc, так как (p>q) = 1. Это противоречит предположению к < q. О Определение. Подгруппа Я группы G называется нормальным делителем, если правые смежные классы совпадают с левыми: V# Е G gH = Ид. Утверждение 8.3.5. Множество смежных классов группы G по нормальному делителю Я является группой с операцией умножения смежных классов. Такая группа называется факторгруппой и обозначается G/H. Элементами этой группы являются смежные классы разложения группы G = g\H U д2Я U ... U gsH на непересекающиеся левые смежные классы, т. е. G/H = {д\Нуд2Ну... >gsH}. Доказательство. Проверим выполнение аксиом группы. 1. Замкнутость. Vg\H,g2H e G/H д\Н ■ д%Н = д\{Нд2)Н = = дх{д2Н)Н = дхд2{НН) = (д\д2)Н е G/H. Произведение двух классов — это умножение каждого с каждым элементов указанных классов. 2. Существование единичного элемента. Так как (еН)(дН) = = (дН)(еН) = (ед)Н = дН, то еН = Н — единица факторгруппы G/H. 3. Существование обратного элемента. Так как (дН)(д~1Н) = = {д-1Н){дН) = {дд~х)Н = Я, то д~хН е G/H - обратный элемент к элементу дН Е G/H. □ Теорема 8.3.3. Для любого нормального делителя Н группы G отображение /:(?—> G/H, где Уд е G f(g) = дН, является гомоморфизмом, ядро которого Н, G/H — факторгруппа. Доказательство. Проверим свойство гомоморфизма сохранения операций: f(g\ • g2) = {g\ • g2)H = (g\H) о (g2H) = = /Ы°/(02). Единицей факторгруппы G/H является Я, тогда Кег / = {g E е G\f(g) = Я}. Имеем \/h E Я f(h) = hH, отсюда Я С Кег/. С другой стороны, Уд ф Н f(g) = дН ^ Я. В противном случае, если дН = Я, то существует такое h E Я, что gh = e или д = h~l E Я, что противоречит предположению д ф Я. Таким образом, только Я С Кег/, а значит, Кег/ = Я. D
310 Гл. 8. Введение в теорию групп. Приложения Теорема 8.3.4. Ядро произвольного гомоморфизма есть нормальный делитель. Доказательство. Пусть / : G —► К, где G,К — группы, / — гомоморфизм. Ker/ = {h G G\f(h) = е е К}. Обозначим Н = Кег/ — подгруппа. Покажем, что Уд е G дН = = Нд, т.е. Н — нормальный делитель. Рассмотрим множество S = {д G G\f(g) = к е К}, где к — фиксированный элемент. Покажем, что S = дН, где д G S — произвольный фиксированный элемент. Пусть д\ G S, тогда f(g\g~x) = = f(9i)f(9-lJ = kk~l =e и f(g-*gi) = f(g-X)f(gX) = к~хк = е. Отсюда дхд х G H и д хдх G Н или дх G Нд и дх G дН. Таким образом, S С 0Й" и 5 С Нд, где д е S. С другой стороны, Vh e H f(gh) = f(g)f(h) = f(g)e = к. Отсюда gh G S или дН С 5. Так же проверяется, что и Я# С 5. Получили, что дН = S = Нд, т. е. Н — нормальный делитель. D § 8.4. Строение коммутативных (абелевых) групп Определение. Группа G является прямым произведением своих подгрупп G\ и G2, т.е. G = G\ х G2, если выполнены следующие условия: 1) пересечение подгрупп G\ П G2 = e; 2) любой элемент g e G однозначно представим в виде произведения элементов g = gxg2 • ... • #ь где g{ G Gx U G2, 3) если дГ] G Gx и #Г2 G (?2, то £ri£r2 = £r2£rr Коммутативность указанных элементов позволяет записать представление д = дхд2 • ...- gk^G, где # G Gx U G2, в виде # = £Sl£S2, где #S1 e Gx и gS2 G G^- Лемма 8.4.1 утверждает, что это представление однозначно. Лемма 8.4.1. Пусть G — группа и Gx, G2 — ее подгруппы, для которых пересечение Gx C\G2 = е. Тогда, если 9\92 = 0102» то 9\ = 9\ и 92= 92, где gx,g[ eGx и g2,g'2 G G2. Доказательство. Действительно, если gxg2 = g[g2, то #j~ Vi = g2lg2y так как Gx П G2 = е. Следовательно, gx = g[ wg2=g2. О Теорема 8.4.1. Группа G является прямым произведением своих подгрупп Gx и G2 тогда и только тогда, когда выполняются условия:
§8.4. Строение коммутативных (абелевых) групп 311 /) пересечение подгрупп Gx U G2 — e; 2) любой элемент g Е G однозначно представим в виде произведения элементов g = gxg2 •... • #&, где gi Е G\ U G2\ 3) подгруппы G\ и G2 являются нормальными делителями. Доказательство. (=>) Очевидно, что если группа G является прямым произведением своих подгрупп G\ и G2, то условия 1-2 выполняются. Проверим справедливость условия 3 для G\. Пусть g Е G, тогда g = gSlgS2 = gS2gSx, где gSx Е G\ и gS2 € G2. Имеем gGx = (gS2gS])Gx = gS2(gS]Gx) =gS2G\ = GxgS2. Подобным образом Gxg = Gx(gSlgS2) = (GxgSl)gS2 = GxgS2. Итак, gGx = Gxg, а значит, Gx — нормальный делитель. (<=) Достаточно показать, что если gx Е Gx и д2 Е G2, то 9\92=929\- Имеем дхд2 е gxG2 и gxG2 = G2gx, тогда дхд2 Е <32£ь отсюда ^1^2 £ ^1- Аналогично, #i£2 £ Gxg2 и G^2 = #2<2ь тогда £102 £ 52^1 и, значит, дхд2 = д2д\. Итак, дхд2 = д'2дх = д2д\, а так как Gx U G2 — е, то из леммы 8.4.1 следует, что д'2 = д2 и </j = дх. Следовательно, дхд2 = д2дх. О Утверждение 8.4.1. Пусть G — конечная абелева группа порядка \G\ =p"lp"2 • ... -р"к, где рьр2,... ,Рк — простые различные числа. Множество А(р) = {х Е G\ \x\ =ра}, где а принимает произвольные целые значения, является подгруппой и называется примарной подгруппой группы G, соответствующей простому числу р. Доказательство. Достаточно проверить замкнутость А(р) и существование обратного элемента. 1. Замкнутость. Уж, у Е А(р) имеем xv<* = е и х^ = е. Тогда (ху)Р*+* =хРа+*уРа+* = (хОЛ/У =в. 2. Обратный элемент. Уж Е А(р) имеем хр<* = е. Рассмотрим е = (х • х~хуа =х^(х~хуа = (х~хуа. Значит, ж"1 Е А(р). О Теорема 8.4.2. Всякая конечная абелева группа G разлагается в прямое произведение своих примарных подгрупп A(Pl),A(P2),... ,A(pk), где \G\=p?p? ■... ■р°к. Доказательство — индукция по числу простых в разложении порядка |G| =p^lp22.. -p£fc- Очевидно, что для |G| = ра справедливо, так как в этом случае А(р) = G. Пусть теперь |G| =pOLqP, где (р, q) = 1. Покажем, что G представимо в виде G = А(р) х A(q). Проверим свойства разложения.
312 Гл. 8. Введение в теорию групп. Приложения 1. А(р) П A(q) = е. Если предположить, что Зх G А(р) П A(q) и х ^ е, то |ж| = ра и |ж| = <Д тогда ира= <Д что противоречит условию (р, д) = 1. 2. Покажем, что любой элемент х G G можно представить в виде х = у • z, где у G ^4(р), г G ^4(?). Поскольку порядок |ж| делит |G|, то |ж| = pAlgA2, где Ai ^ а, Л2 ^ /?. Так как (pAl,gA2) = 1 — взаимно простые, то существует представление pAlra + q^2n = 1 (см. п. 9.1 алгоритм Евклида), где га, п — целые. Тогда хр 1т+9 2п = х или х = у • z, где у = xq 2n и £ = хр 1т, для которых г/1 = (xPX^X2Y = е и ^2 = (V1^2)™ = е. Проверить, что если yN = е, то порядок |у| делит N. Отсюда у G А(р) и z G A(q). Пусть разложение верно для всех / < fc, т.е. для |G| = = pVp? ' • • •' ТрТ ' РассмотРим группу порядка \G\=p*lp*2-... -р£\ тогда возможно прямое разложение G = А(р\,р2,... ,Рк-\) х х А(рк), где А(рир2,...,рк-\) = {xeG\ \x\=pl[lpf • ... -р^1}, 7г ^ ah — эт0 доказывается как и для случая |G| = paqP. Имеем: группа А(рк) - примарная, группа А(р{,р2,... ,Рк-\) по предположению индукции разлагается в прямое произведение своих примарных подгрупп. D Утверждение 8.4.2. Порядок конечной примаркой группы (подгруппы) А(р) = {х | |ж| =ра} равен \А(р)\ = рп, где п — некоторое положительное целое; а принимает произвольные целые значения. Доказательство. Рассмотрим следующее разложение примарной группы. Пусть ^i = {а, а2,... ,арЛ1} — циклическая подгруппа максимального порядка |j4i| = pai. По теореме Лагранжа (см. теорему 8.3.1) \А(р)\ = |j4i||j4(p)/j4i|, где А(р)/А\ = {х\А\,х2А\,... ,хкА\} - факторгруппа по подгруппе А\. Ясно, что VxiA\ G A(p)/A\ (xiA\)pCl = e и, значит, В(р) = А(р)/А\ — примарная группа, которая вновь допускает разложение на смежные классы по циклической подгруппе А2 С С В(р) максимального порядка, т.е. \А(р)\ = |^i||^2||B(p)/^2|, где \А2\ = р012. Исходная примарная группа А(р) — группа конечного порядка и, следовательно, за конечное число га шагов получим разложение \А(р)\ = |j4i||j42| • ... • \Ат\ или \А(р)\ =j/*»j/*2 . ... .роъ» =рпу Где |^| =ра\ О Лемма 8.4.2. Пусть А(р) — примарная группа (подгруппа), А С А(р) — циклическая подгруппа максимального
§8.4. Строение коммутативных (абелевых) групп 313 порядка \А\ = рп с образующим элементом а, А(р)/А — факторгруппа, у е А{р)/А — класс смежности порядка |у| = ра, т.е. у9" =ё = А, тогда существует элемент у еу того же порядка \у\ =ра. Доказательство. Так как уРа = А, то для любого у еу выполняется ура е А, где А — единица факторгруппы А(р)/А. Следовательно, у9* = ас = аС1Р , где (с[ур) = 1 и /3 ^ гг. Положим z = аС{ — образующий элемент группы А, тогда у?° = J и (уРа)рП~0 = (af")*""' = zPn = е или »^+(-« = е. Так как г — образующий элемент Д то ра+п-Р — порядок г/. Вследствие максимального порядка подгруппы \А\ =рп> порядок |у| ^ рп. Отсюда ра+п~Р ^ рп или а < /?. Теперь равенство уРа _ ^рр можно записать в виде у?" = z1^ = (zp a)p , а так как 31 = 2Р ~а G А, то уР* = zf или (yz^Y" = е. Таким образом, элемент у\ = г/г-1 е у, порядок которого |j/i | = ра. D Теорема 8.4.3. Всякая конечная примарная группа (подгруппа) разложима в прямое произведение своих циклических подгрупп. Если A(jp) = {х е G\ \х\ = ра} и \А(р)\ = рп, то А(р) = C(pAl) х С(рх>) х ... х С(рЛт), где C(pXi) — циклическая подгруппа порядка \C(j>Xi)\ — рх\ Ai < A2 < ... < Ат и \\ +Л2 + ... + Хт =п. Доказательство (индукция по числу п). Для п = 1 теорема верна, так как (показать!) группа A(jp) порядка \А\ —р, где р — простое, является циклической и не содержит подгрупп. Предположим, что теорема верна для всех групп меньшего порядка рп. Пусть А С А(р) — циклическая подгруппа максимального порядка \А\ = ра. Рассмотрим факторгруппу А(р)/А = {х[Аух2Ау ...,ж/сЛ}. Данная группа является при- марной порядка |Л(р)/Л| < рп, так как \А(р)\ = |Л||Л(р)/Л|. Предположение индукции позволяет записать для нее разложение А(р)/А = C(pAl) х С(рх>) х ... х C(pAfc). Обозначим через ~z% e C(pai) образующие циклических подгрупп. Лемма 8.4.2 утверждает, что существует yi e 7< и \yi\ — \z%\ и можно положить я* = угА. Из прямого разложения факторгруппы следует, что любой класс смежности х е А(р)/А можно представить в виде х = -£{% • ... • 4fc> или х = у\*у$ . ... . ylkAy где 0 < t< < ра\ Так как A(jp) = x\A U ж2Л U ... U х^А, то произвольный элемент х € А(р) представим как х = у^у^ • ... • у£*а*. Таким об-
314 Гл. 8. Введение в теорию групп. Приложения разом, искомое прямое разложение на циклические подгруппы найдено. Покажем, что представление А(р) — С(рХ{) х С(рХ2) х ... х х единственно. Доказательство единственности — индукция по числу п. Для п = 1 имеем А(р) = С(р) — свойство выполняется. Пусть верно для всех к <п. Покажем, что верно и для групп порядка рп. Предположим существование другого разложения группы А(р) = С($РХ) х С(р&) х ... х С($Р1), где Р\ < /?2 < ■ • ■ < А- Ясно, что порядок \А(р)\ = pAlpA2 ..... рА™ = = pfilp@2 • р@1. Запишем разложение группы в уточненном виде А(р) = C(pAl) х С(рА2) х ... х С(рХь\) х С(р) х С(р) х ... х С(р) m—t\ И А(р) = С(/') х С(/2) х ... х C(jA) х С(р) х С(р) х ... х С(р). S v ' l-t2 Рассмотрим группу (подгруппу) [Л(р)]р = {хр\ ж е А(р)}. Для этой группы справедливы разложения: [А(р)]р = С(рх'~х) х С(рх*-1) х ... х С(рх^~х)у (8.1) [А(р)Р = С{^~х) х С^/2"1) х ... х С^"1), (8.2) где С(ра) = {ж, ж2,..., хРа = е) и [С(ра)]р = {ж*, ж2*,..., ж*а = = е}. Порядок |[Л(р)]р| < \А(р)\ и, следовательно, по предположению индукции разложения (8.1) и (8.2) совпадают, т.е. а\ = /3\, <*2 — /?2> • •., <ЧХ — А2' h = *2» а значит, и га — t\ = / — t<i или т = I. Единственность разложения доказана. D Пример. Пусть G — коммутативная группа порядка |G| = 42. Так как 42 = 2 • 3 • 7, то группа разложима в произведение следующих своих циклических подгрупп G = С(2) х С(3) х х С(7). Пример. Пусть G — коммутативная группа порядка |G| =4. Так как 4 = 22, то группа разложима в произведение следующих своих циклических подгрупп G = С(4) или G = С(2) х С(2) и в явном виде G = {ж, ж2, ж3, ж4 = е] — циклическая или G = {ж,у,жг/,е} = {ж,ж2 = е) х {г/,у2 = е}.
§8.6. Симметрическая группа подстановок 315 § 8.5. Строение некоммутативных групп Определение. Пусть G — конечная группа. Подгруппа ЯСС называется р-подгруппой, если порядок ее |Д"| = ра. Определение, р-подгруппа называется силовской, если порядок ее ра имеет максимальную степень в разложении порядка группы G. Теорема 8.5.1 (Силова). Пусть G — конечная группа порядка \G\ = р^р*2 ' • •• ' Pfcfc> г^е Рг ~~ простые числа. 1. Для каждого pi существует силовская подгруппа группы G. 2. Всякая р-подгруппа группы G содержится в некоторой силовской подгруппе. 3. Все силовские подгруппы сопряжены, т.е. если НУР — силовские подгруппы, то существует такое t e G, что H = tPt~[. 4. Количество силовских р-подгрупп равно рк+ 1, где к — некоторое целое. Задача. Пусть G — группа порядка |G| = 28 = 22 • 71, тогда существуют силовские подгруппы Н\у \Н\\ = 4 и #2, \Щ\ = 7. § 8.6. Симметрическая группа подстановок Пусть S — конечное множество из га элементов. Множество всех взаимно однозначных отображений множества S на себя называется симметрической группой Sm степени га. Без ограничения общности можно считать, что множество S состоит из элементов {1,2, . ..,га}. Каждое такое отображение 7г : S —> S называется подстановкой или перестановкой и записывается 7г = (^ ^ " ™ J, где 7Г; = 7г(г) — образ элемента г — 1,га. Произведением подстановок является композиция отображений {операция группы) (тт<т)(г) = а(/к(г)). Например, для подстановок тг =(J2 l) И а = (1 1з) ИМееМ ™ =(з12) И а7Г =(23?)- Данный пример показывает, что симметрическая группа Sm не является абелевой (некоммутативная) при т ^ 3. Порядок данной группы \Sm\ = га! — количество всех перестановок из га эле-
316 Гл. 8. Введение в теорию групп. Приложения ментов. Единичная (тождественная) подстановка обозначается е=( 12т)' К0Т0Рая удовлетворяет Уэт G Sm 7ге = е7г. Обратной Ki=( "ш | является подстановка 7г-1 —(l1^2 щ™ г для КОТОрОЙ ВерНО, ЧТО 7Г7Г-1 = 7Г_17Г = е. Утверждение 8.6.1. Симметрическая группа S2 степени 2 — абелева. Определение. Подстановка 7г, перемещающая элементы ъ\Л2, ---Лк так, что 7r(ii) = г2,7г(г2) = гз,... ,7г(г*) = ii и оставляющая на месте остальные элементы, называется циклом длины к и обозначается (i\, г2,..., г*). Равносильное определение. Подстановка называется циклической, если каждый из ее действительно перемещаемых элементов i\,%2,... Лк можно перевести в любой другой (из действительно перемещаемых элементов), если подстановку применить достаточное число раз. Например, 7r(ii) = г2, ir2(i\) = к(я(г\)) = = г3, ..., 7r*_1(ii) = ijfe, nk(i\) = i\. Теперь цикл можно записать: (*Ь*2.---Л) = (TT^i),^2^!),...,^-1^!)). (Q О 1 /I С С 7\ 2145673 )= (3,2,1,4,5,6,7) - цикл длины семь. Определение. Два цикла называются независимыми, если они не содержат общих действительно перемещаемых элементов. Например, (1,2,3,5,9) и (7,8) — независимые циклы. Теорема 8.6.1. Каждую нетождественную подстановку Бш можно разложить единственным образом в произведение независимых циклов. Доказательство. Пусть 7Г Е Sm и г, j Е S. Элементы г и j назовем эквивалентными i ~ j, если j = Kk(i) для некоторого целого числа к. Введенное отношение есть отношение эквивалентности на множестве S. Оно разбивает множество S на непересекающиеся классы эквивалентности по этому отношению S = S\ U 52 U ... U Sr (см. п. 7.4). Каждый элемент г Е S принадлежит одному и только одному классу St, причем множество St состоит из образов элемента г при действии степеней подстановки 7г: St = {г, 7г(г), 7г2(г),..., я***-1 (г)}, где kt — количество
§8.6. Симметрическая группа подстановок 317 элементов в St. Множества St еще называют sign(7r)-op6nTaMH. Выберем в каждом классе St по одному представителю ц и поставим ему в соответствие цикл 7Г* = (г$,7г(г*),7г2(г$),... ,ккь~х(ц)). Так как любой элемент, не принадлежащий St, остается на месте при действии степеней 7Г^, то перестановка 7г есть произведение НезаВИСИМЫХ ЦИКЛОВ 7Г = 7Г17Г2 • . . . • 7ГГ. D Замечание 1. Если цикл 7rt = (it) имеет длину 1, то он действует как тождественная подстановка. Такие циклы в записи 7Г = 7Г17Г2 ' • • • ' 7IY МОЖНО ОПуСКаТЬ. Замечание 2. Независимые циклы в записи 7г = ж\Ж2 .. .я> можно произвольным образом переставлять между собой. Так, * =KklKk2 • ... -71-^, ГДе {7Г^,7Г^,...,7Г^} = {к\, 7Г2, . . . , 7ГГ}. Пример. (5^^б)=(1345)(2)(6) = (1345)' (з2?54б)= 03)(2)(45)(6) = (13)(45) = (45)(13). Определение. Декрементом d подстановки называется разность между числом действительно перемещаемых элементов и числом независимых циклов, на которые она раскладывается. Подстановка называется четной, если d — четное число, и подстановка нечетная, если d — нечетное. Введем функцию . , ч (+1, если7г— четная подстановка, sign(7r) = <^ 4 ' [ — 1, еслитг— нечетная подстановка, где 7г е Sm, тогда sign(7r) = (-l)d. Например, для подстановки ( 31 2546 )= 0^2) (45) декремент равен d = 5 — 2 = 3, следовательно, подстановка нечетная. Определение. Цикл длины 2 называется транспозицией г = (а/3). Для транспозиции декремент d = 2 — 1 = 1 — нечетное число. Теорема 8.6.2. При умножении подстановки к е Sm на транспозицию г = (а/3) она меняет свою четность. Доказательство. Пусть 7г = (i\i2 ... ir) (j\j2 • • • 3s) x x ... x {l\l2...lp) — разложение подстановки в произведение независимых циклов. Умножим ее на транспозицию г = (а/3).
318 Гл. 8. Введение в теорию групп. Приложения Рассмотрим все возможные случаи: 1) а ф. 7г, (3 ф. 7г; 2) а G 7г, (3 ^7г; 3) а ф 7г, (3 G 7г; 4) a G 7г, /? G 7г, а и /? принадлежат одному и тому же циклу; 5) а G 7г, /? G 7г, а и /? принадлежат разным циклам. Пусть fc — число действительно перемещаемых элементов 7г; / — число независимых циклов в разложении 7г. Декремент подстановки d(7r) = к — I. 1. Пусть а ф 7г, /? ^ 7г, тогда 7гг = (iii2...ir) (jij2...js) x ... х х (М2 • • • 1р)(<*Р)- Декремент d(7rr) = (к+ 2) - (I + I) = к - -1 + 1. 2. Пусть a G 7г, /3 ф 7г. Будем считать, что ii = а. В этом случае 7гт = (аг2 .. .ir)(jij2 .. .js) • ... • (М2 •• Л)(а/?) = = (аг2 ... irP)(j\J2 • • • 3s) • . • • • (W2 • • • lp)- Декремент d(-Kr) = = (k + l)-l = k-l+l. 3. Случай а ф 7Г, (3 G 7г рассматривается подобно a G 7г, /? ^ 7г. 4. Пусть aG7r, /?G7r, аи/? принадлежат одному и тому же циклу. Тогда 7гт = (аг2 ... im/?im+i ... ir)(j\J2 • • Js) • • • • -(W2 • • • ...lp)(a(3) = (т2...гт)(/?гт+1 .. .ir)(j\j2 .. . js) • ...-(Мг.-Л)- Декремент d(7rr) = fe— (7+l) = fe — J— 1. 5. Пусть aG7r, /?G7r, аи/? принадлежат разным циклам. Тогда 7гт = (m2 ... гг)Фз2 • • -js) • • • • ■ (W2 • • • *р) (<*/?) = = (т2 ... ir(3j2 ... js) • ... ■ (М2 • • • *р)« Декремент d(7rr) = fc - -(I- l) = k-l + l. Таким образом, во всех случаях signer) = (—l)^-^1 = = (— 1) l(—l)k~l = — sign(7r) четность подстановки 7гт меняется. D Теорема 8.6.3. Каждая подстановка 7г G Sm разлагается в произведение транспозиций не единственным образом, однако четность числа транспозиций постоянна и совпадает с четностью самой подстановки. Доказательство. 7г = (i\i2 .. лг) (j\J2-.-js) ■ ... ■ (l\h--- ...1р) — разложение подстановки в произведение независимых циклов. Каждый цикл разлагается в произведение транспозиций (iii2...ir) = (i\i2)(i\is) ■ ... • (i\ir)- Таким способом можно разложить в произведение транспозиций все циклы подстановки я- = TiT2...Tn, где Т{ — транспозиции. Теорема 8.6.2 позволяет записать sign(7r) = sign(rir2 ■ ... • тп) = sign((rir2 • ... • rn_i)rn) = = sign(rir2 •... • rn_i) • (-1) = signers • ... • rn_2) • (-1) • (-1) = = ...=agn(n)-(-l)n-1=(-l)n.
§8.6. Симметрическая группа подстановок 319 Таким образом, четность подстановки sign7r = (— 1)п совпадает с четностью числа транспозиций п в разложении 7г = т\т2 х х ...тп. D Следствие 1. sign(crr) = sign(cr)sign(r), где <тт — произвольные подстановки. Доказательство. Пусть а = s\s2 • ... • sr и г = t\t2 x х ... х t[ — разложения в произведение транспозиций Si,tj. Тогда ат = s\s2 • ... • srt\t2 • ... • ti — разложение в произведение транспозиций. Из теоремы sign(crr) = (— 1)г+' = (—1)г(—1)' = = sign(cr) sign(r). D Следствие 2. sign(cr) = sign(<7_1), где <т~х — обратная подстановка. Доказательство. Пусть а = s\s2 • ... • sr, тогда <т~х = = srsr-\ •... • s\, так как aa~l = (s\s2 •... • sr)(srsr-\ • ... • s\) = — (s\ (s2(- •• (srsr) •• -)52)5i) — e и (sisi) = e — тождественная подстановка, где si — транспозиции. Первое следствие позволяет записать sign(<r<r-1) = sign(«j)sign(<j_1). С другой стороны, аа~1 = е — тождественная подстановка и sign(e) = 1. Тогда sign(cr)sign((j~1) = 1 и, следовательно, sign(cr) = sign(<7_1). D Теорема 8.6.4. Число четных подстановок Ат С Sm равно числу нечетных. Доказательство. Достаточно показать, что \Ат\ = = т!/2, так как \Sm\ = га!. Для этого установим взаимно однозначное соответствие между четными и нечетными подстановками. Пусть г — произвольная фиксированная транспозиция. Рассмотрим отображение <р : Sm —> 5m, где \/к е Sm <р(к) = 7гт. Пусть а е Ат — произвольная четная подстановка, тогда <р{а) = = ат — нечетная подстановка. Свойство 1. Для <р верно, что Уа\ ^ а2 € Ат <р{а\) ^ <р(а2), в противном случае а\т — а2т. Откуда, умножая справа последнее равенство на т, получим а\(тт) = а2(тт), а так как (тт) = е, то а\ —а2, что противоречит выбору а\ ^ а2. Свойство 2. Для любой нечетной подстановки Ь существует прообраз Ът G Am четной подстановки, так как <р(Ьт) = (Ът)т — = Ъ(тт) = Ь. Свойства 1,2 позволяют утверждать, что отображение является взаимно однозначным. D
320 Гл. 8. Введение в теорию групп. Приложения Утверждение 8.6.2. Аш — подгруппа симметрической группы Sm. Теорема 8.6.5 (Кэли). Всякая конечная группа G порядка т изоморфна некоторой подгруппе симметрической группы ^771* Доказательство. Для любого элемента а е G рассмотрим отображение La : G —> G, состоящее в умножении всех элементов G = {g\,g2,...,9m} слева на a: La(gi) = agi- Свойство группы aG = G, позволяет утверждать, что La — взаимно однозначное отображение (подстановка). Обратным к La будет отображение L~x = La-i, единичным отображением является Le. Вследствие ассоциативности умножения в группе G имеем замкнутость: (LaLb)(g) = Lb(La(g)) = b(a(g)) = (ab)g = Lab(g), т. е. LaLb = Lab- Отсюда следует, что множество Н = {L9l,L92,... ...,L9rn} образует подгруппу в множестве всех взаимно однозначных отображений G в себя, т. е. в симметрической группе Sm. Тогда отображение <р : G —> Н С Sm такое, что Va Е е G <р(а) = La есть изоморфизм, поскольку <р — взаимно однозначное и выполняется свойство <р(а, b) = Lab = LaLb = <p(a)<p(b) сохранения операций. О § 8.7. Действие групп на множестве Определение. Говорят, что задано действие группы G на множестве S = {1,2,... ,га}, если определен гомоморфизм Т группы G в симметрическую группу Sm подстановок: Т : G —> —> Sm- Свойство сохранения операций для гомоморфизма: ^gl,g2eGT(glg2) = T(gl)T(g2), где T(9i) = (^ ;;;™m) e Sm. Далее полагаем, что л =( "т ). Замечание. Чаще всего бывает так, что действие G на S возникает естественным образом, как группа симметрии структуры, определенной на 5. Пример. Пусть S = {1,2,3,4,5} — вершины графа на рис. 8.1. Найти G — группу самосовмещений данного графа. v Рис. 8.1
§ 8.7. Действие групп на множестве 321 Решение. Исходное множество элементов S является связанным или структурой. Группа G, действующая на S, — группа самосовмещений: G = {е,а,Ъ,аЪ}, где е =' 12345 ) ~~ тожАественное преобразование; а — 12345 12 354 )= (^) ~~ поворот вокруг горизонтальной оси; Ь =( 13945)" №) ~ П0В0Р0Т вокруг вертикальной оси; аЪ =( 13254 )~ (23)(45) — поворот вокруг горизонтальной оси и вертикальной. Таблица 8.1 е а Ъ ab е е а Ъ ab а а е ab Ъ Ь Ь ab е а ab ab b а е В табл. 8.1 содержатся все возможные произведения элементов рассматриваемой группы. Из табл. 8.1 видно, что G — коммутативная группа и G = {е, а} х {е,Ь}. Определение. Элементы s\, 52 G S называются д-эквива- лентными и записывают s\ ~ 52, если Зд G G, который, действуя на множестве S, переводит s\ в 52, т.е. д = ( •••s\...m или, более короткая запись: gs\ = 52. Утверждение 8.7.1. Определенная д-эквивалентностъ на множестве S является отношением эквивалентности. Доказательство. Проверим свойства отношения эквивалентности. 1. V$i G S s\ rsj s\. Действительно, es\ = s\, где e G G — единичный элемент. 2. Vsi,$2 £ S s\ ~ s2 —> s2 ~ s\- Имеем s\ ~ 52, тогда Зд G Ggs\ = 52 и 52 = g~ls\, а значит, S2 ~ s\. 3. V5i,52,53 € S 5i ^ 52 Л 52 ^ 53 —> 5i ^ 53. Имеем, ЧТО 3t,g G G t«i = 52 Л#52 ~ 53, отсюда (tg)s\ = g(ts\) = gs2 = = 53. Следовательно, s\ ~ 53. □ 11 Иванов Б.Н.
322 Гл. 8. Введение в теорию групп. Приложения Утверждение 8.7.2. Группа G = {#i,#2,..-,£fc}> действуя на множестве S, порождает его разбиение на непересекающиеся подмножества — классы эквивалентности S {рис. 8.2): S = S\ U S2 U ... U SNg, где Vsb s2 G Sa A\ 3g G G gsx = s2 и Vsx G Sa Vs2 G Sp X T x \fg G G gs\ 7^ s2, Nq — количество классов эк- S\ S2 SNg вивалентности. Пусть s\ G Sa, тогда класс эк- Рис. 8.2 вивалентности Sa составят все различные элементы множества Sa = {g\s\,g2S\,... ,gk$\}- Определение. Множество Z(s\) = {g G G \ gs\ = s\ G S} называется стабилизатором s\ G S. Элементы стабилизатора оставляют s\ на месте. Пример. Продолжим рассмотрение примера на рис. 8.1. S = {1,2,3,4,5} — вершины графа. На S действует группа самосовмещений G = {e,a,b,ab}, где ^ /12345\ Л_/12345\ , /12345\ , /12345\ е —^ 1 2345^' а "1^123 54 J' ° —^ 1 3245^' ао ~\\ 3 2 54 )' Найдем все классы эквивалентности: Sx = {е(1),а(1),Ь(1),аЬ(1)} = {1, 1, 1, 1} = {1}, 52 = {e(2), а(2), 6(2), аЬ(2)} = {2,2,3,3} = {2,3}, 53 = {е(4), а(4), 6(4), аЬ(4)} = {4,5,4,5} = {4,5}. S = S\ US2 U53 — всего три класса эквивалентности. Определим стабилизаторы для вершин {1,2,3,4,5} графа: Z{\) = {е,а,Ъ,аЪ}, Z(2) = Z(3) = {e,a}, Z(4) = Z(5) = {е,Ь}. Утверждение 8.7.3. Z(s\) С G — подгруппа группы G. Доказательство. Проверим свойства группы. 1. Замкнутость. Vg\,g2 G Z(s\) gs\ = s\,gs2 = s2, тогда и {g\92)s\ =92{g\s\) =92S\ = 5b следовательно, gxg2 G Z(s\). 2. Единичный элемент e G Z(s\), так как es\ = s\. 3. Обратный элемент. Пусть g G Z(s\), тогда gs\ = s\, отсюда $1 = 9~xs\, следовательно, g~x G Z(s\). □ Утверждение 8.7.4. Vs\,s2eSa \Z(s{)\ = \Z(s2)\ и 3i G G Z(s\) = tZ{s2)t~x. В этом случае говорят, что подгруппы Z(s\), Z(s2) сопряжены. Доказательство. Имеем s\,s2eSa, следовательно, 3t G G ts\ = s2 \/g G Z(s2) (tg)s\ = g(ts\) = gs2 = s2 = ts\
§ 8.7. Действие групп на множестве 323 или (tg)s\ = ts\. Отсюда (tgt~l)s\ = t~l((tg)s\) = t~l(ts\) = = (tt~l)s\ = 5i, т.е. tgt~l G Z(s\). Получили, что Уд G Z(s2) tgt~x G Z(s\). Заметим, что Уд\ ^ g2 G Z(s2) tg\t~x ^ tg2t~\ значит, \Z(s2)\ = \tZ(s2)t-{\ ^ \Z(s{)\ или \Z(s2)\ ^ \Z(s{)\. Подобным образом доказывается в обратную сторону: |Z(s2)| ^ |Z(si)|, следовательно, |Z($i)| = |Z(s2)|. Показали, что 3* G G Уд G Z(s2) tgt~l G Z{sx) и \Z(s{)\ = \Z(s2)\ = \tZ(s2)t~ll отсюда Z(s\) = tZ(s2)t~l. D -^ \G\ -^ Утверждение 8.7.5. \Sa\ = , J ' ,, где s\ G ffa. Iz(5i)l Доказательство. Пусть G = {g\,g2,... ,#&}. Из утверждения 8.7.2 следует, что Sa = {g\s\,g2s\,... ^g^si}, однако среди выписанных элементов множества Sa могут встречаться одинаковые. Назовем <7гР<7г2 € ^ эквивалентными g^ ~ gi2, если они действуют на элемент s\ одинаковым образом, т. е. 9i\s\ — 9i2s\- Данное отношение является отношением эквивалентности. Введенная эквивалентность разбивает группу G на классы, количество которых равно числу различных элементов среди выписанных: Sa = {g\S\,g2S\,... , <7&si}, т.е. равно \Sa\. Пусть gixsx = gi2sx {gix ~ gi2) или (gixg~l)si = g-l(gixsi) = = 9i2{9i2s\) = {9i29i2)s\ = 5ь следовательно, gixg^ G Z($i) или gr^ £ Z(s\)gi2. Верно и обратное, если g^ G Z(s\)gi2, то Яг,^1 € Z(*i) или (g^g^si = s{. Отсюда gixs\ = gi2sx или 9ц ~ g%2- Таким образом, gix ~ gi2 тогда и только тогда, когда 9%\ 15г2 лежат в одном правом классе смежности по стабилизатору Z(s\){gix G Z(s\)gi2), а значит, и число элементов в 5а равно количеству правых смежных классов в G по подгруппе Z(s\). ^ \G\ Согласно теореме 8.3.1 Лагранжа, \Sa\ = J ' = \G : 2($i)|. D \z\s\)\ Лемма 8.7.1 (Бернсайда). Число классов эквивалентности Saj на которые распадается множество S = S\ U S2 U U ... U SjsfG под действием группы G, равно Nq = т-^г Y^ \Ф(д)\> ede^{g) = {seS\gs = s}. ' ' geG Доказательство. Подсчитаем двумя различными способами множество всех таких пар элементов, что Уд G G Vs G S {(#> S)\9S = s}- Это можно выполнить следующим образом: и*
324 Гл. 8. Введение в теорию групп. Приложения NG Е \Z(s)\ = Е Ш1 Первая сумма £ \Z(s)\ = Е Е \Z(*)\. ses 9eG ses a=lsesa Так как Vsbs2 G Sa \Z(s{)\ = \Z(s2)\, то £ |Z(s)| = |5tt| x ses* \G\ -^ x |£(sa)| = , ' ' .,|Z(sa)| = IGL где sa e Sa. Таким образом, \Z\8<*)\ NG NG E \Z(s)\ = E E №)| = E |G| = NG ■ |G|. Получили, что seS a=\ sesa г=\ Ng -\G\=Y: Ш1 отсюда NG = * £ Ь/>Ы1- □ Пример. Продолжим рассмотрение примера на рис. 8.1. S = {1,2,3,4,5} — вершины графа. На S действует группа самосовмещений G = {е,а,Ь,аЬ}, где е =( {2345)' a =( 12354 )' , /12345 0-1 13245 'аЬ =(!з254)- Полным перебором установили, что под действием G множество S распадается на три класса эквивалентности: S = S\ U S2 U U 53> где S, = {1}, S2 = {2,3}, S3 = {4,5}. Установим данный факт, применяя лемму Бернсайда 8.7.1: Nq = ттц У^ \Ф(д)\ — число классов эквивалентности, w^ es = s} = {1,2,3,4,5}, as = s\ = 11,2,3}, Ья = 5}={1,4,5}, (ob)s = s} = {l}. ф(е) =ls€S\ ф(а) ={s€S\ ф{Ъ) ={seS\ ф(аЬ) ={s eS\ Отсюда следует, что число классов эквивалентности М0 = ±(\ф(е)\ + Ща)\ + \ф(Ъ)\ + №Ш = \(5 + 3 + 3 + 1) = 3. Замечание. Рассмотрению более содержательных задач, при решении которых возможно применение изложенной выше техники подсчета классов эквивалентности, предварим изложение теории перечисления Пойа. Это позволит нам с более формальных позиций подойти к пониманию самой техники подсчета и к применению ее для решения задач.
§ 8.8. Цикловой индекс группы 325 § 8.8. Цикловой индекс группы Пусть группа G действует на множестве S = {1,2,... , га} и T:G-> Sm — гомоморфизм в симметрическую группу Sm. Рассмотрим разложение g Е G на независимые циклы з = (I L:::HL ) = &)<&) ■■■■■ </з*.ж wy • -■,.(&■)(&) • - • оу. fc, k2 km где fei — количество циклов длины г; г = 1,2,..., га. Набор (к\, к,2,..., кт) называется характеристикой элемента g € G, где \к\ + 2к2 + ... + ткт = т. Определение. Цикловым индексом Z(G,x\,X2,... ,хт) группы G, действующей на множестве 5, называется полином от переменных х\, ж2,..., хт, определяемый формулой Z(G,x1,x2,...,xm) = j^^xf1x^.....x^, 1 ' geG где (fei, &2,... ,km) — характеристика элемента geG. Пример. Продолжим рассмотрение примера на рис. 8.1. S = {1,2,3,4,5} — вершины графа. На S действует группа самосовмещений G = {e,a,b,ab}, где е =( 12з45 )' а =( 12354 )' , /12345\ , /12345 Ь=( 1Я9АК Ь а6 = 13245 /' "" ~1 13254 Найдем цикловой индекс группы G, для этого выполним разложение на независимые циклы подстановок элементов G и установим их характеристики: е =(1)(2)(3)(4)(5), (febfe2,...,fem) = (5,0,0,0,0); а =(1)(2)(3)(45), (*ь*2....,**») = (3,1,0,0,0); Ь =(1)(23)(4)(5), (febfe2,...,fem) = (3,1,0,0,0); ab = (1)(23)(45), (fei,fe2,...,fem) = (1,2,0,0,0); подставляя в цикловой индекс Z, получим Z(G,xbx2,...,xm) = -(ж? +ж?Ж2 +х\х\ +х\х\) = = т(ж1 "I" 2xjX2 + ^jX2).
326 Гл. 8. Введение в теорию групп. Приложения § 8.9. Теория перечисления Пойа Введем следующие обозначения. D = Ыьс?2> ■•■ id™} — конечное множество. G — \9\. #2> <7з> • • •} — конечная группа, действующая на D. R = {г\,Г2,г$,...} — конечное множество качественных признаков (цвета). S = {/ | / : D —> R} — множество функций; каждая функция / определяет качественные признаки элементов D. ft = {cjbcj2,cj3 •••} — множество весов. и : R —> £1 — весовая функция, назначает веса u(r) e G tt признакам г G R. R(u) = £ и(г) ~ сУмма весов элементов reR или reR Ri^) — D С<^, гДе С" — число элементов г е R с весом и е G ft, множество {Си} — перечень R относительно весовой функции и;(г). R(uj2) = £ uj2(t) = £ 0,uA reR шеи R^) = £ w*(r) = £ C>\ Рассмотрим введенные понятия на следующем примере, к которому ниже не раз будем возвращаться. Пусть D = {Й1,с?2^з} ~~ вершины правильного треугольника (рис. 8.3). Треугольник нанизан на вертикальную ось, вокруг которой он свободно вращается. R = {#, о} — множество из двух красок. Найти количество различных раскрасок вершин треугольника. На D действует группа самосовмещений G = {е,а, а2}, где е =\ 123 ) ~~ тождественное совмещение, а = ( 931 ) ~~ поворот вокруг оси на 120°, а2 = ( 3 12 ) — поворот на 240°. £1 = {ж, у, х~\ у~х и их произведения) — множество весов. S = {/ | / : D —> R} — множество раскрасок. В треугольнике три вершины и каждую допускается окрашивать в любой из двух цветов R = {#, о}, следовательно, всего функций 23. Такое количество раскрасок будет, если треугольник сделать неподвижным (рис. 8.3). Если допустить вращение, то различные раскраски неподвижного треугольника становятся одинаковыми для
§8.9. Теория перечисления Пойа 327 вращающегося треугольника. Приведем пример трех раскрасок: /ь/2,/з (рис. 8.4). fx-.D^R /2 : Д - Д h'D^R /i№) = . /i№) = » /i№) = ° /2№) = » /2(d2) = о Л(<*з) = ° /з№) = • /з№) = о Рис. 8.4. Раскраски треугольника Очевидно, что для решаемой задачи раскраски /2 и /3 совпадают. Назначим краскам R — {•, о} веса: ш(#) — х и ш(о) = у. Замечание. Отметим, что назначенные веса элементов ы(#) = х и cj(o) = у позволяют сравнивать признаки количественно, забывая, в какой-то степени, о качественном их содержании. Определение. Для каждой функции / G 5 определим вес W(f)=l[uj(f(d)). deD В нашем примере W(f\) = cj(#)cj(#)cj(o) = хху = х2у, W(f2) = cj(#)cj(o)cj(o) = хуу = ху2у w(h) = cj(o)cj(#)cj(o) = уху = ху2. Определение. Группа G, действуя на D, индуцирует (наводит, создает, определяет) свое действие на множество функций S. Положим V/ G SVg G G gf = f(g(d)) — это рассматривается WeD. В нашем примере рассмотрим действие элемента a2 G G на /265: /2(а2№))=/2№) = ° и /3(<*i)=o, /2(а2№)) = /2№) = « и h(d2)=; /2(o2(d3)) = Л№) = о и /3(d3) = о-
328 Гл. 8. Введение в теорию групп. Приложения Таким образом, элемент группы а2 переводит f2 в /з или, в принятых обозначениях, a2f2 = /з- Определение. Положим f\ ~ f2, если 3g G G Vd G D f\(gd) = /2(d). Такие f\ и f2 определяют одинаковые раскраски элементов d G D. 5 Введенная эквивалентность функций есть отно- А\ шение эквивалентности, которое порождает раз- f \ >у биение множества элементов / G F на непересекаю- S\ S2 SNg щиеся классы эквивалентности (рис. 8.5): S = S\ U Рис 85 U^U...U% ne yfuf2eSa3geGgf{ = f2 и V/! G 5a V/2 G ^ V<? G G 5/1 7^ /2, NG - количество классов эквивалентности. Каждый класс эквивалентности определяет отдельную раскраску элементов d G D. Таким образом, количество различных раскрасок равно Nq- Для определения Nq воспользуемся леммой 8.7.1 Бернсайда: NG = тттт Е №(flO|. в Данном случае ф(д) = {/ G S\gf = /} или f(g(d)) = f(d) Vd G I?. Вернемся к нашему примеру на рис. 8.3 и найдем для него число Ng. Здесь -0(e) = {/ G S\ ef = /} удовлетворяют все / G 5, отсюда -0(e) = 23 = 8. -0(a) = {/ G 5| a/ = /} — это такие раскраски вершин, которые допускают совмещение с эквивалентной из раскрасок вращением треугольника на 120°. Это возможно, если все вершины либо белые, либо черные. Итак, \ф(а)\ = 2. Подобным образом устанавливается, что и |^(^2)| = 2. Следовательно, NG = (8 + 2 + 2)/3 = 4. Утверждение 8.9.1. Если f\ ~ /2, то W(f\) = W(f2), т.е. эквивалентные функции имею одинаковые веса. Доказательство. D = {d\,d2,...} и D = {gd\,gd2l...} — верно V# G G, так как G действует на D и # = ( ,' /'" ) — это подстановка. Теперь W(f\) = f] cj(f\(d)) = f] cj(f\(gd)). deD deD Имеем /! ~ /2, тогда 3# g GVd G £> u(f\(gd)) =cj(/2(d)). Отсюда W(/0 = П "(/1 (*<*)) = П "(Ш) = W(f2). О Определение. Последнее утверждение позволяет определить вес каждого класса эквивалентности Si в разложении
§8.9. Теория перечисления Пойа 329 S = Sy U S2 U ... U SNg как W(Si) = W(f), где / G S*. Определение корректно, так как каждый класс Si состоит из эквивалентных функций /, веса которых совпадают. Теорема 8.9.1 (Пойа). £ Сши = Z(G, Щи1), R(u2), ... ..., R((jm)), где Сш — число классов эквивалентности S = = S{ U52U... USNg с весом и G ft, Я(0,ж{\а^,... ,ж*р) - цикловой индекс группы G, действующей на множестве D = = {di,d2,-. • »^m}- Отметим, что ^ Си = Nq- Доказательство. Пусть Л — разбиение множества D на непересекающиеся подмножества: D = Dn+Di2 + ... + Dikl+D2i+D22 + ^- + D2k2+...+ 4 v ' * v ' k\ k2 + Dm\ + Dm2 + ... + An*m, S v ' km где \Dij\ = i, \D\=m, \k\ +2k2 + ... + mkm = m. Определение. Говорят, что / G S подчинена разбиению Л множества D и записывают / G Л, если / постоянна на каждом подмножестве Dij из разбиения: Vd G Dijf(d) = г^, где Tij G R. Функция /, подчиненная разбиению Л, взаимно однозначно определяется набором (г\\Г\2...Г\к1 Г2\Г22...Г2к2 ••• Гт\Гт2---Гткт)> где г^ G R. Все такие наборы составляют множество S = SU х 512 х ... х S^ х S21 х S22 х ... х 52ь> х к\ к% X Ош1 X Sm2 X ... X SmKni1 Km где Sij = R, i = l,ra, j = 1, fc^- Полагая веса элементов s^' £ ^г? равными cj(sy) = [cj(ry)]* и вес 5 = (sus{2 .. - «lib, «21^22 ••• 52fo ••• ••• 5mi«m2 ••• 5mfcm) G 5 равным произведению весов cj(s) =
330 Гл. 8. Введение в теорию групп. Приложения т кг га ki = П П "(*ч) = П П И^)}\ имеем <"(*) = ЩП> где / € Л - г=1 ji=l i=lji=l подчинена разбиению. Для множества S выполнены все условия правила обобщенного произведения, тогда сумма весов элементов данного множества, а значит, и сумма весов всех функций / G Д составит т ki га w(S) = Ц Ц w(Sy) = Ц[ИЧЗД*. 2=1,7=1 2=1 так как W(Sih) = W(Sih), WiSij) = £ «(в) = £>(r)]« = ДИ. Следовательно, 771 771 w(s)=Jims*)]* = Ц[Щ"{)]к1 = i=\ i=\ = [R(ujl)]ki[R(uj2)]k2 • ... • [R(ujm)]km или ^^ £ W(/) = [fl^1)]*"^2)]** • ... • [Д(ыт)]*™. /€A Пусть jgGh k\ /C2 fcm — разложение на независимые циклы, где (&i&2 •• • кт) — характеристика g и 1к\ + 2&2 + • • • + ткш = т. Запишем разложение на независимые циклы в виде 9 = Р\\Р\2 •••Р\к^р2\Р22 • • • D2k2 • • • AnlAn2 ■ ■ - Drnkm; где i)y — цикл длины г, |£^j| = г. Обозначим разбиение множества £> на Dij через Д#. Элементы d G Z?ij одного цикла при умножении на g переходят последовательно по циклу в элементы того же цикла. Указанное свойство позволяет заключить, что Vdbtfe € Dij3k gkd\ = с?2- Пусть g = (1,2,3,4,5)(6,7,8), тогда д2 = (13524)(687).
§8.9. Теория перечисления Пойа 331 Определение. Функция / G S называется неподвижной относительно g G G, если Vd e D f(gd) = f(d). Утверждение 8.9.2. Функция / G S неподвижна относительно g eG тогда и только тогда, когда f е Ад подчинена разбиению Ад. Доказательство. (=>) Пусть d\,d2 G D — принадлежат одному циклу. Следовательно, 3k gkd\ = d2. Тогда f(d2) = = /(Л) = /G/fc"Vi)) = f(gk-%) = ... = f{gdx) = /(<*,), где каждый переход обусловлен неподвижностью / : Vd G D f(9d) = f(d)- Таким образом, Vdbd2 G Dij f(d\) = /(d2), т.е. feAg. (<^=) Пусть d G Dij, тогда к gd e Dij — свойство циклов. Имеем / G Ад или Vdi,d2 G Dij f(d\) = /(^2), следовательно, и /(#d) = /(d), тогда / — неподвижная относительно д eG. О Запишем сумму весов /, подчиненных разбиению Ад, в следующем виде Е Е аД#,иМ гДе аАд,и — количество функций, feAgueQ подчиненных разбиению Ад с весом и> G ft. Составим множество всех функций, неподвижных относительно д G G, с весом и G ft: ч/^Ы = {f\VdeDf(gd) = = f(d) Л И^(/) = cj}. Утверждение 8.9.2 позволяет записать aAgtw = \Фи(д)\- Величина Си — число классов эквивалентности с весом и> G fi, на которые распадается множество функций S = S\ U £2 U ... U 5jv под действием группы G. По лемме Бернсайда 8.7.1 Си = т-^- Е №w(flOI = тт^г Е aA<?,w Умножив lGl <?gG lGl <?gG последнее равенство на cj и просуммировав по всем весам из Q, получим, что Е Сшы = 77^- E E aA<?,u^- Сумма Е аАдУши> = Е ^(/) — сумме весов функций, подчиненных разбиению Ад. Так как Y, W(f) = [Д(ы1)]/г'[Д(ы2)]*> ..... [Д(аГ)]Ч ТО Е с^ = щ Е^"')]*1 W"2)]** • • • • • ш^)^- шеп ' '#gG п
332 Гл. 8. Введение в теорию групп. Приложения § 8.10. Цикловая структура групп подстановок Рассмотрим несколько общих примеров, которые в какой-то степени дают представление о возможностях изложенной выше техники подсчета классов эквивалентности с использованием теории перечисления Пойа. 8.10.1. Цикловой индекс группы, действующей на себе Пусть группа G действует на множестве S = G следующим образом: Уд Е G Vs Е S g(s) = gs. Если порядок элемента \д\ = d, то все элементы gs,g2s,... ,gds = s различные. Группа G распадается под действием д на циклы одинаковой длины. Количество циклов равно n/d, где п = \G\ — порядок группы. Цикловой индекс группы примет вид Z(G, Х1,х2,...,хп) = щ^ j(d)x^/d, (8.3) d/n где j(d) — количество элементов д Е G с порядком \д\ = d. Суммирование выполняется по всем делителям d числа п. 8.10.2. Цикловой индекс циклической группы Пусть S = {0, 1,... ,п - 1} — множество вершин правильного гг-угольника (рис. 8.6) на плоскости. Группа G — циклическая группа самосовмещений. Образующий элемент группы а Е G — вращение (отображение) S вокруг центра на угол 2-к/п. Следовательно, G = {ап = е,а,а2,... ,ап_1}, где е — тождественная подстановка. Если обозначить вершины многоугольника 0,1,.-.,гс— 1 элементами группы {ап = = е,а,а2 ... ,ап_1}, то вращение будет эквивалентно умножению вершины на соответствующий элемент группы. Например, совмещение при вращении на угол 27г/п равносильно умножению новых меток {ап = е,а, а2,... ,ап_1} вершин гг-угольника на элемент а; действительно, а • е —► а, а • а ^> а, а • а2 ^> а?,... а • а71-1 —> ап. Таким образом, можно считать, что циклическая группа G действует на себе. Согласно (8.3) цикловой индекс данной группы примет вид Z(G,xux2 *п) = р5>Н^ = р5>(^К^ (8.4) d/n d/n
§ 8.10. Цикловая структура групп подстановок 333 где j(d) = cp(d) — функция Эйлера. Действительно, если порядок элемента равен d (элемент суммируется в 7(d)), то он является образующим элементом циклической подгруппы Н С G порядка |Д"| = d. Показать, что если порядки элементов циклической группы совпадают: \ак\ = \аш\ = d, то они являются образующими одной и той же подгруппы Н CG. Число образующих в такой подгруппе <p(d). Найдем количество возможных раскрасок Nq двумя цветами вершин данного (рис. 8.6) n-угольника. Пусть цвета — R = {•, о}. Воспользуемся теоремой 8.9.1 Пойа. Для определения количества раскрасок положим веса цветов равными cj(#) = 1 и ы(о) = 1. Тогда R(uk) =ик(ф) + ик(о) = 2, ATG=^Cu;=Z(G,i?(a;1),i?(a;2),...,i?(a;ri)) = = ±j2<p(d)[R(»d)]n/d = ^Е^)2П/<£- d/n d/n Для треугольника (п = 3) число раскрасок iNrG=^E^d)2n/rf=^(1)23+^3)2l)=l(1-23+2-2')=4- d/n Для шестиугольника (п = 6) число раскрасок Ng = Z Е^)2П/" = l^2* +^(2)23 + ^(3)22 +^(6)2') = d/n = i(l ■ 26 + 1 • 23 + 2 ■ 22 + 2 • 21) = 14. 8.10.3. Цикловой индекс симметрической группы Пусть S = {1,2,... ,п} — произвольное множество, на котором действует группа всех подстановок. Sn — симметрическая группа, \Sn\ = п\. Рассмотрим произвольную подстановку 7г Е Sn с характеристикой (k\, k<i,..., кп), где lfci + 2&2 + ... + nkn = п. Подсчитаем количество подстановок с данной характеристикой. Для этого запишем 7г в цикловом представлении, помещая знаки (—) на местах, которые должны занять п элементов. Так, для характеристики (3,2) следует записать (—)(—)(—)( )( )• Далее пробелы можно заполнять п элементами множества S в любом порядке. Это дает п\ подстановок с характеристикой (fci,fc2,... ,fcn), которые, однако, не все различные. Каждый из
334 Гл. 8. Введение в теорию групп. Приложения циклов кг может начинаться с любого своего элемента, не изменяя исходной подстановки и уменьшая общее число различных подстановок в г раз. Если имеется кг таких циклов, то их можно переставлять кг\ способами, что также не будет приводить к новым подстановкам. Все эти варианты суть различные обозначения одной и той же подстановки с характеристикой (fci,/c2, ••• Лп)- Поэтому различных подстановок с указанной ха- п\ рактеристикой будет г тг- г-. Тогда цикловой ин- к\\ lklk2\2k2 .... • кп\пкп деке симметрической группы можно записать в следующем виде: Z(G, X\,X2, ... ,ЖП) = JU I JUn . . . JU, п!Ч о, ^ , 4,!142!2к'...,АУ» ' 2 ••• п 1 к\ +2fc2+- • • -\-nkn =п к1\к2\-...-кп\ \Т) \Т) ''"'Vn) ' 1 к\ +2к2 +... +пкп=п Рассмотрим пример определения числа Nq раскрасок двумя цветами Д = {•, о} трех усов S = {1,2,3} антенны (рис. 8.7). Усы свободно вращаются в пространстве. В этом случае на множестве S = {1,2,3} действует симметрическая группа подстановок £3. Найдем все характеристики (/сь&2»^з) разложения числа 3= lfci + 2fc2 + 3fc3. Ими будут: (3,00), (1,1,0) и (0,0,1). Цикловой индекс примет вид ^—)= £ хгпЫтГ (IГ (IГ = lfci+2fc2+3/c3=3 3! V 1 / 1!1! VI/ V2/ 1! V 3 Для определения количества раскрасок положим веса цветов равными cj(#) = 1 и cj(o) = 1, тогда R(u>k) =cjfc(#) +u>k(o) = 2. Следовательно, NG=E C„ = Z{G,R{ux),R{u2),...,R{un)) = шей. Рис. 8.7 =3!Vl/ + ШШ/ V2/ +TIV3/ =4'
Глава 9 ЭЛЕМЕНТЫ ТЕОРИИ ЧИСЕЛ Теория чисел занимается изучением свойств целых чисел. Целыми называются числа Z = {..., —2, — 1,0,1,2,...}. Для любых a,b € Z сумма а + Ь, разность а - Ь и произведение а • Ь являются целыми числами. Но частное а/b от деления а на Ь (если Ь не равно нулю) может быть как целым, так и не целым. В случае, когда частное а/Ъ является целым, то обозначают а = bq, где q — целое число, Ъ называют делителем числа а и записывают так: b/а. В общем случае единственным является представление а = bq + г, 0 ^ г < Ь, где г — называют остатком от деления. §9.1. Наибольший общий делитель В дальнейшем будем рассматривать лишь положительные делители чисел. Всякое целое, делящее одновременно целые а, 6,..., с, называется их общим делителем. Наибольший из общих делителей называется наибольшим общим делителем (НОД) и обозначается (а, 6,..., с). Если (а, 6,..., с) = 1, то а, 6,... ...,с называются взаимно простыми. Например, (10,15) = 5, (8,21) =1. Свойства наибольшего общего делителя 1. Если а = bq, то (а, Ь) = Ъ. 2. Если a = bq + ry тогда общие делители чисел а и Ъ суть те же, что и общие делители чисел Ь и г; в частности, (а, Ь) = (6, г). 3. Для определения наибольшего общего делителя применяется алгоритм Евклида. Он состоит в нижеследующем. Пусть а и b — положительные целые числа и а > Ь. Составим ряд равенств: а = bq\ +r2, 0< г2 < 6, b = r2q2 + r3, 0< r3 <г2, Г2 = ПЧЪ + П, 0 < Г4 < Г3, ,g jv Гп-2 = rn-\qn-\ +rn, 0 < тп < гп_ь ^п— 1 = TnQni
336 Гл. 9. Элементы теории чисел заканчивающийся, когда получается некоторое гп+\ = 0. Последнее неизбежно случится, так как ряд &,г2,гз,... убывающих целых чисел не может содержать более чем Ь положительных. 4. Из формул (9.1) алгоритма Евклида следует, что (а, Ь) = (6, г2) = (г2, г3) = ... = (rn_i, гп) = гп. Наибольший общий делитель равен последнему не равному нулю остатку алгоритма Евклида. 5. Из формул (9.1) алгоритма Евклида следует также, что существуют целые t\ и £2» что t\a + *2& — Тп- В частности, если (а, Ь) = 1, то *ia + *2& — 1- Пример. Найдем (525,231). 525 =231 -2 + 63, 231 =63-3 + 42, 63 =42-1+21, 42 =212. Последний остаток есть 21, значит, НОД= (525,231) = 21. 6. Пусть m — любое положительное целое, тогда (am, bm) = (a, b)m. 7. Если (a,fe) = 1, то (acyb) = (c,fe). 8. Если (a, b) = 1 и ас делится на fe, то с делится на b. § 9.2. Наименьшее общее кратное Всякое целое, кратное всех данных чисел, называется их общим кратным. Наименьшее положительное общее кратное называется наименьшим общим кратным (НОК). Наименьшее общее кратное двух чисел а и Ь равно их произведению, деленному на их общий наибольший делитель, т. е. (а,Ь)' § 9.3. Простые числа Число 1 имеет только один положительный делитель, именно 1. В этом отношении число 1 в ряде натуральных чисел стоит совершенно особо. Всякое целое, большее 1, имеет не менее двух делителей, именно 1 и самого себя; если других делителей нет, то число называется простым. Целое, большее 1, имеющее кроме 1 и самого себя другие положительные делители, называют составным.
§ 9.3. Простые числа 337 2. Наименьший отличный от единицы делитель целого, большего единицы, есть число простое. В противном случае, можно было бы выбрать делитель еще меньше. 3. Наименьший отличный от единицы делитель (он будет простым) составного числа а не превосходит у/а . Действительно, пусть q — именно этот делитель, тогда a = qbub^q(q — наименьший делитель), откуда а ^ q2 или q ^ у/а. 4. Простых чисел бесконечно много. Это следует из того, что каковы бы ни были различные простые числа рьР2> ---^Рь можно получить новое простое, среди них не находящееся. Таковым будет простой делитель суммы pip2 • ... • Pk + 1, который, деля всю сумму, не может совпадать ни с одним из ПрОСТЫХ Р1,Р2» •••»?*:• 5. Решето Эратосфена для составления таблицы простых чисел. Данный способ состоит в следующем. Выписываем числа: 1, 2, 3, £, 5, б, 7, £?, 9, }Ю, 11, ... , N. Первое, большее 1, число этого ряда есть 2. Оно делится только на себя и на 1 и, следовательно, оно простое. Вычеркиваем из ряда (как составные) все числа, кратные 2, кроме самого себя. Первое, следующее за 2 невычеркнутое число, есть 3 — оно также будет простым. С ним, как и с числом 2, проделываем ту же процедуру и т.д. Если указанным способом уже вычеркнуты все числа, кратные простым, меньшим р (у/а < р)> то все невычеркнутые, меньшие р2, будут простые. Составление таблицы простых чисел, не превосходящих N, закончено, как только вычеркнуты все составные кратные простых, не превосходящих y/N. В алгоритме 9.1 реализовано решето Эратосфена для нечетных чисел 2N + 1 с предпросеиванием для двойки; другими словами, начинаем только с нечетных чисел, отсеивая кратные 3, 5, 7, 11 и т.д. Вектор X является двоичным набором индикаторов простых нечетных чисел. Так, элемент вектора Х^ = 1, если соответствующее ему число 2fc + 1 — простое; в противном случае, когда Х^ = 0, число 2fc + 1 — непростое. Алгоритм 9.1. -Г = {1,1,...,1}; for к = 3 to y/2N + l by 2 do begin {X(k-\)/2 k} { k}
338 Гл. 9. Элементы теории чисел if X(fc_i)/2 = 1 then for i = к2 to 2JV + 1 by 2k do X(k-\)/2 = 0; end; { } for к = 1 to N do if Xk = 1 then 2/c + 1. Рабочая программа на языке Pascal реализации решета Эра- тосфена генерации простых чисел приводится в алгоритме 8.2. Алгоритм 8.3 — это пример реализации алгоритма решета Эра- тосфена на языке С. Алгоритм 9.2. Pascal Program PgmPrimary; { } uses CRT; Const N=45; { } Type Vector=array[l..N] of Boolean; Var f :Text; { } X :Vector; { } Procedure Primary; { } Var i,k,M,nm :Integer; begin nm:=2*N+l; for k:=l to NdoX[k]:=TRUE; k:=3; M:=trunc(sqrt(nm)); while k<=M do begin if X[(k-1) div2] then begin i:=k*k; { } while i<=nm do begin X[(i-1) div 2]:=FALSE; i:=i+2*k; end; end; k:=k+2; { }
§ 9.3. Простые числа 339 end; { } i:=0; for k:=l to N do if X[k] then begin Write(f,2*k+1,' '); end; WriteLn(f); WriteLn(f,'Koличecтвo простых нечетных чисел '+ 'в диапазоне [3,',2*N+1,'] равно \i); end; begin Assign(f,'Primary.out'); { } Rewrite(f); Primary; Close(f); end. Алгоритм 9.3. С #include<stdio.h> #include <math.h> #define N 45 char X[N+1]; int main(void){ FILE *f; int i,k,M,nm; f=f open(" pri тагу, out"," wt"); nm=2*N+l; M=sqrt(nm); for( k=l; k<=N; k++ ) X[k] = l; for( k=3; k<=M; k+=2 ) if( X[(k-l)/2] ) for( i=k*k; i<=nm; i+=2*k ) X[(i-l)/2]=0; i=0; for( k=l; k<=N; k++ ) if( X[k] ){ i++; fprintf(f,"%d ",2*k+l); }
340 Гл. 9. Элементы теории чисел fprintf(f,"\nI^H4ecTBo простых нечетных чисел в диапазоне [3,%d] равно %d",2*N+l,i); fclose(f); return 0; } Исходными данными для программ алгоритмов 9.2 и 9.3 является верхняя граница 2N + 1 диапазона [3,2iV + 1] поиска простых чисел. Значение 2N + 1 этой границы устанавливается явным образом в программе посредством присваивания соответствующего значения переменной N. Нижняя граница диапазона всегда принимается равной 3 — первое нечетное простое число. Результаты расчетов по программам алгоритмов 9.2 и 9.3 сохраняются в выходном файле Primary.out со следующей структурой: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89. Количество простых нечетных чисел в диапазоне [3,91] равно 23. В первой строке приводятся все вычисленные простые нечетные числа из диапазона [3,2N + 1], границы которого распечатываются во второй строке результирующего файла. Во второй же строке указывается и общее количество найденных простых чисел. § 9.4. Сравнения, свойства сравнений Пусть га — целое положительное число, которое назовем модулем. Будем говорить, что целые числа а и Ь сравнимы по модулю га, если a — b = trn для некоторого целого £, т. е. равны остатки от деления а и Ь на га. Сравнение чисел а и Ь по модулю га будем записывать а = b(mod га). Например, 77 = 5 (mod 8), 102 =0(raod3). Свойства сравнений 1. а = а (mod га) — свойство рефлексивности. 2. а = Ь (mod га) => Ь = a (mod га) — свойство симметричности. 3. а = Ь (mod т) Л 6 = с (mod т) => а = с (mod m) — свойство транзитивности. 4. а = Ь (mod т) => (а, т) = (6, га). 5. а = Ь (mod т) Л с = d (mod га) =>a + c = fe + d (mod га). 6. а = Ь (mod га) Л с = d (mod га) => а ■ с = 6 • d (raod га). 7. а = ajd, fe = fejd, (d, га) = 1,а = b(mod га) => aj = = fei (raod га).
§ 9.6. Приведенная система вычетов 341 8. а = b(mod га), гаДга (rai делит га) => а = b(mod rai). 9. а = Ь (raod га), <Да, <ДЬ, d\ra => ai = bi (raod rai) § 9.5. Полная система вычетов Свойства 1-3 сравнений показывают, что операция сравнения целых чисел по модулю га является отношением эквивалентности. Множество всех целых чисел Z разбивается на классы эквивалентности (рис. 9.1), которые называются вычетами по модулю га. Числа r,s е Z лежат в одном классе k{, т. е. г, s е {ki} тогда и только тогда, когда г = s (mod га) имеют одинаковые остатки от деления на га. Числа одного и того же класса имеют с модулем га один и тот же наибольший общий делитель, так как из г, s G {k{} следует, что (г, га) = (5, га) (см. п. 9.4). Особенно важны классы, для которых этот делитель равен единице, т.е. классы, содержащие числа, взаимно простые с модулем. {0} {1} {2} {3} ••■ {т-2} {т-\} Рис. 9.1. Полная система вычетов Определение. Множество классов вычетов {0},{1},..., {га— 1} по модулю га называется полной системой вычетов. Полную систему вычетов можно получить следующим образом. Пусть Z — аддитивная (операция сложения) группа целых чисел, mZ — подгруппа всех чисел, кратных га. Тогда факторгруппа ZjmZ — аддитивная группа вычетов по модулю га (полная система вычетов). § 9.6. Приведенная система вычетов Определение. Пусть га — целое положительное число. Множество классов из полной системы вычетов {0},{1},..., {га— 1}, взаимно простых с га, называется приведенной системой вычетов, которую будем обозначать как Мп или Мп(т). Приведенную систему вычетов, следовательно, можно составить из чисел полной системы вычетов, взаимно простых с модулем.
342 Гл. 9. Элементы теории чисел Обыкновенно Мп выделяют из системы наименьших неотрицательных вычетов: 0, 1, 2, ..., та— 1. Утверждение 9.6.1. Мп является группой с операцией умножения. Доказательство. Проверим все свойства (аксиомы) группы. 1. Замкнутость. Пусть произвольные a,b e Мж. Покажем, что аЪ G Мтг. По условию (а, та) = 1 и (Ь, та) = 1, тогда (аЪ,т) = = 1. 2. Ассоциативность операции умножения чисел выполняется. 3. Единичный элемент — 1. 4. Существование обратного элемента. Возьмем произвольный элемент a G Мп. Покажем совпадение множеств аМп = Мп. Ясно, что аМп С Мп, так как для Мп выполняется свойство замкнутости. Для доказательства аМп = Мп теперь достаточно показать, что все элементы множества аМп различны. Предположим, что существуют Ь\ ^ &2 € -Мтг, для которых аЪ\ — аЪ2 = 0 (mod та). Отсюда а(Ъ\ — Ь2) = 0 (mod та). А так как (а, та) = 1 — взаимно простые, то Ь\ — Ъ^ = 0 (mod та) или Ь\ = Ь2 (rood та), что противоречит принадлежности их разным классам. Следовательно, все элементы множества аМъ различны, значит, 36 G Мтг, что а • Ъ = 1 (mod та). Элемент Ь является обратным к а, и по доказательству он единственный такой элемент (существование обратного элемента а~х доказано). Таким образом, получили, что М71 является группой по умножению. Порядок этой группы равен количеству чисел меньших та и взаимно простых с ним. О § 9.7. Функция Эйлера Определение. Функция Эйлера <р(т) определяется для всех целых положительных та и равна количеству чисел ряда 1, 2, ..., та- 1, взаимно простых с та, где число 1 полагается взаимно простым с любым из чисел и <р(1) = I. Пример. р(1)=1, р(2) = 1, ср(3)=2,ср(4)=2, <р(5)=4, <р(6) = 2, <р(7) = 6, <р(8) = 4, <р(9) = 6, ^(10) = 4, ^(11) = 10. Замечание. Отметим, что порядок группы М„(га) приведенной системы вычетов по модулю т равен |M„-(m)| =ip{m).
§ 9.7. Функция Эйлера 343 Свойства функции Эйлера Свойство 1. Если (mi,m2) = 1, то <р(т{ • т2) = <р(т{)<р(т2). Доказательство (1 способ). Пусть С(т\т2) — циклическая группа порядка |C(mim2)| = mim2, число образующих ее равно ср(т\т2) (см. утверждение 8.3.4). Так как (mi,m2) = 1, то допустимо разложение (см. п. 8.4) группы С(т\гп2) в прямое произведение своих циклических подгрупп C(raira2) —C(m{) x C(m2) и, следовательно, число образующих группы С(гп\гп2) равно <f(m\)ip(m2). О Доказательство (2 способ). Достаточно показать, что \Мп(т{т2)\ = \Мп(т{)\ ■ \Мп(т2)\. 1. Заметим, что из (mi,m2) = 1 следует существование целых а и Ь, для которых выполняется arri2 + Ьт\ = 1 (алгоритм Евклида см. п. 9.1). Приведем значения целых а и Ъ к значениям а е {1, 2,... ,т\) и be {1,2,... ,77^2}, для которых arri2+bm\ = 1 {mod raira2). Пусть с G {1, 2,... ,raira2}, тогда верно сага2 + cbmi = с (mod raira2), где значения са и сЬ приведены к значениям a G {1, 2,...,mi} и Ъ G {1,2,...,т2}. Таким образом, произвольное число с Е {1,2,... ,mim2} можно записать в виде ат2 + 6mi = с (mod mim2), где а Е {1,2,... ,mi} и be {1,2,... ,m2}. Данное представление является однозначным, так как число возможных пар (а,Ь) равно mim2 и таково же количество представляемых чисел се {1,2,... ,mim2}. Далее рассмотрим все представления ат2 + 6mi для всех а Е {1,2,... ...,mi} и be {1,2,...,m2}. 2. Пусть а е Мп(т\) и Ъ Е М^тт^), тогда (a,mi) = 1 и (Ь,тп2) = 1 и (mi,m2) = 1. Покажем, что (arri2 +6mi,mim2) = = 1. Выражение (am2 + 6mi,mim2) = 1 эквивалентно (ат2 + + 6mi,mi) = 1 и (am2 + 6mi,m2) = 1. В первом случае — (arri2 +Ът\,т\) = (am2,mi) = (a,mi) = 1 и во втором — (arri2 + 6mi,m2) = (6mi,m2) = (Ь,m2) = 1. Таких пар (а,Ь), а значит, и чисел am2 + 6mi, взаимно простых с mim2, равно (р(т\)ср(т2). Покажем, что других чисел взаимно простых с mim2 среди ат2 + Ът\ нет. 3. Остались не рассмотренными числа arri2 + 6mi, где а ф Мп(т\) или Ъ ф Мп(т2), для них (arri2 +6mi,mim2) ^ 1, т.е. такие числа не являются взаимно простыми с mim2. 4. Из пунктов 1), 2), 3) следует, что <p(mim2) = <р(т\)<р(т2). D
344 Гл. 9. Элементы теории чисел Свойство 2. <р(ра) = ра — ра~{ = ра (1 — -), где р — простое число и а> 0. Доказательство. Числа вида кр, где fce{l,2,... ,ра~1} — это все числа, не взаимно простые с ра среди 1,2, ...,ра, а значит, остальные являются взаимно простыми с ра. Отсюда <р(ра)=ра-ра-1. □ Свойство 3. Пусть разложение числа т на простые сомножители имеет вид т =р^1Р22 ■ ••• ' P&fc> где pi — к / 1 \ простые числа, тогда <р(т) = ]] ¥>(р"*) = Пр?Ч 1 ) = к = «П(1-;). i=l Свойство 4. ^ y>(d) = гг, где d — различные делители числа п. Доказательство (1 способ). Пустьп =р^1Р22 ■ •• • -р£* — разложение числа на простые сомножители. Правило обобщенного произведения (см. п. 4.4) позволяет записать: 5>(«0= Е *>№£■...■#) = d\n (r\r2...rk) = Е ?(Р?Мр?)--■?(??) = (г\г2...Гк) к ol ' к г=\п=0 i=\d^i Сумма ^(d) = ^(p°) + ¥V)+ ••• + ¥>(?") d\pa 1 + (р-1) + (р2-р) + ... + (ра-ра-')=ра- Отсюда искомая сумма к к Е^) = ПЕ^) = ГК="-
§ 9.7. Функция Эйлера 345 Доказательство (2 способ). Пусть С(п) — циклическая группа порядка |С(тг)| — п. Для всякого делителя d числа п существует единственная подгруппа C(d) С С(п) порядка \C(d)\ = d. Образующие группы C(d) составляют множество Set = {ж Е С(п) | |ж| = d}. Из утверждения 8.3.4 следует, что число образующих группы C(d) равно <p(d) = \Sd\. Так как Sd П Sd> = 0 для d ф d', то U Sd = С(п) или £ <p(d) = n. D Теорема 9.7.1 (Эйлера). ж^т) = 1 (mod га), где т > О и (ж, га) = 1. Доказательство. Приведенная система вычетов Мтг по модулю га является группой, порядок которой \Мп\ = <р(т). Пусть х — произвольное, такое, что (ж, га) = 1 и ж = г (mod га), где г Е Мтг. Из свойств сравнений следует, что наибольший общий делитель (г, га) = 1. Теорема 8.3.1 Лагранжа утверждает, что порядок элемента группы кратен порядку этой группы. Пусть к — порядок элемента г, т.е. тк = 1 (mod га). Отсюда <р(т) = к ■ d, где d — положительное целое. Тогда г<р(гп) = rkd = I (mod га). Из х = г (mod га) следует, что жрМ = rvM (mod га), а значит, и ж^т) = 1 (mod га). D Теорема 9.7.2 (Ферма). хр = х (modр), где р — простое число; х — произвольное целое положительное число. Доказательство. Пусть х = 0(mod р), тогда и хр = = 0(raod р). Пусть теперь ж = г (mod р), где r G {1,2, ...,р— 1} и, значит, (г,р) = 1. Из теоремы 9.7.1 Эйлера следует, что хч>(р) = 1 (mod р), где у>(р) = р — 1. Отсюда жр_1 = 1 (raod р) и хр = x(mod p). О Теорема 9.7.3 (Вил ьс он а), (р — 1)! + 1 = 0 (mod p), где р — простое число. Доказательство. Пусть Мп = {1,2,... ,р — 1} — приведенная система вычетов по модулю р. Мп является группой. Для любого ж G {1,2, ...,р— 1} существует единственный обратный элемент у Е {1,2, ...,р— 1} такой, что ж • у = 1 (mod р). Заметим, что ж • ж = 1 (raod p) выполняется только для двух элементов: ж = 1 и ж =р — 1. Действительно, ж2 — 1 = (ж — 1) х х (ж + 1) = 0 (mod р) равносильно ж — 1 = 0 (mod p) или ж + 1 = 0 (mod р). Отсюда ж = 1 или ж = р — 1. Таким образом, обратными элементами к себе являются только ж = 1
346 Гл. 9. Элементы теории чисел и х=р—\. Для любого из оставшихся элементов группы х Е { 2, 3, ..., р — 2} существует единственный обратный у Е { 2, 3, ..., р — 2} такой, что ху = 1 (mod р) и х ^ у. Тогда верно 2 ■ 3 ■ ... • (р — 2) = 1 (mod p). Умножив последнее сравнение на 1 ■ (р — 1), получим 1 -2 •... • (р- 1) = -1 (mod р) или (р- 1!+ 1 =0(modp)). О Задача. Пустьр — простое и h\,h2,... ,hn — целые числа. Доказать, что (h\ + h2 + • • • + hn)p = h^ + h^ + ... + h^, (mod p). Решение. Согласно теореме Ферма 9.7.2 Щ = hi (mod p), %— 1,гс. Свойства операции сравнения (см. п. 9.4) позволяют записать данные п сравнений Щ = /i; (mod р) в виде их суммы: Щ + Щ + ... + bfii = /ii + /12 + ... + hn (raod p). С другой стороны, верно и (h\ + h2 + ... + hn)p = h\ + h2 + ... + hn (mod p), что непосредственно вытекает из теоремы Ферма. § 9.8. Функция Мёбиуса. Формула обращения Мёбиуса Определение. Функция Мёбиуса /х(п) определяется для всех целых положительных п и равна {1, если п = 1, О, если п = р\хр^ .. .p£fc и За* > 1, (-1)*, если п = рхр2...рь где п = p"lp22 •••Pfc*' — разложение на простые сомножители, Pi — простые числа, а* — кратность р; в разложении. При мер. //(1) = 1, /х(2) = -1, м(3) = -1, м(4)= 0, //(5) = -1, //(6)= 1, //(7) = -1, //(8)= 0, //(9)= 0, //(10)= 1, //(11) = -1, //(12)= 0, //(13) = -1, //(14)= 1, //(15)= 1, //(16)= 0, //(17) = -1, //(18)= 0, //(19) = -1, //(20)= 0, //(21)= 1. Лемма 9.8.1. >;//(«) = << где суммирование идет по всем делителям d числа п.
§9.8. Функция Мёбиуса. Формула обращения Мёбиуса 347 Доказательство. Если га = 1, то ^м(й) = /л(1) = 1. d\l Пусть теперь га =pflp"2 •... • p£k ^ 1 — разложение на простые сомножители. Тогда £>(«*)= Е M^) = E^(-ir = (i-i)fc=o. d\n d\n, /i(d)^0 r=0 Все делители d, для которых /x(d) 7^ 0, имеют вид р%хр%2 • ... -р%г и p(Pi\Pi2 ' ••• ' Pv) = ( 1)г- Количество таких делителей Рг1Рг2 ' ••• ' Ргг> ВЫбираеМЫХ ИЗ Pi£>2 ' • • • ' Pb рНВНО ЧИСЛу сочетаний С£. О Теорема 9.8.1. Формула обращения Мёбиуса', если /(га) = ^p(d), mo p(ra) = ^/x(d)/ Q) , где /(^), 5(7) "~ функции, определенные для всех целых положительных га. Доказательство. Выполним подстановку / (— \ в сумме ^2 h(d)f ("7) = S м(^)( X) 0(^) )• Заметим, что здесь число га неявно рассматривается в виде произведения п = d • 5 • г, где делители d и S принимают все допустимые значения независимо друг от друга и порядок суммирования не влияет на значение суммы, т.е. £ M(d) (£ g(S)) = £>(*) (£ М^)), d\n s\* S\n d\f (о, если j ^ 1, где 2^ MW = \ * ~~ вследствие леммы 9.8.1. d\n ^ 1, если<5 = га, Тогда £ <?(<5) (E м(«0) = 9{n) E M«0 = 9(n) E M<0 = *\n d\f d\a d\i = #(n)/i(l) = #(n). D
348 Гл. 9. Элементы теории чисел Задача. Установить связь функции Эйлера <р(п) и функции Мёбиуса /х(гг). Решение. ^ <p(d) = п — свойство 4 функции Эйлера (см. d\n п. 9.7). К данной сумме применим формулу обращения Мёбиуса: d\n d\n d\n Для п = 6 имеем <р(6) = 2, все делители d е {1, 2, 3, 6}, /х(1) = 1, /х(2) = — 1, /х(3) = — 1, /х(6) = 1 и, наконец, выражение V(n) „ fi{d) 2 i_i_ii 2-^-L = /J £-TjL примет вид - = - + — + — + - Пусть п = п £гп а о 1 z о о — pVp"2- -Pkk ~ Разложение на простые множители. Так как к ( 1 \ (р(п) = пП (1 ) ~~ свойство 3 функции Эйлера (см. п. 9.7), i=\ V Рг/ то г=1 d\n г=1 d\n
Задачи и упражнения Системы счисления 1. Выполнить перевод чисел из одной системы счисления в другую. Найти x2,ys,z{6: 1).35410 = ж2 = 2/8 =*1б- 2). 801 ю = х2 = 2/8 =z{6. 3). 832ю = х2 = 2/8 = *i6- 4). 13210 = ж2 = 2/8 =z{6. 5). 90010 = x2 = ys = zl6. 6). 35410 = x2 = ys = zl6. 7). I37l0 = x2 = ys = zl6. la). 0.13110 = x2 =ys = z{6. 2a). 0.018ю = x2 =y8 = *i6. 3a). O.OI810 = x2 =ys = z\q. 4a). OJ8O10 = x2 = 2/8 = ^16- 5a). 0.41110 = x2 =2/8 = *i6- 6a). 0.87310 = ж2 =2/8 = *i6- 7a). 0.73110 = x2 =ys = zl6. 2. Выполнить перевод чисел из одной системы счисления в другую. Найти х\о и у: 1). 2). 3). 4). 5). 6). 7). 3231.34 10121.13 632.78 244.25 101.214 342.67 181.29 = ж10. = ж10. = х10. = «10- = «10- = Х\0- = zio- la). 2а). За). 4а). 5а). 6а). 7а). 534.610 394.2ю 811.4ю 379.110 227.710 557.8Ш 238.9Ш = У7- = Уз- = У4- = Уб- = Уъ- = У7- = У8- Введение в математическую логику 3. Проверить, какие из функций являются тождественно истинными, условно истинными, тождественно ложными: 1). f = (x^y)^((xVz)^>(yV z)). 2). / = ((ж ф у) ~ z) • (ж -► у- z). 3). / = ((х V у) I (х ф у)) Ф (ж -> у -> (ж V 2/)). 4). / = ((ж V 2/) ■ г -> ((ж ~ z) ф 2/)) ■ ж ■ 2/ ■ z. 5). / = (ж -* у) ^((xV z) -»(yV z)). 6). / = ((ж ф у) ~ z) • (ж -» у V z). 7). / = ((«Vp) I (жфу))ф(ж^у^(жУ2/)). 4. Для следующих булевых функций составить таблицы истинности, построить их СДНФ, СКНФ и полиномы Жегалкина: 1). /(ж, 2/, z) = -|(2/ж V я) V ж ф 2/|ж. 2). /(ж, 2/, г) = ж ф xz\-i(xy) Ф 2/.
350 Задачи и упражнения 3). /(ж, у, z) = (ж • -.у) V у -► (ж ~ у) ф 2. 4). /(ж, у,2) = ж~у~2ф -|(жу)|ж. 5). /(ж, у, г) = -)(жу) V -i(^) I x\z. 6). /(ж, у, г) = -)(-|(ж)у-|(2)) ф жу ~ х\у. 7). /(ж, у, г) = ж ~ Ху ф (ж 4 z) V у. 5. Минимизировать следующие булевы функции трех переменных двумя способами: (1) геометрическим на трехмерном кубе и (2) аналитическим методом Куайна: 1). ~xy~z\/ xy~z\/ xyz Уху z Уху zy xyz. 2). ху~2Уху~2Уху~2У ху~2У ху z Уху z. 3). xy~z\/ xyz Mxyz V жуя V xy~z. A).~xy~zV xyz Vxyz Уху z У xyz У xy~z. 5). xy'zVxy'zVxyz V жу zW xyz Vxy"z. 6). xy~zV xyz Wxyz Уху z V xyz V xy~zV xy~z. 7). xy~zVxy~zV xyz Уху z V xyz У xy~z. 6. Минимизировать следующие булевы функции четырех переменных двумя способами: (1) геометрическим на карте Карно и (2) аналитическим методом Куайна: 1). IzyzwVlEyzwVxyzwVxyzwVxyzw У xy~zw У~х y~zw V"xy"zw. 2). xyzwVliiyzwVxyzwVxyzwVxy'zw Уxy~zw Vxy^ttJ V"xyJUJ. 3). xyzwWxyzwWx'yzwWxyzwWxy'zw Vxy~zw У xy~z w У 'xy'zw. 4). xyzwVlryzwVxyzwVxyzwVxy'zw У xy'zw Vxy~zwV "xy'zw. 5). ~xyzw\J~xyzw\JxyzwVxyzwVxy'zw Vxy'zw У "xy'zw У "xy'zw. 6). IzyzwVlEyzwVxyzwVxyzwVxy'zw Vxy'zw У "xy'zw Уxy'zw. 7). 'xyzwy'xyzwyx'yzwy xy'zw У xy'zw Vxy'zw У "х y~z w У "xyl w. 8). xyzwyxyzwVxyzlByxyzlByxy^wyxy^wy^y^wy^y^lB. 9). ~xy~z\J xyz y~x~zw yyzw yxzw У xyw yxyzw Wxyzw. 10). y~zw У x y~z У y~z w У xyw yxyzwyxy'zw. 7. Проверить, что наборы булевых функций сг — полные. Для каждого такого набора сг получить функции: ж, ж-у, ж V у. Для найденных выражений выполнить проверку — составить таблицы истинности: 1).<7 = - 2).а = 3).<7 = 4). (7 = f 0,х-> у f 1,х->оу {ж, х —» у {"х, х -/» у 5). <г = 6). <г = 7). <7 = 8). <7 = 9). <7 = (ж ->у,х -»у}. \х ~у,жу,0}. (ж ~ у, ж Vy, 0}. (жфу.жу, 1}. {жфу,ж Vy, 1 }• 8. Проверить, являются ли полными следующие наборы а булевых функций?
Задачи и упражнения 351 1). а = I жу ф z, (ж ~ у) ф г) |. 2).<т = (ж->у, -«(ж© уф*)}. 3). сг = / ж —► у, ж -^yz}. 4). сг = { 0, ж, /i, /2, /3 }, где /i, /2, /3 - попарно различные булевы функции 2-х переменных. 5).<7 = {ж^г/, (И00001100111100)}, где (1100001100111100) — таблица истинности функции. 6). а = {(1011), (1111110011000000)}, где (1011), (1111110011000000) — таблицы истинности функций. 7). а = {х -/» у, ж -^ y;z}. 9. Построить для / полином Жегалкина: 1). / = ~xyVyzV~zwVwx. 2). / = (ж -> у)(у -> ж) -> г. 3). f = xyV yzV zwV wx. 4). / = (ж ->у)(у ->ж) ~г. 5). f = xy —> yz —> zw —> wx. 6). / = жу ф yz ф zw ф Шж. 7). / = жу -/» yz -/» zw -/» wx. 10. Какие из перечисленных функций являются монотонными: 1). / = жу(ж ф у). 5). / = ж -» (ж -» у). 2). / = жу ф yz ф гж ф г. 6). / = ж -**> (у -**> ж). 3). / = ж —> (ж —> у). 7). / = жу V yz V £Ж —> z. 4). / = ж -> (у ->ж). 11. Проверить, являются ли функции самодвойственными: 1). f = хУуУ~2. 2). / = (ж -> у) -> ж^ -> (у -> г). 3)./ = я._>(у _>(*_> («,_><)))). 4). / = ж -/» (у -/» (г -/» (w -/» 1))). 5). / = Ж! фж2ф...фжпф 1. 6). / = х\ ФЖ2Ф...ФЖ2ПФ 1. 7). / = ж1фж2ф...фж2п+1Ф<7, где <те{0, 1}. 12. Булева функция /(ж, у) удовлетворяет соотношению /(/(x,/(y,«)),/№,y),/(«,«))) = i. Доказать справедливость следующих соотношений: 1)./(х,х) = 1. 2)./(х,/(у,х)) = 1. 3).f(f(f(x,y),f(x,z)),f(x,f(y,z)))=l. 4).f(f(x,y),f(f(x,f(y,z)),f(x,z))) = l. S).f(f(x,f(y,z)),f(y,f(x,z)))=l. 13. Каково число функций f(x\,x2,... ,жп), принимающих значение 1 менее, чем на & наборах?
352 Задачи и упражнения 14. Пусть f(x\, х2, • •., хп) и д(у\, у2, • • •, Ут) - булевы функции, переменные которых х\,Х2,...,хп и у\,у2,---,Ут не пересекаются. Известно, что СДНФ функции f(x\,X2,...,xn) содержит г слагаемых, а СДНФ функции д(у\, ?/2, • • •,2/m) содержит s слагаемых. Найти длину СДНФ функций: 1) 2) 3) 4) 5) 6) 7) 8) f(x\,X2, f(x\,X2, f(x\,X2, f(x\,x2, f(x\,x2, f(x\,x2, f(x\,x2, f(x\,x2, .жп) А #(2/1,2/2, .яп) V д(у\,у2, ^n) Ф #(2/1,2/2, >xn) -> #(2/1,2/2, >xn) -» 0(2/1,2/2, >xn) i #(2/1,2/2, .яп) I #(2/1,2/2, ^n) ~ #(2/1,2/2, ,Ут ,Ут , 2/m , 2/m , 2/m , 2/m 15. Найти число слагаемых в СДНФ булевых функций или (тоже самое) число наборов значений переменных х\, х2, ..., хп, на которых функции обращаются в 1: 1). f(x\,x2,...,xn) = х\ фх2ф ...фхп. ^ ^ 2). f(x\,X2,...,xn) = (х\ Ух2 V... Ухп) -(рх V^2 V...J/xn). 3). /(жьж2,...,жп) = {х\ Фж2ф ж3) ■ (я?1 Ф ж2 Ф ж3) © 5). f(xi,x2,...,xn) = ххх2 .. .хкфхк+ххк+2 .. .хп. 6). /(Ж1,Ж2,...,ЖП) = 1 фЖ1 фЖ1Ж2ф ...фХ\Х2...Хп. 7). f(x\,x2,...,xn) = х\-» (х2 -» (...(xn_i -^05„))). 16. Построить вывод формул в системе аксиом Клини: 1). -лС D -Ю, ^В d->C,D\- В. 2). -iB э -Л Ь В Э Л. 3). -хА, А\- В. 4).AdB,BdC\- Аэ С. 5). А D (В D С) \- В D (A D С). 6). А D (В D С) Ь А Л В DC. 7). АЛ В D С \- Ad (В DC). 8). Ad В Ь пбэпЛ Доказать формулы в системе аксиом Клини 9). \- (Ad (-.В Э С)) D (-.В Э (A D С)). 10). Ь (В D С) D (A D (А Л В D С)). И). Ь ((4 э В) Л-.В) э-.А 12). ЬпЛэ(Аэ В). 13). Ь ((^Х D У) Л (-iX э -пУ)) D X. 14). Ь (В э С) э ((Л dB)d(Ad С)). 15). h Л D А.
Задачи и упражнения 353 17 1. 2. 3. 4. 5. 6. 7. 8. . Доказать справедливость формул: Уж Р(х) Л Уж Q(x) = Зх Р(х) V Зх Q(x) = Уж Р(х) V Уж <5(ж) ^ Уж Р(х) V Уж <5(ж) э Эж Р(ж) Л Эж <5(ж) ^ Эж Р(ж) Л Зх Q(x) С УжР(ж) V С ЭжР(ж) Л С Уж(Р(ж)Л<2(ж)). Эж(Р(ж) У(?(ж)). Уж(Р(ж)У<?(ж)). Уж(Р(ж)У<5(ж)). Эж(Р(ж)Л<5(ж)). Эж(Р(ж)Л<5(ж)). Уж(Р(ж)УС), С- Зх(Р(х)ЛС), С- - const. - const. 18. Привести к предваренной нормальной форме (ПНФ) следующие предикаты: 1). Зх Зу Р{х,у) э ^ЗхУу Q(x,y). 2). -Wx Зу Р(х,у) D ЬЗхУу Q(x,y) э ^Зх Цх)). 3). -ttx Vy Р(х, у) V (^ЗхУу Р(х, у) D Ух R(x)). 4). Уж -тЗу Р(х,у) D (Зх -Ыу Р(х,у) Э Ух -3yVzS(x,y,z)). 5). \/х А(х) D ЬЗх В(х) D (\/x C(x) D -ttx D(x))). 6). (-^х Зу Р(х,у) D ^ЗхУу Q(x,y)) D ^Зх R(x). 7). -ttx R(x) э (^3x -Ny P(x,y)) э Зх 3y^3zS(x,y, z)). 19. Задача (Кислера). Браун, Джонс, и Смит обвиняются в подделке сведений о подлежащих налоговому обложению доходах. Они дают под присягой следующие показания: Браун : Джонс виновен, а Смит невиновен. Джонс: Если Браун виновен, то виновен и Смит. Смит : Я невиновен, но хотя бы один из них двоих виновен. Обозначим через Б, Д и С высказывания: «Браун виновен», «Джонс виновен», «Смит виновен». Выразите показания каждого из обвиняемых логической формулой. Постройте таблицы истинности трех полученных формул. Затем ответьте на следующие вопросы. 1. Совместны ли показания всех троих заподозренных (т.е. могут ли они быть верны одновременно)? 2. Показания одного из обвиняемых следуют из показаний другого; о чьих показаниях идет речь? 3. Если все трое невиновны, то кто совершил лжесвидетельство? 4. Предполагая, что показания всех обвиняемых верны, укажите, кто невиновен, а кто виновен? 5. Если невиновный говорит истину, а виновный лжет, то кто невиновен, а кто виновен? 12 Иванов Б.Н.
354 Задачи и упражнения 20. Задача (Клини). Переведите каждое из следующих рассуждений в логическую символику высказываний и проанализируйте полученные высказывания на предмет их тождественной истинности. 1. Любой друг Коли — друг Васи. Петя — не друг Васи, значит, Петя — не друг Коли. 2. Я заплатил бы за ремонт телевизора, только если бы он стал работать. Он же не работает. Поэтому я платить не буду. 3. Если он принадлежит нашей компании, то он храбр и на него можно положиться. Он не принадлежит нашей компании. Значит, он не храбр и на него нельзя положиться. 4. Если подозреваемый совершил кражу, то либо она была тщательно подготовлена, либо он имел соучастника. Если бы кража была подготовлена тщательно, то, если бы был соучастник, украдено было бы гораздо больше. Значит, подозреваемый невиновен. 5. Если он автор этого слуха, то он глуп или беспринципен. Он не глуп и не лишен принципов, значит, не он автор этого слуха. 6. Если наступит мир, то возникнет депрессия, разве что страна проведет программу перевооружения либо осуществит грандиозную программу внутренних капиталовложений в области образования, охраны окружающей среды, борьбы с бедностью и т.д. Невозможно договориться о целях такой грандиозной программы внутренних капиталовложений. Значит, если наступит мир и не будет депрессии, то непременно будет осуществляться программа перевооружения. 7. Намеченная атака удастся, только если захватить противника врасплох или же если позиции его плохо защищены. Захватить его врасплох можно только, если он беспечен. Он не будет беспечен, если его позиции плохо защищены. Значит, атака не удастся. 8. Если мы не будем продолжать политику сохранения цен, то мы потеряем голоса фермеров. Если же мы будем продолжать эту политику, то продолжится перепроизводство, разве что мы прибегнем к контролю над производством. Без голосов фермеров нас не переизберут. Значит, если нас переизберут и мы не прибегнем к контролю над производством, то будет продолжаться перепроизводство. 9. В бюджете возникнет дефицит, если не повысят пошлины. Если в бюджете имеется дефицит, то государственные расходы на общественные нужды сократятся. Значит, если повы-
Задачи и упражнения 355 сят пошлины, то государственные расходы на общественные нужды не сократятся. Комбинаторные схемы 21. Доказать комбинаторными рассуждениями (т.е. используя только определение числа сочетаний) тождества: г)Скп = Скп_х+Скп-_\. ь)скп = ск_х+скп-_\ + ... + с*п_{шу в) С£1 = С?п-, + С£_, + • • • + Wn-n- г) С* ,, = C*L„ + Ст7х ,+... + С$. 22. Доказать тождества: а) £С* = 2». А;=0 б) ±кСЪ = п2"-У к=0 в) £&2С*=тг(гг+1)2п-2. А;=0 r) £ с£(™- i)n"fc = mn. д) E(-i)*c* = o. А;=0 m гп гп_1 22 ij 23. Доказать тождество £ £ Е ••■•' Е Е 1=<ЭДг гп = \ гп-\ = \ in-2=l г\ = \ г0=\ A Cknz\ _ 2 *=!<&_, n + 11 24. Доказать, что £ -^-^ = -^j, n^\. (2п)! (Зп)! (п2)! (2n)! . z z 6 п -—-— являются целыми? 25. Доказать, что следующие числа: п!(п+1)! 26. Доказать формулу бинома Ньютона (а + Ь)п = = £ Ckakbn~k. к=о 27. Найти число подмножеств множества М = {а\,а,2,... ...,ап}. 28. Доказать, что £ С2/с = £ C2fc+1 = 271"1. к к 12*
356 Задачи и упражнения 29. Доказать, что £ C^Cf = Сп+т и £ (С*)2 = С«п / ч г=0 г=0 (теорема сложения). 30. Доказать равенство £ £ СпСп-к = зп- fc=0r=0 n j 2n-l~1 — 1 31. Доказать равенство J2 т—г^ = i—* k=Q * + 1 П + 1 П 1 1 32. Доказать равенство £ (~0fcT—г^п — г- 33. Найти сумму £ (к2 - 1 + —ЦЛ С*. 34. Доказать тождество Y] —;—т-^ г = кп, где суммиро- 7l\\7l2l • .. . • Tiki вание распространяется на все упорядоченные разбиения п на к слагаемых: п = щ + п^ + ... + щ, п ^ 0, — целые числа. 35. Из города А в город В ведут семь дорог, а из города В в город С — три дороги. Сколько возможных маршрутов ведут из Л в С через город В? 36. Сколькими способами число 11п можно представить в виде трех сомножителей (представления, отличающиеся порядком сомножителей, считаются различными; 11° — сомножитель)? 37. Сколькими способами можно указать на шахматной доске 2тг х 2тг два квадрата — белый и черный? 38. Сколькими способами можно указать на шахматной доске 2тг х 2п белый и черный квадраты, не лежащие на одной горизонтали и вертикали? 39. Какое количество матриц из п строк и т столбцов с элементами из множества {0,1} можно составить? 40. Сколькими способами можно составить трехцветный флаг, если имеется материал 5 различных цветов? Та же задача, если одна из полос должна быть красной? 41. Надо послать 6 срочных писем. Сколькими способами это можно сделать, если любое письмо можно передать любым из 3 курьеров? 42. У одного студента 7 книг, у другого 9 различных книг. Сколькими способами они могут обменять одну книгу одного на одну книгу другого?
Задачи и упражнения 357 43. Сколько различных словарей надо издать, чтобы можно было переводить с любого из данных п языков на любой другой язык этого же множества? 44. В правление избрано т человек. Из них надо выбрать председателя, заместителя председателя, секретаря и казначея. Сколькими способами можно это сделать? 45. У мамы 5 яблок, 7 груш и 3 апельсина. Каждый день в течение 15 дней подряд она выдает сыну по одному фрукту. Сколькими способами это может быть сделано? 46. У мамы т яблок и п груш. Каждый день в течение т + п дней подряд она выдает сыну по одному фрукту. Сколькими способами это может быть сделано? 47. Найти число векторов а = (а\, а2,... ,ап), координаты ко- п торых удовлетворяют условию щ G {0, 1}, г = 1, 2,... ,гг, J2 аг — = г. 48. У англичан принято давать детям несколько имен. Сколькими способами можно назвать ребенка, если ему дают не более трех имен, а общее число имен равно т? 49. Сколькими способами можно расставить белые фигуры: 2 коня, 2 слона, 2 ладьи, ферзя и короля на первой линии шахматной доски? 50. Сколькими способами можно расставить к ладей на шахматной доске размером пхт так, чтобы они не угрожали друг другу, т. е. так, чтобы никакие две из них не стояли на одной вертикали или горизонтали? 51. Сколькими способами можно посадить п мужчин и п женщин за круглый стол так, чтобы никакие два лица одного пола не сидели рядом? Та же задача, но стол может вращаться и способы, переходящие при вращении друг в друга, считаются одинаковыми? 52. На школьном вечере присутствуют 12 девушек и 15 юношей. Сколькими способами можно выбрать из них 4 пары? 53. Пусть п (п ^ 2) человек садятся за круглый вращающийся стол. Два размещения будем считать совпадающими, если каждый человек имеет одних и тех же соседей в обоих случаях. Сколько существует способов сесть за стол? 54. Хор состоит из 10 участников. Сколькими способами можно в течение трех дней выбирать по 6 участников, так, чтобы каждый день были различные составы хора?
358 Задачи и упражнения 55. Сколькими способами можно распределить Ъп различных предметов между тремя людьми так, чтобы каждый получил п предметов? 56. Имеется п абонентов. Сколькими способами можно одновременно соединить три пары? 57. Сколькими способами можно составить три пары из п шахматистов? 58. Рассматриваются всевозможные разбиения 2тг элементов на пары, причем разбиения, отличающиеся друг от друга порядком элементов внутри пар и порядком расположения пар, считаются совпадающими. Определить число таких разбиений. 59. Доказать, что нечетное число предметов можно выбрать из п предметов 2n_1 способами. 60. Сколькими способами можно посадить рядом 3 англичан, 3 французов и 3 немцев так, чтобы никакие три соотечественника не сидели рядом? 61. В колоде 52 карты. В скольких случаях при выборе из колоды 10 карт среди них окажутся: а) ровно один туз; б) хотя бы один туз; в) не менее двух тузов; г) ровно два туза? 62. Сколькими способами можно выбрать 6 карт из колоды, содержащей 52 карты, так, чтобы среди них были карты каждой масти? 63. На железнодорожной станции имеется т светофоров. Сколько может быть дано различных сигналов, если каждый светофор имеет три состояния: красный, желтый и зеленый? 64. Имеется 17 пар различных предметов. Найти полное число выборок из этих предметов. Каждая пара может участвовать в выборке, предоставляя любой из двух ее элементов, или не участвовать. Выборки считаются различными, если отличаются друг от друга своим составом; порядок предметов в выборке не учитывается. 65. Найти число способов раскладки п различных шаров по т различным корзинам? 66. Найти число способов раскладки п одинаковых шаров по т различным корзинам? 67. Сколькими способами можно разместить п одинаковых шаров по т различным корзинам при следующих условиях: a) пустых корзин нет; b) во второй корзине к шаров; c) в первых к корзинах соответственно а\, a<i,..., а^ шаров?
Задачи и упражнения 359 68. Сколькими способами можно разместить щ красных, п^ желтых и щ зеленых шаров по т различным корзинам? 69. Сколькими способами 3 человека могут разделить между собой 6 одинаковых яблок, 1 апельсин, 1 сливу, 1 лимон, 1 грушу, 1 айву и 1 финик? 70. Поезду, в котором находится п пассажиров, предстоит сделать т остановок. Сколькими способами могут распределиться пассажиры между этими остановками? 71. Сколькими способами можно раскрасить квадрат, разделенный на четыре части, пятью цветами: а) допуская окрашивание разных частей в один цвет; б) если различные части окрашиваются разными цветами? 72. Сколькими способами можно выбрать 5 номеров из 36? 73. В скольких случаях при игре в «Спортлото» 5 номеров из 36 будут правильно выбраны: а) ровно 3 номера; б) не менее 3 номеров? 74. Сколько существует различных комбинаций из 30 монет достоинством 1,2 и 5 рублей? Построить дерево решений. 75. Сколькими способами можно раскрасить квадрат, разделенный на девять частей, четырьмя цветами таким образом, чтобы в первый цвет были окрашены 3 части, во второй — 2, в третий — 3, в четвертый — 1 часть? 76. Определить коэффициент с в слагаемом сх\х\х\ после разложения выражения (х\ +ж2 + ж3)10 и приведения подобных? 77. Сколько делителей имеет число q =p^xp^2 • ... • р"71» где Pi — простые числа, не равные единице, а% — некоторые натуральные числа? Чему равна сумма этих делителей? 78. Доказать, что в разложении числа п\ на простые сомно- Гп1 Гп 1 жители простое число р входит с показателем -г + \-г \ + + п + ... 79. Из выбранных к различных чисел от 1 до п составляют произведение, к фиксировано. Какое количество полученных таким образом произведений делится на простое число р ^ гг? 80. Сколько можно составить перестановок из п элементов, в которых данные т элементов не стоят рядом в любом порядке? 81. На шахматную доску гг х п произвольным образом поставили две ладьи — черную и белую. Что вероятнее: ладьи бьют друг друга или нет?
360 Задачи и упражнения 82. Доказать, что из пяти грибов, растущих в лесу и не расположенных на одной прямой, всегда можно найти четыре таких, которые служат вершинами выпуклого четырехугольника? 83. В первенстве мира по футболу участвуют 20 команд. Какое наименьшее число игр должно быть сыграно, чтобы среди любых трех команд нашлись две, уже игравшие между собой? 84. Некая комиссия собиралась 40 раз. Каждый раз на заседаниях присутствовали по 10 человек, причем никакие двое из ее членов не были на заседаниях вместе больше одного раза. Доказать, что число членов комиссии больше 60. 85. В учреждении 25 сотрудников. Доказать, что из них нельзя составить больше 30 комиссий по 5 человек в каждой так, чтобы никакие две комиссии не имели более одного общего сотрудника. 86. В соревнованиях по гимнастике две команды имели одинаковое число участников. В итоге, общая сумма баллов, полученных всеми участниками, равна 156. Сколько было участников, если каждый из них получил оценки только 8 или 9 баллов? 87. Группа из 41 студентов успешно сдала сессию из трех экзаменов. Возможные оценки: 5,4,3. Доказать, что, по крайней мере, пять студентов сдали сессию с одинаковыми оценками. 88. Поступающий в высшее учебное заведение должен сдать четыре экзамена. Он полагает, что для поступления будет достаточно набрать 17 баллов. Сколькими способами он сможет сдать экзамены, набрав не менее 17 баллов и не получив ни одной двойки? Построить дерево решений. 89. Каких чисел больше среди первого миллиона: тех, в записи которых встречается 1, или тех, в записи которых ее нет? 90. Пусть числа 1,2, ...,гг расположены подряд по кругу. Двигаясь по кругу, вычеркиваем каждое второе число. Показать, что последнее не вычеркнутое число равно 2тг — 2Pog2(n)l+1 + 1. 91. Сколькими способами можно число п представить в виде суммы к слагаемых (представления, отличающиеся лишь порядком слагаемых, считаются различными), если: а) каждое слагаемое является целым неотрицательным числом; б) каждое слагаемое — натуральное число? 92. Какова таблица инверсий для перестановки 271845936? 93. Какой перестановке отвечает таблица инверсий 50121200?
Задачи и упражнения 361 94. Пусть перестановке а\а,2...ап соответствует таблица инверсий d\d2...dn . Какой перестановке тогда будет соответствовать следующая таблица инверсий: (га — 1 — d\){n — 2 — с^) •• • ... (n-n-dn)? 95. На окружности произвольным образом отмечают га точек буквой JSI и т точек буквой М. На каждой из дуг, на которые окружность делится выбранными точками, ставят числа 2 или 1/2 следующим образом: если концы дуги отмечены буквой N, то ставят число 2; если концы дуги отмечены буквой М, то ставят число 1/2; если же концы дуги отмечены различными буквами, то ставят число 1. Доказать, что произведение всех поставленных чисел равно 2п~т. 96. Сколькими способами можно распределить Зга различных книг между тремя лицами так, чтобы числа книг образовывали арифметическую прогрессию? 97. Рассматриваются всевозможные разбиения пк элементов на га групп по к элементов в каждой, причем разбиения, отличающиеся друг от друга только порядком элементов внутри групп и порядком расположения групп, считаются совпадающими. Сколько существует различных таких разбиений? 98. Сколькими способами можно разбить 30 рабочих на 3 бригады по 10 человек в каждой бригаде? На 10 групп по 3 человека в каждой группе? 99. Сколькими способами можно разделить колоду из 36 карт пополам так, чтобы в каждой пачке было по два туза? 100. Сколькими способами можно разложить 10 книг в 5 бандеролей по 2 книги в каждую (порядок бандеролей не принимается во внимание)? 101. Сколькими способами можно разложить 9 книг в 4 бандероли по 2 книги и в 1 бандероль 1 книгу (порядок бандеролей не принимается во внимание)? 102. Сколькими способами можно разделить 9 книг в 3 бандероли по 3 книги в каждую (порядок бандеролей не принимается во внимание)? 103. На первые две линии шахматной доски выставляют белые и черные фигуры (по два коня, два слона, две ладьи, ферзя и короля каждого цвета). Сколькими способами можно это сделать? 104. Сколькими способами можно расположить в 9 лузах 7 белых шаров и 2 черных шара? Часть луз может быть пустой, и лузы считаются различными.
362 Задачи и упражнения 105. В лифт сели 8 человек. Сколькими способами они могут выйти на четырех этажах так, чтобы на каждом этаже вышел, по крайней мере, один человек? 106. Доказать, что число упорядоченных разбиений числа п на к натуральных слагаемых, т. е. число решений уравнения п = = х\ + х2 + ... + жь Х{ > О, % = 1,2,..., к, равно С^~| , а общее число упорядоченных разбиений для различных к равно 2n_1. 107. Сколькими способами можно разложить га различных шаров по к различным корзинам так, чтобы в первую корзину попало щ шаров, во вторую корзину попало щ шаров и т.д., в к-ю корзину попало щ шаров, где п = щ + га2 + ... + щ? 108. Сколько существует чисел от 0 до 10п, которые не содержат две идущие друг за другом одинаковые цифры? 109. Сколько существует натуральных га-значных чисел, у которых цифры расположены в неубывающем порядке? 110. Сколько существует натуральных чисел, не превышающих 10п, у которых цифры расположены в неубывающем порядке? 111. Сколькими способами можно расставить п нулей и к единиц так, чтобы никакие две единицы не стояли рядом? 112. Город имеет вид прямоугольника, разделенного улицами на квадраты. Таких улиц в направлении с севера на юг равно га, а в направлении с востока на запад — к. Сколько имеется кратчайших дорог от одной из вершин прямоугольника до противоположной? 113. Как разбить квадратное поле на участки так, чтобы высеять на нем т сортов пшеницы для сравнения урожайности этих сортов, исключающего влияние изменения плодородия в пределах участка? Считаем, что плодородие убывает при удалении от одной стороны поля (неизвестно, какой именно) к противоположной. 114. Бросают т игральных костей, помеченных числами 1,2,3,4,5,6. Сколько может получиться различных результатов (результаты, отличающиеся порядком очков, считаются одинаковыми)? 115. Имеем т различных шаров и к различных корзин. Сколькими способами можно разместить предметы по корзинам, допускаются пустые корзины? 116. Имеем т различных шаров и к различных корзин. Сколькими способами можно разместить предметы по корзинам,
Задачи и упражнения 363 пустые корзины не допускаются? Указание: воспользоваться правилом включения и исключения. 117. Найти число способов разложения га шаров по к корзинам так, чтобы г корзин остались пустыми. Указание: воспользоваться правилом включения и исключения. 118. Имеем т различных шаров ai,a2,... ,ап и столько же различных корзин k\, k2,... ,кп. Сколькими способами можно разместить предметы по корзинам так, чтобы никакой предмет ai не попал в корзину А^ (допускаются пустые корзины)? Указание: воспользоваться правилом включения и исключения. 119. Задача о беспорядках. Имеем га различных шаров ai,a2,... ,an и столько же различных корзин к\,&2,...,кп. Сколькими способами можно разместить предметы по корзинам так, чтобы никакой предмет ai не попал в корзину кг, пустые корзины не допускаются? Указание: воспользоваться правилом включения и исключения. 120. Найти число перестановок га шаров, в которых ровно г элементов остаются на месте. Указание: воспользоваться правилом включения и исключения. 121. Доказать, что г различных вещей можно разделить между п + р людьми так, чтобы данные п людей получили, по крайней мере, по одному предмету, способами С%(п + р)г — -Cttn + p-iy + C*(n + p-2y-... + (-l)nC%(n + p-ny. Указание: воспользоваться правилом включения и исключения. 122. Рыцарские переговоры. К обеду за круглым столом приглашены п пар враждующих рыцарей (п ^ 2). Требуется рассадить их так, чтобы никакие два врага не сидели рядом. По- п казать, что это можно сделать £(-l)*C*2*(2n-k)! способами. к=0 Указание: воспользоваться правилом включения и исключения. 123. Найти число целых положительных чисел, не превосходящих 1000 и не делящихся ни на одно из чисел 3, 5 и 7. 124. Найти число целых положительных чисел, не превосходящих 1000 и не делящихся ни на одно из чисел 6, 10 и 15. 125. Показать, что если п = 30га, то число целых, не превосходящих п и не делящихся ни на одно из чисел 6,10,15, равно 22га. 126. При обследовании читательских вкусов студентов оказалось, что 60% студентов читает журнал А, 50% — журнал В, 50% — журнал С, 30% — журналы А и В, 20% — журналы В
364 Задачи и упражнения и С, 40% — журнал А и С, 10% — журнал А, В и С. Сколько процентов студентов а) не читает ни одного из журналов; б) читает в точности два журнала; в) читает не менее двух журналов? 127. На одной из кафедр университета работают тринадцать человек, причем каждый из них знает хотя бы один иностранный язык. Десять человек знают английский, семеро — немецкий, шестеро — французский. Пятеро знают английский и немецкий, четверо — английский и французский, трое — немецкий и французский. Найти: а) сколько человек знают все три языка; б) сколько знают ровно два языка; в) сколько знают только английский? 128. Имеются Зга + 1 предметов, из которых га одинаковых, а остальные различны. Доказать, что из них можно извлечь га предметов 2П способами. 129. Применяя формулу включения и исключения, определить количество целочисленных решений системы уравнений и неравенств: х\ + х2 + ... + хп = г.щ ^ х^ ^ 6^ г = 1,п, a,i,Xi,bi,r — целые числа. 130. Определить количество целочисленных решений системы х\ + х2 + х3 = 40, х\ ^ 3, х2 ^ 0, х3 ^ 2. 131. Компания, состоящая из 10 супружеских пар, разбивается на 5 групп по 4 человека для лодочной прогулки. Сколькими способами можно разбить их так, чтобы в каждой лодке оказались двое мужчин и две женщины? 132. Имеем га предметов расположенных в ряд. Сколькими способами можно выбрать из них три предмета так, чтобы не брать никаких двух соседних предметов? 133. Даны 2га различных предметов ai,ai,a2,a2,... ,an,an. Сколько существует перестановок из этих 2га предметов, в которых не стоят рядом одинаковые элементы? 134. В шахматной олимпиаде участвуют представители га стран по 4 представителя от каждой страны. Сколькими способами они могут встать в ряд так, чтобы рядом с каждым был представитель той же страны? 135. Имеется га одинаковых вещей и еще га различных вещей. Сколькими способами можно выбрать из них га вещей? Сколькими способами можно упорядочить все 2га вещей? 136. Найти число способов распределения 2га одинаковых шаров по двум неразличимым корзинам. 137. В каждой клетке шахматной доски размером га х га поставили число, указывающее количество прямоугольников, в ко-
Задачи и упражнения 365 торые входит эта клетка. Чему равна сумма всех поставленных чисел? 138. Найти число расстановок к ладей так, чтобы они не били друг друга, на доске пх п (см. случаи а,б,в) с выколотыми или добавленными клетками. В случае в) использовать п ладей. 0 Чз б) в) Производящие функции и рекуррентные соотношения 139. Найти производящую функцию последовательности {2(га-5) + 7"+2}. 140. Применить технику производящих функций для нахождения суммы чисел 13 + 23 + ... + га3. 141. Решить рекуррентные соотношения: 1) ип+2 ~ 4^71+1 + 3^п =0, щ = 8, щ = 10. 2) un+3 - 3un+2 + un+i - Зип = О, щ = 1, щ = 3, щ = 8. 3) ип+2 ± 9un = 0, щ = 1, щ = 0. 4) un+4 ± 4un = 0, ^0 = 1,^1 = 1,^2 = 1,^3 = 1. 5) ^п+з + ип+2 - ^п+1 - ^п = 0, щ = 1, щ = 2, г*2 = 3. 6) un+2 - 4un+1 + Aun = О, г*о = 1,г*1 =2. 142. Решить неоднородные рекуррентные соотношения: 1) ггп+1 =ип + п, щ = 1. 2) un+2 = -2un+i + 8ггп + 27 • 5га, гг0 = 0, щ = -9. 3) ггп+2 — 3un+i + 2ггп = га, uq = 1, ^i = 1. 4) ип+2 ~ 4un+i + Аип = 2П, щ = 1, ui = 2. 5) un+2 = ^n+i - 4^n + 2"n, u0 = 1, щ = 3/2. 6) un+2-3un+1 +2un = (-l)n, щ = l,ui =2. 143. Последовательность Фибоначчи {ггп} задается рекуррентным соотношением ггп+2 = ^n+i +^n, ^о = 1>^1 = 1- Найти ип\ показать, что ип и ип+\ — взаимно простые числа и ип делится на иШ1 где п = т- к. 144. Найти общее решение рекуррентных соотношений: О ип+2 =^n+l - -£U>n.
366 Задачи и упражнения 2) ип+2 ~ 4un+i + Зип = 0. 3) ип+2-ип+\ -2ип=0, 145. Найти решение системы рекуррентных соотношений: ап+1 = Зап + 6n, = = -6. 146. Найти число решений уравнения ж + 2у = га, где ж, у, га е € Z+ — положительные целые числа; ж, у — неизвестные. 147. Найти число решений уравнения ж + 2у + 4z = га, где х.у.п е Z+, x,y,z — неизвестные. 148. Найти определитель матрицы 1 а+/? а/? 1 а+/? а/? о \ V о 1 а+/? а/? 1 а+0/ где а,/? — произвольные числа; вне обозначенных диагоналей матрицы располагаются нули. 149. Вычислить сумму J2 ~» где сУммирование производится по всем натуральным А;, не кратным 2, 3 и 5. 150. Найти ладейный многочлен запрещенных позиций для досок а) и Ь) и для каждого из этих случаев составить многочлен попаданий. Для доски с) составить многочлен запрещенных позиций. Для досок а), Ь) и с) найти число расстановок трех ладей на запрещенных позициях. #1#1 | | | |#|#| | |#| |#| |#| |#| | | | #||||| |#| | | | | | |#| |#| | | |с| | |#| I | | |#| | | | | | |#| |#| | | | # # # # к #1 # # # # ПЛ I а) Ь) с) d) 151. Найти число способов расставить 5 ладей на доске d) так, чтобы ни одну из них не бил слон. Позиция слона указана на доске символом «с». 152. Найти число способов расставить 5 ладей на доске d) так, чтобы ни одну из них не бил конь. Позиция коня указана на доске символом «к».
Задачи и упражнения 367 153. Найти число замкнутых маршрутов длины 2га по ребрам графа для случаев а), Ь), с) и d). Длина ребра равна 1. Начало и конец пути есть вершина А. а) • ^ • Ь) В D 154. Найти число замкнутых маршрутов длины га по а) сторонам треугольника и б) ребрам тетраэдра. Длины сторон треугольника и ребра тетраэдра равны 1. Начало и конец пути есть любая из вершин рассматриваемой геометрической фигуры. 155. На листе бумаги нанесена ортогональная сетка. Сколько различных га-звенных ломаных можно провести по линиям сетки, если ломаная может проходить один и тот же отрезок несколько раз? Указание: построить дерево решений. 156. На листе бумаги нанесена ортогональная сетка. Сколько различных 2га-звенных замкнутых ломаных можно провести по линиям сетки, если ломаная может проходить один и тот же отрезок несколько раз? 157. Маршрут выполняется по оси ОХ. Исходное расположение — начало координат. Начальное направление движения выбирается в любую из сторон оси. В каждой целочисленной координате оси ОХ направление движения можно менять. Определить количество таких замкнутых маршрутов длины 2га. Теория графов и приложения 158. Покажите, что [га2/4] — максимальное число ребер, которое может иметь га-вершинный граф без треугольников. 159. Доказать по индукции, что для плоского графа Г справедливо неравенство х(Г) ^ 5. 160. Показать, что в любом графе выполняется условие 2\U\ = Y^ d{x)i гДе 1^1 — число ребер, d(x) — степени вершин. хех 161. Показать, что в любом графе число вершин с нечетными степенями четно. 162. Показать, что в любом простом графе найдутся две вершины с одинаковыми степенями.
368 Задачи и упражнения 163. Может ли полный граф иметь 7, 8, 9 или 10 ребер? 164. Показать, что связный граф с га вершинами содержит не менее чем га — 1 ребро. 165. Пусть d — минимальная из степеней графа с га верши- _ . ^ га — 1 нами. Показать, что если а ^ —-—, то граф связный. 166. Показать, что в любом графе с га вершинами и ребрами не менее С^_х +2 существует гамильтонов цикл. 167. Доказать, что всякий замкнутый маршрут нечетной длины содержит простой цикл. Верно ли аналогичное утверждение для маршрутов четной длины? 168. Показать, что для графа Г с га вершинами выполняется /?(Г)х(Г) ^ га, где /?(Г) — максимальное число независимых вершин в графе; х(Г) — хроматическое число графа. 169. Дана симметричная матрица размером га х га, в каждой строке которой располагается нечетное число ненулевых элементов. Показать, что га является четным. Диагональные элементы матрицы равны нулю. 170. Показать, что если в графе с га вершинами отсутствуют циклы нечетной длины и число ребер превышает ((га— 1)/2)2, то граф связный. 171. Пусть / — длина самой длинной простой цепи в графе Г. Показать, что х(Г) ^ I + 1. 172. Пусть d — максимальная степень вершины в графе Г. Показать, что х(Г) ^ d+ 1. 173. Сколько существует простых графов с 2га вершинами и га ребрами, компоненты связности которых являются изолированными ребрами? 174. Показать, что число различных совершенных паросоче- таний (максимальных) в полном графе с 2га вершинами равно (2п)! (2!)ппГ 175. Показать, что в полном графе с га вершинами имеется (га— 1)!/2 различных гамильтоновых циклов. 176. Показать, что полный граф с 2га + 1 вершинами можно представить в виде объединения га гамильтоновых циклов. 177. Показать, что граф с га вершинами и числом ребер больше (га— 1)(га — 2)/2 является связным.
Задачи и упражнения 369 178. Имеется га лиц, каждые двое имеют точно одного знакомого. Показать, что в графе знакомств найдется хотя бы один подграф вида треугольника и не найдется ни одного подграфа вида прямоугольника. 179. Определить хроматическое число полного га-вершинного графа. 180. Определить хроматическое число связного однородного графа степени 2 с га вершинами (однородный граф обозначает, что степени всех вершины одинаковые). 181. Определить хроматическое число графа, полученного из полного га-вершинного графа удалением: а) одного ребра; б) двух ребер; в) трех ребер, составляющих треугольник. 182. Найти хроматическое число га-вершинного линейного дерева, га > 1. 183. Найти хроматическое число га-вершинного дерева, га > 1. 184. Доказать, что в компании из 6 человек всегда найдутся либо трое знакомых друг с другом, либо трое друг с другом незнакомых. 185. Доказать, что при любой раскраске ребер полного б-графа в два цвета найдется монохроматический полный 3-граф. 186. Рассмотрим граф Мп Муна-Мозера с Зга вершинами {1,2,..., Зга}, в котором вершины разбиты на триады {1,2,3}, {4, 5,6},..., {Зга-2,3га- 1,3га}; Мп не имеет ребер внутри любой триады, но вне их каждая вершина связана с каждой из остальных. Докажите (по индукции), что Мп имеет Зп клик. 187. Показать, что в графе с га вершинами и к компонентами связности число ребер не более (га — к)(п— к + 1)/2. 188. Докажите, что если в графе все вершины имеют четные степени, то в этом графе нет мостов. Указание: допустить, что существует мост; удалить это ребро-мост и показать, что полученный граф будет противоречить условию задачи. 189. Разобьем плоскость на конечное число частей прямыми линиями. Докажите, что полученная карта имеет хроматическое число, равное двум. Указание: для доказательства воспользуйтесь индукцией по числу прямых. 190. Для каждого графа а) и б) найти остовное дерево, используя программную реализацию жадного алгоритма (алгоритм
370 Задачи и упражнения 6.7) и алгоритма ближайшего соседа (алгоритм 6.9). На каждом шаге алгоритмов отобразить состояние используемых структур данных. х\ 20 х2 х\ 7 х2 хъ 17 ха хъ 11 Ха 191. Найти кратчайшие пути от вершины х0 до всех остальных вершин ориентированного графа. 192. Пусть Ак = [а|- ], i,j=\,n, обозначает к-ю степень (к) матрицы смежности орграфа. Доказать, что элемент а\-} данной матрицы равен количеству маршрутов длины к из вершины xi в Xj. Указание: при доказательстве воспользоваться индукцией по числу к. 193. Выполнить хроматическое разложение графа. Найти все клики, фундаментальное множество циклов, листы, блоки и мосты. Определить центры, радиус и диаметр графа.
Задачи и упражнения 371 194. Сколь много ребер может иметь тг-вершинный граф, у которого степень всякой вершины не превосходит d? 195. Показать, что в дереве с нечетным диаметром любые две простые цепи наибольшей длины имеют хотя бы одно общее ребро. 196. Пусть корневое дерево с п ^ 2 висячими вершинами не имеет вершин степени 2, отличных от корня. Показать, что общее число вершин дерева не превосходит 2п— 1. 197. Доказать, что дерево обладает единственным центром в случае, когда его диаметр есть число четное, и обладает двумя центрами, когда диаметр есть нечетное число. 198. Доказать, что в любом дереве с п ^ 2 вершинами имеется не менее двух висячих вершин. 199. Вершины графа Г пронумерованы в порядке возрастания их степеней. Доказать, что если к — наибольшее число, такое, что к ^ d(xk) + 1, то х(Г) ^ fc, где d(xk) — степень вершины х^. 200. Доказать, что если для любых двух вершин х и у связного n-вершинного графа выполняется d(x) + d(y) ^ n, то граф имеет гамильтонов цикл. 201. Используя алгоритм чередующихся цепей (см. п. 7.14.3), расширить заданное начальное паросочетание в двудольном графе Г = (Vj U V2, U, Ф) до максимального паросочетания, где У\ = {^ь 52, 5з, 54, 55, 5б} и V£ = {1,2,3,4,5,6}, смежные вершины в графе: s\ — {1,2,3}, 52 — {1,2}, 53 — {1,2}, 54 — {1,2,3,4}, 55 — {1,2,4,5}, $6 — {1,2,3,5,6}, и начальное паросочетание 7Г = {(51, 1), (52, 2), (54, 3), (55, 4), (s6, 5)}. 202. Используя алгоритм чередующихся цепей (см. п. 7.14.3), расширить заданное начальное паросочетание в двудольном графе Г = (VJ U V2, U, Ф) до максимального паросочетания, где У\ = {$1,52,5з,54,55,56,57} и V2 = {1,2,3,4,5,6, 7}; смежные вершины в графе: s\ — {1,2}, 52 — {2,5,6}, 53 — {5}, 54 — {1,2,5}, 55 — {3,4,5,6}, 56 — {4,5,7}, 57 — {5,6}, и начальное паросочетание тг = {(sb 1), (s2,2), (53,5), (55,3), (s6, 7), (57,6)}. 203. Перераспределить заданный начальный поток по транспортной сети а), б) и в) так, чтобы он стал максимальным, а сеть — насыщенной (см. п. 7.10). Найти все разрезы транспортной сети и их мощности, сравнить мощность минимального разреза с найденным максимальным потоком.
372 Задачи и упражнения Х2 Хз Х\ Х\ Х2 Хз Х\ Х\ Х2 Хз Х\ Х\ 204. Решить задачи о назначениях максимального выбора 2 8 1 8 9 12 6 7 5 7 И 9 4 2 3 1 1 9 7 4 4 2 3 4 1 3 3 0 3 5 11 5 3 1 6 7 Гю 7 17 2 9 15 1 18 11 14 И 14 16 8 6 2 8 16 3 1 9 6 15 5 10 205. Решить задачи о назначениях минимального выбора
Задачи и упражнения 373 44 22 28 49 27 70 74 28 39 53 37 27 35 42 54 45 30 21 49 59 47 50 18 32 30 83 35 43 30 31 45 41 24 38 22 9 ИГ 38 28 58 30 20 71 13 34 3 60 69 80 13 53 15 49 28 37 20 ЧГ\ 60 34 25 21 4 13 9 12 6 10 9 10 9 14 16 12 ~1\ 14 13 10 206. Фирма по перевозке грузов должна забрать пять контейнеров в пунктах района края Д В, С, D, Е и доставить их в пункты а,Ь, с, d, е. Расстояния в километрах между пунктами загрузки и пунктами назначения контейнеров приведены ниже: А-а 60 В-Ь 30 С-с 100 D-d 50 Е-е 40 Фирма располагает пятью грузовиками двух типов X и Y на стоянках 5, Т, U, V,W. Три грузовика типа X находятся на автостоянках 5, U, V и два грузовика типа Y находятся на автостоянках Т, W. Стоимость пробега одного километра для грузовиков типа X и У, включая горючее, страховку и т.д., приведена ниже: X У Пустой 20 30 Груженный 40 60 Расстояния от стоянки грузовиков до места назначения приведены ниже: Стоянки S Т и V W Расстояние | А 30 30 40 20 30 В 20 10 10 20 20 С 40 30 10 40 10 D 10 20 40 20 30 Е 20 30 10 30 40 Определить распределение контейнеров по грузовикам, минимизирующее общую стоимость перевозок. 207. Ежедневно авиалиния, которая принадлежит некоторой компании, осуществляет следующие перелеты между городами А и В:
374 Задачи и упражнения полета 1 2 3 4 5 Отправление из города А 9.00 10.00 15.00 19.00 20.00 Прибытие в город В 11.00 12.00 17.00 21.00 22.00 полета И 12 13 14 15 Отправление из города В 8.00 9.00 14.00 20.00 21.00 Прибытие в город А 10.00 11.00 16.00 22.00 23.00 Компания хочет организовать полеты туда и обратно так, чтобы минимизировать время простоя при условии, что каждому самолету требуется 1 час для дозаправки. 208. Авиалиния связывает три города А, В, С. Полеты происходят семь дней в неделю согласно расписанию: Вылет Город А А А А А А В В В В С С Время 8.00 9.00 10.00 14.00 18.00 20.00 7.00 9.00 13.00 18.00 9.00 15.00 Прибытие Город В С В В В С А А А А А А Время 12.00 12.00 14.00 18.00 22.00 23.00 11.00 13.00 17.00 22.00 12.00 18.00 Как следует распределить самолеты по линиям для минимизации стоимости простоя в каждом из городов? Следует учесть, что самолет не может подняться менее чем через 1 час после приземления, так как требуется время на технический контроль и заправку. Теория групп и приложения 209. Показать, что G\ — {п \п е Z} — группа с операцией сложения чисел, где Z — множество целых чисел; С?2 = {2тг|п е Z} — группа с операцией сложения чисел;
Задачи и упражнения 375 С?з = {2П | п G Z} — группа с операцией умножения чисел; G\ — множество квадратных матриц порядка п, определитель которых не равен нулю, является группой с операцией умножения матриц; С?5 — множество ортогональных матриц порядка п является группой с операцией умножения матриц; G§ = {1,— 1} — группа с операцией умножения чисел; G? — множество рациональных чисел является группой относительно операций сложения и умножения (без нуля); G% — множество вещественных чисел является группой относительно операцией сложения и умножения (без нуля). Установить, какие из групп являются подгруппами других групп. 210. Пусть М подмножество группы G и Va,b G М выполняется ab~x G М . Показать, что М — подгруппа. 211. Пусть G\,G2 — группы и отображение / : G\ —► G2 — гомоморфизм. Показать, что ядро и образ гомоморфизма являются подгруппами. 212. Пусть Gx = {х G Д+} и G2 = {х G Л}, где Д+ - положительные вещественные числа, R — вещественные числа. Показать, что G\ — группа с операцией умножения, G2 — группа с операцией сложения. Рассмотрим отображение <р : G\ —> G2 такое, что Ух G G\ <р(х) = In (ж) G G2. Показать, что <р — изоморфизм групп. 213. Пусть G — группа и г G G — фиксированный элемент. Определим отображение <р : G —> G формулой Уд G Gcp(g) = — r-igr. Докажите, что <р — изоморфизм группы на себя. 214. Докажите, что если порядок группы G равен 2тг и Н — подгруппа порядка п группы (7, то Н — ее нормальный делитель. 215. Доказать, что если в квадратной матрице порядка п содержится нулевая подматрица размера г х s и г + s > n , то определитель матрицы равен нулю. 216. Найти порядок группы, порожденной подстановкой /12345\ ^2345 1 У 217. Разложить подстановки (з 2 4 7 5 6 11) и (7621435) в произведение независимых циклов и в произведение транспозиций, определить их четность. 218. Пусть Н с 54, где 54 — симметрическая группа. Будет ли Н подгруппой в следующих случаях: *\ и- Г/1234^ /12 3 4ч /1234ч /1234\д d' ^_tU234j42143j'U412j'U32lJ/- *\ г/_Г/'1234\ /1234\ /1234\ /12 3 4 \ \ °' М-\\\234)'\23\4)'\3\24)'\24\3)Г
376 Задачи и упражнения 219. Пусть G — циклическая группа, \G\ —т. Показать, что число образующих группы равно <р(т) — функция Эйлера. 220. Пусть G — циклическая группа. Показать, что элементы группы одинакового порядка являются образующими одной и той же подгруппы Н С G. 221. Пусть G — группа порядка \G\ — р, р — простое число. Показать, что G — циклическая группа. 222. Показать, что циклическая группа — коммутативна. 223. Пусть G — группа. Показать, что Vg € G найдется такое целое fc, что дк = е. 224. Показать, что число образующих циклической группы G = {<?, <?2,... ,дп = е) равно значению функции Эйлера <р(п) — количество чисел из множества {1,2,..., п — 1} взаимно простых с п. 225. Пусть G — конечная абелева группа порядка \G\ = = рТрТ •••Pfcfc' где РьР2» ■••»£*: — простые различные числа; множество А(р) = {х Е G\ \x\ =ра}, где а принимает произвольные целые значения. Показать, что А(р) — подгруппа. 226. Пусть (?i,(?2 — коммутативные группы порядков |C?i| = = 56, \G2\ = 64. Найти количество возможных прямых разложений каждой из групп на циклические подгруппы. 227. Определить множество левых и правых смежных классов симметрической группы 53 по подгруппе Н, где Н — циклическая подгруппа с образующим элементом (321)- Доказать что Н — нормальный делитель. 228. Найти цикловой индекс группы самосовмещений, действующей на множестве а), б), в), г). Отдельно рассмотреть случаи действия группы на плоскости и в пространстве. 229. Применить теорему Пойа для определения количества возможных раскрасок двумя и тремя красками вершин графов а), б), в), г) предыдущей задачи.
Задачи и упражнения 377 230. Используя теорему Пойа, найти количество различных ожерелий, которые можно составить из четырех бусинок пяти цветов. Рассмотреть отдельно варианты, когда группа самосовмещений (автоморфизмов) действует на плоскости и в пространстве. Алгоритмы и графы 231. Задача о стоянке. На некоторой улице с односторонним движением имеется п мест для стоянки автомобилей, расположенных в ряд и перенумерованных от 1 до го. Муж везет в автомобиле жену. Внезапно жена просыпается и требует остановиться. Он послушно останавливается на первом свободном месте. Если нет свободных мест, к которым можно подъехать, не поворачивая обратно (т.е. если жена проснулась, когда машина достигла fc-ro места для стоянки, но все «позиции» fc, k + 1,..., го заняты), то муж приносит свои извинения и едет дальше. Предположим, что это происходит с п различными машинами, причем j-я жена просыпается в момент, когда машина находится перед местом clj. Сколько имеется таких последовательностей а\,а,2,... ,ап, при которых все машины удачно припаркуются, предполагается, что первоначально улица пуста и никто со стоянки не уезжает? Составить алгоритм-программу вычисления всех возможных перестановок а\,а,2,... ,ап и соответствующих им расположения автомобилей. Исходные данные — го, п. Например, если га = п = 9 и а\,а,2,... ,ап = = (3, 1,4,1,5,9,2,6,5), то автомобили расположатся следующим образом: 2,4,1,3,5,7,8,9,6. 232. Фальшивая монета. Банк «Золотой Ящик» получил информацию, что в последней партии из п ровно одна монета фальшивая и отличается от других монет по весу. Для определения фальшивой монеты кассиру выдали только аптечные весы без гирь. Первым шагом кассир перенумеровал все монеты от 1 до п. Таким образом, каждая монета получила уникальный номер — целое число. После этого он начал взвешивать различные группы монет по составу, отмечая, какая из них больше, меньше или они равны. Ваша задача — написать алгоритм-программу, которая по результатам взвешивания, выполненным кассиром, определит фальшивую монету или определит, что этого нельзя сделать. Текстовый файл входных данных содержит следующую информацию.
378 Задачи и упражнения Первая строка файла содержит два целых числа пик, разделенных пробелами, где п — число монет в партии (п ^ 2) и к — число взвешиваний, выполненных кассиром. Следующие 2к строк файла описывают результаты взвешивания. Каждое взвешивание представляется двумя строками файла. Первая из них начинается числом pi (1 ^pi ^ п/2), которое обозначает число монет, участвовавших при взвешивании на каждой чашке весов. Следующие pi чисел на этой же строке файла являются номерами монет, которые располагались на левой чашке весов, и последние pi чисел на этой же строке файла являются номерами монет, которые располагались на правой чашке весов. Вторая строка содержит один из знаков: <, > или =. Знак < означает, что вес левой чашки меньше веса правой. Знак > означает, что вес левой чашки больше веса правой. Знак = означает, что вес левой чашки равен весу правой. Ниже приведен пример файла входных данных. Результаты определения номера фальшивой монеты надо сохранить в текстовом файле. Если по выполненным взвешиваниям нельзя выявить фальшивую монету, то в качестве результата сохранить 0. Ниже приведен пример файла результатов. Файл исходных данных 53 2 12 34 < 1 1 4 1 2 5 = Файл результатов 3 Файл исходных данных 64 3 123456 < 1 1 2 2 1345 < 24526 > Файл результатов 0 233. Грядки. Садовый участок, имеющий прямоугольную форму и разбитый на квадратные клетки со стороной 1 метр, имеет ширину п и длину га метров. На этом участке вскопаны грядки. Грядкой называется совокупность клеток, удовлетворяющих условиям: а) из любой клетки этой грядки можно попасть в любую другую клетку этой же грядки, последовательно переходя по грядке из клетки в клетку через их общую сторону;
Задачи и упражнения 379 б) никакие две грядки не пересекаются и не касаются друг друга ни по вертикальной, ни по горизонтальной сторонам клеток (касание грядок по углам клеток допускается). Составьте алгоритм-программу расчета количества грядок на садовом участке. Исходные данные задаются в текстовом файле. В первой строке располагаются два числа: тг и га, разделенные одним или несколькими пробелами. Далее следуют п строк по га символов. Символ «#» обозначает территорию грядки. Символ «.» соответствует незанятой территории. Других символов в исходном файле нет. В выходной текстовый файл вывести количество грядок на садовом участке. Пример файла исходных данных 5 10 ## ## . ###. . . . ## . . ##. . . . ## #. Выходной файл для данного примера 3 234. Спуск с горы. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 На рисунке показан числовой треугольник. Написать алгоритм- программу, которая находит максимальную сумму чисел в вершинах треугольника при движении сверху вниз по ребрам треугольника, т. е. из каждой вершины можно двигаться вниз влево или вправо. Например, для данного треугольника маршрут движения по узлам 7, 8, 1, 7, 2 дает сумму 25. Результаты расчетов сохранить в текстовом файле. Исходные данные представлены в текстовом файле, имеющем следующую структуру. Первая строка: п — число уровней в треугольнике. Вторая и следующие строки содержат описание треугольника. Пример входного файла: 5 7 3 8 8 1 0
380 Задачи и упражнения 2 7 4 4 4 5 2 6 5 Выходной файл данного примера 30 7 3 8 7 5 235. Перестановка корзин. Даны 2тг корзин с шарами А и В, расположенные в ряд, как на рисунке (п ^ 5): |А|В|В|А| | |А|В|А|В| Два места под корзины пустые. Другие п — 1 корзина содержат шары А и п — 1 корзина — шары В. Составьте алгоритм- программу, которая бы переставляла корзины с шарами А с одной стороны, а корзины с шарами В — с другой стороны. Правила перемещения корзин: разрешается переставлять на пустые места любые две смежные (пара) непустые корзины, сохраняя их первоначальный порядок. Исходные данные представлены в текстовом файле со следующей структурой. Первая строка: 2п — число корзин с пустыми местами. Вторая строка: |Л|В|В|Л| | |Л|В|Л|В| — исходное расположение корзин. Расчетные данные сохранить в текстовом файле со следующей структурой. Каждая строка — состояние корзин после каждой перестановки. 236. Комнаты музея. Составьте алгоритм-программу определения числа комнат в музее и площадь каждой комнаты в клетках. План музея показан ниже на рисунке. И 6 И 6 3 10 6 I I I I I I I I 7 9 6 13 5 7 5 III 1 lo 12 7 13 13 5 LZLZLJ^U^U^UJ 13 И 10 8 10 14 13 I I I I I I I I Цифровая карта Карта перекрытий Площадь музея состоит из клеток: п рядов и т столбцов. В каждой клетке такой матрицы (цифровая карта) проставляется число, в котором кодируется наличие стен у данной клетки. Значение числа в каждой клетке является суммой чисел: 1 (клетка имеет стену на западе), 2 (клетка имеет стену на севере), 4 (клетка имеет стену на востоке), 8 (клетка имеет стену на юге). Например, если в клетке стоит число 11 (11=8+2+1), то клетка имеет стену с южной стороны, с северной и с западной. Исходные данные представляются в текстовом файле со следующей структурой. Первая строка: п,т — размерность сетки. Вторая строка, третья и следующие строки содержат описание матрицы цифровой карты по строкам. Расчетные данные сохранить в текстовом файле со следующей структурой. Число
Задачи и упражнения 381 в первой строке — количество комнат в музее. Вторая строка — площадь каждой комнаты. Пример входного файла: 4 7 И 6 И 6 3 10 6 7 9 6 13 5 7 5 1 10 12 7 13 13 5 13 И 10 8 10 14 13 Выходной файл данного примера: 5 9 6 3 2 8 237. Переворот бокалов. На столе стоят в ряд N бокалов, пронумерованных слева направо от 1 до N. Первоначально все бокалы стоят дном вниз. Над бокалами можно выполнять операцию «переворот». За один переворот ровно М (1 ^ М ^ N) любых выбранных бокалов переворачиваются так, что те бокалы, которые стояли дном вниз, оказываются перевернутыми вверх дном, а остальные из выбранных М бокалов ставятся вниз дном. Составить алгоритм-программу, которая за минимальное количество шагов позволит перевернуть все бокалы вверх дном или определить, что это сделать невозможно. Исходные данные N, M задаются в текстовом файле. Результаты последовательных переворотов сохранить в текстовом файле. 238. Течение воды. Все улицы в некотором городе имеют направле- м ние с севера на юг (N улиц) или с запада на восток (М улиц), как на рисунке. Для каждого перекрестка улиц задается высота его над уровнем моря: H[i,j], г = 1,М, j = l,iV, - матрица 1 высот над уровнем моря. Требуется написать алгоритм-программу, который находит путь от перекрестка А до перекрестка В или в обратном направлении. Путь должен проходить по таким улицам, которые не ведут к возвышенностям (уровень при движении не должен возрастать). Исходные данные представлены в текстовом файле со следующей структурой. Первая строка: М, N — размерность матрицы и улиц. Вторая строка: А = (iayja)y В = (ibyjb) — координаты двух перекрестков. Третья и следующие строки определяют значения элементов матрицы высот H[i,j], г = 1,М, j = l,N. Результаты расчетов сохранить в выходном текстовом файле со А В
382 Задачи и упражнения следующей структурой. Каждая строка — координаты и высоты перекрестков, через которые пролегает маршрут. 239. Бомба. Требуется составить алгоритм-программу для определения наименьшей окружности (центр и минимальный радиус), охватывающей не менее к из п заданных точек на плоскости. Исходные точки на плоскости (х\, у\), (ж2, J/2)» • • • > (жп, Уп) задаются в текстовом файле. Результаты расчетов (координаты центра окружности, радиус ее и точки (жг>2/г)> попадающие в окружность) сохранить в текстовом файле. Решите эту же задачу, но искомая окружность должна включать все заданные тОЧКи (Xi,yi). 240. Ханойская башня. Задача о ханойской башне проиллюстрирована на следующем рисунке: В Имеются три колышка Л, В, С. На колышек А нанизано п дисков радиуса 1,2,...,тг (каждый с отверстием в середине) таким образом, что диск радиуса г является г-м сверху. Задача состоит в том, чтобы переместить все диски на колышек С таким образом, чтобы диск радиуса г был опять г-м сверху. За один раз разрешается перемещать только один диск с любого колышка на любой другой (можно пользоваться колышком В). При этом должно выполняться следующее условие: на каждом колышке ни в какой момент никакой диск не может находиться выше диска с меньшим номером. Составить рекурсивную алгоритм-программу требуемых перемещений дисков. Результаты расчетов: состояние каждого колышка на каждом шаге перекладывания дисков сохранять в текстовом файле. 241. Числа. Дана последовательность п различных между собой целых чисел a\,a<i ,an. Трансформацией называется следующая последовательность действий: некоторые из чисел увеличиваются на 1, если в последовательности оказываются два одинаковых числа, то одно из них исключается из последовательности. Выполним данную трансформацию к раз, с целью до-
Задачи и упражнения 383 стигнуть минимального количества чисел в последовательности а\уа,2 ,ап. Составить алгоритм-программу, которая вычисляет р — количество чисел, оставшихся в последовательности. Исходные данные тг, к и последовательность a\,a<i , ап задаются в текстовом файле. Найденное число р сохранить в текстовом файле. Пример входного файла: 5 2 7 115 8 3 Выходной файл данного примера: 3 242. Знакомства. Имеется п человек, где 1 ^ п ^ 100. Каждому из них приписано некоторое число, которое определяет количество человек, с которыми ему предписано познакомиться. При этом знакомство взаимно, т. е. если человек с номером i знакомится с человеком с номером j, то и человек с номером j знакомится с человеком с номером г. Составить алгоритм-программу, задача которой состоит в следующем. Необходимо организовать знакомства, чтобы после их реализации участники могли быть разбиты на 2 команды таким образом, что в первой команде находятся участники, знакомые друг с другом (каждый знает каждого ), а во второй — только незнакомые (никто никого не знает). При этом численность первой команды должна быть максимальна. В случае невозможности реализации знакомств в выходной файл записать ответ «NO». Формат файла входных данных. В первой строке входного файла находится число п. В каждой г-й из следующих п строк находится число — количество человек, с которыми необходимо перезнакомиться человеку с номером г. Формат файла выходных данных. В первой строке выходного файла находится численность первой команды или «NO». В случае, если реализация знакомств возможна, то в каждой из следующих строк должны находится 2 числа, разделенные пробелом — номера людей, которым необходимо познакомиться. Приведем примеры расчетов для конкретных исходных данных. Пример входного файла 4 3 2 2 1 Выходной файл данного примера 3 1 2 1 3 1 4 2 3
384 Задачи и упражнения 243. Обмен. Каждому из п жителей одного городка шериф присвоил личный номер — целое число от 1 до п и сообщил его, а затем поручил секретарше разослать по почте жетоны с личными номерами. Но она разложила их по конвертам случайным образом. Для восстановления порядка, когда у жителя находится жетон с его номером, необходимо организовать обмен жетонами. Каждый житель может обменять в один день жетон, который находится у него, на другой только с одним другим жителем. В один день обмениваться жетонами могут любое количество пар жителей. Составить алгоритм-программу поиска минимального количества дней га, необходимых для того, чтобы все жители получили свои жетоны. Формат файла входных данных. В первой строке содержит целое число тг, 1 ^ п ^ 1000, равное количеству жителей городка. Следующие п строк содержат по одному числу — номеру жетона, т.е. в (г+1)-й строке, соответствующей г-у жителю, находится номер того жетона, который он получил по почте. Выходной файл данных содержит одну строку с найденным числом дней га. 244. Кокосы. В газетах 9 октября 1926 г. сообщалось о кораблекрушении судна в Индийском океане. Пять человек и одна обезьянка спаслись на необитаемом острове. В первый день пребывания на острове они собирали кокосы. Среди ночи один из них проснулся и решил разделить кокосы. Он разделил кокосы на пять равных частей. Однако остался один кокос, который он отдал обезьянке. Свою часть он взял с собой и пошел досыпать. Далее второй, третий, четвертый и пятый поступили аналогичным образом и каждый раз оставался один кокос, который они с удовольствием отдавали обезьянке. Напрашивается вопрос: сколько было кокосов? Однако мы решим несколько другую задачу (обратную). Составить алгоритм-программу поиска максимально возможного числа людей и одной обезьянки, которые могут проделать рассмотренную ночную операцию, если изначально известно количество собранных кокосов? Исходные данные задаются в текстовом файле, который содержит последовательность целых чисел, каждое из которых является числом собранных кокосов. Последовательность чисел-кокосов заканчивается числом —1 — признак конца данных. Результаты расчетов числа людей и одной обезьянки для каждого случая исходных данных сохранить в выходном текстовом файле. Приведем примеры расчетов для конкретных исходных данных.
Задачи и упражнения 385 Пример входного 25 кокосов 20 кокосов 3121 кокосов -1 файла Выходной файл данного примера 3 человека и 1 обезьянка. Нет решений. 5 человека и 1 обезьянка. 245. Быстрый ФИЛ. Фил работает в последнюю смену. После работы ровно в 2:00 утра Фил уезжает домой с автомобильной стоянки. Его маршрут пролегает по дороге, на которой установлены один или несколько светофоров. Фил всегда удивлялся, что, выбирая определенную скорость движения по маршруту и не изменяя ее, он мог иногда доехать к дому без задержки на светофорах, т. е. все светофоры он проезжал на зеленый свет. Скорость движения в городской черте не должна превосходить 60 миль/ч. Однако Фил не любил и тихо ездить. Минимальная скорость его движения 30 миль/ч. Составьте алгоритм-программу, которая находит все целочисленные скорости (в милях/ч), с которыми Фил может двигаться домой без остановки на светофорах, начало движения с автомобильной стоянки ровно в 2:00 утра. В этот момент времени все светофоры сбрасываются в зеленый цвет. Исходные данные задаются в текстовом файле, в котором приводится набор данных для описания режимов работы светофоров. Последнее число в файле (—1), является признаком конца данных в файле. Первое число п каждого набора определяет количество светофоров на маршруте. Далее следуют п наборов чисел: Length Green Yellow Red (LGYR) для каждого светофора, где L — положительное действительное число, указывающее место расположения светофора от начала маршрута Фила; GYR — интервал продолжительности времени в секундах непрерывного цвета светофора: зеленого, желтого и красного. Результаты расчетов допустимых целочисленных скоростей движения Фила сохранить в выходном текстовом файле: Пример входного файла 1 5.5 40 8 25 3 10.7 10 2 75 12.5 12 5 57 17.93 15 4 67 -1 Выходной файл данного примера 30, 32, 33, 36, 37, 38, 41, 42, 43, 44, 45, 48,49, 50, 51, 52, 53, 54, 59, 60 0 — признак отсутствия такой скорости 13 Иванов Б.Н.
386 Задачи и упражнения 246. Парламент. Парламент состоит из N делегатов. Делегаты должны разделиться на группы (фракции), количество депутатов в каждой группе отличается от количества депутатов в любой другой группе. Каждый день каждая фракция посылает одного представителя в президиум. Парламент начинает работу в том случае, когда состав президиума отличен от составов президиумов предыдущих дней. Составьте алгоритм-программу, которая бы определяла оптимальное число фракций и количество делегатов в каждой из них так, чтобы парламент мог работать как можно дольше. Число делегатов задается в исходном текстовом файле. Рассчитанные значения количества делегатов в каждой фракции, сортированные по возрастанию, сохранить в выходном текстовом файле. Приведем примеры оптимальных расчетов для N = 7 и N = 31. Пример входного файла 7 31 Выходной файл данного примера 3 4 2 3 5 6 7 8 247. Кот и Лиса. Дан ориентированный граф Г(Х, U, Ф), вершины которого являются позициями в следующей игре. Участвуют два игрока — Кот и Лиса. Они двигают фишку из позиции в позицию по дугам графа. Множество позиций X разделено на два подмножества X = К U L. В позициях L ход делает Лиса, а в позициях К — Кот. Если игра находится в позиции х е X, владелец этой позиции выбирает произвольную выходящую дугу (ж, у) £ U и двигает фишку из х в у. Игра начинается в некоторой позиции. Лиса выигрывает, если фишка оказалась в фиксированной вершине z Е X. Если за любое количество ходов фишка не попадает в эту позицию z Е X, то выигрывает Кот. Составить алгоритм-программу, которая определяет все выигрышные стартовые позиции для Лисы при оптимальной стратегии обеих сторон. Считаем, что X = {1,2,..., гг}, 1 ^ п ^ 1000. Исходные данные представлены в текстовом файле, имеющем следующую структуру. Первая строка: nymyzy где п — число вершин, т — число дуг, z — заключительная позиция. Со второй строки записаны: Ь\уЬ2,...,Ьп и х\у\,Х2У2,---,итут, где bi = 1, если вершина г принадлежит Лисе; 6; = 0, если вершина г принадлежит Коту; x^yi — список дуг графа, Х{ — начальная вершина, у\ — конечная вершина соответствующей дуги. Все параметры — целые числа, разделенные пробелами.
Задачи и упражнения 387 Результат вычислений представить в текстовом файле, в котором записать целых чисел ci,C2,... ,сп, где с* = 1, если позиция г — выигрышная для Лисы; иначе с% — 0. им 7 0 1 2 3 4 5 6 ер входного файла 12 7 1 0 2 1 4 2 1 3 3 4 6 7 0 4 5 6 6 0 1 0 1 3 3 7 Выходной файл данного примера: 0 10 0 111 248. Ящик с молоком. Ящик имеет п х п ячеек для бутылок с молоком. Мистер Смит для каждого столбца и каждой строки заготовил отдельный листок бумаги, где записал наличие или отсутствие в ячейке бутылки молока: 1 — ячейка занята молоком, 0 — ячейка не занята молоком, но забыл проставить на каждом листе, чему он соответствует: строке или столбцу и все это вложил в коробку. В пути ящик попал под дождь, и часть записей на листах пропали. Испорченные цифры 1 и 0 были заменены цифрой 2. Составить алгоритм-программу, которая по таким записям восстанавливает исходное расположение бутылок с молоком, т.е. определить, какие записи относятся к строкам, а какие — к столбцам. Исходные испорченные записи по строкам и столбцам задаются в текстовом файле. Результаты сохранить в текстовом файле. Пример. Исходные данные 1) 0 2) 2 3) 2 4) 1 5) 1 6) 1 7) 0 8) 2 9) 1 10) 1 1 2 1 1 1 0 2 1 2 1 2 1 0 0 2 2 1 0 0 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 1 1 1 2 1 0 Восстановленные данные 6 9 3 2 8 4 1 10 7 5 10 10 1 110 0 1 110 0 1 11110 0 0 0 11 249. Длина объединения. Текстовый файл содержит целые числа: а\, b\, a<i, f>2> • • • > ап, Ьп. Эта последовательность определяет 13*
388 Задачи и упражнения на оси ОХ п отрезков. Составить алгоритм-программу, которая определяет длину объединения всех отрезков. Результаты расчетов сохранить в текстовом файле. Исходные данные представлены в текстовом файле со следующей структурой. Первая строка: п — количество отрезков. Вторая строка, третья строка и т.д: a,i,bi — параметры соответствующего отрезка. Результаты расчетов сохранить в текстовом файле. Пример входного файла: 3 О 2 -1 1 О 1 Выходной файл данного примера: 3 250. Площадь объединения. Условие данной задачи — это условие предыдущей задачи, где вместо отрезков на прямой рассматриваются прямоугольники на плоскости, стороны которых параллельны осям координат. Составить алгоритм-программу определения площади объединения таких прямоугольников. 251. Прямоугольные области. Условие данной задачи — это условие предыдущей задачи. Однако требуется составить алгоритм-программу определения количества областей, на которые границы прямоугольников разбивают плоскость. 252. Несвязные области. На плоскость XOY произвольным образом размещают N произвольных прямоугольников со сторонами, параллельными осям координат. Взаимное расположение прямоугольников допускает их пересечение. Требуется составить алгоритм-программу определения количества несвязных областей, на которые прямоугольники разбивают плоскость XOY. Входные и выходные данные. В первой строке входного файла содержится число N. В каждой из следующих N строках располагаются координаты одного прямоугольника: (а;, 6;) — координаты левого верхнего угла; (с^,^) — координаты правого нижнего угла. Выходной файл должен содержать единственное число, равное количеству несвязных областей. Пример входного файла: 6 13 7 1 3 5 5 2 2 7 9 4 6 5 14 2 8 8 13 6 12 7 15 4
Задачи и упражнения 389 Выходной файл данного примера: 3 253. Площадь участка. Требуется составить алгоритм-программу определения площади участка, ограниченного замкнутой ломаной, составленной из отрезков единичной длины, параллельных осям координат. Исходные данные — координаты концов отрезков — задаются в текстовом файле. Найденную площадь сохранить в файле результатов. Отметим, что отрезки, составляющие границу участка, во входном файле могут следовать в произвольном порядке. Пример входного файла: 24 — количество отрезков 00 10 1020 2030 112 1 2 122 1222 22 32 3242 03 13 1323 2333 0001 0102 0203 11 12 30 3 1 40 4 1 4 1 42 5051 5152 5253 Выходной файл данного примера: 11 — площадь участка 254. Совмещение ломаных. Две ломаные построены по ребрам сеточной области с целочисленными координатами. Требуется составить алгоритм-программу проверки совпадения двух ломаных, составленных из отрезков, с точностью до параллельного переноса и поворота на 90°, 180°, 270°. Исходные данные — число отрезков ломаных и значения координат их концов — определяются в текстовом файле. Выходной файл результатов должен содержать признак 1, если ломаные совпадают, и 0 — в противном случае. Пример входного файла: 4 — количество отрезков первой ломаной 00 10 3020 1020 3031 2 — количество отрезков второй ломаной 1114 04 14 Выходной файл данного примера: 1 — ломаные совпадают 255. Деление на равные половины. Текстовый файл содержит последовательность целых чисел — веса элементов: а\, а2,..., ап. Составить алгоритм-программу деления этих предметов на две группы так, чтобы общие веса двух групп были мак- 40 50 3343 43 53
390 Задачи и упражнения симально близкими друг к другу. Результаты расчетов сохранить в текстовом файле. Исходные данные представлены в текстовом файле со следующей структурой. Первая строка: п — количество чисел. Следующие строки содержат веса элементов щ. Пример входного файла: 5 6 3 14 5 Выходной файл данного примера: 6 4 — первая группа, 3 1 5 — вторая группа 1 256. Простой круг. Натуральные числа 6 г^^^-ш 4 1>2,..., п (п — четное число) располагают по кругу I T как на диаграмме. Первое число по кругу всегда 5 1. X 3 должно быть 1. Все остальные числа располагаются >^ таким образом, чтобы сумма двух соседних чисел по кругу была простым числом, начиная с 1. Составить алгоритм-программу определения всех указанных расстановок. Исходное число задается в текстовом файле. Результаты расчетов сохранить в текстовом файле. Пример входного файла 6 8 Выходной файл данного примера 14 3 2 5 6 1 12 3 8 5 6 7 4 1 12 5 8 3 4 7 6 1 257. Почтальон. Дана последовательность из N улиц (по названиям). Каждая улица соединяет два перекрестка. Первая и последняя буквы названия улицы определяют два перекрестка для этой улицы. Длина названия улицы определяет стоимость проезда по ней. Все названия улиц состоят из строчных символов алфавита. Например, название улицы «computer» показывает, что улица находится между перекрестками «с» и «г», а длина ее 8. Нет улиц, которые имеют одинаковые первые и последние символы. Есть не более одной улицы, напрямую соединяющей два любых перекрестка. Всегда есть путь между любыми двумя перекрестками. Число улиц с данным перекрестком называется степенью этого перекрестка. Есть не более двух перекрестков нечетной степени. Все остальные перекрестки — четной степени. Составить алгоритм-программу определения минимальной стоимости проезда по всем улицам, по крайней мере, один раз. Путешествие должно начаться и закончиться на одном и том же перекрестке. Стоимость проезда по улице равна ее длине.
Задачи и упражнения 391 Пример входного файла: 3 one two three Выходной файл данного примера: 11 258. Пересечение с отрезками. Имеются N отрезков, концы которых задаются двумя парами точек на плоскости: (xli,yli) и (x2i,y2i), г — 1,2,...,N. Требуется составить алгоритм-программу определения такой прямой линии, которая пересекает как можно большее количество заданных отрезков. Исходные данные определяются в текстовом файле, имеющем следующую структуру. Первая строка: N — количество отрезков. Вторая и следующие строки: xli,yli и х2{,у2{ — пары точек на плоскости (концы отрезков). Результаты расчетов сохранить в выходном текстовом файле, имеющем следующую структуру данных. Строки файла — номера отрезков в возрастающем порядке, которые пересекает найденная прямая. Если найденная прямая линия проходит через концы отрезков, то это учитывать как пересечение. 259. Простые суммы. Числа от 1 до гг, 1 < п ^ 5000. Требуется составить алгоритм-программу разбиения данных чисел на минимальное количество групп, в каждой из которых сумма является простым числом. Например, при п = 8 такими группами могут быть: {1,4,5,6,7}, {2,3,8}. Примечание: число 1 не считается простым. Файл исходных данных содержит число п. Выходной файл должен содержать п чисел (номера групп), которые показывают в какую группу входит соответствующее по порядку число. Для нумерации групп должны использоваться идущие подряд натуральные числа, начиная с единицы. Пример входного файла: 8 Выходной файл данного примера: 12 2 11112 260. Движение плота. Квадратное озеро, покрытое многочисленными островами, задается матрицей размером N х N. Каждый элемент матрицы — либо символ '#' — решетка, обозначающий остров, либо символ ' — ' — минус, обозначающий участок воды. В верхнем левом углу озера находится квадратный плот размером М х М клеток. За один шаг плот может перемещаться на одну клетку по горизонтали или вертикали.
392 Задачи и упражнения Составить алгоритм-программу для определения минимального числа шагов, за которое плот может достигнуть правого нижнего угла озера. Входной файл исходных данных содержит числа N и М. В следующих N строках располагается матрица, представляющая озеро. Выходной файл должен содержать единственное число — количество необходимых шагов. Если правого нижнего угла достичь невозможно, то выходной файл должен содержать число —1 (минус один). Пример входного файла: 8 2 --# # - # # - - # - - -Ц- 4к W W Выходной файл данного примера: 18 261. Пират в подземелье. В поисках драгоценных камней пират проваливается в подземелье. План подземелья — матрица N х М комнат с драгоценными камнями. Камни из одной комнаты имеют одинаковую стоимость. Пирату в каждой комнате разрешается взять с собой лишь один камень и следовать в любую другую соседнюю с ним комнату. Каждую из комнат пират может посещать неоднократно. Требуется составить алгоритм-программу определения маршрута посещения пиратом К комнат лабиринта таким образом, чтобы он набрал камней на максимально возможную сумму. Входные и выходные данные. В первой строке входного файла содержатся числа N, М и К. В следующих N строках располагается матрица N х М лабиринта. Каждый элемент матрицы представляется стоимостью камня соответствующей комнаты. Маршрут начинается с левой верхней угловой комнаты лабиринта. Выходной файл должен содержать единственное число, равное общей стоимости взятых с собой камней. Пример входного файла: 3 4 7 1111 112 1 112 3 Выходной файл данного примера: 12
Задачи и упражнения 393 2 4 5 1 6 з] 7 262. Оставить условие задачи №261 и предписать пирату, чтобы он за К шагов еще и вернулся в начальную комнату лабиринта. 263. Задача Д. Андре. Составить алгоритм- программу поиска всех способов заполнения числами i[, 2,..., п из п ячеек матрицы так, чтобы во всех строках и столбцах они располагались в возрастающем порядке (слева-направо и сверху-вниз). На рисунке показан пример заполнения этих ячеек. Исходное число п задается в текстовом файле. Результаты заполнения сохранить в файле результатов. 264. Сумма чисел. Дано натуральное число га. Вставить между некоторыми цифрами: 1,2, ...,п, записанными именно в таком порядке, знаки +, — так, чтобы значением получившегося выражения было число га. Например, если га = 122, то подойдет следующая расстановка знаков: 12 + 34 — 5 — 6 + 78 + 9. Требуется составить алгоритм-программу определения всех расстановок знаков +, —, отвечающих условию задачи. Исходное число га задается во входном текстовом файле. Выходной текстовый файл должен содержать найденные расстановки знаков. Если требуемая расстановка знаков невозможна, то выходной файл должен содержать число -1. 265. Обслуживание авиалиний. Имеется некоторый город М, который связан маршрутами с городами А\,А2,... ,Ап. Пусть, согласно расписанию, маршрут MAiM обслуживается в интервале времени [aj,6j]. Другими словами, ai — это тот момент, начиная с которого самолет связан с маршрутом МА^М, а bi — тот момент, когда эта связь прекращается. Таким образом, задано п временных интервалов [сц, bj\, % = 1,2,... , п. Требуется составить алгоритм-программу определения минимального числа самолетов, достаточного для обслуживания всех рейсов. Пример входного файла: 5 — количество городов 1 3 — интервалы времени 7 12 6 8 2 4 9 10 Выходной файл данного примера: 2 — самолета на все рейсы 266. Симпатичный прием. Генерал желает устроить юбилей с максимальным числом гостей из своих знакомых. Стремясь
394 Задачи и упражнения сделать юбилейный вечер приятным, он должен организовать все так, чтобы на этом вечере присутствовали люди, симпатизирующие друг другу. Оказалось, что у генерала п знакомых. Каждый из них получил соответствующий номер от 1 до п. Исходные данные задачи — это список пар симпатизирующих гостей генерала. Составить алгоритм-программу определения по исходным данным максимально возможное число гостей на юбилейном вечере и сохранить его в выходном файле результатов. Пример входного файла: 5 — число знакомых у генерала 6 — число симпатизирующих пар 1 2 1 3 2 4 2 5 3 4 3 5 Выходной файл данного примера: 2 — приглашенных на вечере 267. Таблица инверсий. Составить алгоритм-программу определения таблицы инверсий (d\, &<i,..., dn) перестановки (ai,a2,... ,Оп), где dj — число элементов, больших j и расположенных левее j (см. п.2ЛЗ). Исходные данные — число п и произвольная перестановка чисел 1,2, ...,гг — определяются в текстовом файле. Выходной файл результатов должен содержать найденную таблицу инверсий. Пример входного файла: 5 — число п 5 3 4 2 1 — перестановка Выходной файл данного примера: 4 3 1 1 0 — таблица инверсий
Ответы 1. 1). х2=1011000102, У8=5428, *i6=354i6. la). х2=0.0012..., ys = 0.1038..., ^16 = 0.21816... 2. 1). 237.7510. 1а). 1362.412... 4. 1). /сднф =xyzVxyz\/xyz\/xyzt /скнф = (xV yV z)(xVyV z) (iVt/V z)(x V yVz), /ж = я Фху фхз. б. 1). 2; ViJV ху. 2). у V я. 3). xzV x~zV ху или "xzV xJV yz. 4). 2 V ссу V х"у. 5). yVx"zV xz. 6). х V у V z. 7). ху V ~x~z V yz 6. 1). ^z У x~w У ~y~zw У yzw. 2).ywVxyJVxyz.3).xy'z\/x~zw Vxyz Vxzw Vyw.ty.ywVyw. b). x yw V ~y~z w Vxzw VxzwVxylz.6).lx;zwVxyzVy~zw\/x~zw\/ VxyJ V xyw. 7).~zwVxw V xy'zVxzy. 8). W. 9). уз V xywVxywV Vx~zw. 10). ~zw\/y~z\/xyw\/ xyw. 7. Указание: см. п. 1.4.2 и п. 1.4.3. 8. Указание: см. п. 1.4.2 и п. 1.4.3. 9. Указание: смотрите п. 1.4.1. 10. 1). Монотонная. 11. 1). Несамодвойственная. 12. 1). Лучше доказать от противного. Предположим, что /(х,х) ф 1. Значит, /(х,х) = 0 для всех х £ {0,1}. Подставим в данное выражение /(/(х, f{yy z))y /(/(х, у)у /(х, г))) = 1 вместо у и z переменную х. Получим /(/(х,/(х,х)),/(/(х,х),/(х,х))) = 1. Так как по предположению /(х,х) = 0, то /(/(х,0),/(0,0)) = 1 и далее /(/(х,0),0) = 1. Это верно для все х. Положив х = 0, получим /(/(0,0),0) = 1 или /(0,0) = 1. Это противоречит предположению, что /(х,х) = 0 для все х. 13. Всего наборов т = 2П. Тогда искомое число равно С^ + С^ + ... + С^"1. 14. 1). Пусть имеем /сднф(я1,ж2,...,жп) и дслнф(уиУ2,---,Ут)- Так как переменные xi,x2,.. .,хп и yi,y2,...,ym — независимые, то после перемножения /сднф А <?сднф каждое слагаемое будет являться конституентой 1, а значит, /сднф А <?сднф тоже является СДНФ, слагаемых в которой г • s. 2). Определим число слагаемых ^функции /(xi,x2,...,xn)e5(yi,y2,...,ym). Представим ее в СДНФ: /сднф л 0сднф V /сднф А <?Сднф- Число слагаемых в СДНФ для /сднф равно 2П - г. Тогда искомое число слагаемых равно (2П - г) х х s + г ■ (2m - s). 16. Указание: составьте (условную) таблицу истинности для каждой из функций. 16. Указание: см. п. 1.5. 17. Указание: см. п. 1.6.7. 21. Множество D всех сочетаний С„ разобьем на два непересекающихся подмножества D = D\ U D2, где Di nD2. Множество Di включает все сочетания с произвольным фиксированным элементом, \D\ \ = С£~}. Множество D2 включает все сочетания без выделенного фиксированного элемента, |D2| = C^_v Следовательно, С% = С^~[ + С*_г 22. Используйте бином Ньютона
396 Ответы (1 + х)п = Y%=o C*xk. 23. Применить индукцию по п. 27. 2та. 28. Воспользуйтесь тождеством (а + Ь)п = Y%=o СкакЬп~к 29. Воспользуйтесь тождеством (1 + х)п(\ + х)т = (1 +х)п+т. 30. Воспользуйтесь тождеством (1 + (1 + \))п = 3™. 31-33. Воспользуйтесь тождеством (1 +х)п = Y^k=o^nxk' 34. Воспользуйтесь полиномиальным разложением формулы (1 + 1 + ... + 1)п = кп. 36. 21. 36. С*_2. 37. 2n2 x 2п2. 38. 2п2 х (2п2 - 2п). 39. 2пт. 40. А^,С| ■ 3!. 41. З6. 42. 63. 43. С2 - двусторонних словарей, А^ — односторонних словарей, п — словарей при переводе по циклу. 44. ААт. 46. Р(5,7,3) = ^^ = Cf5Cf0Cf. 46. С™+т. 47. С£. 48. А{т + А^ + А^ — учитывается порядок имен. 49. Р(2,2,2,1,1). 50. C^C^kl 61. 2n!n! и 2n!n!/2n = гг! (п - 1)!. 62. С^2С^54!. 63. п!/2п, где деление на число п означает совпадение соседей при циклическом перемещении исходной перестановки; в цифре 2 учитываются одни и те же соседи при отраженном (зеркальном) расположении исходной перестановки. 54. Cf0(Cf0 - 1)(С?0 - 2) = А^. 55. С2пС?пС%. 66. С£((С|С42С|)/3!). 57. С£((С62С?С|)/3!) = 15С£.° 58. ((2n)!/(2!)n)/n! - неупорядоченное разбиение множества. 59. Смотрите решение задач 7 и 8. 60. 9! - C.J7I3! + С|5!3!3! - С333!3!3!3!. 61. С\С*г, С$ - С\°, ^52 - ^48 - ^4^48' ^4^48' **2. (^Ч^зХ^Чз) + (^чО^Чз) )(^1з) ' бз. з". 64. з17. 65. ш". ее. с^_,. 67. с-:^,, = с_-11, s-iTTl—2 s-iTTl—к—1 /»о /-чХТЬ—1 s-iTTl—1 /-чТП—1 °(тг-/с)+т-2> (n-£ e*)+m-fc-l' DO# °гг1+т-1°гг2+т-1 °n3+m-l • 69. С|(С2)6. 70. С^_г 71. 54,^. 72. С356. 73. CgCflf ^36 ~ ^31 ~ ^5^31 ~ ^5^31- 7^ф Р(3,2,3,1). 76. С10С$С3. 77. (1 +аО(1 + а2) ■ ...-(! + а„), 1-рГ1 1-К" i-pS 1 —pi 1 — Р2 1 -р« 79. п- [п/р] — столько чисел среди 1,2,...,п, не кратных р. Всего произведений Ск, тогда произведений, кратных ру равно С* - Ск,, у 80. п! - m!(n - m + 1)! (объединить m элементов в один элемент). 2/2 _ и 81. 2(С£)2 = —Цг - способов поставить две ладьи так, чтобы они не угрожали друг другу. (Сп)2(п - 1) = п2(п - 1) способов поставить две ладьи так, чтобы они угрожали друг другу. Для ответа на вопрос задачи осталось сравнить указанные числа. 83. С\0 + С\0 = 90. 84. Подсчитайте общее возможное число различных пар сотрудников и различных пар сотрудников на всех заседаниях комиссии и сравните их. 86. Сказано, что никакая из 30 комиссий (в каждой комиссии 5 человек) не может иметь двух одинаковых сотрудников.
Ответы 397 Подсчитайте число различных пар сотрудников во всех комиссиях и общее возможное число различных пар сотрудников в учреждении и сравните их. 86. 18. 88. 31. 91. С*^_р C*l{. 92. 205223000, см. п. 2.13. 93. 27354186, см. п. 2.13. 96. Указание: воспользуйтесь тем, что перестановка двух соседних меток N и М не оказывает влияния на произведение 2n~m. 96. ЗС^п2п. 97. (кп)\/((к\)пп\) 98. (30)!/((10!)33!), (30)!/((3!)1010!). 99. (С%С%/21)(С13$С{$) 100. (Cf0CfCgCfCf)/5! = 10!/((2!)25!). 101. 9!/((1!)1(2!)41!4!) 102. 9!/((3!)33!). 103. Р(2,2,2,2,2,2,1,1,1,1). 104. С*5С*0 106. 48 - C\3S + С|28 - С|I8 — воспользоваться формулой включений и исключений для свойств: Pi — пустой г-й этаж, г = 1,4 107. ,п! 108. (9° +91) + 92 + 93 + ... + 9та = 1-9"+ n\\n<i\ •... • nfc!' * '" 1—9 109. С^_г 110. C^-^j - 1, где -1 обозначает число 0. 111. С*+1 112. Ск+к. 113. Схема посева сортов пшеницы должна соответ ствовать латинскому квадрату т х т. 114. Cf~+e_{. 116. кт не. EtoC-i)^*-!)™- 117- £lt(-04r+Ar+i(*-r-*)m = = сгЕ^оЧ-О^-Д* - г - i)m. us. Er=o(-i)fcc^m—* = = ^mEr=o(-l)fc4- "в- ELo(-l)*<&(m- *)! = «»»Е!ы>^# * с ш!е-'. 120. EL"or(-Ofc^+fcC^(m - г - ft)! = 2f Е^о" ^ = ~ ^е-1. 122. Введем обозначения. Ffc — свойство, что к-я г! пара враждующих рыцарей сидит рядом, к = 1,2,... ,гг. £7(0) — размещение рыцарей, которые не обладают ни одним из указанных свойств, т.е. требуемые размещения по условию задачи. Е(0) = W(0) - W(l) + W(2) - ... + (- iyw(n), где W(k) - количество размещений рыцарей, когда к и более враждующих пар сидят вместе. Объединим каждую из к указанных пар в один объект. Тогда имеем 2п- к объектов, которые можно расположить (2п - А;)! способами. В каждой из к заданных пар врагов можно поменять местами 2к способами. Выбор к враждующих пар можно сделать Ск способами. п Следовательно, искомое число равно Е(0) = ^{-\)кС%2к{2п - к)\. к=о 123. 458. 124. 734. 126. 20%, 60%, 70%. 127. 2, 6, 3. 129-130. Ре- шение подобного уравнения рассмотрено в п. 2.7. 131. —? г- JV к к (2!)55!(2!)5 132. С£_2. Действительно, выбирая из п - 2 три различных предмета
398 Ответы С£_2 способами, можно однозначно отобразить их в разбиения, требуемые по условию. Если выбраны предметы с номерами к\ < к2 < к3, то в исходном ряду их номера будут к\ < к2 + 1 < к3 + 2. 133. fv-l)*Q(2n~')!. 134. (—%-2-2^ (2п)! = (12)я(2п)!. £о (2!)п"г \((2!) 2! J (2пУ 135. 2™, -—р. 136. п+ 1. 137. Количество прямоугольников размера г х j равно (п - г + 1)(п - j + 1). Каждый прямоугольник учитывается в сумме столько раз, какова его площадь. Тогда сумма равна ±±(n-i+l)(n-j+l>H = (Е(п-Ш).г)2 = (^+16)("+2))2- i=oj=o Ч=о / \ о / 138. a) fc!CM+2(fc-l)!C^-1C^-1+(fc-2)!C^-2C^-2; в) п + 1. 139* (]Т^2 "Т^ + Т^- 14°- W^ + 2)/2)2. 141. 1) 7 + 3"; 2) </2гг = (9 • З2" + (-1П/Ю, и2п^ = (9 • З2^1 + 3(-1)»)/10, п > 0; 3) (+9)-; 4) (+4)-; 5) (-1)>-1)+2; 6) 2я. 142. 1) С2+2-2 С2+1+2С2; 2) -2(-4)я + 3 • 2п + 5"; 3) 2" - (п2 + п)/2; 4) 2п + 2""2C2; 5) (n + 2)(n+l)/2"+1; 6) (2"+3-3 + (-1)»)/6. 144. 1) ^ - - Д'(^"1); 2) А + В-3-; 3) Л((1+^)/2)» + В((1-^)/2)я. 145. а„ = 2Я+1 (2n + 7), Ьп = 2та+1 (-2гг - 3). 146. (2п - 3 + (-1)я)/4. 148. (ата+1 -/?я+1)/(а -/?). 149. Использовать формулу включений и исключений. 150. a) R(x7C) = х(1 + х)3 + (1 + Зх + х2)(1 + ж). 153. а) 2П; с) 2 • 3я-1. Составить рекуррентное соотношение (см. п.4.3). 154. а) (2п + (-1)я2)/3; б) З^""1 - (-l)""1)^. Составить рекуррентное соотношение (см. п. 4.3). 155. 4™. п 156. С^ X)(^n)2 = (^2та)2' Воспользуйтесь производящей функцией fc=0 ix + - + y + -\ = Y, CL[X + -) (^ + ~) всех ломаных маршрутов длины 2п по рассматриваемой сетке. Свободный член в правой части является искомым числом для замкнутых маршрутов (см. п. 4.4). 157. С%п (см. указание к задаче 136). 203. а) 14; б) 18; в) 9. 204. а) 43; б) 61. 205. а) 37; б) 100; в) 158.
Список литературы 1. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. — М.: Мир, 1979. — 536 с. 2. Берж К. Теория графов и ее применения. — М.: ИЛ, 1962. — 320 с. 3. Виленкин Н.Я. Комбинаторика. — М.: Наука, 1969. — 328 с. 4. Виноградов И.М. Основы теории чисел. — М.: Наука, 1981. — 176 с. 5. Гаврилов Г.П., Сапоженко А. А. Сборник задач по дискретной математике. — М.: Наука, 1977. — 368 с. 6. Горбатов В. А. Дискретная математика. — М.: Издательская группа ACT, 2003. - 447 с. 7. Грин Д., Кнут Д Математические методы анализа алгоритмов. — М.: Мир, 1987. - 120 с. 8. Гроссман И., Магнус В. Группы и их графы. — М.: Мир, 1971. — 248 с. 9. Гудман С, Хидетниеми С. Введение в разработку и анализ алгоритмов. — М.: Мир, 1981. — 366 с. 10. Клини С. Математическая логика. — М.: Мир, 1993. — 480 с. ХХ.Кнут Д. Искусство программирования для ЭВМ: В 3 т. Т. 3: Сортировка и поиск. — М.: Мир, 1978. — 844 с. 12. Комбинаторный анализ. Задачи и упражнения: Учеб. пособие / Под ред. К. А. Рыбникова — М.: Наука, 1982 — 366 с. 13. Кристофидес М. Теория графов. — М.: Мир, 1978. — 422 с. 14. Кузнецов О.П., Анделъсон-Велъский Г.М. Дискретная математика для инженеров. — М.: Энергоатомиздат, 1988. — 479 с. ХЪ.Курош А. Г, Лекции по общей алгебре. — М.: Наука, 1973. — 400 с. 16. Линдон Р. Заметки по логике. — М.: Мир, 1968. — 128 с. 17. Липский В. Комбинаторика для программистов. — М.: Мир, 1988. - 213 с. 18. Мендельсон Э. Введение в математическую логику. — М.: Наука, 1984. - 319 с. 19. Нефедов В.И., Осипова В. А. Курс дискретной математики. — М.: МАИ, 1992. - 262 с. 20. Новиков Ф.А. Дискретная математика для программистов. — СПб.: Питер, 2001. - 302 с. 21. Оре О. Теория графов. - М.: Наука, 1980. - 336 с. 22. Препарата Ф., Шеймос М. Вычислительная геометрия. — М.: Мир, 1989. - 478 с.
400 Список литературы 23. Рейнголъц Э., Нивергелып /О., Део Н. Комбинаторные алгоритмы. Теория и практика. — М.: Мир, 1980. — 1980 с. 24. Риордан Дж. Введение в комбинаторный анализ. — М.: ИЛ, 1963. - 287 с. 25. Рыбников К. А. Введение в комбинаторный анализ. — М.: МГУ, 1972. - 255 с. 26. Столл Р. Множества, логика, аксиоматические теории. — М. Просвещение, 1968. — 231 с. 27. Уилсон Р.Дж. Введение в теорию графов. — М.: Мир, 1977. — 208 с. 28. Форд Л. Р., Фалкерсон Д.Р. Потоки в сетях. — М.: Мир, 1966. — 276 с. 29. Харрари Ф. Теория графов. — М.: Мир, 1973. — 300 с. 30. Харрари Ф., Палмер Э. Перечисление графов. — М.: Мир, 1977. — 324 с. 31. Холл М. Комбинаторика. — М.: Мир, 1970. — 424 с. 32. Холл П. Вычислительные структуры. Введение в нечисленное программирование. — М.: Мир, 1978. — 214 с. 33. Яблонский СВ. Введение в дискретную математику. — М.: Наука, 1986. - 384 с.
Предметный указатель Алгебра, 18 — Буля, 31 — Жегалкина, 50 — булева, 18 — требования, 18 Алгоритмы — поиск с возвращением, 163 — порождения (генерация) композиций, 182 перестановок, 165, 169 подмножеств, 173 размещений, 177 сочетаний, 178 Алгоритмы на графах — задача о назначениях, 296 — компонент связности, 228 — компоненты связности, 227 — кратчайшие пути, 253 — метод поиска в глубину, 217, 224 — остовное дерево, 241, 248 — паросочетания, 292 — поиск блоков в глубину, 288 — поиск эйлеровой цепи, 232, 233 — порождение клик, 269 — потоки в сетях, 260 — циклы, 279 Бернсайд — лемма, 323 — число классов, 323 Бинарные отношения, 99 — антирефлексивность, 99 — антисимметричность, 99 — линейный порядок, 102 — рефлексивность, 99 — симметричность, 99 — транзитивность, 99 — трихотомия, 100 — частичный порядок, 101 — эквивалентность, 100 Бином Ньютона, 114 Блоки графа, 286 Булева алгебра, 18 Булевы функции, 19 — СДНФ и СКНФ, 33 — интерпретация, 26 релейная, 26 смысловая, 29 — классы Поста, 54 — минимизация, 37 геометрическая интерпретация, 38 карты Карно, 42 метод Куайна, 44 — полнота, 50 — приоритет операций, 23 — сокращенная ДНФ, 45 — способы задания, 19 аналитический, 21 графический, 21 табличный, 19 — суперпозиция, 24 — теорема о СДНФ, 35 — теорема о СКНФ, 36 — тупиковая ДНФ, 46 — формулы,22 Вершины — висячие, 212 — изолированные, 212 — смежные, 212 — степень, 212 Висячая вершина, 212 Включение и исключение (правило), 153 Выделение блоков графа, 290 Выделение компонент связности, 227 Вычеты, 341 — полная система, 341 — приведенная система, 341 Гамильтонов маршрут, 213 Гомоморфизм — групп, 305 — образ, 306 — свойства, 305 — ядро, 306
402 Предметный указатель Граф, 210 — блоки, 286 — вершины висячие, 212 изолированные, 212 смежные, 212 — двудольный, 291 — дерево, 213 — диаметр, 302 — доминирующее множество, 265 — клика, 267 — клики, 265 — листы и блоки, 283 — маршрут, 213 гамильтонов, 213 простой, 213 цепь, 213 цикл, 213 — независимое множество, 265 — ориентированный, 211 — паросочетания, 292 — плоский, 212 — подграф, 211 — полный, 211 — помеченный, 213 — представление, 214 Структура смежности, 217 матрица инцидентности, 215 матрица смежности, 214 список ребер, 216 — простой, 211 — псевдограф, 211 мультиграф, 211 — радиус, 302 — различные представители, 295 — степень вершины, 212 — хроматическое число, 301 — центры, 302 — циклы, 277 — эйлеров, 231 Группа, 304 — Силова, 315 — абелева, 304, 310 — гомоморфизм, 305 — изоморфизм, 320 — коммутативная, 304 — некоммутативная, 315 — нормальный делитель, 309 — подгруппа, 305 — подстановок, 315 — приведенная система, 342 — примарная, 311 — прямое произведение, 310 — разложение, 310 — симметрическая, 315 — смежные классы, 306, 307 — стабилизатор, 322 — строение, 310 — теорема Кэли, 320 — теорема Лагранжа, 307 — циклическая, 307 — цикловой индекс, 325 Двоичные наборы, 38 — классификация, 38 Двудольные графы, 291 Дерево, 127, 213 — бинарное (двоичное), 127 — граф, 213 — корневое, 127 — остовное, 239 — поддерево, 127 — представление бинарное, 129 на связанной памяти, 128 на смежной памяти, 129 универсальное, 128 Доска запрещенных позиций, 156 Задача о назначениях, 296 Изолированная вершина, 212 Инверсии перестановки, 115 Интерпретация — релейно-контактная, 26 — смысловая, 29 Инцидентное ребро, 212 Исчисление высказываний — задачи, 64 — законы логики, 68 — система аксиом, 69 Клини, 70 Новикова, 70 Фреге, 71 — схемы вывода, 66 — теорема о дедукции, 74
Предметный указатель 403 Исчисление предикатов, 85 — категорические суждения, 92 — кванторы, 87 — классов, 92 — одноместные, 92 — предикаты свойств, 91 — строение, 89 Категорические — силлогизмы, 95 — суждения, 92 закон обращения, 94 закон отрицания, 94 интерпретация, 93 Кванторы — вынесение за скобки, 97 — замена, 97 — перестановка, 97 Кислера задача , 31 Классы — Поста, 54 — эквивалентности, 100, 224 Клика графа, 267 Клики графа, 265 Компоненты связности, 226 Корень дерева, 127 Коэффициенты — бинома Ньютона, 114 — полиномиальные, ПО, 114 Кратчайшие пути на графе, 253 Куб п-мерный, 135 Ладейный многочлен, 156 Лемма Бернсайда, 323 Линейный порядок, 191 Листы и блоки графа, 283 Максимальное паросочетание, 293 Маршрут — гамильтонов, 213 — по графу, 213 — простой, 213 — цепь, 213 — цикл, 213 — эйлеров, 232 Матрица — инцидентности графа, 215 — смежности графа, 214 Матрица Куайна, 48 Метод поиска в глубину, 217 Многочлен — ладейный, 156 — попаданий, 159 Множество, 104 — объединение, 104 — пересечение, 104 — представление, 133 связанное, 133 смежное, 133 характеристический вектор, 134 — прямое произведение, 104 — пустое, 104 — разность, 104 — универсальное, 104 Мультимножества, 109 Мультимножество, 109 Наибольший общий делитель, 335 Наименьшее общее кратное, 336 Нормальный делитель, 309 Обобщенное правило произведения, 150 Образом гомоморфизма, 306 Оптимальное кодирование, 14 Остовное дерево — графа, 239 — жадный алгоритм, 241 Отношение — бинарное, 100 — полного порядка, 102 — частичного порядка, 101 изоморфизм, 102 — эквивалентности, 100, 224 Паросочетания графа, 292 Перевод чисел, 12 Переменные — свободные, 88 — связанные, 88 — существенные, 26 — фиктивные, 26 Перестановки, 106 — инверсии, 115 — обратные, 116 — порождение, 188 — с повторениями, 109
404 Предметный указатель Подграф, 211 Подстановки, 315 — транспозиции, 317 Поиск блоков графа, 288 Поиск данных — закон Зипфа, 204 — логарифмический, 205 — последовательный, 203 Поиск с возвращением (алгоритм), 163 Полиномиальные — коэффициенты, ПО Потоки в сетях, 260 Правило — обобщенного произведения, 150 — прямого произведения, 105 — суммы, 104 Предикаты — ПНФ, 98 — квантификация, 97 — свойств-одноместные, 91 Представление — деревьев, 127 связное, 128 смежное, 129 — последовательностей, 119 связное, 121 смежное, 119 характеристический вектор, 120 Приведенная система вычетов, 341 Принцип включения и исключения, 153 Производящие функции, 135 — операции дополнительные частичные суммы, 138 изменение масштаба, 139 линейные, 137 свертка, 139 сдвиг начала влево, 137 сдвиг начала вправо, 137 частичные суммы, 138 Простые числа, 336 — решето Эратосфена, 337 Прямая адресация (сортировка), 207 Разбиение множества — неупорядоченное, 112 — упорядоченное, ПО Разделяющее ребро графа, 283 Различные представители, 295 Размещения — без повторений, 106 — с повторениями, 105 Разрез транспортной сети, 262 Рекуррентные соотношения — неоднородные, 147 — однородные, 145 Решето Эратосфена, 337 Связные компоненты, 226 Силлогизм — Barbara, 95 — Вагосо, 96 — Festino, 96 — структрура, 95 Симметрическая группа, 315 Системы счисления, 9 — 2, 8 и 16, 15 — смешанные, 12 — основание, 10 — позиционная, 9 — связь 2 и 16, 17 — связь 2 и 8, 15 Случайные перестановки, 188 Смежные вершины, 212 Сокращенная ДНФ, 45 Сортировка, 191 — всплытием Флойда, 195 — вставками, 192 — отрезков (задача), 201 — перечислением, 194 — пузырьковая, 193 полная, 194 — с вычисляемыми адресами, 207 Сочетания, 107 — с повторениями, 108 Списки (структура), 121 — связанные, 121 циклически, 122 Список ребер графа, 216 Сравнения, 340 — свойства, 340 Стабилизатор (группа), 322
Предметный указатель 405 Степень вершины, 212 Структура смежности графа, 217 Теорема — Вильсона, 345 — Жегалкина, 52 — Кэли, 320 — Лагранжа, 307 — Пойа, 329 — Поста ослабленная, 57 основная, 60 — Силова (группы), 315 — Ф. Холла, 295 — Ферма, 345 — Форда и Фалкерсона, 262 — Эйлера о графах, 232 — Эйлера (числа), 345 — включения и исключения, 153 — о дедукции, 74 Теория Пойа, 326 Транспозиция, 317 Транспортная сеть, 261 Тупиковая ДНФ, 46 Формула — бинома Ньютона, 114 — полиномиальная, 114 Функция — Мёбиуса, 346 — Эйлера, 342 свойства, 343 — булева , 19 — производящия, 135 Характеристический — вектор множества, 120 — полиномом уравнения, 146 Хроматические графы, 301 Цикловой индекс, 325, 332, 333 Циклы графа, 277 Эйлеровы графы, 231 Ядром гомоморфизма, 306
Учебное издание ИВАНОВ Борис Николаевич ДИСКРЕТНАЯ МАТЕМАТИКА. АЛГОРИТМЫ И ПРОГРАММЫ. ПОЛНЫЙ КУРС Редактор И. Л. Легостаева Оригинал-макет: A.M. Садовский Оформление переплета: Н.В. Гришина Издательская фирма «Физико-математическая литература» МАИК «Наука/Интерпериодика» 117997, Москва, ул. Профсоюзная, 90 E-mail: fizmat@maik.ru, fmlsale@maik.ru; http://www.fml.ru ISBN 978-5-9221-0787-7 9"765922" 107677'