Справочник от Автор24
Поделись лекцией за скидку на Автор24

Основы дискретной математики

  • ⌛ 2009 год
  • 👀 607 просмотров
  • 📌 532 загрузки
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Основы дискретной математики» pdf
Конспект курса: Основы дискретной математики Е.В. Просолупов. 29th May 2009 Содержание 1 Элементы теории множеств. Комбинаторика. 1.1 Введение . . . . . . . . . . . . . . . . . . . . . . . 1.2 Примеры задач. . . . . . . . . . . . . . . . . . . . 1.2.1 Задача о расположении конвертов . . . . 1.2.2 Задача о Ханойской башне . . . . . . . . 1.2.3 Базовые обозначения . . . . . . . . . . . . 1.2.4 Правило суммы и правило произведения 1.3 Основы теории множеств . . . . . . . . . . . . . 1.3.1 Понятие множества . . . . . . . . . . . . 1.3.2 Парадокс Рассела . . . . . . . . . . . . . . 1.3.3 Подмножества . . . . . . . . . . . . . . . 1.3.4 Операции над множествами . . . . . . . . 1.3.5 Диаграммы Эйлера-Венна . . . . . . . . . 1.3.6 Прямое произведение множеств . . . . . . 1.4 Бинарные отношения и функции . . . . . . . . . 1.4.1 Бинарные отношения . . . . . . . . . . . 1.4.2 Функции . . . . . . . . . . . . . . . . . . . 1.4.3 Отношение эквивалентности . . . . . . . 1.4.4 Отношение порядка . . . . . . . . . . . . 1.4.5 Лексикографический порядок . . . . . . . 1.5 Выборки с повторениями и без повторений . . . 1.5.1 Размещения и сочетания . . . . . . . . . . 1.5.2 Треугольник Паскаля . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 11 15 16 18 18 19 19 20 22 23 24 24 25 29 31 35 38 38 41 1.5.3 Связь сочетаний и (0,1)-векторов . . . . . . . . . . . 1.5.4 Перебор сочетаний . . . . . . . . . . . . . . . . . . . 1.5.5 Бином Ньютона . . . . . . . . . . . . . . . . . . . . . 1.5.6 Мультимножества . . . . . . . . . . . . . . . . . . . 1.5.7 Связь мультимножеств и (0,1)-векторов . . . . . . . 1.5.8 Полином Ньютона . . . . . . . . . . . . . . . . . . . 1.5.9 Разбиения множеств. . . . . . . . . . . . . . . . . . . 1.5.10 Приложение: программа перебора сочетаний . . . . 1.6 Перестановки . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.1 Понятие перестановки . . . . . . . . . . . . . . . . . 1.6.2 Группа перестановок . . . . . . . . . . . . . . . . . . 1.6.3 Циклы перестановки . . . . . . . . . . . . . . . . . . 1.6.4 Тип перестановки . . . . . . . . . . . . . . . . . . . . 1.7 Разложения и разбиения натуральных чисел . . . . . . . . 1.7.1 Разложения натуральных чисел . . . . . . . . . . . 1.7.2 Разбиения натуральных чисел . . . . . . . . . . . . 1.8 Принцип включения-исключения . . . . . . . . . . . . . . . 1.8.1 Принцип включения-исключения . . . . . . . . . . . 1.8.2 Задача о беспорядках . . . . . . . . . . . . . . . . . 1.8.3 Мощность объединения множеств . . . . . . . . . . 1.8.4 Число целочисленных решений системы неравенств 43 44 45 50 53 54 55 58 61 61 62 63 68 71 71 73 77 77 78 80 81 2 Математическая логика: Булева аллгебра 88 2.1 Булева алгебра. Функции алгебры логики. . . . . . . . . . 88 2.1.1 Булевы функции . . . . . . . . . . . . . . . . . . . . 88 2.1.2 Формулы . . . . . . . . . . . . . . . . . . . . . . . . 90 2.1.3 Основные тождества . . . . . . . . . . . . . . . . . . 95 2.1.4 Разложение функции по переменным . . . . . . . . 97 2.1.5 Дизъюнктивная и конъюнктивная нормальные формы 99 2.1.6 Полином Жегалкина . . . . . . . . . . . . . . . . . . 103 2.1.7 Полнота системы функций . . . . . . . . . . . . . . 108 2.1.8 Функции, сохраняющие ноль . . . . . . . . . . . . . 113 2.1.9 Функции, сохраняющие единицу . . . . . . . . . . . 113 2.1.10 Двойственность . . . . . . . . . . . . . . . . . . . . . 114 2.1.11 Монотонность . . . . . . . . . . . . . . . . . . . . . . 119 2 2.1.12 Линейность . . . . . . . . . . . . . . . . . . . . . . . 2.1.13 Критерий полноты системы функций . . . . . . . . 3 Теория алгоритмов 3.1 Машины Тьюринга . . . . . . . . . . . . . . . . . . . . 3.1.1 Понятие алгоритма . . . . . . . . . . . . . . . . 3.1.2 Машина Тьюринга . . . . . . . . . . . . . . . . 3.1.3 Способы записи машины Тьюринга . . . . . . 3.1.4 Стандартные конфигурации . . . . . . . . . . . 3.1.5 Вычислимые функции . . . . . . . . . . . . . . 3.1.6 Алгоритмически неразрешимые задачи . . . . 3.2 Теория N P -полных задач . . . . . . . . . . . . . . . . 3.2.1 Сложность алгоритма . . . . . . . . . . . . . . 3.2.2 Полиномиальная сводимость . . . . . . . . . . 3.2.3 Классы задач в форме распознавания свойств 3.2.4 Отношение между классами P и N P . . . . . 3.2.5 N P -полные задачи . . . . . . . . . . . . . . . . 4 Теория графов 4.1 Определения графа . . . . . . . . . . . 4.1.1 Общее определение . . . . . . . . 4.1.2 Виды графов . . . . . . . . . . . 4.1.3 Обыкновенный граф . . . . . . . 4.1.4 Примеры графов . . . . . . . . . 4.1.5 Графы Бержа . . . . . . . . . . . 4.2 Изоморфизм графов . . . . . . . . . . . 4.2.1 Инварианты графа . . . . . . . . 4.3 Операции . . . . . . . . . . . . . . . . . 4.3.1 Основные операции над графами 4.3.2 Подграфы . . . . . . . . . . . . . 4.3.3 Дополнение графа . . . . . . . . 4.4 Маршруты и связность . . . . . . . . . 4.5 Деревья . . . . . . . . . . . . . . . . . . 4.6 Матрицы, связанные с графом . . . . . 4.6.1 Матрица смежности . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 126 . . . . . . . . . . . . . 129 129 129 129 132 134 135 139 145 145 149 154 158 159 . . . . . . . . . . . . . . . . 162 163 163 165 166 168 171 172 174 176 176 176 178 179 181 183 183 4.6.2 Матрица инцидентности . . . . 4.6.3 Список ребер . . . . . . . . . . 4.7 Обходы графов . . . . . . . . . . . . . 4.7.1 Эйлеров цикл . . . . . . . . . . 4.7.2 Гамильтонов цикл . . . . . . . 4.8 Задачи и алгоритмы . . . . . . . . . . 4.8.1 Остов минимального веса . . . 4.9 N P -полные задачи теории графов . . 4.9.1 Задача коммивояжера . . . . . 4.9.2 Задача о клике . . . . . . . . . 4.9.3 Задача о вершинном покрытии 4.9.4 Задача о гамильтоновом цикле 4.9.5 Снова задача коммивояжера . 4.9.6 Алгоритм дерева . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 188 188 188 190 190 190 196 196 197 198 200 200 202 5 Математическая логика: Исчисления высказываний и предикатов 207 5.1 Исчисление высказываний . . . . . . . . . . . . . . . . . . . 207 5.1.1 Пример задачи логики высказываний . . . . . . . . 207 5.1.2 Формальные теории . . . . . . . . . . . . . . . . . . 209 5.1.3 Формальная теория исчисление высказываний . . . 211 5.1.4 Теоремы исчисления высказываний . . . . . . . . . 213 5.1.5 Теорема о полноте исчисления высказываний . . . . 216 5.1.6 Независимость аксиом исчисления высказываний . 222 5.2 Исчисление предикатов . . . . . . . . . . . . . . . . . . . . 226 5.2.1 Пример задачи логики предикатов . . . . . . . . . . 226 5.2.2 Формальная теория исчисление предикатов . . . . . 229 5.2.3 Интерпретация . . . . . . . . . . . . . . . . . . . . . 231 Литература 237 4 1 1.1 Элементы теории множеств. Комбинаторика. Введение Понятие "дискретная математика" объединяет все разделы математики, которые работают с дискретными структурами. Конечно, между ними есть взаимосвязи, местами они ссылаются друг на друга, но все вместе это является единой теорией в той же степени, в какой единой является и вся математика в целом. Это совокупность самостоятельных теорий и направлений. Теория множеств и комбинаторика содержат базу, которые используются во многих других разделах математики (в том числе и дискретной). Теория алгоритмов занимается формализацией понятия алгоритма, изучением его закономерностей и свойств. Много внимания уделяется оценке сложности алгоритмов и их сравнению. Теория графов изучает один из видов дискретных структур — графы. В силу своей интуитивной понятности и наглядному визуальному представлению, графы очень часто используются в качестве моделей для структур самой разной природы. Математическая логика изучает фундаметальные структуры, которые лежат в основе правильных математических рассуждений. Дискретная математика содержит и много других подразделов, которые не вошли в рамки этого ознакомительного курса. 5 1.2 Примеры задач. На первом занятии познакомимся с примерами задач, которые входят в рассмотрение дискретной математики. 1.2.1 Задача о расположении конвертов Рассмотрим задачу, для решения которой не потребуется знания специальной теории. Многие достаточно подготовленные читатели могут еще в процессе рассуждений догадаться, каков ответ на задачу, но мы все-таки пройдем все стадии, чтобы лучше понять сам процесс решения. Задача 1.2.1 . Имеется n квадратных конвертов разного размера (нет двух одинаковых конвертов). Все конверты находятся в ящике, причем одни конверты можно вкладывать в другие. Сколько существует способов размещения конвертов в ящике без учета их пространственного положения? Пример 1.2.1 . Пусть имеется три конверта размера l1 , l2 и l3 , причем 0 < l3 < l2 < l1 . На рисунке 1 изображены все возможные 1 2 3 4 5 6 Рисунок 1: Все возможные относительные расположения трех конвертов в ящике расположения трех конвертов. Всего их оказывается шесть. 6 Русский язык, как и любой другой разговорный язык, допускает различные понимания одной и той же последовательности слов (символов). Этим он плох для формулировки задачи. Необходимо поставить задачу формально (строго). Пусть 0 — ящик. Упорядочим конверты по убыванию размера и сопоставим 1 самому большому конверту, 2 — следующему и так далее. Самый маленький конверт получит номер n. Тогда любому размещению конвертов в ящике можно сопоставить пару (n, A), где n ∈ N — число конвертов, а A некоторое множество пар (i, j), i ∈ N0 = N ∪ {0}, j ∈ N, i, j ≤ n. Если (i, j) ∈ A, то конверт j при нашем размещении непосредственно вложен в конверт i. Пример 1.2.2 . Например размещению 2 на рисунке 1 соответствует множество A = {(0, 1), (1, 2), (2, 3)}, а размещению 6 того же рисунка — множество A = {(0, 1), (0, 2), (2, 3)}. Не любому множеству пар A соответствует некоторое размещение конвертов. Введем дополнительные ограничения на A: 1) i ∈ N, i ≤ n ⇒ |{(k, i) : (k, i) ∈ A}| = 1 — любой конверт непосредственно вложен ровно в один другой конверт или ящик. 2) (i, j) ∈ A ⇒ i < j — меньший конверт вкладывается в больший. Задача 1.2.2 . Найти функцию натурального аргумента n ∈ N f (n) = |{A : A ⊆ {0, 1, ..., n − 1} × {1, 2, ..., n}, A удовлетворяет условиям 1) и 2)}| Итак, мы сформулировали строгую постановку задачи и знаем, что нам нужно найти. Тем не менее ответить на поставленный вопрос сразу не так просто. Даже если мы угадаем ответ сейчас, его доказательство может оказаться достаточно сложным для понимания. Чтобы избежать необходимости непосредственно выяснять количество возможных пар (n, A), сопоставим каждой такой паре графическое изображение возрастающее дерево. Пример 1.2.3 . Пусть у нас есть некоторое расположение (n, A) = (5, {(0, 1), (0, 2), (0, 4), (1, 3), (1, 5)}). Сопоставим ему возрастающее 7 дерево (рис. 2): {0, 1, 2, 3, 4, 5} — множество вершин (узлов), 0 — корень, стрелки — ориентированные ребра (дуги), 1 — внутренний узел, 2, 3, 4, 5 — листья. Узел 0 называют родительским (или отцом) для узлов 1, 2 и 4, которые называют детьми (сыновьями) узла 0. Узел 1 в свою очередь является отцом узлов 3 и 5. 4 2 1 5 3 Рисунок 2: Пример возрастающего дерева Особенности возрастающих деревьев: 1) В любой узел из корня можно попасть двигаясь по стрелкам и притом единственным образом; 2) при движении от корня по стрелкам номера узлов только возрастают. Формально возрастающее дерево можно определить следующим образом: Определение 1.2.1 . 1) Пусть x — некоторый узел, помеченный числом nx . Тогда можно говорить, что x возрастающее дерево, состоящее из одного узла, и узел x является корнем этого дерева. 2) Пусть x — некоторый узел, помеченный числом nx , и T1 , T2 ,..., Tk — возрастающие деревья с корнями соответственно x1 , x2 , ..., xk ; узел xi помечен числом nxi , i = 1, k. Если nx < nxi для любого i = 1, k, то можно построить возрастающее дерево x(T1 , T2 , ..., Tk ) с корнем x и поддеревьями T1 , T2 ,..., Tk . 8 Пример 1.2.4 . 0(4, 2, 1(5, 3)). Возрастающее дерево с рисунка 2 можно записать Нетрудно видеть, что любому возрастающему дереву T с узлами {0, 1, ..., n} соответствует некоторое размещение n конвертов (n, A), где A состоит из пар (i, j) соединенных в дереве T стрелкой из i в j. Верно и обратное: по размещению конвертов можно построить возрастающее дерево, как это сделано в примере 1.2.3. Таким образом, наша задача эквивалентна следующей: Задача 1.2.3 . Найти число возрастающих деревьев с n вершинами. Для определенности будем считать, что все дети одного родительского узла расположены в графическом изображении возрастающего дерева по убыванию слева направо. Так на рисунке 2 вершины 4, 2 и 1 могли бы быть изображены в другом порядке, структура дерева бы не изменилась. Чтобы не путать разные изображения одного дерева, вводим это ограничение. Рассмотрим еще один способ описания возрастающего дерева — последовательность из n + 1 различных элементов из множества {0, 1, ..., n}. Определение 1.2.2 . Назовем перестановкой чисел {1, 2, ..., n} произвольную упорядоченную последовательность π из n различных чисел 1, 2, ..., n: π ∈ {(k1 , k2 , ..., kn ) | ki ∈ {1, 2, ..., n}, i = 1, n; ki 6= kj , при i 6= j} Рассмотрим слово τ начинающееся с 0 и продолжающееся некоторой перестановкой чисел {1, 2, ..., n}: τ = (0, k1 , k2 , ..., kn ). Пример 1.2.5 . Пусть τ = (0, 4, 2, 1, 5, 3). Строим по τ возрастающее дерево T . Каждое число в τ — узел дерева T ; 0 — корень. Пусть i 6= 0 — элемент τ . Пусть j ближайший к i слева элемент τ , такой что j < i. Тогда j — отец узла i. Нетрудно убедиться, что полученное таким образом по τ дерево T совпадает с деревом на рисунке 2. 9 Итак, чтобы получить по некоторому возрастающему дереву T соответствующее слово τ , нужно каждому листу i сопоставить запись τi = i, а каждому родительскому узлу j с детьми i1 , i2 , ..., ik , i1 ≥ i2 ≥ ... ≥ ik , сопоставить запись: τj = j, τi1 , τi2 , ..., τik , где τil — запись для узла il . Нетрудно видеть, что, поскольку номер любого сына больше номера родительского узла, а номера узлов i1 , i2 , ..., ik , упорядочены по убыванию, то просматривая список влево от любого il мы правильно определим его родителя — j. Тогда τ = τ0 и есть искомое представление дерева T . Пример 1.2.6 . Построим указанным способом слово τ для возрастающего дерева на рисунке 2. Считаем записи для листьев: τ3 = 3, τ5 = 5, τ2 = 2, τ4 = 4. Теперь можно получить записи для родительских узлов: τ1 = 1, τ5 , τ3 = 1, 5, 3, τ0 = 0, τ4 , τ2 , τ1 = 0, 4, 2, 1, 5, 3. Мы получили, что τ = (0, 4, 2, 1, 5, 3), что соответствует слову τ из примера 1.2.5. Таким образом, по дереву T мы однозначно строим слово τ , состоящее из нуля с последующей перестоновкой чисел {1, 2, ..., n}. С другой стороны по слову τ однозначно восстанавливается дерево T способом, описанным в примере 1.2.5. Этим мы показали, что каждому возрастающему дереву T взаимнооднозначно соответствует некоторая перестановка чисел {1, 2, ..., n}, а наша задача сводится к следующей: Задача 1.2.4 . Найти число переставновок чисел {1, 2, ..., n}. Последнее число равно n!, что нетрудно доказать, например, по индукции. Итак, на примере задачи о расположении конвертов мы разобрали следующие стадии решения задачи: 1) формулировка задачи из предметной области; 2) формализация условий задачи и построение математической модели; 10 3) последовательное сведение исходной задачи к вспомогательным задачам; 4) получение ответа путем решения вспомогательной задачи. 1.2.2 Задача о Ханойской башне Рекомендуемая литература: [2] Рассмотрим еще одну интересную задачу и отметим на ее примере некоторые другие этапы решения. 1 2 3 Рисунок 3: Ханойская башня Известная головоломка ханойская башня изображена на рисунке 3. Головоломка состоит из трех колышков и некоторого числа дисков разного диаметра. Каждый диск имеет в середине отверстие для надевания на колышки. В исходный момент все диски нанизаны на один из колышков в порядке уменьшения размера. Диски можно перемещать с колышка на колышек при соблюдении двух условий: за один раз можно перенести только один диск и больший диск нельзя помещать на меньший. Задача состоит в том, чтобы, при соблюдении правил перемещения, перенести все диски с исходного на какой-нибудь другой колышек. Довольно быстро можно убедиться, что задача разрешима. Поставим вопрос, какой способ решения головоломки является оптимальным. Задача 1.2.5 . Каково наименьшее число перекладываний Tn , которое 11 необходимо совершить, чтобы переместить в рамках задачи о ханойской башне пирамиду из n дисков с одного колышка на другой. Рассмотрим крайние случаи. Довольно часто ответ на задачу легко находится в частных случаях, при малых значениях аргумента. Такие, казалось бы, очевидные случаи могут помочь лучше понять общие закономерности. Так, совершенно очевидно, что T1 = 1, и не сложно убедиться, что T2 = 3. Так же можно положить T0 = 0, поскольку для перемещения пирамиды из 0 дисков не требуются перекладывания. Теперь попытаемся понять, как же переместить пирамиду в общем случае. Если предположить, что изначально диски находятся на колышке с номером 1, для двух дисков нам требуется переложить меньший диск на колышек 2, затем больший на колышек 3 и наконец меньший диск с колышка 2 на колышек 3. Для трех дисков задача усложняется, но идея остается той же. Мы можем переложить, как мы уже умеем, два диска на колышек номер 2, затем переложить большой диск на колышек 3 и в завершение переложить два меньших диска с колышка 2 на колышек 3. Итак мы можем переместить пирамиду любой высоты n, если воспользуемся следующим алгоритмом: 1) переложить верхние n − 1 дисков на второй колышек; 2) переложить диск n на третий колышек; 3) переложить n − 1 меньший диск со второго колышка на третий. Таким образом, для перемещения n дисков нам достаточно Tn−1 + 1 + Tn−1 перекладываний: Tn ≤ 2Tn−1 + 1, n > 0. Кроме того, когда-нибудь нам несомненно потребуется переложить самый большой диск с первого колышка на то место, где мы снова соберем нашу пирамиду, например на третий колышек. В этот момент все меньшие диски должны лежать на колышке 2. Значит мы не сумеем переместить башню быстрее, чем за время равное 2Tn−1 + 1. Tn ≥ 2Tn−1 + 1, n > 0. Таким образом мы получили рекурентное соотношение T0 = 0, Tn = 2Tn−1 + 1, 12 n > 0. (1) Равенства (1) дают возможность посчитать значение Tn для любого натурального числа n. В частности уже известные нам T1 = 1 и T2 = 3 согласуются с этими формулами. С другой стороны использовать рекурентность для получения значений Tn не удобно при достаточно больших n. Мы бы хотели получить замкнутую форму выражения для Tn . Как же решить рекурентное соотношение и получить его замкнутую форму? Для начала попробуем просто угадать. Здесь как и раньше нам помогут крайние случаи. Воспользуемся рекурентным соотношением (1) и вычислим Tn для нескольких первых натуральных чисел: T3 T4 T5 T6 = 2 · 3 + 1 = 7, = 2 · 7 + 1 = 15, = 2 · 15 + 1 = 31, = 2 · 31 + 1 = 63. Если хорошенько присмотреться, можно догадаться, что это напоминает: это похоже на степени двойки, уменьшенные на один. Можно предположить, что Tn = 2n − 1 для любых n ≥ 0. Действительно, это выражение довольно просто доказать по индукции. Оно выполняется для T0 и T1 . Предположим, что Tn−1 = 2n−1 − 1. Тогда Tn = 2Tn−1 + 1 = 2(2n−1 − 1) + 1 = 2n − 1, что и требовалось доказать. Метод математической индукции очень часто помогает в решении проблем, но он потребовал от нас "угадать" ответ. Когда это возможно, хорошо получить результат напрямую, не полагаясь на везение. Продемонстрируем, как соотношение (1) может быть разрешено без использования индукции. Интересно, как помогает "упростить" второе выражение в (1) добавление единицы с обоих сторон от знака равенства: Tn + 1 = 2Tn−1 + 2 = 2(Tn−1 + 1). Введем всопмогательную величину Un = Tn + 1. Тогда из (1) имеем U0 = 1, Un = 2Un−1 , n > 0. Очевидно, что Un = 2n . Отсюда, по определению величины Un следует, что Tn = 2n − 1 для любых n > 0. 13 Итак, на примере задачи о ханойской башне мы разобрали следующие стадии решения задачи: 1) рассмотрение крайних случаев; 2) нахождение и доказательство математического выражения для интересующей величины (в нашем случае это рекурентное выражение); 3) нахождение и доказательство замкнутой формы для математического выражения. 14 1.2.3 Базовые обозначения Введем некоторые общие обозначения, которые будут встречаться нам в процессе изучения всего материала курса. Под записью i = k, l будем понимать, что величина i пробегает все целые значения от k до l. dxe - наименьшее большее целое для числа x. bxc - наибольшее меньшее целое для числа x. Наряду со стандартными обозначениями для множеств чисел N — множество натуральных чисел, Z — множество целых чисел, R — множество вещественных чисел, будем использовать N0 для обозначения множества неотрицательных целых чисел: N0 = N ∪ {0} = {0, 1, 2, ...}. Для записи сумм с большим количеством подобных слагаемых используется символ Σ (сигма). l X f (i) = f (k) + f (k + 1) + ... + f (l − 1) + f (l). i=k Когда условие суммирования имеет более сложную форму, используют следующую запись X f (x) P (x) которая значит, что суммирование происходит по всем возможным значениям параметра x для которых высказывание P (x) является верным. Аналогично могут использоваться и другие знаки групповых операций. Пример 1.2.7 . 10 X i2 = 1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100 = 385. i=1 X x1 · x2 = 9 + 16 + 21 + 24 + 25 + 24 + 21 + 16 + 9 = 155. x1 ,x2 ∈N, x1 +x2 =10 15 Символы ∀, ∃, ∨, ∧, ¬ часто используются в краткой записи математических высказываний: ∀ — "для любых", ∃ — "существует", @ — "не существует", ∃! — "существует единственный", ∧ — "и", ∨ — "или", ¬ — "не". В разделе нашего курса, посвященном математической логике мы подробнее изучим запись высказываний на формальном языке. 1.2.4 Правило суммы и правило произведения При подсчете числа вариантов возникновения различных событий в задачах комбинаторики будут полезны следующие два правила. Правило произведения: Если объект A может быть выбран m способами и для каждого из таких выборов объект B в свою очередь может быть выбран n способами, то выбор «A и B» может быть осуществлен m · n способами. Пример 1.2.8 . Бросают две игральные кости. Сколько существует различных вариантов их выпадения, если кости считаются различными? У каждой кости 6 граней. Для каждого варианта выпадения первой кости возможно 6 вариантов выпадения второй. Значит, по правилу произведения, искомое число 6 · 6 = 36. Правило суммы: Если объект A может быть выбран m способами, а объект B — n способами, причем одновременный выбор A и B невозможен, то выбор «A или B» можно осуществить m + n способами. Пример 1.2.9 . Бросают две различные игральные кости. Сколько существует вариантов выпадения, чтобы ровно на одной из двух выпала шестерка? Если шестерка выпадает на первой кости, то существует 5 вариантов допустимых значений для выпадения второй кости. Аналогично, если шестерка выпадает на второй кости, первая кость в подсчитываемых комбинациях может принимать значения 1,2, 3, 4 и 5. Поскольку одновременное выпадение шестерок не рассматривается, по правилу суммы искомое число 5 + 5 = 10. 16 Пример 1.2.10 . Бросают две игральные кости. Сколько существует вариантов выпадения, чтобы либо на каждой кости выпало четное число очков, либо на каждой — нечетное? Поскольку кости не могут одновременно дать и четный и нечетный результат, по правилу суммы нужно сложить число вариантов выпадения двух четных числе и число выпадения двух нечетных чисел. Обычная игральная кость имеет шесть граней и ровно три из них четные. Так как для каждого варианта выпадения значения на первой кости возможны три варианта значения на второй, по правилу произведения число вариантов выпадения двух четных значений равно 3 · 3 = 9. Аналогично, число выпадений двух нечетных чисел — 9. Тогда, искомое число равно 18. 17 1.3 Основы теории множеств Рекомендуемая литература: [1] 1.3.1 Понятие множества Определение 1.3.1 . Множество — любая совокупность определенных и различных между собой объектов, мыслимая как единое целое. Эти объекты называются элементами множества. Символ ∈ обозначает отношение принадлежности. Запись x ∈ S значит, что элемент x принадлежит множеству S (x является элементом S). Запись x ∈ / S означает, что в множестве S нет элемента x. Множество не содержащее элементов обозначают ∅. Такое множество называют пустым множеством Обозначают {a1 , a2 , ..., ak } — множество, элементами которого являются a1 , a2 , ..., ak и только они. Пусть P (x) некоторая последовательность символов, задающая высказывание о x, которое будет принимать истинное или ложное значение при подстановке везде в нем вместо символа x одного и того же элемента. Будем обозначать {x | P (x)} — множество всех элементов, для которых высказывание P (x) принимает истинное значение. Пример 1.3.1 . 1) {x | x — положительное число меньше 6} = {1, 2, 3, 4, 5}; 2) {x | x = 2y, y ∈ N} = {x | x — четное число}. Множества считаются равными, если состоят из одних и тех же элементов. Записывают A = B, если множества A и B равны, и A 6= B — иначе. Пример 1.3.2 . Множество A всех положительных четных чисел равно множеству B положительных целых чисел, представимых в виде суммы двух нечетных чисел. (Показать) 18 Пример 1.3.3 . 1) {2, 4, 6} = {4, 2, 6}. 2) {x | x2 + 2x = 0} = {0, −2}. 3) {a, b} 6= {{a, b}}. Мощностью множества называется число его элементов. Мощность множества A обозначают |A|. Пример 1.3.4 . 1) |{1, 2, 3, 4, 5}| = 5; 2) |{1, 2, 3, 2}| = 3; 3) |N| = ∞. 1.3.2 Парадокс Рассела Теория множеств в ее интуитивном изложении может приводить к парадоксам. Рассмотрим парадокс Б. Рассела. Можно предположить существование множеств, которые принадлежат сами себе, и множества, которые не являются собственными элементами. Рассмотрим множество A всех таких множеств X которые не являются элементами X (сами себя): A = {X | X ∈ / X}. Принадлежит ли A само себе, как элемент. Если A ∈ A, то по определению этого множества получим A ∈ / A. Если предположить, что A∈ / A, то оказывается A ∈ A. В любом случае получается, что A ∈ A и A 6∈ A ?! — противоречие. 1.3.3 Подмножества Обозначают A ⊆ B и говорят, что множество A является подмножеством множества B, если каждый элемент множества A является элементом множества B. Если также известно, что A 6= B, говорят, что A является собственным подмножеством множества B и пишут A ⊂ B. Пример 1.3.5 . 1) {1, 3} ⊂ {5, 3, 1}; 2) X ⊆ X для любого множества X (рефлексивность); 3) X ⊆ Y , Y ⊆ Z ⇒ X ⊆ Z (транзитивность); 4) ∅ ⊆ X для любого множества X. 19 Множество всех подмножеств множества A будем обозначать 2A . Мощность множества всех подмножеств множества с n элементами равна 2n : |2A | = 2|A| . Пример 1.3.6 . Пусть A = {a, b, c}. Тогда 2A = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, A}. Видно, что в этом множестве 2|A| = 23 = 8 элементов. 1.3.4 Операции над множествами Пусть U — универсальное множество — множество всех элементов рассматриваемой предметной области. Объединение A ∪ B = {x | x ∈ A или x ∈ B}. Пересечение A ∩ B = {x | x ∈ A и x ∈ B}. Дополнение (абсолютное дополнение) A = {x | x ∈ U и x ∈ / A}. Разность (относительное дополнение) A \ B = {x | x ∈ A и x ∈ / B}. Очевидными свойсвами объединения, пересечения и разности множеств являются то, что для любых двух множеств A и B выполняются включения: (A ∩ B) ⊆ A ⊆ (A ∪ B), A \ B = A ∩ B ⊆ A. Симметрическая разность . A–B = (A \ B) ∪ (B \ A). Утверждение 1.3.1 (Основные тождества алгебры множеств). Для любых подмножеств A, B и C универсального множества U выполняются следующие тождества: 20 1) 2) a) 3) Коммутативность: a) A ∪ B = B ∪ A; b) A ∩ B = B ∩ A; Ассоциативность: A ∪ (B ∪ C) = (A ∪ B) ∪ C; b) A ∩ (B ∩ C) = (A ∩ B) ∩ C; a) Дистрибутивность ∪ относительно ∩: A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C); b) Дистрибутивность ∩ относительно ∪: A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C); 4) a) A ∪ ∅ = A; b) A ∩ ∅ = ∅; 5) a) A ∪ U = U ; b) A ∩ U = A; 6) a) A ∪ A = U ; b) A ∩ A = ∅; 7) Идемпотентность: a) A ∪ A = A; b) A ∩ A = A; b) A ∩ B = A ∪ B; 8) Законы де Моргана: a) A ∪ B = A ∩ B; 9) Законы поглощения: a) A ∪ (A ∩ B) = A; b) A ∩ (A ∪ B) = A. 10) Инволютивный закон: A = A. Доказательство. Доказать утверждения самостоятельно. ¤ Следствие 1.3.2 . . A–B = (A ∪ B) \ (B ∩ A). Доказательство. . A–B = (A \ B) ∪ (B \ A) = (A ∩ B) ∪ (B ∩ A) = = ((A ∩ B) ∪ B) ∩ ((A ∩ B) ∪ A) = = (A ∪ B) ∩ (B ∪ B) ∩ (A ∪ A) ∩ (B ∪ A) = = (A ∪ B) ∩ (B ∪ A) = (A ∪ B) ∩ (B ∩ A) = = (A ∪ B) \ (B ∩ A) ¤ Утверждение 1.3.3 . Для любых множеств A и B следующие предположения попарно эквивалентны: 1) A ⊆ B; 2) A ∩ B = A; 21 3) A ∪ B = B; 4) A ∪ B = U ; 5) A \ B = ∅. Доказательство. 1) ⇒ 2) Очевидно A ∩ B ⊆ A. Покажем A ⊆ A ∩ B. Действительно x ∈ A ⇒ x ∈ B, так как A ⊆ B и, следовательно, x ∈ A ∩ B. 2) ⇒ 3) A ∩ B = A следовательно (A ∩ B) ∪ B = A ∪ B. По за кону поглощения и коммутативности (A ∩ B) ∪ B = B. Таким образом A∪B =B 3) ⇒ 1) По предположению A ∪ B = B. Тогда A ⊆ A ∪ B = B, что и требовалось доказать. 3) ⇒ 4) В объединении множеств A и B сделаем замену согласно свойству A ∪ B = B: A ∪ B = A ∪ A ∪ B = U ∪ B = U. 4) ⇒ 5) Возьмем дополнение от предположения пункта 4) и воспользуемся правилом де Моргана: ∅ = U = A ∪ B = A ∩ B = A \ B. 5) ⇒ 3) Пусть ∅ = A \ B. Объединим левую и правую части этого равенства с B: B = (A \ B) ∪ B = (A ∩ B) ∪ B = (A ∪ B) ∩ (B ∪ B) = = (A ∪ B) ∩ U = A ∪ B. ¤ 1.3.5 Диаграммы Эйлера-Венна Диаграммы Эйлера-Венна помогают наглядно проиллюстрировать многие соотношения между множествами. На рисунке 32 показано применение диаграмм Эйлера-Венна для наглядного изображения основных операций над множествами. 22 U U U A A A A B B B A B U U U A A A A A B B A B A B Рисунок 4: Использование диаграмм Эйлера-Венна для иллюстрации основных операций над множествами 1.3.6 Прямое произведение множеств Пусть A = {a1 , a2 , ..., ak }, B = {b1 , b2 , ..., bl } A × B = {(a1 , b1 ), (a1 , b2 ), ..., (a1 , bl ), (a2 , b1 ), ..., (ak , bl )} = = {(a, b) | a ∈ A, b ∈ B} — прямое (декартово) произведение множеств A и B. Во многих случаях порядок проведения операций произведения не важен. Тогда считают, что A × (B × C) = (A × B) × C = {(a, b, c) | a ∈ A, b ∈ B, c ∈ C}. Аналогично определяется прямое произведение любого конечного числа множеств. A1 × A2 × ... × At = {(a1 , a2 , ..., at ) | ai ∈ Ai , i = 1, t} Если речь будет идти о прямом произведении множества на себя, то будем заменять запись нескольких множеств, на знак степени: A × ... × A} = At . | × A {z t 23 1.4 1.4.1 Бинарные отношения и функции Бинарные отношения Определение 1.4.1 . Бинарным (двуместным) отношением ρ называется множество упорядоченных пар. Если некоторая пара (x, y) принадлежит отношению ρ пишут (x, y) ∈ ρ или xρy. Замечание 1.4.1 . упорядоченных n-ок. отношением. n-арным отношением называют множество Любое множество можно назвать унарным Областью определения бинарного отношения ρ называется множество Dρ = {x | существует такое y, что xρy}. Областью значений бинарного отношения ρ называется множество Rρ = {y | существует такое x, что xρy} Пример 1.4.1 . 1) ρ = {(1, 2), (2, 3), (1, 5), (3, 3)}. Тогда Dρ = {1, 2, 3}, Rρ = {2, 3, 5}. 2) {(x, x) | x — вещественное число}. Тогда Dρ = Rρ = R. 3) {(x, y) | x, y — целые числа и найдется такое целое число z, что x + z = y}. Тогда Dρ = Rρ = Z. Каждое бинарное отношение является подмножеством прямого произведения множеств X и Y таких, что Dρ ⊆ X и Rρ ⊆ Y . Обратным отношением для отношения ρ называют отношение ρ−1 = {(x, y) | (y, x) ∈ ρ}. Композицией отношений ρ1 и ρ2 называется отношение ρ2 ◦ ρ1 = {(x, z) | существует такое y, что xρ1 y и yρ2 z}. Утверждение 1.4.1 . Для любых бинарных отношений ρ, ρ1 , ρ2 выполняются следующие свойства: 1) (ρ−1 )−1 = ρ; −1 2) (ρ2 ◦ ρ1 )−1 = ρ−1 1 ◦ ρ2 24 Доказательство. Пункт 1 непосредственно следует из определения обратного отношения. Покажем истинность пункта 2: (ρ2 ◦ ρ1 )−1 = {(z, x) | ∃y : xρ1 y, yρ2 z} = −1 −1 = {(z, x) | ∃y : yρ1−1 x, zρ−1 2 y} = ρ1 ◦ ρ2 ¤ 1.4.2 Функции Определение 1.4.2 . Бинарное отношение f называется функцией, если из (x, y) ∈ f и (x, z) ∈ f следует, что y = z. Две функции равны, если они состоят из одних и тех же элементов (как и любые множества). Иногда приходится сталкиваться с трудностями в определении области значений функций. Тогда, если Df = X и Rf ⊆ Y , то говорят, что функция f задана на множестве X со значениями в множестве Y (осуществляет отображение множества X во множество Y ), и пишут f : X →Y. Если f — функция, вместо (x, y) ∈ f пишут f (x) = y и говорят, что y — значение соответствующее аргументу x (образ элемента x). x называют прообразом элемента y. Пример 1.4.2 . 1) {(1, 2), (2, 3), (48, ?), (¤, 4)} — функция; 2) {(1, 2), (1, 3), (2, 4)} — не функция; 3) ρ{(x, x2 + 2x + 1) | x — вещественное число} — функция y = x2 + 2x + 1. Обратное бинарное отношение ρ−1 в этом случае функцией не является. Пусть f : X → Y . Определение 1.4.3 . Функцию (отображение) f назовем инъективной фукнцией (инъекцией), если для любых x1 , x2 ∈ X и любого y ∈ Y из y = f (x1 ) и y = f (x2 ) следует, что x1 = x2 . Определение 1.4.4 . Функция f называется сюръективной функцией (сюрьекцией), если для любого элемента y ∈ Y существует элемент x ∈ X такой, что y = f (x). 25 Определение 1.4.5 . Функция f называется биективной функцией (биекцией), если она и сюръективна, и инъективна. Если указана биективная функция f : X → Y , говорят. что осуществляется взаимнооднозначное соответствие между множествами X и Y. Пример 1.4.3 . Рассмотрим функции f : R → R. 1) f (x) = ex инъективна, но не сюръективна (рис. 5-a)); 2) f (x) = x3 − x сюръективна, но не инъективна (рис. 5-b)); 3) f (x) = 2x + 1 биективна. x 3 b) y=x -x a) y=e Рисунок 5: Примеры функций Утверждение 1.4.2 . Композиция двух функций есть функция. При этом, если f : X → Y и g : Y → Z, то g ◦ f : X → Z. Доказательство. Пусть (x, z1 ) ∈ g◦f и (x, z2 ) ∈ g◦f . Тогда существуют y1 и y2 : z1 = g(y1 ) и z2 = g(y2 ). При этом y1 = f (x) и y2 = f (x). Поскольку, f — функция, то y1 = y2 . Поскольку g — функция, то z1 = g(y1 ) = g(y2 ) = z2 . Таким образом, g ◦ f — функция. Покажем, что g ◦ f : X → Z. Так как f : X → Y , для любого x ∈ X существует y ∈ Rf ⊆ Y : f (x) = y. Так как g : Y → Z, существует 26 z ∈ Rg ⊆ Z: z = g(y) = g(f (x)) = (g ◦ f )(x). Таким образом, для любого x ∈ X мы нашли такой z ∈ Z, что (x, z) ∈ g◦f . Следовательно, Dg◦f = X. С другой стороны, Rg◦f ⊆ Rg ⊆ Z, что и требовалось доказать. ¤ Утверждение 1.4.3 . биективная функция. Композиция двух биективных функций есть Доказательство. Пусть, f : X → Y и g : Y → Z — биекции. Пусть, для некоторых x1 , x2 ∈ X и z ∈ Z верно z = g ◦ f (x1 ) и z = g ◦ f (x2 ). Пусть, y1 , y2 ∈ Y те элементы, для которых y1 = f (x1 ) и y2 = f (x2 ). Тогда, z = g(y1 ) = g(y2 ). Поскольку g инъективна, y1 = y2 и, поскольку f инъективна, x1 = x2 . Следовательно, g ◦ f — инъективна. Пусть z ∈ Z. Тогда, поскольку g сюрьективна, существует y ∈ Y : g(y) = z. Поскольку f сюрьективна, существует x ∈ X: f (x) = y. Следовательно, g ◦ f (x) = z и g ◦ f сюрьективна. Таким образом, g ◦ f — биекция. ¤ Пусть f −1 — отношение обратное к f . Если f −1 осуществляет отображение множества Y во множество X, говорят, что f −1 — обратное отображение. Утверждение 1.4.4 . Отображение f : X → Y имеет обратное отображение f −1 : Y → X тогда и только тогда, когда f — биекция. При этом f −1 тоже будет биекцией. Доказательство. Достаточность. Пусть, (y, x1 ) ∈ f −1 и (y, x2 ) ∈ f −1 . Тогда, f (x1 ) = f (x2 ) = y. Из инъективности функции f следует, что x1 = x2 и, следовательно, f −1 — функция. Из сюръективности функции f следует, что для любого y ∈ Y существует x ∈ X: f (x) = y. Другими словами, для любого y ∈ Y существует x ∈ X: f −1 (y) = x. Следовательно, Df −1 = Y и f −1 осуществляет отображение из Y в X. Покажем, что f −1 — биекция. Поскольку f определена на всем множестве X, f −1 — сюрьекция. Пусть существуют такие y1 , y2 ∈ Y и x ∈ X, что x = f −1 (y1 ) = f −1 (y2 ). Тогда, (x, y1 ) ∈ f и (x, y2 ) ∈ f и, поскольку f функция, y1 = y2 . Следовательно, f −1 — инъекция. 27 Необходимость доказывается из тех же соображений, рассмотренных в обратном порядке: если f −1 функция, то f — инъективна; если f −1 осуществляет отображение из Y в X, f — сюръективна. ¤ Замечание 1.4.2 . Чтобы обратное отношение f −1 было функцией, достаточно инъективности f . Тождественным отображением множества X на себя называется отображение eX : X → X такое, что для любого x ∈ X верно eX (x) = x. Если f : X → Y тогда верно, что eY ◦ f = f и f ◦ eX = f . Утверждение 1.4.5 . Если f : X → Y — биекция, то 1) (f −1 ◦ f ) = eX ; 2) (f ◦ f −1 ) = eY . Доказательство. Для любого x ∈ X, (f −1 ◦ f )(x) = f −1 (f (x)) = x. Для любого y ∈ Y , (f ◦ f −1 )(y) = f (f −1 (y)) = y. ¤ 28 1.4.3 Специальные бинарные отношения: Отношение эквивалентности Говорят, что ρ — бинарное отношение на множестве X, если ρ ⊆ X × X. Для произвольного отношения ρ имеет смысл выбирать X = Dρ ∪ Rρ . Отношение ρ на множестве X называется рефлексивным, если для любого элемента x ∈ X выполняется xρx Отношение ρ на множестве X называется иррефлексивным, если для любых x ∈ X из (x, x) ∈ / ρ. Отношение ρ на множестве X называется симметричным, если для любых x, y ∈ X из xρy следует yρx Отношение ρ на множестве X называется антисимметричным, если для любых x, y ∈ X из xρy и yρx следует x = y. Отношение ρ на множестве X называется транзитивным, если для любых x, y, z ∈ X из xρy и yρz следует xρz. Определение 1.4.6 . Бинарное отношение ρ на множестве X называется отношением эквивалентности, если оно рефлексивно, транзитивно и симметрично. Если ρ — отношение эквивалентности и xρy, говорят, что x и y эквивалентны. Пример 1.4.4 . 1) ρ= = {(x, y) | x, y ∈ R, x = y} — отношение эквивалентности. 2) Отношение подобия на множестве треугольников является отношением эквивалентности. 3) Отношение сравнимости по модулю n xρy ⇔ x ≡ y(mod n) на множестве всех эквивалентности. целых чисел Z является отношением Определение 1.4.7 . Пусть на множестве X введено отношение эквивалентности ρ. Классом эквивалентности, порожденным элементом x, называется подмножество множества X, состоящее из всех элементов эквивалентных x: [x] = {y | y ∈ X, xρy}. 29 Пример 1.4.5 . Продолжим пример 1.4.4. 1) Классы эквивалентности по отношению равенства на множестве вещественных чисел состоят из единственного элемента: [x] = x. 2) Класс эквивалентности по отношению подобия треугольников состоит из всех треугольников, подобных порождающему класс. 3) Класс эквивалентности для отношения сравнимости по модулю n на множестве целых чисел Z, порожденный элементом a, имеет вид {a + kn | k ∈ Z}. Очевидно, что числа 0, 1, 2, ..., n − 1 порождают различные классы. С другой стороны, для любого числа t ∈ Z оно представимо в виде t = a + kn, где k ∈ Z, а a ∈ {0, 1, ..., n − 1}. Значит, для любого целого числа порожденный им класс эквивалентности совпадает с одним из указанных. Таким образом, отношение сравнимости по модулю n порождает n различных классов эквивалентности: [0], [1], ..., [n − 1]. Утверждение 1.4.6 . Пусть ρ — отношение эквивалентности на множестве X. Тогда 1) для любого x ∈ X верно, что x ∈ [x]; 2) для любых x, y ∈ X, если xρy, то [x] = [y] (класс эквивалентности порождается любым своим элементом). Доказательство. Доказательство пункта 1) следует из рефлексивности отношения ρ. Докажем 2). Пусть yρz. Тогда в силу транзитивности отношения ρ имеем xρz и z ∈ [x]. Следовательно [y] ⊆ [x]. В силу симметричности отношения ρ получим [x] ⊆ [y], что и требовалось доказать. ¤ Определение 1.4.8 . Разбиением множества A называется совокупность его попарно непересекающихся непустых подмножеств Ai таких, что каждый элемент x ∈ A принадлежит одному из этих подмножеств: {A1 ∪ A2 ∪ ... ∪ Ak }, Ai ∩ Aj = ∅, Ai 6= ∅, i = 1, k, i, j = 1, k, i 6= j, A = A1 ∪ A2 ∪ ... ∪ Ak . 30 Утверждение 1.4.7 . Всякое разбиение множества X определяет на X отношение эквивалентности ρ: xρy тогда и только тогда, когда x и y принадлежат одному подмножеству разбиения. Доказательство. Рефлексивность и симметричность очевидны. Покажем транзитивность. Пусть xρy и yρz. Тогда x, y ∈ X1 и y, z ∈ X2 , где X1 и X2 — подмножества разбиения X. Поскольку y ∈ X1 и y ∈ X2 , то X1 = X2 . Таким образом x, z ∈ X1 и xρz. ¤ Утверждение 1.4.8 . Всякое отношение эквивалентности ρ определяет разбиение множества X на классы эквивалентности по этому отношению. Доказательство. Из утверждения 1.4.6 следует, что каждый элемент множества X принадлежит некоторому классу эквивалентности. В то же время, из того же утверждения следует, что любые два класса эквивалентности либо не пересекаются, либо совпадают, если имеют хоть один общий элемент: z ∈ [x], z ∈ [y] ⇒ xρz, zρy ⇒ xρy ⇒ [x] = [y]. ¤ Совокупность классов эквивалентности элементов множества X по отношению эквивалентности ρ называется фактор-множеством множества X по отношению ρ и обозначается X/ρ 1.4.4 Специальные бинарные отношения: Отношение порядка Определение 1.4.9 . Бинарное отношение ρ на множестве X называется отношением порядка, если оно транзитивно и антисимметрично. Множество, на котором введено отношение порядка, называют упорядоченным. Пример 1.4.6 . Множество всех пар (x, y) людей, для которых x старше y, является отношением порядка. Определение 1.4.10 . Отношение порядка ¹ называется отношением нестрогого (частичного) порядка на множестве X, если оно рефлексивно. 31 Отношение порядка ≺ называется отношением строгого порядка на множестве X, если оно иррефлексивно: ∀x, y ∈ X : x ≺ y ⇒ x 6= y. Определение 1.4.11 . Отношение порядка ρ на множестве X называется отношением линейного порядка, если любые x, y ∈ X, x 6= y, сравнимы в смысле отношения ρ (либо xρy, либо yρx обязательно выполняется). Пример 1.4.7 . 1) Отношение родитель-ребенок (рисунок 6-a)) не является отношением порядка. Очевидно, что у такого отношения отсутствует транзитивность: дед не является родителем своего внука. С другой стороны, отношение предок-потомок является отношением порядка. На рисунке 6-b) представлено то же фамильное дерево, что и на рисунке 6-a), но с указанием всех связей от дедов к внукам. Отношение предок-потомок является отношением строгого порядка и не является линейным порядком. b) a) Рисунок 6: Генеалогическое древо 2) ρ> = {(x, y) | x, y ∈ R, x > y} — является отношением строгого 32 линейного порядка. 3) ρ≥ = {(x, y) | x, y ∈ R, x ≥ y} — является отношением нестрогого линейного порядка. 4) Отношение A ⊆ B всех пар подмножеств (A, B) заданного универсального множества U , таких что A является подмножеством множества B называют отношением включения. Отношение включения является отношением нестрогого порядка и не является отношением линейного порядка. Определение 1.4.12 . Пусть на множестве X введено отношение строгого порядка ≺. Пусть элемент x ∈ X таков, что ∀y ∈ X, y 6= x ⇒ x ≺ y. Тогда элемент x называют наименьшим. Лемма 1.4.9 . Если на конечном непустом множестве X задан линейный строгий порядок, то существует наименьший элемент, и он единственен. Доказательство. Самостоятельно. ¤ Теорема 1.4.10 . Пусть на конечном непустом множестве X задано отношение линейного строгого порядка ≺. Тогда на X можно выбрать такую нумерацию элементов X = {x1 , x2 , ..., xn }, что соотношение xi ≺ xj будет выполняться в том и только в том случае, когда i < j. Доказательство. Согласно лемме 1.4.9 для множества X существует наименьший элемент x1 ∈ X, такой что x1 ≺ y для любых y ∈ X. Удалим элемент x1 из множества X. Множество X \ {x1 } также удовлетворяет условиям леммы 1.4.9 и, значит, в нем тоже существует наименьший элемент — x2 . Мы можем повторять этот процесс до тех пор, пока в множестве X не закончатся элементы. Очевидно, по способу выбора элементов xi , {x1 , x2 , ..., xn } и есть искомая нумерация. ¤ 33 Определение 1.4.13 . Два нестрого упорядоченных множества X и Y называются изоморфными, если существует биекция ϕ : X → Y , сохраняющая отношение нестрогого порядка. Иными словами, если ¹x и ¹y отношения нестрогого порядка соответственно множеств X и Y , то x1 ¹x x2 ⇐⇒ ϕ(x1 ) ¹y ϕ(x2 ). Пример 1.4.8 . Рассмотрим множество 2A всех подмножеств множества A = {1, 2, 3}, упорядоченное отношением включения, и множество X = {1, 2, 3, 5, 6, 10, 15, 30}, упорядоченное отношением x ¹ y ⇔ y делится на x. Из рисунка 7 хорошо видно, что эти два упорядоченных множества изоморфны. {1,2,3} {2,3} 30 {1,3} 15 10 {1,2} 6 {3} 5 2 3 {1} {2} 1 b) a) Рисунок 7: Изоморфные нестрого упорядоченные множества Теорема 1.4.11 . Всякое нестрого упорядоченное множество X изоморфно некоторой системе подмножеств множества X, нестрого упорядоченной отношением включения. 34 Доказательство. Пусть ¹ — отношение нестрогого порядка на множестве X. Для каждого элемента a ∈ X рассмотрим множество Sa = {x ∈ X | x ¹ a}. Ясно, что Sa ⊆ X для любого a ∈ X. Покажем, что система подмножеств {Sa | a ∈ X}, упорядоченная отношением включения, есть искомая система подмножеств. Рассмотрим отображение ϕ : X → {Sa | a ∈ X} такое, что ϕ(a) = Sa . Если Sa = Sb , то, поскольку a ∈ Sa , то b ∈ Sa и, следовательно, b ¹ a. Аналогично a ¹ b. Таким образом, в силу антисимметричности отношения ¹, a = b. Значит, отображение ϕ инъективно. С другой стороны, у любого множества Sa есть прообраз a. Значит, ϕ сюрьективно. Следовательно ϕ — биекция. Пусть a ¹ b. Тогда из x ¹ a в силу транзитивности отношения следует x ¹ b, а значит Sa ⊆ Sb . Пусть Sa ⊆ Sb . Тогда, поскольку a ∈ Sa , то a ∈ Sb и, следовательно, a ¹ b. Таким образом биекция ϕ сохраняет отношение нестрогого порядка. ¤ 1.4.5 Лексикографический порядок Заслуживающим отдельного упоминания является лексикографический порядок. Лексикографический порядок - это порядок, в котором выстроены слова, например, в русско-английских словарях. Лексикографический порядок может быть введен на множестве слов над любым множеством, на котором уже введен линейный порядок. Пусть на множестве X введен строгий линейный порядок ≺. Введем отношение ≺lex на множестве X ∗ = {(x1 , x2 , ..., xk ) | k ∈ N, xi ∈ X} всех слов над множеством X. Пусть x ek = (x1 , ..., xk ) ∈ X ∗ , yel = (y1 , ..., yl ) ∈ X ∗, x ek 6= yel и k ≤ l. Будем говорить, что x ek ≺lex yel , если 1) существует такой индекс t, 1 ≤ t ≤ k, что xi = yi , i = 1, t − 1 и xt ≺ yt , или 2) k < l и xi = yi , i = 1, k. В противном случае yel ≺lex x ek . Замечание 1.4.3 . На множестве слов одинаковой длины определение лексикографического порядка упростилось бы и приняло бы вид: x ek ≺lex yek ⇔ ∃t ∈ {1, ..., k} : xi = yi , i = 1, t − 1, xt ≺ yt . 35 Пример 1.4.9 . Выпишем все возможные перестановки чисел {1, 2, 3, 4} выстроенные в лексикографическом порядке: 1 1 1 1 1 1 2 2 3 3 4 4 3 4 2 4 2 3 4 3 4 2 3 2 2 2 2 2 2 2 1 1 3 3 4 4 3 4 1 4 1 3 4 3 4 1 3 1 3 3 3 3 3 3 1 1 2 2 4 4 2 4 1 4 1 2 4 2 4 1 2 1 4 4 4 4 4 4 1 1 2 2 3 3 2 3 1 3 1 2 3 2 3 1 2 1 Заметим, что здесь мы привели только перестановки — последовательности из различных символов. Если мы захотим выписать все слова в данном алфавите, их окажется гораздо больше. Подробнее о перестановках смотри раздел 1.6. Отметим также, что существует еще так называемый антилексикографический порядок. Он не является обратным лексикографическому порядку бинарным отношением. Список всех перестановок n чисел в антилексикографическом порядке может быть получен следующим образом: сначала нужно выстроить все такие перестановки в лексикографическом порядке, а затем развернуть список в обратном порядке и развернуть каждое слово, описывающее перестановку. Такой порядок может быть полезен, например, для словаря окончаний. Используя те же обозначения и договоренности, что и при введении лексикографического порядка, антилексикографический порядок можно определить следующим образом: Будем говорить, что yel ≺alex x ek , если 1) существует такой индекс t, 1 ≤ t ≤ k, что xk−i+1 = yl−i+1 , i = 1, t − 1 и xk−t+1 ≺ yl−t+1 , или 2) k < l и xk−i+1 = yl−i+1 , i = 1, k. В противном случае yel ≺alex x ek . Замечание 1.4.4 . На множестве слов одинаковой длины определение приняло бы следующий вид: x ek ≺alex yek ⇔ ∃t ∈ {1, ..., k} : xi = yi , i = t + 1, k, yt ≺ xt . 36 Пример 1.4.10 . Приведем все возможные перестановки чисел {1, 2, 3, 4} выстроенные в антилексикографическом порядке: 1 2 1 3 2 3 2 1 3 1 3 2 3 3 2 2 1 1 4 4 4 4 4 4 1 2 1 4 2 4 2 1 4 1 4 2 4 4 2 2 1 1 3 3 3 3 3 3 1 3 1 4 3 4 3 1 4 1 4 3 4 4 3 3 1 1 2 2 2 2 2 2 2 3 2 4 3 4 3 2 4 2 4 3 4 4 3 3 2 2 1 1 1 1 1 1 Лексикографический и антилексикографический порядки являются отношениями строгого линейного порядка. 37 1.5 1.5.1 Выборки с повторениями и без повторений Размещения и сочетания Пусть имеется множество S = {s1 , s2 , ..., sn }. Набор элементов si1 , si2 , ..., sik из множества S называется выборкой объема k (kэлементной выборкой) из n элементов. Выборка называется упорядоченной, если порядок элементов в ней задан. Иначе выборка называется неупорядоченной. Так же различают выборки с повторениями и без повторений в зависимости от того, допускается или не допускается повторное вхождение в выборку одних и тех же элементов. Пример 1.5.1 . Пусть S = {1, 2, 3}. Тогда (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3) — все возможные упорядоченные выборки объема два из трех элементов. Определение 1.5.1 . Размещением из n элементов по k называется упорядоченная выборка без повторений объема k из n-элементного множества. Поскольку элементы нашего множества S пронумерованы некоторым образом, не умаляя общности можно называть размещением из n элементов по k упорядоченный набор из k различных чисел, принадлежащих множеству {1, ..., n}. Обозначим Akn количество различных размещений из n по k. Пример 1.5.2 . 1) Пусть на экзамене у преподавателя n различных билетов и сдавать пришло k студентов. Тогда существует ровно Akn способов выдать всем студентам по одному билету для подготовки. 2) Пусть S = {1, 2, 3}. Тогда (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2) — все возможные размещения из трех элементов по два. Утверждение 1.5.1 . Пусть k, n ∈ N и 1 ≤ k ≤ n. Тогда Akn = n · (n − 1) · ... · (n − k + 1) = 38 n! . (n − k)! Доказательство. Действительно, существует n различных способов выбрать первый элемент набора из элементов множества {1, ..., n}. Аналогично, существует n − 1 способ выбора второго элемента и так далее. ¤ Определение 1.5.2 . Сочетанием из n элементов по k называется неупорядоченная выборка без повторений объема k из n-элементного множества. Как и раньше, можем считать, что сочетанием из n элементов по k называется неупорядоченный набор из k различных чисел, принадлежащих множеству {1, ..., n}. ¡ ¢ Количество сочетаний из n по k обозначим Cnk или nk . Пример 1.5.3 . 1) Предположим из n участников спортивного клуба на соревнования должны поехать какие-то k. Тогда имеется Cnk различных возможности собрать комманду. 2) Пусть S = {1, 2, 3}. Тогда {1, 2}, {1, 3}, {2, 3} — все возможные cочетания из трех элементов по два. Определение 1.5.3 . Множество ¡S ¢ всех подмножеств множества S мощности k будем обозначать k : µ ¶ S = {A | A ⊆ S, |A| = k}. k ¡ ¢ Пример 1.5.4 . Пусть S = {1, 2, 3, 4, 5} и k = 3. Тогда Sk = { {1, 2, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 4}, {1, 3, 5}, {1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5} } Нетрудно видеть, что если мощность множества S равна n, то ¯µ ¶¯ µ ¶ µ ¶ ¯ S ¯ ¯ ¯ = |S| = n . ¯ k ¯ k k Утверждение 1.5.2 . Пусть k, n ∈ N и 1 ≤ k ≤ n. Тогда µ ¶ n n! = k k!(n − k)! 39 (2) (3) Доказательство. Действительно, каждому сочетанию из n по k соответствует k! различных размещений из n по k с различным порядком ¡ ¢ k n! следования элементов. Тогда nk = Ak!n = k!(n−k)! ¤ Очевидным следствием из формулы (3) является равенство µ ¶ µ ¶ n n = . (4) k n−k Интуитивно эту формулу можно было бы обосновать следующим рассуждением. Выбирая k элементов из n мы тем самым выбираем n − k элементов из n, которые не попадают в нашу выборку. Проще говоря, мы разбиваем наше множество мощности n на два подмножества мощностей k и n − k соответственно. Также можно непосредственно подстановкой формулы (3) убедиться в правильности равенства µ ¶ µ ¶ µ ¶ µ ¶ n k n n−l · = · . (5) k l l k−l Действительно, µ ¶ µ ¶ k k! (n − l)! n n! · · = · = k!(n − k)! l!(k − l)! (n − l)! l k µ ¶ µ ¶ n! (n − l)! n n−l = · = · . l!(n − l)! (k − l)!(n − k)! l k−l Интуитивно формулу (5) можно описать, как разбиение множества из n элементов на три подмножества мощностей l, k − l, n − k соответственно. Левая часть равенства описывает выбор сначала k элементов из n, а затем l элементов из выбранных k. Получим все варианты разбиения исходного множества на три подмножества указанных мощностей. Правая часть равенства соответствует выбору сначала l элементов из n, а затем k − l элементов из оставшихся n − l. Получим те же варианты подмножеств. 40 1.5.2 Треугольник Паскаля Утверждение 1.5.3 . Пусть k, n ∈ N и 2 ≤ k ≤ n. Тогда ¶ µ ¶ µ ¶ µ n−1 n−1 n = + . k k−1 k (6) Во-первых, это равенство довольно легко доказать явно подставив выражение согласно формуле (3). Приведем другое доказательство этого факта. Доказательство. Пусть множество S имеет вид: S = {s1 , s2 , ..., sn }. Определим множества A и B следующим образом: ½ µ ¶¾ S \ {sn } A = {si1 , si2 , ..., sik−1 , sn } | {si1 , si1 , ..., sik−1 } ∈ k−1 µ ¶ S \ {sn } B= k ¡ ¢ Очевидно A ∩ B = ∅. Кроме того, можно видеть, что Sk = A ∪ B, поскольку все k-элементные сочетания из S, содержащие sn , находятся в A, а все такие ¡S ¢ k-элементые сочетания, которые не содержат s¡nS,¢лежат ¡n¢в B. Тогда + ¢|B|. Учитывая, что по формуле (2) | k | = k , ¡n−1¢| k | = |A| ¡n−1 |A| = k−1 и |B| = k , получаем искомое равенство (6). ¤ Положим следующие начальные условия для ¡0¢естественные ¡n¢ ¡n¢числа сочетаний из n по k: 0 = 1; 0 = 1 для любых n ∈ N; k = 0 для любых k > n. Тогда, пользуясь рекурентным соотношением (6), можно построить следующую таблицу, которую называют треугольником Паскаля: 41 n\k 1 2 3 4 5 6 7 .. . 0 1 2 3 4 5 6 7 ... 1 0 0 0 0 0 0 0 ... 1 1 0 0 0 0 0 0 ... 1 2 1 0 0 0 0 0 ... 1 3 3 1 0 0 0 0 ... 1 4 6 4 1 0 0 0 ... 1 5 10 10 5 1 0 0 ... 1 6 15 20 15 6 1 0 ... 1 7 21 35 35 21 7 1 ... .. .. .. .. .. .. .. .. . . . . . . . . . . . ¡ ¢ Здесь каждый элемент nk , кроме первого столбца и ниже диагонали ¡ ¢ является суммой элемента слева сверху, который соответствует n−1 k−1 , и ¡n−1¢ верхнего — k . На рисунке 8 приведен другой способ изображения треугольника Паскаля, который может оказаться более наглядным. На рисунке k=0 n=1 n=2 n=3 n=4 n=5 n=6 n=7 k=1 1 n=0 1 1 k=2 1 2 1 k=3 1 3 3 1 k=4 1 4 6 4 1 k=5 1 5 10 10 5 1 k=6 1 6 15 20 15 6 1 k=7 1 7 21 35 35 21 7 1 Рисунок 8: Треугольник Паскаля каждый элемент, кроме крайних в каждой строке, является суммой вдух элементов, под которыми он стоит. 42 1.5.3 Связь сочетаний и (0,1)-векторов С каждым сочетанием из n по k можно связать вектор из нулей и единиц, в котором число единиц равно k: позиции единиц указывают числа, которые должны войти в сочетание. Другими словами, установлено взаимооднозначное соответствие между множеством сочетаний из n по k и множеством (0,1)-векторов длины n с k единицами. В свою очередь каждый (0,1)-вектор длины n с k единицами соответствует пути на прямоугольной решетке (рис. 9) длины n − k и высоты k. Можно сопоставить каждому шагу вниз — единицу, а каждому (0,0) (n-k,0) (0,k) (n-k,k) Рисунок 9: Выбор пути на прямоугольной решетке шагу вправо — ноль. Тогда произвольному пути в n шагов из точки (0, 0) в точку (n − k, k) взаимнооднозначно соответствует (0,1)-вектор длины n с k единицами. Таким образом, мы получили взаимнооднозначное соответствие между множеством сочетанием из n по k и множеством путей на прямоугольной решетке. Заметим, что все множество путей из точки (0, 0) в точку (n − k, k) складывается из множества путей из (0, 0) в (n − k, k − 1) с последним шагом из (n−k, k−1) в (n−k, k) и множества путей из (0, 0) в (n−k−1, k) с последним шагом из (n−k −1, k)¡ в¢ (n−k, k) (рис. 10). Тогда количество путей из (0, 0) в (n−k, k), равное nk , совпадает с суммой количеств путей 43 (0,0) (n-k,0) (n-k,k-1) (0,k) (n-k-1,k) Рисунок 10: Все пути в точку (n − k, k) складываются из двух групп ¡ ¢ ¡n−1¢ из (0, 0) в (n − k, k − 1) и из (0, 0) в (n − k − 1, k), что равно n−1 k−1 + k . Таким образом, мы привели еще одно доказательство формулы (6). 1.5.4 Перебор сочетаний В практических задачах может возникнуть необходимость рассмотреть все возможные сочетания из некоторого множества заданной мощности, чтобы сравнить их свойства, или проделать некоторую операцию для каждого сочетания. Рассмотрим алгоритм перебора сочетаний. Пусть x1 , x2 , ..., xk — числа из множества {1, 2, ..., n}, вошедшие в сочетание, причем x1 < x2 < ... < xk . Пусть в начальный момент времени сочетание состоит из первых k чисел: xi = i, i = 1, k. Далее на каждом шаге будем просматривать вектор (x1 , x2 , ..., xk ) начиная с xk и искать первую такую компоненту xi , которую можно увеличить (нельзя увеличить xk , если он равен n; xk−1 , если он равен n−1 и так далее). Если такой компоненты не найдется, алгоритм завершает свою работу. В противном случае, пусть i наибольшее число, такое что xi < n − k + i. Увеличим xi на единицу, а для всех xt , t = i + 1, k, присваимаем значения xt = xi + (t − i). Повторяем процесс нужное число раз. 44 Пример 1.5.5 . Рассмотрим, как работает алгоритм для n = 5 и k = 3. 1) Сначала x = (x1 , x2 , x3 ) = (1, 2, 3). 2) Увеличиваем x3 : x = (1, 2, 4). 3) Увеличиваем x3 : x = (1, 2, 5). 4) x3 больше увеличить нельзя. Увеличиваем x2 и переназначаем значение x3 : x = (1, 3, 4). Далее аналогично 5) x = (1, 3, 5) 6) x = (1, 4, 5) 7) x = (2, 3, 4) 8) x = (2, 3, 5) 9) x = (2, 4, 5) 10) x = (3, 4, 5) Таким обраом, мы перебрали все сочетания из 5 по 3. 1.5.5 Бином Ньютона Утверждение 1.5.4 . Пусть x1 , x2 , ..., xn — независимые переменные. Обозначим X = {x1 , x2 , ..., xn }. Тогда XY (1 + x1 )(1 + x2 )...(1 + xn ) = x. (7) Y ⊆X x∈Y Доказательство. Проведем индукцию по n. Пусть n = 1. Тогда X = {x1 }. XY Y Y x= x+ x = 1 + x1 . Y ⊆X x∈Y x∈∅ x∈{x1 } Q Заметим, что здесь мы использовали x∈∅ x = 1, поскольку x0 = 1. База индукции доказана. Пусть утверждение верно для всех n ≤ n b. Положим n = n b + 1. X = {x1 , x2 , ..., xnb , xnb+1 }. Тогда XY X Y X Y x= x + xnb+1 x= Y ⊆X x∈Y Y ⊆X\{xnb+1 } x∈Y Y ⊆X\{xnb+1 } x∈Y = (1 + x1 )(1 + x2 )...(1 + xnb ) + xnb+1 (1 + x1 )(1 + x2 )...(1 + xnb ) = 45 = (1 + xnb+1 ) · (1 + x1 )(1 + x2 )...(1 + xnb ). ¤ Следствие 1.5.5 (формула бинома Ньютона). n µ ¶ X n k n (1 + x) = x k (8) k=0 Доказательство. Если в формулу (7) подставить x1 = x2 = ... = xn = x, то получим XY X n (1 + x) = x= x|Y | = Y ⊆X x∈Y Y ⊆X = n X X k=0 Y ⊆X, |Y |=k xk = n X xk X 1= Y ⊆X, |Y |=k k=0 n µ ¶ X n k=0 k xk ¤ ¡n¢ Значения получили благодоря этой формуле название k биномиальных коэффициентов. Более часто используемой формой формулы бинома Ньютона является следующее уравнение: n µ ¶ X n k n−k n a b (80 ) (a + b) = k k=0 Действительно, если b = 0, формула очевидна. Пусть b 6= 0. Тогда обозначим за x значение ab . Тогда n µ ¶ X n k n n n n n a (a + b) = (b( b + 1)) = b (x + 1) = b x = k k=0 = n µ ¶ X n k=0 k bn · x k = n µ ¶ X n k=0 k bn · ( ab )k = n µ ¶ X n k=0 k ak bn−k . Таким образом, формула (80 ) эквивалентна формуле (8). 46 Следствие 1.5.6 . n µ ¶ X n k=0 k = (1 + 1)n = 2n Что словесно можно сформулировать как "число всех подмножеств nэлементного множества равно 2n ". Этот факт нам уже знаком. Следствие 1.5.7 . Пусть n > 0. Тогда µ ¶ n X k n (−1) = (1 − 1)n = 0. k k=0 Это равенство можно прочитать, например, как "суммарная мощность множества всех нечетных подмножеств множества равна суммарной мощности всех его четных подмножеств". Другими словами, число подмножеств четной и нечетной мощности совпадает. Замечание 1.5.1 (Дельта-функция). ¡ ¢ что по следствию PnОтметим, k n 1.5.7, если рассматривать выражение k=0 (−1) k как функцию от n на множестве целых чисел, мы получим дельта-функцию — функцию, которая принимает значение 1 только в одной точке и 0 во всех остальных: µ ¶ ½ n X 1, n = 0, k n (9) = δo (n) = (−1) 0, n 6= 0. k k=0 Пользуясь δo (n) можно получить и другие δ-функции. Для любого целого числа a можно определить δa (n) на множестве целых чисел следующим образом: µ ¶ ½ n−a X n − a 1, n = a, (10) δa (n) = δo (n − a) = (−1)k = 0, n 6= a. k k=0 Утверждение 1.5.8 (формула обращения). Пусть даны две числовых последовательности a0 , a1 , a2 , ... и b0 , b1 , b2 , ... . Тогда следующие два утверждения эквивалентны n µ ¶ X n 1) bn = ak , n = 0, 1, 2... (11) k k=0 47 2) an = n X n−k (−1) k=0 µ ¶ n bk , k n = 0, 1, 2... (12) Доказательство. 1) Для начала докажем, что из формулы (11) следует P n ¡ n¢ (12). Пусть верно bn = k=0 k ak , n = 0, 1, 2.... Тогда µ ¶ µ ¶X n k µ ¶ X n n k (−1)n−k bk = (−1)n−k aj = k k j=0 j k=0 k=0 µ ¶µ ¶ n k XX k n−k n = (−1) aj = k j j=0 n X k=0 Прервем последовательностьPравенств, чтобы разъяснить следующее Pk n действие. Рассмотрим сумму k=0 j=0 A(j, k). Сложение членов A(j, k) идет по всем таким индексам j и k, что 0 ≤ k ≤ n и 0 ≤ j ≤ k. Иначе это условие можно записать, как 0 ≤ j ≤ k ≤ n. Теперь рассмотрим условие 0 ≤ j ≤ n и j ≤ k ≤ n, которое описывает Pn Pn ограничение на индексы j и k для суммы j=0 k=j A(j, k). Можно видеть, что это условие тоже эквивалентно записи 0 ≤ j ≤ k ≤ n. Таким P P P P образом, мы показали, что суммы nk=0 kj=0 A(j, k) и nj=0 nk=j A(j, k) отличаются только порядком суммирования и значит n X k X A(j, k) = k=0 j=0 n X n X A(j, k). j=0 k=j Теперь продолжим наши выкладки. µ ¶µ ¶ µ ¶µ ¶ n X n n n X X X k k n−k n n−k n = (−1) aj = aj (−1) = k j k j j=0 k=j j=0 k=j µ ¶µ ¶ µ ¶ n n n n X X X µn¶ X n−j n−k n n−k n − j (−1) (−1) = aj = aj = j k − j j k − j j=0 j=0 k=j k=j Для следующего перехода сделаем замену переменной индексирования во второй сумме. Положим l = n − k. Тогда k = n − l, k − j = n − j − l. В то время как индекс k пробегал все значения от j до 48 n, индекс l будет пробегать значения от n − j до нуля. Поскольку операция сложения на множестве вещественных чисел комутативна (неважен порядок суммирования), будем считать, что переменная l проходит значения от нуля до n − j. Тогда получим: µ ¶ ¶ X µ n−j n−j n µ ¶ X n µ ¶ X X n − j n − j n n . = aj (−1)l = aj (−1)l l n − j − l j j j=0 j=0 l=0 l=0 ¡ ¢ P l n−j Из формулы (10) следует, что n−j (−1) = δj (n) и значит l=0 l µ ¶ X µ ¶ ½ ¡j ¢ n−j n l n−j j aj = aj , n = j, aj (−1) = j l 0, n 6= j. l=0 Таким образом, из всей последней суммы останется только одно слагаемое µ ¶ X n−j n µ ¶ X n µ ¶ X n n l n−j aj (−1) = aj δj (n) = an , l j j j=0 j=0 l=0 что и требовалось доказать. 2) Доказательство, что из формулы (12) следует (11), проводится аналогично. Читатель может сделать это самостоятельно. ¤ Пример 1.5.6 . Пусть даны значения b0 = 2, b1 = 1, b2 = 5, b3 = −2, b4 = 3 и верна формула (11). Воспользуемся формулой (12) для вычисления значений an : µ ¶ n X n−k n an = (−1) bk , n = 0, 1, 2, 3, 4. k k=0 Для подстановки правильных биномиальных коэффициентов в эту формулу будет удобно воспользоваться треугольником Паскаля, как он представлен на рисунке 8. В каждой строке для данного n там выписаны все необходимые нам коэффициенты. µ ¶ a0 = b0 = 2, 49 a1 a2 a3 a4 µ ¶ µ ¶ 1 1 =− b0 + b1 = −2 + 1 = −1, 1 µ ¶ µ ¶ µ ¶ 2 2 2 = b0 − b1 + b2 = 2 − 2 · 1 + 5 = 5, 1 2 µ ¶ µ ¶ µ ¶ µ ¶ 3 3 3 3 =− b0 + b1 − b2 + b3 = 1 2 3 = − 2 + 3 · 1 − 3 · 5 + (−2) = −16, µ ¶ µ ¶ µ ¶ µ ¶ µ ¶ 4 4 4 4 4 = b0 − b1 + b2 − b3 + b4 = 1 2 3 4 =2 − 4 · 1 + 6 · 5 − 4 · (−2) + 3 = 39. Теперь проверим правильность нахождения значений an с помощью формулы (11) b0 b1 b2 b3 b4 µ ¶ = a0 = 2, µ ¶ µ ¶ 1 1 = a0 + a1 = 2 + (−1) = 1, 1 µ ¶ µ ¶ µ ¶ 2 2 2 = a0 + a1 + a2 = 2 + 2 · (−1) + 5 = 5, 1 2 µ ¶ µ ¶ µ ¶ µ ¶ 3 3 3 3 = a0 + a1 + a2 + a3 = 1 2 3 =2 + 3 · (−1) + 3 · 5 + (−16) = −2, µ ¶ µ ¶ µ ¶ µ ¶ µ ¶ 4 4 4 4 4 a4 = a3 + a2 + a1 + a0 + = 4 3 2 1 =2 + 4 · (−1) + 6 · 5 + 4 · (−16) + 39 = 3. Как видно, значения bn получены правильно. 1.5.6 Мультимножества Пусть дано некоторое множество S = {s1 , s2 , ..., sn }, |S| = n. 50 Определение 1.5.4 . Мультимножеством M на множестве S назовем всюдуопределенную функцию ϕ : S → N0 , где N0 — множество неотрицательных целых чисел. ϕ(s ) ϕ(s ) ϕ(s ) Будем писать M = {s1 1 , s2 2 , ..., sn n }, имея в виду, что элемент si множества S встречается в мультимножестве M ровно ϕ(si ) раз. Мощность мультимножества M положим равной сумме количеств вхождений в M элементов si : n X |M | = ϕ(si ). i=1 Пример 1.5.7 . Пусть S = {1, 2, 3, 4, 5} и задана функция ϕ: x 1 2 3 4 5 . ϕ(x) 1 0 2 1 3 Тогда мультимножество имеет вид M = {11 , 20 , 32 , 41 , 53 }. То есть элементы 1 и 4 входят в мультимножество M по одному разу, элемент 3 входит в него 2 раза, элемент 5 — три раза и элемент 2 множества S не входит в мультимножество M . Мощность мультимножества равна |M | = 1 + 0 + 2 + 1 + 3 = 7. Как можно видеть, мультимножество над множеством S — это неупорядоченная выборка с повторениями (сочетание с повторениями). Определение 1.5.5 . Множество всех ¡¡мультимножеств ¢¢ множестве S мощности k будем обозначать Sk . на Пример 1.5.8 . Пусть S = {1, 2, 3}. Тогда множество всех мультимножеств мощности 2 над множеством S будет иметь ¡¡S ¢¢ 2 0 0 = {{1 , 2 , 3 }, {11 , 21 , 30 }, {11 , 20 , 31 }, {10 , 22 , 30 }, {10 , 21 , 31 }, вид: 2 {10 , 20 , 32 }}. Посчитаем, сколько возможно различных выборок с повторениями мощности k над множеством из n элементов. Положим µµ ¶¶ ¯µµ ¶¶¯ ¯ S ¯ n ¯. = ¯¯ ¯ k k 51 Утверждение 1.5.9 . Пусть k, n ∈ N. µµ ¶¶ µ ¶ n n+k−1 = k k (13) Доказательство. Справа в формуле (13) стоит мощность множества всех подмножеств мощности k множества мощности n+k−1. Рассмотрим множество {1, 2, ..., n + k − 1} и его произвольное k-подмножество {a1 , a2 , ..., ak }. Пусть, не умаляя общности, элементы ai выстроены в порядке возрастания: 1 ≤ a1 < a2 < ... < ak ≤ n + k − 1. (*) Положим по определению bi = ai − i + 1, i = 1, k. Тогда b1 = a1 ≥ 1; bk = ak − k + 1 ≤ n + k − 1 − k + 1 = n; bi+1 − bi = ai+1 − (i + 1) + 1 − (ai − i + 1) = ai+1 − ai − 1 ≥ 0, i = 1, k − 1. Следовательно, 1 ≤ b1 ≤ b2 ≤ ... ≤ bk ≤ n, (**) то есть b1 , b2 , ..., bk задают некоторое мультимножество мощности k над множеством {1, 2, ..., n}. Аналогично показывается обратное соответствие. Слева в формуле (13) стоит число мультимножеств мощности k множества мощности n. Рассмотрим произвольное мультимножество мощности k над множеством {1, 2, ..., n}. Не умаляя общности, считаем, что элементы мультимножества расположены в порядке неубывания и выполнена формула (**). Положим по определению ai = bi + i − 1, i = 1, k. Тогда a1 = b1 ≥ 1; ak = bk + k − 1 ≤ n + k − 1; ai+1 − ai = bi+1 + (i + 1) − 1 − (bi + i − 1) = bi+1 − bi + 1 > 0, i = 1, k − 1. 52 Следовательно, выполняется выражение (*). Таким образом установлено взаимнооднозначное соответствие между множеством сочетаний из n + k − 1 по k и множеством мультимножеств мощности k над множеством из n элементов. Следовательно мощности этих множеств равны. ¤ 1.5.7 Связь мультимножеств и (0,1)-векторов Можно привести другое доказательство утверждения 1.5.9, используя связь мультимножеств с (0,1)-векторами. Как мы помним из пункта 1.5.3 каждому (0,1)-вектору из n элементов с ровно k единицами однозначно соответствует некоторое сочетание из n элементов по k. Каждому мультимножеству мощности k на n-элементном множестве S = {s1 , s2 , ..., sn } можно поставить в соответствие (0,1)-вектор длины n + k − 1 из k нулей и n − 1 единицы, такой что число нулей, находящихся между i−1-й и i-й единицами, будет равно числу вхождений в мультимножество элемента si , 2 ≤ i ≤ n − 1; число нулей перед первой единицей равно числу вхождений в мультимножество элемента s1 ; число нулей после n − 1-й единицы равно числу вхождений в мультимножество элемента sn . Это соответствие между множеством ¡¡S ¢¢ и множеством (0,1)-векторов длины n + k − 1 c n − 1-й единицей k является взаимнооднозначным. Таким образом, каждому (0,1)-вектору длины n + k − 1 с n − 1-й единицей однозначно соответствует сочетание из n + k − 1 по n − 1 и в тоже время ему соответствует мультимножество мощности k на n-элементном множестве. Следовательно, мы установили взаимнооднозначное соответствие между множеством всех сочетаний из n + k − 1 по n − 1 и множеством всех мультимножеств мощности k ¡n+k−1 ¢ ¡n+k−1¢ ¡¡n¢¢ на n-элементном множестве. Значит, = n−1 = k , что и k требовалось доказать. 53 1.5.8 Полином Ньютона Утверждение 1.5.10 . X (x1 + x2 + ... + xk )m = (α1 ,...,αk ), α1 +α2 +...+αk =m, αi ∈N0 , i=1,k m! xα1 1 xα2 2 ...xαk k . α1 !α2 !...αk ! (14) Доказательство. Докажем по индукции. Для k = 2 утверждение верно в силу формулы бинома Ньютона (80 ). Действительно, n µ ¶ X X µn¶ X n! α1 α2 n k n−k a b = aα1 bα2 = a b = (a + b)n . α1 !α2 ! α1 k (α1 ,α2 ), α1 +α2 =n, α1 ,α2 ∈N0 k=0 k∈{0,...,n}, α1 =k, α2 =n−k Пусть утверждение верно для всех k ≤ K для любых m. Пусть теперь k = K + 1. (x1 + x2 + ... + xK + xK+1 )m = ((x1 + ... + xK ) + xK+1 )m = по индукционному предположению X m! (x1 + ... + xK )α xβK+1 = = α!β! α+β=m, α,β∈N0 = X α+β=m, α,β∈N0 = m! β x α!β! K+1 X (α1 ,...,αK ,β), α1 +α2 +...+αK +β=m, αi ∈N0 , i=1,K, β∈N0 X (α1 ,...,αK ), α1 +α2 +...+αK =α, αi ∈N0 , i=1,K α! xα1 1 xα2 2 ...xαKK = α1 !α2 !...αK ! m! xα1 1 xα2 2 ...xαKK xβK+1 , α1 !α2 !...αK !β! Что и требовалось доказать. ¤ Благодаря формуле (14) числа α1 !αm! при α1 + α2 + ... + αk = m, 2 !...αk ! αi ∈ N0 , i = 1, k, m ∈ N0 , получили название мультиномиальных 54 коэффициентов. Обычно их обозначают µ ¶ m . α1 , α2 , ..., αk В этих обозначениях биномиальные коэффициенты имеют вид µ ¶ µ ¶ n n = . k k, n − k Легко доказать коэффициентов: следующее свойство мультиномиальных Утверждение 1.5.11 . Пусть m ∈ N0 . µ ¶ X m = km α1 , α2 , ..., αk (α1 ,...,αk ), α1 +α2 +...+αk =m, αi ∈N0 , i=1,k Доказательство. Следует из утверждения 1.5.10 при подстановке xi = 1, i = 1, k. ¤ 1.5.9 Разбиения множеств. Рассмотрим комбинаторный смысл мультиномиальных коэффициентов. Рассмотрим множество S = {s1 , s2 , ..., sm }. Пусть разбиение множества S на множеста S1 , S2 , ..., Sk таково, что каждое Si содержит αi элементов: S = S1 ∪ S2 ∪ ... ∪ Sk ; Si ∩ Sj = ∅, i 6= j; |Si | = αi , i = 1, k. Отметим, что некоторые Si могут быть пустыми и, очевидно, что m = α1 + α2 + ... + αk . Утверждение 1.5.12 . Число таких множества S равно ¡ разбиений ¢ m мультиномиальному коэффициенту α1 ,α2 ,...,αk . Пример 1.5.9 . Пусть имеется m шаров с различными номерами на них и имеется k коробок: B1 , B2 , ..., Bk . Сколькими способами можно 55 разложить эти m шаров по k коробкам таким образом, чтобы в коробке Bi оказалось ровно αi шаров, i = 1, k. Для начала можем выбрать α1 шаров, которые мы положим в коробку B1 . Это можно сделать столькими¡ различными способами, ¢ m сколько существует сочетаний из m по α1 — α1 . Аналогично, ¡m−α1 ¢ α2 шаров, которые мы положим в коробку B2 можно выбрать α2 способами. Рассуждая далее подобным образом, мы получим, что число способов, которыми можно разложить все m шаров по k коробкам с соблюдением количеств шаров в коробках равно µ ¶ µ ¶ µ ¶ µ ¶ m m − α1 m − α1 − α2 m − α1 − ... − αk−1 · · · ... · = α1 α2 α3 αk (m − α1 )! (m − α1 − α2 )! m! · · · ··· = α1 !(m − α1 )! α2 !(m − α1 − α2 )! α3 !(m − α1 − α2 − α3 )! (m − α1 − α1 − ... − αk−1 )! ··· · = αk !(m − α1 − α1 − ... − αk−1 − αk )! µ ¶ m! m = = . α1 !α2 !...αk ! α1 , α2 , ..., αk Замечание 1.5.2 . В примере 1.5.9 содержится доказательство утверждения 1.5.12. Действительно, ¡ m ¢ выбрать α1 элементов из m для первого подмножества можно α1 способами, α2 из оставшихся ¡ ¢ 1 элементов для второго подмножества — m−α способами и так далее. α2 ¡ Итак, ¢ в комбинаторном смысле мультиномиальный коэффициент m равен числу разбиений m-элементного множества на k α1 ,α2 ,...,αk подмножеств мощностей α1 , α2 , ..., αk . Пример 1.5.10 . В студенческой группе, состоящей из 25 человек, при выборе профорга за выбранную кандидатуру проголосовало 12 человек, против — 10, воздержалось — 3. Сколькими способами могло быть проведено такое голосование? Пусть S — множество студентов группы, S1 — множество студентов проголосовавших за выдвинутую кандидатуру, S2 — множество проголосовавших против, S3 — множество 56 воздержавшихся. Тогда |S| = 25, |S1 | = 12, |S2 | = 10, |S3 | = 3, S = S1 ∪ S2 ∪ S3 , Si ∩ Sj = ∅, i 6= j. Следовательно искомое число равно µ ¶ 25 25! = = 1 487 285 800. 12, 10, 3 12!10!3! Тепеь рассмотрим, как можно подсчитать число неупорядоченных разбиений множества на подмножества заданной мощности. Пусть Pm дано множество S мощности m и числа n1 , n2 , ..., nm таковы, что Рассмотрим такие разбиения множества S i=1 ni · i = m. на подмножества, что среди множеств разбиения ровно ni множеств мощности i, для каждого i = 1, m, причем порядок множеств разбиения не важен. Обозначим число таких разбиений за N (n1 , n2 , ..., nm ). Утверждение 1.5.13 . Пусть m ∈ N и n1 , n2 , ..., nm ∈ N0 — такие числа, что m X ni · i = m. i=1 Тогда N (n1 , n2 , ..., nm ) = m! . n1 !n2 ! · · · nm !(1!)n1 (2!)n2 · · · (m!)nm Доказательство. Каждое из неупорядоченных разбиений, рассмотренных при определении величины N (n1 , ..., nm ), можно, нумеруя множества в этом разбиении, привести n1 ! · · · nm ! способами к упорядоченным разбиениям. Действительно, множества мощности 1 можно расставить n1 ! способами, множества мощности 2 — n2 ! способами, ..., множества мощности m — nm ! способами. С другой стороны, число упорядоченных разбиений множества S можно подсчитать по утверждению 1.5.12. Тогда получим µ ¶ m = N (n1 , n2 , ..., nm ) · n1 !n2 ! · · · nm !, (1!)n1 , (2!)n2 , ..., (m!)nm что и доказывает утверждение. ¤ 57 Пример 1.5.11 . Сколькими способами можно разбить множество из десяти элементов на четыре подмножества (порядок подмножеств не важен), чтобы в одном из подмножеств был один элемент, в двух по два элемента и в одном — пять элементов? Ответ: N (1, 2, 0, 0, 1, 0, 0) = 10! 7! = = 3780 1!2!1!(1!)1 (2!)2 (5!)1 2 · 4 · 5! Пример 1.5.12 . Сколькими способами из группы в 20 человек можно сформировать 4 каолиции по 5 человек? Пусть S множество людей в группе, ni — число каолиций по i человек, i = 1, 25. Тогда ответ: N (0, 0, 0, 0, 4, 0, ..., 0) = 1.5.10 20! 4!(5!)4 Приложение: программа перебора сочетаний Приведем код программы, которая перебирает все (0,1)-вектора длины n с k единицами (а значит все сочетания из n по k). #include const n=7, m=4; void main() { cout << "Перебор сочетаний из " << n << " по " << m << ":" << endl << endl ; int int int // i,j,k; x[m];// Вектор номеров позиций единиц c[n];// (0,1)-вектор текущего сочетания. Вспомогательный массив для вывода на печать. 58 // Исходная инициализация for(i=0;i=0) && (x[k]==n-m+k) ) k--; /////////////////////////////// // Если позиция k существует // 59 if(k>=0) { // Увеличиваем номер позиции k-той единицы // и выстраиваем все следующие единицы за ней x[k]++; for(i=k+1; i=0); } Результатом работы будут все возможные (0,1)-вектора длины семь с четырьмя единицами: 1111000 1110100 1110010 1110001 1101100 1101010 1101001 1100110 1100101 1001011 1000111 0111100 0111010 0111001 0110110 0110101 0110011 0101110 1100011 1011100 1011010 1011001 1010110 1010101 1010011 1001110 1001101 0101101 0101011 0100111 0011110 0011101 0011011 0010111 0001111 Замечание 1.5.3 . Покскольку, как показано в параграфе 1.5.7, существует взаимнооднозначное соответствие между (0,1)векторами и мультимножествами, приведенную программу легко представить и как программу перебора мультимножеств. 60 1.6 1.6.1 Перестановки Понятие перестановки Определение 1.6.1 . Перестановкой называется инъективная функция на множестве {1, ..., n} π : {1, ..., n} → {1, ..., n}. Число n называется порядком перестановки π. Замечание 1.6.1 . Как любая инъективная на конечном множестве функция, перестановка является биективной. Замечание 1.6.2 . В общем случае, перестановкой произвольного множества X называют биекцию π : X → X. Обозначим σn множество всех перестановок порядка n. Очевидно, что |σn | = n! Существует несколько способов задания перестановки. Явное задание перестановки µ ¶ 1 2 ... n π= . π(1) π(2) ... π(n) В записи выше первая строка всегда одинакова. перестановки достаточно второй строки Для задания π = π(1)π(2)...π(n). Также можно задать перестановку перечислением ее циклов, о чем мы скажем позже. Определение 1.6.2 . Пусть π1 , π2 ∈ σn . Произведением перестановок π2 и π1 называют композицию этих функций: π2 ◦ π1 (i) = π2 (π1 (i)), i = 1, n. Докажем, что произведение перестановок есть перестановка. Очевидно, что π2 ◦ π1 : {1, ..., n} → {1, ..., n}. Покажем инъективность. 61 Пусть i, j ∈ {1, ..., n} и i 6= j. Поскольку π1 инъективна, π1 (i) 6= π1 (j), а поскольку инъективна π2 , π2 (π( i)) 6= π2 (π1 (j)). Следовательно, π2 ◦ π1 (i) = π2 (π1 (i)) 6= π2 (π1 (j)) = π2 ◦ π1 (j). То есть π2 ◦ π1 — инъективна, а значит является перестановкой. 1.6.2 Группа перестановок Определение 1.6.3 . Группой называется непустое множество G с определенной на нем бинарной операцией ¦, удовлетворяющей трем аксиомам: 1 ассоциативность: для любых a, b, c ∈ G верно, что (a ¦ b) ¦ c = a ¦ (b ¦ c); 2 наличие нейтрального элемента: существует такой элемент e ∈ G, что для любого a ∈ G справедливо a ¦ e = e ¦ a = a; 3 наличие обратного элемента: для любого элемента a ∈ G найдется такой элемент a−1 ∈ G, что a−1 ¦ a = a ¦ a−1 = e. Произведение перестановок ассоциативно: ((π3 ◦ π2 ) ◦ π1 )(i) = (π3 ◦ π2 )(π1 (i)) = π3 (π2 (π1 (i)) = = π3 ((π2 ◦ π1 )(i)) = (π3 ◦ (π2 ◦ π1 ))(i) Нейтральным элементом для µмножества ¶σn будет служить 1 2 ... n . Легко заметить, тождественная перестановка e = 1 2 ... n что для любой перестановки π ∈ σn верно π ◦ e = e ◦ π = π. Для любой перестановки π ∈ σn , как для любой биективной функции, существует обратная функция π −1 : π −1 ◦ π = π ◦ π −1 = e. Для любых i ∈ {1, ..., n} π(i) = j ⇒ π −1 (j) = i. Функция π −1 обратная для биективной функции π также будет биективной фукнцией: π −1 : {1, ..., n} → {1, ..., n}. То есть, π −1 ∈ σn . 62 Замечание 1.6.3 . Заметим, что обратная перестановка π −1 для данной перестановки π единственна. Действиетльно, если бы существовала еще одна такая перестановка π 0 , что π ◦ π 0 = e, то π 0 = e ◦ π 0 = π −1 ◦ π ◦ π 0 = π −1 ◦ e = π −1 ; если перестановка π 00 такова, что π 00 ◦ π = e, то π −1 = e ◦ π −1 = π 00 ◦ π ◦ π −1 = π 00 ◦ e = π 00 . Таким образом мы доказали, что множество перестановок σn с операцией произведения перестановок образуют группу. Эту группу называют группой перестановок или симметрической группой. Замечание 1.6.4 . коммутативно. Произведение перестановок в общем случае не Пример 1.6.1 . Пусть µ ¶ 1 2 3 π1 = , 2 1 3 Тогда µ π2 ◦ π1 = 1.6.3 1 2 3 1 3 2 µ π2 = ¶ µ 6= 1 2 3 3 1 2 1 2 3 3 2 1 ¶ . ¶ = π1 ◦ π2 . Циклы перестановки Будем обозначать π k = |π ◦ π ◦{z· · · ◦ π}; π 0 = e; k π −k =π | −1 ◦ π −1{z ◦ · · · ◦ π −1} . k Определение 1.6.4 . Циклом длины l называется такая перестановка π которая тождественна на всём множестве {1, 2, ..., n}, кроме подмножества {x1 , ..., xl }. Кроме того π(xl ) = x1 и π(xi ) = xi+1 , i = 1, l − 1. Цикл обычно обозначается (x1 , x2 , ..., xl ) = (x1 , π(x1 ), ..., π l−1 (x1 )). 63 Определение 1.6.5 . Транспозиция - перестановка элементов множества {1, 2, ..., n}, которая меняет местами только два элемента. Замечание 1.6.5 . Транспозиция — цикл длины 2. Утверждение 1.6.1 . Пусть π ∈ σn и i ∈ {1, ..., n}. Тогда существует такое число k ∈ N, что π k (i) = i. Доказательство. Пусть i ∈ {1, ..., n}. Пусть для любого k ∈ N верно π k (i) 6= i. Так как множество {1, ..., n} конечно, то элементы последовательности i, π(i), π 2 (i), ..., π s (i), ... начинают повторяться начиная с некоторого момента. Тогда последовательность имеет вид: a0 = i, a1 , ..., al , b1 , b2 , ..., bm , b1 , b2 , ..., bm , b1 , ... где l ≥ 1, i ∈ / {a1 , ..., al , b1 , b2 , ..., bm } и {a0 , a1 , ..., al } ∩ {b1 , b2 , ..., bm } = ∅. Элемент b1 — самый ранний повторяющийся элемент этой последовательности. Но тогда π(al ) = π(bm ) = b1 и по инъективности перестановки π получаем al = bm . Таким образом b1 был не самым первым повторяющимся элементом. Противоречие доказывает утверждение. ¤ Для произвольной перестановки π ∈ σn введем бинарное отношение ρπ на множестве {1, 2, ..., n}: xρπ y ⇔ ∃k ∈ Z : y = π k (x). Покажем, что ρπ ∈ σn — отношение эквивалентности. 1) Рефлексивность. Для любого x ∈ {1, ..., n} x = π 0 (x) ⇒ xρπ x. 2) Симметричность. Для любых x, y ∈ {1, ..., n}, для которых xρπ y, существует k ∈ Z: y = π k (x). Следовательно x = π −k (y) и yρπ x. 3) Транзитивность. Пусть x, y, z ∈ {1, 2, ..., n}, xρπ y и yρπ z. Тогда существуют k1 , k2 ∈ Z: y = π k1 (x), z = π k2 (y). Следовательно z = π k2 (π k1 (x)) = π k1 +k2 (x). То есть xρπ z. 64 Пусть {1, 2, ..., n} = B1 ∪ B2 ∪ ... ∪ Bm — разбиение {1, 2, ..., n} на классы эквивалентности относительно ρπ . Bi называются орбитами перестановки. Утверждение 1.6.2 . Пусть π ∈ σn . Пусть B1 ∪B2 ∪...∪Bm разбиение множества {1, 2, ..., n} на классы эквивалентности, порожденное отношением ρπ , и пусть xi ∈ Bi . Тогда, 1) для любого i ∈ {1, 2, ..., m} существует ni ∈ N: Bi = {xi , π(xi ), ..., π ni −1 (xi )}. 2) перестановка π представима в виде произведения циклов: π = (x1 , π(x1 ), ..., π n1 −1 (x1 )) ◦ (x2 , π(x2 ), ..., π n2 −1 (x2 ))◦ ◦ · · · ◦ (xm , π(xm ), ..., π nm −1 (xm )). Доказательство. 1) По определению, Bi состоит из всех таких y для которых существует s ∈ Z: y = π s (xi ). По утверждению 1.6.1, для xi существует k ∈ N: π k (xi ) = xi . Пусть ni — наименьшее из таких чисел. Тогда xi , π(xi ), ..., π ni −1 (xi ) — различные элементы из {1, 2, ..., n} и {xi , π(xi ), ..., π ni −1 (xi )} ⊆ Bi . Пусть y ∈ Bi \ {xi , π(xi ), ..., π ni −1 (xi )}. Тогда существует такое s ∈ Z, что y = π s (xi ) и s ∈ / {1, 2, ..., ni − 1}. s = p · ni + q, p ∈ Z \ {0}, q ∈ {0, 1, ..., ni − 1}. Следовательно, y = π s (xi ) = π q (π p·ni (xi )). Если p > 0, то ni ni π p·ni (xi ) = π ◦ · · · ◦ π n}i (xi ) = xi . | ◦ π {z p Пусть теперь p < 0. Тогда, используя равенство (∗), получим −ni i π p·ni (xi ) = π ◦ π −n{z ◦ · · · ◦ π −n}i (xi ) = | =π | −ni −p −ni ni ni ◦ · · · ◦ π n}i (xi )) = xi , ◦ π {z◦ · · · ◦ π −n}i (π | ◦ π {z −p −p 65 (∗) поскольку π −ni ◦ π ni (i) = |π −1 ◦ π −1{z◦ ... ◦ π −1} ◦ π ◦ ... ◦ π}(i) = i. | ◦ π {z ni ni Таким образом, y = π q (xi ), где q ∈ {0, 1, ..., ni − 1}, что противоречит выбору y. Следовательно, Bi = {xi , π(xi ), ..., π ni −1 (xi )}. 2) Согласно пункту 1) доказательства для цикла n1 −1 (xi , π(xi ), ..., π (xi )) выполняется формула ½ x, x∈ / Bi , (xi , π(xi ), ..., π n1 −1 (xi ))(x) = π(x), x ∈ Bi . Обозначим πi = (xi , π(xi ), ..., π n1 −1 (xi )), i = 1, m. Если x ∈ Bj и j 6= i, то πi (x) = x. То же верно и для π(x), поскольку π(x) ∈ Bj . Пусть x ∈ {1, 2, ..., n} — произвольное значение. Пусть, не умаляя общности, x ∈ Bi . Тогда, (π1 ◦ π2 ◦ · · · ◦ πi ◦ · · · ◦ πm−1 ◦ πm )(x) = = (π1 ◦ π2 ◦ · · · ◦ πi ◦ · · · ◦ πm−1 )(πm (x)) = = (π1 ◦ π2 ◦ · · · ◦ πi ◦ · · · ◦ πm−1 )(x) = · · · = = (π1 ◦ π2 ◦ · · · ◦ πi )(x) = (π1 ◦ π2 ◦ · · · ◦ πi−1 )(πi (x)) = = (π1 ◦ π2 ◦ · · · ◦ πi−1 )(π(x)) = · · · = π1 (π(x)) = π(x). Это верно для любого x ∈ {1, 2, ..., n}. Таким образом, π = (π1 ◦ π2 ◦ · · · ◦ πm ), что и требовалось доказать. ¤ Сопоставим каждой орбите Bi перестановку πi : ½ x, x∈ / Bi , πi (x) = π(x), x ∈ Bi . Будем называть циклы πi , i = 1, m, циклами перестановки π. Замечание 1.6.6 . Из утверждения 1.6.2 следует, что перестановку π можно представить в виде произведения всех ее циклов: π = π1 ◦ π2 ◦ · · · ◦ πm . 66 Поскольку орбиты не пересекаются, перестановки в этой композиции можно распологать в любом порядке: π = πi1 ◦ πi2 ◦ · · · ◦ πim , где i1 i2 ...im — произвольная перестановка из σm . Пример 1.6.2 . Пусть n = 7 и ¶ µ 1 2 3 4 5 6 7 . π= 4 2 7 1 3 6 5 Найдем орбиты π. π(1) = 4, π 2 (1) = π(4) = 1 π(2) = 2, π(3) = 7, π 2 (3) = π(7) = 5, π 3 (3) = π(5) = 3 π(6) = 6, ⇒B1 ⇒B2 ⇒B3 ⇒B4 = {1, 4}, = {2}, = {3, 5, 7}, = {6}. Представление перестановки π в виде произведения циклов имеет вид π = (1, 4)(2)(3, 7, 5)(6). Пример 1.6.3 . Пусть n = 7 и µ ¶ 1 2 3 4 5 6 7 π= . 4 2 5 1 6 7 3 Рассмотрим иллюстрацию к утверждению 1.6.2 (рисунок 11). Обозначим каждый элемент множества {1, 2, ..., n} вершиной графа. Будем рисовать дугу из вершины i в вершину j, если π(i) = j. Поскольку перестановка является биективной функцией, из каждой вершины выходит ровно одна дуга и в каждую вершину входит тоже ровно одна дуга. Получившийся граф оказывается гамильтоновым графом. Таким образом, все множество дуг графа разбивается на непересекающиеся контуры: ((1, 4), (4, 1)), ((2, 2)), ((3, 5), (5, 6), (6, 7), (7, 3)). Каждому такому контуру соответствует цикл перестановки π. 67 1 7 2 6 3 4 5 Рисунок 11: Разбиение перестановки на циклы Определение 1.6.6 . p ∈ N — степень перестановки π, если p — наименьшее из таких чисел, что π p = e. Утверждение 1.6.3 . Пусть π ∈ σn , π = π1 ◦ π2 ◦ · · · ◦ πm — разложение π на непересекающиеся циклы; ni — длина цикла πi . Степень перестановки определяется как наименьшее общее кратное длин ее циклов: Степень π = НОК(n1 , n2 , ..., nm ). Доказательство. Пусть число p ∈ N таково, что π p = e. Тогда π1p ◦ p π2p ◦ · · · ◦ πm = e. Поскольку все перестановки πi воздействуют на разные элементы {1, 2, ..., n}, то πip = e, i = 1, m. Следовательно, p является общим кратным для n1 , n2 , ..., nm . С другой стороны, пусть q = НОК(n1 , n2 , ..., nm ). Тогда πiq = πini ·t = e, q i = 1, m, и π q = π1q ◦ π2q ◦ · · · ◦ πm = e. ¤ Пример 1.6.4 . Степень перестановки из примера 1.6.2 равна 6. 1.6.4 Тип перестановки Определение 1.6.7 . Пусть ci = ci (π) — число циклов длины i перестановки π. Тогда (c1 , c2 , ..., cn ) — тип перестановки π. 68 Обозначим σn (c1 , c2 , ..., cn ) = {π | π ∈ σn , (c1 , c2 , ..., cn ) — тип π}. Замечание 1.6.7 . перестановки и c(π) = c1 (π) + · · · + cn (π) — число циклов n= n X i · ci (π). i=1 Пример 1.6.5 . Тип перестановки из примера 1.6.2 — (2, 1, 1, 0, 0, 0, 0). Тип перестановки из примера 1.6.3 — (1, 1, 0, 1, 0, 0, 0). Утверждение 1.6.4 . |σn (c1 , c2 , ..., cn )| = n! c1 !c2 ! · · · cn !1c1 2c2 · · · ncn Доказательство. По утверждению 1.5.13 множество {1, ..., n} можно разбить на подмножества, среди которых ровоно ci подмножеств Чтобы получить имеют мощность i, c1 !c2 !···cn !(1!)n! c1 (2!)c2 ···(n!)cn способами. перестановку из любого неупорядоченного разбиения, нужно расставить элеметы каждого подмножества в определенном порядке, чтобы определить циклы. Сколько циклов можно получить из одного подмножества мощности i? Элементы множества можно расставить в различном порядке i! способами. Это число надо разделить на количество вариантов выбора начальный точки цикла — i. Таким образом из данного i! подмножества можно составить i различных циклов. Домножим число неупорядоченных разбиений на число вариантов создания циклов из подмножеств. Получим: (1!)c1 (2!)c2 · · · (n!)cn n! · = c1 !c2 ! · · · cn !(1!)c1 (2!)c2 · · · (n!)cn 1c1 2c2 · · · ncn = что и требовалось доказать. ¤ 69 n! , c1 !c2 ! · · · cn !1c1 2c2 · · · ncn Пример 1.6.6 . Пусть задан тип перестановки (0, 2, 1, 0, 0, 0, 0). Согласно утверждению 1.6.4 число перестановок такого типа должно 7! быть 0!2!1!0!0!0!0!17!0 22 31 40 50 60 70 = 24 = 7 · 6 · 5 = 210, где 24 — число перестановок, из которых можно получить одну и ту же перестановку типа (0, 2, 1, 0, 0, 0, 0). Рассмотрим, например, перестановку (1, 2)(3, 4)(5, 6, 7). Из каких перестановок она может быть получена добавлением скобок? Перечислим такие перестановки: 1) (1, 2, 3, 4, 5, 6, 7), 13) (3, 4, 1, 2, 5, 6, 7), 2) (2, 1, 3, 4, 5, 6, 7), 14) (3, 4, 2, 1, 5, 6, 7), 3) (1, 2, 4, 3, 5, 6, 7), 15) (4, 3, 1, 2, 5, 6, 7), 4) (2, 1, 4, 3, 5, 6, 7), 16) (4, 3, 2, 1, 5, 6, 7), 5) (1, 2, 3, 4, 6, 7, 5), 17) (3, 4, 1, 2, 6, 7, 5), 6) (2, 1, 3, 4, 6, 7, 5), 18) (3, 4, 2, 1, 6, 7, 5), 7) (1, 2, 4, 3, 6, 7, 5), 19) (4, 3, 1, 2, 6, 7, 5), 8) (2, 1, 4, 3, 6, 7, 5), 20) (4, 3, 2, 1, 6, 7, 5), 9) (1, 2, 3, 4, 7, 5, 6), 21) (3, 4, 1, 2, 7, 5, 6), 10) (2, 1, 3, 4, 7, 5, 6), 22) (3, 4, 2, 1, 7, 5, 6), 11) (1, 2, 4, 3, 7, 5, 6), 23) (4, 3, 1, 2, 7, 5, 6), 12) (2, 1, 4, 3, 7, 5, 6), 24) (4, 3, 2, 1, 7, 5, 6). 70 1.7 Разложения и разбиения натуральных чисел 1.7.1 Разложения натуральных чисел Определение 1.7.1 . Разложением числа n ∈ N называется представление n в виде упорядоченной суммы натуральных чисел (a1 , a2 , ..., ak ) : n = a1 + a2 + ... + ak , ai ∈ N, k ∈ N. Пример 1.7.1 . Существует всего 8 различных разложений числа n = 4: 1+1+1+1 1+1+2 1+2+1 2+1+1 1+3 3+1 2+2 4 Обозначим dk (n) — число разложений n на k частей. Утверждение 1.7.1 . Число разложений n на k частей равно µ ¶ n−1 dk (n) = . k−1 (15) Доказательство. Пусть (a1 , a2 , ..., ak ) — произвольное разложение n на k частей: n = a1 + a2 + ... + ak . Тогда 1 ≤ a1 < a1 + a2 < a1 + a2 + a3 < ... < a1 + a2 + ... + ak−1 ≤ n − 1. Обозначим bi = a1 + a2 + ... + ai , 1 ≤ i ≤ k − 1. Тогда {b1 , ..., bk−1 } ⊂ {1, ..., n−1}, причем никакие два bi и bj не совпадают. Значит {b1 , ..., bk−1 } — некоторая выборка k − 1 элемента из n − 1. При этом, различным разложениям n на k частей будут соответствовать разные выборки из ¡n−1¢ n − 1 по k − 1. Следовательно, dk (n) ≤ k−1 . 71 Пусть теперь, {b1 , ..., bk−1 } произвольная выборка мощности k − 1 из n − 1. Пусть, для определенности, b1 < b2 < ... < bk−1 . Тогда, b1 + (b2 − b1 ) + (b3 − b2 ) + · · · + (bk−1 − bk−2 ) + (n − bk−1 ) = n. Обозначим a1 = b1 , ak = n − bk−1 и ai = bi − bi−1 , i = 2, k − 1. Тогда, n = a1 + a2 + · · · + ak — разложение n на k частей. Причем разным выборкам будут ¡n−1¢ соответствовать различные разложения и, следовательно, dk (n) ≥ k−1 . ¡ ¢ Таким образом, dk (n) = n−1 k−1 . ¤ Следствие 1.7.2 . Рассмотрим уравнение x1 + x2 + · · · + xk = n, (∗) где n — заданное число из N0 . Пусть, N= (n, k) — число решений этого уравнения на неотрицательных целых числах (xi ∈ N0 ). Тогда µ ¶ n+k−1 N= (n, k) = . (16) k−1 Доказательство. Пусть n = c1 + c2 + · · · + ck , ci ∈ N0 . Тогда n + k = (c1 + 1) + (c2 + 1) + · · · + (ck + 1), ci ∈ N. Таким образом, любому решению уравнения (*) соответствует разложение n + k на k частей. И наоборот, для любого разложения n + k = a1 + a2 + ... + ak , ai ∈ N набор {(a1 − 1), (a2 − 1), ..., (ak − 1)} является решением уравнения (*). То есть мы построили взаимнооднозначное соответствие между множеством решений уравнеия и множеством разложений n + k на k слогаемых. Следовательно, по утверждению 1.7.1 µ ¶ n+k−1 N= (n, k) = dk (n + k) = . k−1 ¤ 72 Следствие 1.7.3 . Рассмотрим неравенство x1 + x2 + · · · + xk ≤ n, (∗∗) где n — заданное число из N0 . Пусть, N≤ (n, k) — число решений этого неравенства на неотрицательных целых числах. Тогда µ ¶ n+k N≤ (n, k) = . (17) k Доказательство. Пусть c1 + c2 + · · · + ck ≤ n, ci ∈ N0 . Тогда, обозначим ck+1 = n − c1 + c2 + · · · + ck . {c1 , c2 , ..., ck , ck+1 } — решение уравнения x1 + x2 + · · · + xk + xk+1 = n. Обратно, для любого решения c1 , c2 , ..., ck , ck+1 уравнения x1 +x2 +· · ·+ xk + xk+1 = n, очевидно, верно, что c1 + c2 + · · · + ck ≤ n. Таким образом, множеству решений неравенства (**) взаимооднозначно соответствует множество решений уравнения x1 + x2 + · · · + xk + xk+1 = n. Тогда по следствию 1.7.2 µ ¶ n+k N≤ (n, k) = N= (n, k + 1) = . k ¤ 1.7.2 Разбиения натуральных чисел Определение 1.7.2 . Набор (λ1 , λ2 , ..., λk ), λi ∈ N, называется разбиением числа n ∈ N, если n = λ1 +λ2 +· · ·+λk , λ1 ≥ λ2 ≥ · · · ≥ λk > 0 Пример 1.7.2 . Существует 5 различных разбиений числа n = 4: 1+1+1+1 2+1+1 2+2 3+1 4 73 Замечание 1.7.1 . Можно использовать и другое определение разбиения натурального числа: Определение 1.7.3 . Разбиением числа n ∈ N называется представление n в виде неупорядоченной суммы натуральных чисел. Действительно, можно считать, что разбиение {λ1 , λ2 , ..., λk } — произвольный неупорядоченный набор, такой что n = λ1 + λ2 + · · · + λk . Тогда расставив элементы λi в другом порядке мы получим то же самое разбиение. Чтобы получить возможность определять, имеем ли мы дело с двумя различными разбиениями, или с одним и тем же набором, но в с элементами следующими в другом порядке, удобно расставить элементы λi по убыванию. В таком случае, любому разбиению будет соответствовать упорядоченная последовательность, удовлетворяющая определению 1.7.2. Обозначим pk (n) — число разбиений n на k частей. Утверждение 1.7.4 . Пусть k, n ∈ N, k > 1 и n > k. Тогда pk (n) = pk−1 (n − 1) + pk (n − k). (18) Доказательство. Пусть Sk (n) = {(λ1 , λ2 , ..., λk ) | n = λ1 + λ2 + · · · + λk , λ1 ≥ λ2 ≥ · · · ≥ λk > 0, λi ∈ N, i = 1, k}, A = {(λ1 , λ2 , ..., λk ) | (λ1 , λ2 , ..., λk ) ∈ Sk (n), λk = 1}, B = {(λ1 , λ2 , ..., λk ) | (λ1 , λ2 , ..., λk ) ∈ Sk (n), λk ≥ 2}. Тогда Sk (n) = A ∪ B и A ∩ B = ∅; |Sk (n)| = |A| + |B|. |A| = |{(λ1 , λ2 , ..., λk−1 ) | λ1 + λ2 + · · · + λk−1 = n − 1, λ1 ≥ λ2 ≥ · · · ≥ λk−1 > 0, λi ∈ N}| = |Sk−1 (n − 1)| = pk−1 (n − 1). |B| = |{(λ1 , λ2 , ..., λk ) | λ1 + λ2 + · · · + λk = n, λ1 ≥ λ2 ≥ · · · ≥ λk > 1, λi ∈ N}| = 74 Сделаем замену µi = λi − 1, i = 1, k. = |{(µ1 , µ2 , ..., µk ) | µ1 + µ2 + · · · + µk = n − k, µ1 ≥ µ2 ≥ · · · ≥ µk > 0, µi ∈ N}| = |Sk (n − k)| = pk (n − k). |Sk (n)| = pk (n) = pk−1 (n − 1) + pk (n − k). ¤ Замечание 1.7.2 . Несмотря на схожесть определений вычисление величины pk (n) оказывается гораздо более сложной, чем dk (n). Если для числа разложений мы имеем явную формулу (15), то для числа разбиений мы получили только рекурентное выражение (18), которое, тем не менее, позволяет нам вычислить pk (n), пользуясь начальными условиями: ∀n ∈ N pn (n) = 1, p1 (n) = 1; если k > n, то pk (n) = 0. Пример 1.7.3 . Заполним таблицу первых значений pk (n), пользуясь начальными значениями и формулой (18). n\k 1 2 3 4 5 6 7 .. . 1 1 1 1 1 1 1 1 .. . 2 1 1 2 2 3 3 .. . 3 1 1 2 3 4 .. . 4 1 1 2 3 .. . 5 1 1 2 .. . 6 1 1 .. . 7 1 .. . ··· ··· ··· ··· ··· ··· ··· ··· ... p2 (3) = p1 (2) + p2 (1) = p1 (2) = 1, p2 (4) = p1 (3) + p2 (2) = 1 + 1 = 2, p3 (4) = p2 (3) + p3 (1) = p2 (3) = 1, 75 p2 (5) = p1 (4) + p2 (3) = 1 + 1 = 2, p3 (5) = p2 (4) + p3 (2) = p2 (4) = 2, p4 (5) = p3 (4) + p4 (1) = p3 (4) = 1, p2 (6) = p1 (5) + p2 (4) = 1 + 2 = 3, p3 (6) = p2 (5) + p3 (3) = 2 + 1 = 3, p4 (6) = p3 (5) + p4 (2) = 2, p5 (6) = p4 (5) + p5 (1) = 1, p2 (7) = p1 (6) + p2 (5) = 1 + 2 = 3, p3 (7) = p2 (6) + p3 (4) = 3 + 1 = 4, p4 (7) = p3 (6) + p4 (3) = 3, p5 (7) = p4 (6) + p5 (2) = 2, p6 (7) = p5 (6) + p6 (1) = 1. 76 1.8 Принцип включения-исключения 1.8.1 Принцип включения-исключения Пусть A — заданное множество и S — множество свойств. Каждый элемент из A может обладать некоторыми свойствами из S. Другими словами, каждому элементу a из множества A сопоставляется некоторое подмножество Sa множества S и говорят, что элемент a обладает свойствами из Sa . Пусть T ⊆ S. Обозначим f= (T ) — число элементов из множества A, которые обладают всеми свойствами из T и не обладают свойствами из множества S \ T ; f≥ (T ) — число элементов из A, которые обладают всеми свойствами из T и возможно какими-то еще. Тогда X f≥ (T ) = f= (Y ). (19) T ⊆Y ⊆S Возможно ли, если мы знаем значение f≥ (T ) для любых T ⊆ S, найти функцию f= ? Утверждение 1.8.1 . Пусть ϕ : 2S → R — произвольная функция, сопоставляющая каждому подмножеству конечного множества S, некоторое вещественное число. Пусть ψ — такая функция из 2S в R, что X ψ(T ) = ϕ(Y ), ∀ T ⊆ S. T ⊆Y ⊆S Тогда ϕ(T ) = X (−1)|Y \T | ψ(Y ), ∀ T ⊆ S. T ⊆Y ⊆S Доказательство. Пусть T ⊆ S. Тогда X X X (−1)|Y \T | ψ(Y ) = (−1)|Y \T | ϕ(Z) = T ⊆Y ⊆S = X T ⊆Y ⊆Z⊆S T ⊆Y ⊆S |Y \T | (−1) ϕ(Z) = X Y ⊆Z⊆S ϕ(Z) T ⊆Z⊆S 77 X T ⊆Y ⊆Z (−1)|Y \T | = = X |Z\T | ϕ(Z) = X (−1)|Y \T | = i=0 T ⊆Y ⊆Z, |Y |=|T |+i T ⊆Z⊆S X X µ |Z\T | ϕ(Z) T ⊆Z⊆S X (−1) i i=0 |Z \ T | i ¶ = X ϕ(Z)δo (|Z \ T |) = ϕ(T ). T ⊆Z⊆S Здесь δo (n) — дельта-функция, которую мы обсуждали в замечании 1.5.1 параграфа 1.5.5. ¤ P Следствие 1.8.2 . Поскольку, f≥ (T ) = T ⊆Y ⊆S f= (Y ), то для любого T ⊆S X f= (T ) = (−1)|Y \T | f≥ (Y ). (20) T ⊆Y ⊆S В частности, f= (∅) = X (−1)|Y | f≥ (Y ). (21) ∅⊆Y ⊆S Этот результат помогает решить многие задачи. 1.8.2 Задача о беспорядках Интуитивная постановка задачи о беспорядках: Задача 1.8.1 . Пусть, в рамках чемпионата в n городах должно пройти ровно по одному матчу. Матчи судят n судей, каждый из которых из одного из городов, все из разных. Сколькими способами можно распределить судей по матчам, чтобы ни один судья не судил в своем городе? Можно привести другую формулировку задачи, математическая идея которой будет той же. Задача 1.8.2 . Пусть n человек пришли в театр и сдали шляпы в гардероб. Когда спектакль закончился и зрители получили шляпы назад, оказалось, что каждый из n получил чужую шляпу. Сколько существует вариантов такого события? 78 Формально задача ставится следующим образом. Определение 1.8.1 . Беспорядком на множестве {1, ..., n} называется перестановка, которая не сохраняет ни одного элемента: π(i) 6= i, i = 1, n. Задача 1.8.3 . Найти число беспорядков на множестве {1, ..., n}: D(n) = |{π | π ∈ σn , π(i) 6= i, i = 1, n}|. Решим эту задачу с помощью принципа включения-исключения. Будем говорить, что π ∈ σn обладает свойством i, если π(i) = i. Тогда S = {1, ..., n} — множество всех свойств, которыми может обладать перестановка. Пусть T ⊆ S. Пусть f= (T ) — число перестановок, каждая из которых обладает всеми свойствами из T и не обладает свойствами из S \ T : f= (T ) = |{π | π ∈ σn , π(i) = i, i ∈ T ; π(j) 6= j, j ∈ S \ T }|. f≥ (T ) — число перестановок, каждая из которых обладает всеми свойствами из T и возможно какими-то еще: f≥ (T ) = |{π | π ∈ σn , π(i) = i, i ∈ T }|. P Следовательно верна формула (19): f≥ (T ) = T ⊆Y ⊆S f= (Y ). Нетрудно видеть, что f≥ (T ) = |S \ T |! — число перестановок на множестве S \ T . Очевидно, D(n) = f= (∅). Следующее утверждение решает задачу. Pn (−1)i Утверждение 1.8.3 . D(n) = n! i=0 i! . Доказательство. Так как f≥ (T ) = |S \ T |!, то по формуле (21) X X |Y | D(n) = f= (∅) = (−1) f≥ (Y ) = (−1)|Y | |S \ Y |! = Y ⊆S = n X X Y ⊆S µ ¶ n (−1) (n − i)! = (−1) (n − i)! = i i=0 i=0 Y ⊆S, |Y |=i n X n X i i n X − i)! n! (−1)i = (−1) = n! . i! (n − i)! i! i=0 i=0 i (n ¤ 79 1.8.3 Мощность объединения множеств Приведем еще одну задачу, которая решается с помощью принципа включения-исключения, — задачу нахождения мощности объединения пересекающихся множеств. Задача 1.8.4 . Пусть A1 , A2 , ..., Ak — конечные множества. Пусть A = A1 ∪ A2 ∪ ...T ∪ Ak . Требуется найти мощность A, если известны |Ai |, i = 1, k, и | i∈I Ai |, I ⊆ {1, 2, ..., k}. Пусть S = {1, 2, ..., k} и T ⊆ S. Будем говорить, что x ∈ A обладает свойством i, если x ∈ Ai . Обозначим f= (T ) — число элементов из A, обладающих всеми свойствами из T и не обладающих другими свойствами из S; f≥ (T ) — число элементов из A, обладающих всеми свойствами из T . T Очевидно, f≥ (T ) = | i∈T Ai |, если T не пусто и f≥ (∅) = |A| Тогда верна формула (19) и, следовательно, можно использовать формулу (21). Утверждение 1.8.4 . |A1 ∪ A2 ∪ ... ∪ Ak | = |Ai | − i=1 X + k X X |Ai1 ∩ Ai2 |+ 1≤i1 f (βen ). Очевидно, что f (e αn ) = 1 и f (βen ) = 0. Пусть α en отличен от βen в t позициях. a) Пусть t = 1. Тогда α en ≺0 βen для некоторого i верно, что α en = (α1 , ..., αi−1 , 0, αi+1 , ..., αn ) и βen = (α1 , ..., αi−1 , 1, αi+1 , ..., αn ). Определим функцию ϕ(x) следующим образом: ϕ(x) = f (α1 , ..., αi−1 , x, αi+1 , ..., αn ). Тогда: ϕ(0) = f (α1 , ..., αi−1 , 0, αi+1 , ..., αn ) = 1 ϕ(1) = f (α1 , ..., αi−1 , 1, αi+1 , ..., αn ) = 0. То есть ϕ(x) = x, что и требовалось доказать. b) Пусть теперь t > 1. В этом случае построим последовательность наборов α en = γ en (0) ≺ γ en (1) ≺ ... ≺ γ en (t − 1) ≺ γ en (t) = βen , 121 где каждая пара наборов γ en (i − 1) и γ en (i) отличаются только в одной позиции, i = 1, t. Это не трудно сделать, последовательно заменяя каждую позицию, в которой наборы α en и βen различаются с нуля на единицу. Поскольку f (e αn ) = 1 и f (βen ) = 0, найдется такое k, что γ en (k − 1) = 1 и γ en (i) = 0. Такая ситуация возвращает нас к пункту a) доказательства. ¤ Пример 2.1.26 (Построение x с помощью немонотонной функции). Пусть f (x, y, z) = x ⊃ (y ⊕ z). Эта функция немонотонна, так как f (0, 0, 0) = 0 ⊃ (0 ⊕ 0) = 1 > 0 = 1 ⊃ (1 ⊕ 1) = f (1, 1, 1). Рассмотрим последовательность наборов (0, 0, 0) ≺ (0, 0, 1) ≺ (0, 1, 1) ≺ (1, 1, 1) и значения функции f на этих наборах 1 = f (0, 0, 0) = f (0, 0, 1) = f (0, 1, 1) > f (1, 1, 1) = 0. Тогда ϕ(x) = f (x, 1, 1) = x. Действительно, ϕ(x) = x ⊃ (1 ⊕ 1) = x ⊃ 0 = x. 2.1.12 Линейность Определение 2.1.27 . Пусть f (x1 , ..., xn ) ∈ P2 . линейная, если ее полином Жегалкина имеет вид Функция f — f (x1 , ..., xn ) = α0 ⊕ α1 x1 ⊕ α2 x2 ⊕ ... ⊕ αn xn . Обозначим L — класс всех линейных функций. Пример 2.1.27 . x — линейная функция. Функция x ∨ y не является линейной. Утверждение 2.1.23 . Класс функций L замкнут. 122 Доказательство. Рассмотрим суперпозицию ранга 1 от функций из L. a) Пусть f (x1 , ..., xn ) ∈ L и g(x1 , ..., xj−1 , xj+1 , ..., xn , y) = f (x1 , ..., xj−1 , y, xj+1 , ..., xn ). Если f (x1 , ..., xn ) = α0 ⊕ α1 x1 ⊕ α2 x2 ⊕ ... ⊕ αn xn , то g(x1 , ..., xj−1 , xj+1 , ..., xn , y) = = α0 ⊕ α1 x1 ⊕ ... ⊕ αj−1 xj−1 ⊕ αj y ⊕ αj+1 xj+1 ⊕ ... ⊕ αn xn . Следовательно g(x1 , ..., xj−1 , xj+1 , ..., xn , y) ∈ L. b) Пусть f (x1 , ..., xn ) ∈ L и h(y1 , ..., ym ) ∈ L и g(x1 , ..., xj−1 , xj+1 , ..., xn , y1 , ..., ym ) = = f (x1 , ..., xj−1 , h(y1 , ..., ym ), xj+1 , ..., xn ). Пусть f (x1 , ..., xn ) = α0 ⊕ α1 x1 ⊕ α2 x2 ⊕ ... ⊕ αn xn и h(y1 , ..., ym ) = β0 ⊕ β1 y1 ⊕ β2 y2 ⊕ ... ⊕ βm ym . Тогда g(x1 , ..., xj−1 , xj+1 , ..., xn , y1 , ..., ym ) = α0 ⊕ α1 x1 ⊕ ... ⊕ αj−1 xj−1 ⊕ ⊕ αj (β0 ⊕ β1 y1 ⊕ ... ⊕ βm ym ) ⊕ αj+1 xj+1 ⊕ ... ⊕ αn xn = = (α0 ⊕ αj β0 ) ⊕ α1 x1 ⊕ ... ⊕ αj−1 xj−1 ⊕ αj+1 xj+1 ⊕ ... ⊕ αn xn ⊕ ⊕ αj β1 y1 ⊕ ... ⊕ αj βm ym . Если некоторая переменная xi совпадает с переменной yj , сложим коэффициенты по модулю 2. Полученный полином Жегалкина линеен. Следовательно, g(x1 , ..., xj−1 , xj+1 , ..., xn , y1 , ..., ym ) ∈ L. Таким образом, [L] = L. ¤ 123 Замечание 2.1.21 . Тождественная функция f (x) = x лежит в классе L. Дизъюнкция f (x) = x ∨ y не лежит в L. Таким образом, L 6= ∅ и L 6= P2 . Лемма 2.1.24 (О нелинейной функции). Пусть f (x1 , ..., xn ) ∈ / L. Тогда, подставляя в f вместо аргументов константы, x, y, x, y и, возможно, навешивая отрицание над f можно получить x ∧ y. L V Доказательство. Пусть f (x1 , ..., xn ) = I⊆{1,...,n} α(I) i∈I xi и f ∈ / L. ∗ ∗ ∗ Тогда существует I ⊆ {1, ..., n}: |I | ≥ 2, α(I ) 6= 0. Не умаляя общности, положим {1, 2} ⊆ I ∗ . f (x1 , ..., xn ) = = x1 x2 f1,2 (x3 , ..., xn ) ⊕ x1 f1 (x3 , ..., xn ) ⊕ x2 f2 (x3 , ..., xn ) ⊕ f0 (x3 , ..., xn ), причем ∃α3 , ..., αn : f1,2 (α3 , ..., αn ) = 1. Действительно, такие α3 , ..., αn существуют, поскольку, если бы f1,2 (σ3 , ..., σn ) = 0, ∀σ3 , ..., σn ∈ {0, 1}, то функция f приняла бы вид f (x1 , ..., xn ) = x1 f1 (x3 , ..., xn ) ⊕ x2 f2 (x3 , ..., xn ) ⊕ f0 (x3 , ..., xn ), что противоречит нашему предположению, что {1, 2} ⊆ I ∗ и α(I ∗ ) = 1. Рассмотрим ψ(x, y) = f (x, y, α3 , ..., αn ) = xy ⊕ xf1 (α3 , ..., αn )⊕ ⊕ yf2 (α3 , ..., αn ) ⊕ f0 (α3 , ..., αn ) = xy ⊕ xβ ⊕ yγ ⊕ δ. Теперь определим ϕ(x, y), как ϕ(x, y) = ψ(x ⊕ γ, y ⊕ β) ⊕ γβ ⊕ δ. Тогда ϕ(x, y) = ((x ⊕ γ)(y ⊕ β) ⊕ (x ⊕ γ)β ⊕ (y ⊕ β)γ ⊕ δ) ⊕ γβ ⊕ δ = = xy ⊕ xβ ⊕ yγ ⊕ γβ ⊕ xβ ⊕ γβ ⊕ yγ ⊕ γβ ⊕ δ ⊕ γβ ⊕ δ = xy. Таким образом, мы получили функцию ϕ(x, y) = x ∧ y, причем ϕ(x, y) = f (x ⊕ f2 (α3 , ..., αn ), y ⊕ f1 (α3 , ..., αn ), α3 , ..., αn )⊕ ⊕ f1 (α3 , ..., αn )f2 (α3 , ..., αn ) ⊕ f0 (α3 , ..., αn ), где добавление к x и y констант f2 (α3 , ..., αn ) и f1 (α3 , ..., αn ) равносильно навешиванию отрицания над переменной, если соответствующая 124 константа равна 1, а добавление константы f1 (α3 , ..., αn )f2 (α3 , ..., αn ) ⊕ f0 (α3 , ..., αn ) к f означает возможное навешивание отрицания над этой функцией. ¤ Пример 2.1.28 (Построение x ∧ y с помощью нелинейной функции). Пусть f (x, y, z) = x ⊃ (y ⊕ z). Построим полином Жегалкина этой функции методом неопределенных коэффициентов. f (x, y, z) = α0 ⊕ α1 x ⊕ α2 y ⊕ α3 z ⊕ α1,2 xy ⊕ α1,3 xz ⊕ α2,3 yz ⊕ α1,2,3 xyz. x 1 1 1 1 y 1 1 1 1 z 1 1 1 1 f (x, y, z) 1 1 1 1 1 1 α0 = 1 α3 = 0 α2 = 0 α2,3 = 0 α1 = 1 α1,3 = 1 α1,2 = 1 α1,2,3 = 0 Таким образом f (x, y, z) = 1 ⊕ x ⊕ xy ⊕ xz и функция f нелинейна. Построим функцию ϕ(x, y) = x ∧ y. В нашем случае коэффициент при xy не равен нулю; выделим в полиноме Жегалкина переменные x и y. f (x, y, z) = 1 ⊕ x ⊕ xy ⊕ xz = xy · 1 ⊕ x · (1 ⊕ z) ⊕ 1 Тогда можно положить z = 0 и в терминах леммы 2.1.24 получим, что β = 1, γ = 0, δ = 1 и ϕ(x, y) = f (x ⊕ γ, y ⊕ β, 0) ⊕ γβ ⊕ δ = ¬f (x, y, 0) Проверим, что ϕ соответствует конъюнкции: ϕ(x, y) = (x ⊃ (y ⊕ 0)) = x ⊃ y = x ∨ y = x ∧ y. 125 2.1.13 Критерий полноты системы функций Итак, мы рассмотрели пять классов функций T0 , T1 , S, M , L. T0 ¬x − 0 + 1 − xy + T1 − − + + S + − − − M − + + + L + + + − Каждый из этих классов функций замкнут и, как можно видеть из таблицы, ни один не совпадает с P2 . Теорема 2.1.25 (Теорема Поста). Для полноты системы функций P ⊆ P2 необходимо и достаточно, чтобы P не лежал полностью ни в одном из классов T0 , T1 , S, M , L: P 6⊆ T0 , P 6⊆ T1 , P 6⊆ S, P 6⊆ M, P 6⊆ L. Доказательство. Необходимость. Если система функций P лежит полностью в одном из классов R ∈ {T0 , T1 , S, M, L}, то, поскольку все эти классы замкнуты и не совпадают с P2 , [P] ⊆ [R] 6= P2 . Тогда система P — не является полной. Докажем достаточность. Пусть f0 , f1 , fS , fM , fL ∈ P такие функции, что f0 ∈ / T0 , f1 ∈ / T1 , f S ∈ / S, fM ∈ / M , fL ∈ / L (некоторые из функций могут совпадать). Проведем доказательство в несколько этапов. 1) Покажем, что с помощью f0 , f1 , fS можно получить 0 и 1. a) Пусть f0 (1, ..., 1) = 1. Пусть ϕ(x) = f0 (x, ..., x). Тогда ϕ(0) = ϕ(1) = 1. Значит ϕ(x) = 1 и, имея единицу, можно получить вторую константу 0 = f1 (1, ..., 1). b) Пусть теперь f0 (1, ..., 1) = 0. Тогда ϕ(x) = f0 (x, ..., x) = x. Подставляя в fS x и x по лемме о несамодвойственной функции получаем константу 0 или 1 и с помощью x получаем вторую константу. 2) По лемме о немонотонной функции, подставляя константы в fM можно получить ¬x. 3) Используя fL , константы и ¬x, по лемме о нелинейной функции можно получить x ∧ y. 126 Так как {¬, ∧} — полная системя функций, то и система P — полная. ¤ Пример 2.1.29 . Требуется проверить на полноту систему функций P = {0, 1, xy, x ⊕ y ⊕ z}. Рассмотрим принадлежность функций P классам T0 , T1 , S, M , L и заполним таблицу. T0 + 1 − xy + x⊕y⊕z + T1 − + + + S − − − + M + + + − L + + − + Рассмотрим, например, проверку функции x ⊕ y ⊕ z: a) 0 ⊕ 0 ⊕ 0 = 0 ⇒ x ⊕ y ⊕ z ∈ T0 ; b) 1 ⊕ 1 ⊕ 1 = 1 ⇒ x ⊕ y ⊕ z ∈ T1 ; c) x ⊕ y ⊕ z = 1⊕(1⊕x)⊕(1⊕y)⊕(1⊕z) = x⊕y⊕z ⇒ x⊕y⊕z ∈ S; d) (1, 0, 0) ≺ (1, 1, 0), но 1 = 1⊕0⊕0 > 1⊕1⊕0 = 0 ⇒ x⊕y⊕z ∈ / M; e) Очевидно, функция является линейной: x ⊕ y ⊕ z ∈ L. Теперь, заполнив и проанализировав таблицу, можно убедиться, что система функций P является полной, так как в каждом столбце, соответствующем одному из классов присутствует хотя бы один минус. В то же время ни одно подмножество P полной системой не является, поскольку, если вычеркнуть в таблице хотя бы одну строку, появится столбец не имеющий минуса. Определение 2.1.28 . Пусть M — замкнутый класс функций. Пусть B ⊆ M. B называется базисом класса M, если 1) [B] = M; 2) ∀f ∈ B ⇒ [B \ {f }] 6= M. Пример 2.1.30 . 1) Система из примера 2.1.29 является базисом P2 . 2) Система {0, 1, xy, x ⊕ y} полная, но базисом P2 не является. 127 Базисом P2 будет ее подсистема {1, xy, x ⊕ y}. T0 + 1 − xy + x⊕y + T1 − + + − 128 S − − − − M + + + − L + + − + 3 3.1 3.1.1 Теория алгоритмов Машины Тьюринга Понятие алгоритма Интуитивно алгоритм можно рассматривать как последовательность действий, которая обладает рядом свойств. 1) Входные данные. Поскольку алгоритм решает некоторую общую задачу, он обычно получает некоторые инициирующие данные, в зависимости от которых выполняется. 2) Выходные данные. Любой алгоритм должен давать какой-то результат от своего выполнения. 3) Определенность. В каждый момент времени мы должны точно знать, какое действие выполнить следующим. 4) Элементарность. Это свойство значит, что каждый шаг алгоритма должен быть достататочно прост, чтобы его выполнение не требовало разбиения на меньшие шаги. 5) Конечность. Чтобы выдать результат алгоритм обычно должен завершить свою работу. Для того, чтобы дать строго формальное определение алгоритма, введем понятие машины Тьюринга. 3.1.2 Машина Тьюринга Определение 3.1.1 . Машиной Тьюринга называется совокупность пяти объектов < A, ¤, Q, q1 , I >: 1. Алфавит A = {a1 , ..., an } — множество символов данной машины Тьюринга; |A| ≥ 1. Иногда алфавит называют множеством внешних состояний машины Тьюринга. 2. Пустой символ ¤ ∈ / A. 3. Множество состояний Q = {q1 , ..., qk }, |Q| ≥ 1. В некоторых случаях это множество также называют множеством внутренних состояний машины Тьюринга. 4. Начальное состояние q1 ∈ Q. 5. Программа I — множество команд вида qi a → qj b, где qi , qj ∈ Q, 129 a ∈ {¤} ∪ A, b ∈ {¤, L, R} ∪ A. Здесь L и R выделенные символы, такие что L, R ∈ / {¤} ∪ A. Кроме того, для любых qi ∈ Q и a ∈ {¤} ∪ A в программе I может быть не больше одной команды qi a → qj b (иными словами, в I нет двух команд с одинаковой левой частью). Процесс функционирования машины Тьюринга. Машина Тьюринга (рис. 15) состоит из бесконечной в обе стороны ленты, разбитой на одинаковые ячейки, а также читающе-пишущей головки. В ячейках ленты могут быть записаны символы алфавита или пустой символ. Рисунок 15: Машина Тьюринга Работа машины Тьюринга понимается следующим образом (рис. 16). В начальный момент времени на ленте записано конечное слово α в Рисунок 16: Функционирование машины Тьюринга. 130 алфавите A (или несколько слов разделенных пустым символом ¤) окруженное слева и справа бесконечным количеством пустых символов ¤; машина Тьюринга находится в состоянии q1 и ее головка обозревает самую левую ячейку слова α. Пусть там записан символ ai1 . В I ищется команда с q1 ai1 в левой части. Если такая команда не найдется, машина останавливается. Если команда найдется и это q1 ai1 → q 0 ai0 , машина переходит в состояние q 0 и выполняется одно из действий в зависимости от значения ai0 : если ai0 ∈ A ∪ {¤}, в обозреваемую машиной ячейку записывается символ ai0 ; если ai0 ∈ {L, R}, машина передвигается на одну ячейку влево, при ai0 = L, или на одну ячейку вправо, при ai0 = R. В каждый следующий момент времени, если машина Тьюринга находится в состоянии qi и обозревает некоторую ячейку, в которой записан символ a ∈ {¤}∪A, в программе ищется команда qi a → qj b. Если такая команда не будет найдена, машина останавливается. Если команда найдется, выполняются соответствующие действия, как для первого шага работы. Если машина Тьюринга останавливается, то говорят, что эта машина принимает слово α, а оставшееся на ленте слово β (или несколько слов, разделенных пустым символом) считается результатом ее работы. Замечание 3.1.1 . Можно заметить, что машина Тьюринга удовлетворяет всем пунктам интуитивного определения алгоритма: 1) Входные данные. Входными данными машины Тьюринга является информация на ленте перед началом работы. 2) Выходные данные. Результатом работы машины Тьюринга является содержание ленты после ее остановки. 3) Определенность. Условие на программу, не допускающее двух команд с одинаковой левой частью, гарантирует, что в любой момент времени у нас будет не более одной подходящей команды для следующего шага. 4) Элементарность. Все возможные действия машины Тьюринга сводятся к сдвигам головки на одну позицию, а также чтению/записи символа из/в текущую ячейку. 5) Конечность. По своему определению машина Тьюринга может не остановиться. Отвественность за конечность ее работы лежит на программе. 131 Пример 3.1.1 . Машина M3 . A = {1}, I: Q = {q1 , q2 , q3 }. q1 ¤ → q1 1 q1 1 → q2 L q2 ¤ → q2 1 q2 1 → q3 L q3 ¤ → q3 1 Пусть, в начале работы на ленте записано слово Λ — пустое слово (все ячейки на ленте содержат пустой символ). Тогда в по окончании работы на ленте будет слово 111. Выпишем конфигурации, в которых будет находится машина M3 в процессе своей работы (рис. 17). q1 ¤ ¤ ¤ ¤ q1 ¤ ¤ ¤ 1 q2 ¤ ¤ ¤ 1 q2 ¤ ¤ 1 1 q3 ¤ ¤ 1 1 q3 ¤ 1 1 1 ¤ — начальная конфигурация ¤ ¤ ¤ ¤ ¤ — конечная конфигурация Рисунок 17: Конфигурации в процессе рабоы машины M3 Очевидно, что аналогично можно построить машину Mn с n состояниями, которая будет строить на пустой ленте слово из n единиц. 3.1.3 Способы записи машины Тьюринга Для однозначного определения машины Тьюринга достаточно задать ее программу. Действительно, если мы сравним две машины с одинаковой 132 программой, то окажется, что они могут отличаться только элементами из множеств A и Q какой-то из машин, которые не используются ни в одной из команд. В таком случае, это символы алфавита, на которые данная машина никак (за исключением остановки) не отреагирует, или состояния, в которые она никогда не перейдет. С точки зрения обработки входных данных, между такими машинами не будет никакой разницы. Прямой записью машины Тьюринга будет простое перечисление команд программы через запятую или в столбец, как мы это сделали в примере 3.1.1. Этот способ не очень удобен для понимания структуры программы и поиска нужной команды. Более удобным представлением может оказаться таблица (n + 1) × k, в которой по вертикали перечисляются символы из A ∪ {¤}, а по горизонтали состояния машины. В ячейке в строке, соответствующей символу a, и столбце, соответствующем состоянию qi записывается qj b, если в программе данной машины есть команда qi a → qj b. Например, таблица для программы из примера 3.1.1 будет выглядеть следующим образом: q1 q2 q3 ¤ q1 1 q2 1 q3 1 1 q2 L q 3 L При этом представлении гораздо проще быстро определить, какая команда должна выполняться в следующий момент. Кроме того, из таблицы очевидно, машина может остановиться в том и только в том случае, если она в какой-то момент окажется в состоянии q3 и ее головка будет обозревать символ 1. Наиболее точно представляет структуру работы машины Тьюринга граф переходов. Граф переходов для машины из примера 3.1.1 представлен на рисунке 18. Каждая вершина такого графа соответствует одному из состояний машины Тьюринга, а каждая стрелка — команде программы этой машины. Например, команде q1 ¤ → q1 1 соответствует стрелка от вершины q1 к ней же самой, а над стрелкой указана замена символа ¤ на символ 1: "¤ : 1"; команде q1 1 → q2 L соответствует стрелка от вершины q1 к вершине q2 с пометкой "1 : L". 133 q1 :1 :1 :1 1:L q2 1:L q3 Рисунок 18: Граф переходов машины M3 3.1.4 Стандартные конфигурации Пусть M — машина Тьюринга с алфавитом A и множеством состояний Q. Определение 3.1.2 . Пусть ..., γ−3 , γ−2 , γ−1 , γ0 , γ1 , γ2 , γ3 , ... — символы на ленте M . Пусть существуют i, j : i ≤ j, γi , γj ∈ A, и γk = ¤, при k < i или k > j. Тогда γ = γi , γi+1 , ..., γj — слово на ленте машины M . Если для любых i имеем γi = ¤, то говорят, что на ленте записано пустое слово: γ = Λ. Определение 3.1.3 . Расширением слова на ленте называется запись δγσ, где γ — слово на ленте, δ и σ слова конечной или нулевой длины из символа ¤. Определение 3.1.4 . Конфигурация, в которой находится машина Тьюринга в определенный момент времени, может быть представлена записью вида τk , τk+1 , ..., τl−1 , q, τl , ..., τm , где τk , τk+1 , ..., τm — расширение слова на ленте, q — состояние, в котором находится машина M , а l — номер ячейки, которую обозревает головка машины. Определение 3.1.5 . Стандартная начальная конфигурация имеет вид ¤q1 α¤, где α — слово на ленте. 134 Определение 3.1.6 . Стандартная конечная конфигурация имеет вид ¤qβ¤, где q ∈ Q, β — слово на ленте; β = Λ или β = βi , ..., βj , βs 6= ¤, при i ≤ s ≤ j. Определение 3.1.7 . Длина слова на ленте γ — ½ j − i + 1, γ = γi , ..., γj , L(γ) = 0, γ = Λ. Определение 3.1.8 . Пусть, M — машина Тьюринга. M (α) — конфигурация, в которой останавливается машина Тьюринга M , запущенная из стандартной начальной конфигурации ¤q1 α¤. M (α) неопределена, если M не остановится. Определение 3.1.9 . Говорят, что машина Тьюринга M принимает слово α, если M (α) — стандартная конечная конфигурация. 3.1.5 Вычислимые функции Далее в нашем курсе будем рассматривать только машины Тьюринга с алфавитом A = {1}. Каждой такой машине M соответствует частичная функция fM : N0 → N0 . Определение 3.1.10 . Пусть, M — машина Тьюринга. Тогда, для любого i ∈ N0 ,   если M (11...1  | {z }) = ¤qβ¤ — стандартная  L(β), i fM (i) = конечная конфигурация;    неопред., иначе. Пример 3.1.2 . Машина M×2 . A = {1}, Q = {q1 , q2 , ..., q9 }. α = 111...1 — слово из n единиц. β = 111...1 — слово из 2n единиц. Программа машины M×2 представлена графом переходов на рисунке 19. Выпишем конфигурации, в которых будет находиться машина M×2 в процессе своей работы, если α = 1 (рисунок 20). Результатом работы оказывается слово 11, что соответствует удвоенному входному слову. 135 q1 1: q2 :R 1:R 1:R 1:R :R q3 q4 :1 q5 1:L :1 q6 :L :R 1:L q8 q7 1:L :R q9 :R Рисунок 19: Граф переходов машины удвоения ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ q1 1 q2 ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ q7 ¤ ¤ ¤ ¤ ¤ q3 ¤ ¤ ¤ ¤ ¤ ¤ q6 ¤ ¤ q9 ¤ ¤ ¤ ¤ ¤ q4 ¤ q5 1 1 1 q6 1 1 1 1 q9 1 ¤ ¤ ¤ ¤ ¤ q5 ¤ q6 1 1 1 1 1 1 ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ Рисунок 20: Конфигурации в процессе работы машины M×2 136 Работа машины M×2 на входном слове из двух и более единиц рассматривается аналогично. Очевидно, fM×2 (i) = 2i для любых i ∈ N0 . Определение 3.1.11 . Функция f : N0 → N0 называется вычислимой, если существует такая машина Тьюринга M , что f = fM . В противном случае, f — невычислимая функция. Утверждение 3.1.1 (О существовании невычислимых функций). Существует невычислимая функция f : N0 → N0 . Доказательство. 1) Для начала покажем, что множество машин Тьюринга счетно. Во-первых, множество машин Тьюринга не может быть конечным. Мы ранее упомянали, что для любого n ∈ N можно построить машину Mn , с n состояниями, которая рисует n единиц, начиная работу с пустой ленты. Если мы построим последовательность машин Тьюринга M1 , M2 , ..., Mn , ..., которая будет иметь счетную длину. Значит, множество машин Тьюринга не менее, чем счетно. Как было замечено ранее в параграфе 3.1.3, машина Тьюринга практически полностью определяется своей программой. Значит, чтобы пересчитать различные машины Тьюринга, достаточно пересчитать различные программы. Сопоставим любому множеству команд I, отвечающих определению программы машины Тьюринга число как описано ниже. Рассмотрим алфавит X = {¤, 1, ∗, L, R}. Пусть ¤ < 1 < ∗ < L < R. Тогда на множестве слов алфавита X можно определить строгий линейный (например, лексикографический) порядок. Пронумеруем все слова алфавита X следующим образом: сначала по порядку идут все слова алфавита X длины 1, следующие номера получают в том же порядке слова длины 2, затем — длины 3 и так далее. Так мы пронумеруем натуральными числами все слова алфавита X. Каждой команде программы qi a → qj b сопоставим слово ∗...∗ |{z} a ∗...∗ |{z} b i j 137 в алфавите X. Такое слово однозначно описывает команду. Действительно, для определения состояний нам достаточно знать их номера (никакая другая информация об элементах множества Q машиной Тьюринга не используется), а для любых a ∈ {¤} ∪ A = {¤, 1}, b ∈ {¤, L, R} ∪ A = {¤, L, R, 1} у нас имеются подходящие символы в алфавите X. Программе I можно сопоставить конкатенацию таких слов; очевидно, что разным программам не могут соответствовать совпадающие конкатенации и по такой конкатенации можно однозначно восстановить исходную программу. Но, поскольку команды в программе не упорядочены, одной программе могут соответствовать записи, полученные одна из другой изменением порядка команд. Из всех записей, сопоставленных одной и той же программе будем выбирать ту, номер которой, в выбранной ранее нумерации всех слов алфавита X, будет наименьшим; этот номер сопоставим программе I. Таким образом, все различные программы машин Тьюринга пронумерованы числами из некоторого подмножества множества натуральных чисел и, следовательно, число машин Тьюринга не более чем счетно. С другой стороны, множество машин Тьюринга не может быть конечным. Чтобы показать это, достаточно вспомнить про множество машин Тьюринга Mn , i = 1, ∞, из примера 3.1.1, которые рисуют n единичек, начиная работу с пустой ленты. Все эти машины различны и их счетное число. Следовательно число машин Тьюринга счетно. 2) Теперь покажем, что число частичных функций f : N0 → N0 более чем счетно. Рассмотрим множество всех частичных функций N0 → N0 : A = {f | f : N0 → N0 } и рассмотрим подмножество этого множества B = {f | f : N0 → {0, 1}, f — всюду определена на N0 }. Если мы докажем, что множество B более чем счетно, то, очевидно, это будет верно и для множества A. 138 Предположим, что множество B счетно. Тогда все функции из B можно пронумеровать натуральными числами. Пусть тогда, B = {f1 , f2 , f3 , ....}. Рассмотрим функцию f , определенную следующим выражением: f (i) = 1 − fi (i), i = 1, ∞. (31) По определению это функция f : N0 → {0, 1} и всюду определена на N0 . Тогда должен существовать индекс k, которым функция f пронумерована в множестве B, но из формулы 31 следует, что f (k) = 1 − fk (k) 6= fk ?! Это противоречие доказывает, что как бы мы не нумеровали элементы B, всегда найдется ненумерованная функция. Следовательно, множество B имеет несчетную мощность, а, значит, и множество A также более чем счетно. 3) Поскольку число машин Тьюринга счетно, а число частичных функций f : N0 → N0 более чем счетно, мы не можем сопоставить каждой функции свою машину Тьюринга. Таким образом, должны существовать функции, которые не будут являться вычислимыми, что и требовалось доказать. ¤ 3.1.6 Алгоритмически неразрешимые задачи В силу интуитивности понятия алгоритма, вопрос о существовании алгоритмического решения некоторого класса задач оставался без ответа. Избавиться от неопределенности позволил тезис Тьюринга-Черча, который устанавливает соответствие между интуитивным понятием алгоритмически разрешимой задачи и понятием машины Тьюринга, которое возможно изучать с формально-математической точки зрения. Тезис Тьюринга-Чёрча: Любой алгоритм в интуитивном смысле этого слова может быть представлен эквивалентной машиной Тьюринга. Физический тезис Тьюринга-Чёрча: Любая функция, которая может быть вычислена физическим устройством, может быть вычислена машиной Тьюринга. 139 Этот тезис позволяет нам четко определить алгоритмически неразрешимую проблему, как проблему, для которой не существует решающей ее машины Тьюринга. Из теоремы 3.1.1 следует, что существуют функции, которые нельзя вычислиь с помощью машин Тьюринга, а значит алгоритмически неразрешимые задачи существуют. Далее в этом параграфе приведем пример такой функции. Определим функцию "Продуктивность" следующим образом: ½ fM (0), fM (0) — определена, Продуктивность(M ) = 0, иначе . Пример 3.1.3 . Машина Тьюринга на рисунке 21 имеет продуктивность 2, поскольку запущенная на пустой ленте она рисует две единички и останавливается. Машина Тьюринга на рисунке :1 :1 q1 1:L q2 Рисунок 21: Машина с двумя состояниями и продуктивностью 2 22, запущенная на пустой ленте, не останавливается, а рисует бесконечную последовательность единиц. Ее продуктивность — 0. :1 :1 q1 1:L 1:L q2 Рисунок 22: Машина с двумя состояниями и продуктивностью 0 140 Определение 3.1.12 . Введем функцию продуктивности машины Тьюринга с n состояниями. p(n) = max M – м.Т. с n состояниями Продуктивность(M ), максимальной n ∈ N. Чтобы получить функцию N0 → N0 , доопределим функцию p в нуле: p(0) = 0. Лемма 3.1.2 (о свойствах фукнции p(n)). 1) p(n + 1) > p(n) (монотонность), 2) p(n + 9) ≥ 2n. Пусть n ∈ N0 . Тогда Доказательство. 1) Пусть M — такая машина Тьюринга с n состояниями, что Продуктивность(M ) = p(n). Построим машину M 0 на основе машины M согласно рисунку 23, добавляя к машине одно состояние и увеличивая продуктивность на единицу. M (Λ) = ¤qn |{z} 1...1 ¤, p(n) :1 q1 M qn 1:L qn+1 Рисунок 23: Машина M 0 а машина M 0 содержит дополнительное состояние и две новые команды qn 1 → qn+1 L и qn+1 ¤ → qn+1 1 которые сдвигают головку на одну ячейку влево и дорисовывают дополнительную единицу, так что M 0 (Λ) = ¤qn+1 |{z} 1...1 ¤. Мы получили машину Тьюринга M 0 с n + 1 p(n)+1 состоянием и продуктивностью p(n) + 1. Следовательно p(n + 1) ≥ Продуктивность(M 0 ) = p(n) + 1 > p(n). 2) Построим машину M 00 на основе машин Mn из примера 3.1.1 и M×2 из примера 3.1.2 согласно рисунку 24: машина Mn рисует n единиц а 141 машина M×2 удваетвает это число. Поскольку у машины Mn n состояний, а у M×2 — 9 состояний, то у машины M 00 n + 9 состояний. Таким образом, M 00 (Λ) = ¤qn+9 |{z} 1...1 ¤. Тогда 2n q1 qn Mn 1:1 qn+1 M x2 q n+9 Рисунок 24: Машина M 00 p(n + 9) ≥ Продуктивность(M 00 ) = 2n. ¤ Теорема 3.1.3 (об алгоритмической неразрешимости задачи вычисления функции p(n)). Не существует машины Тьюринга T , для которой fT (n) = p(n) для всех n ∈ N0 . Доказательство. Пусть такая машина T существует и пусть у нее k состояний. Построим машину M с n + 2k состояниями таким образом, чтобы ее продуктивность была равна p(p(n)): M (Λ) = ¤qn+2k |{z} 1...1 ¤. p(p(n)) Машина M получается путем соединения машины Mn с n состояниями из примера 3.1.1 с двумя копиями машины T (рис. 25); всего у машины M n + 2k состояний. Проверим, что продуктивность такой машины p(p(n)). Сначала на пустом слове работает машина Mn и рисует на ленте n единичек: Mn (Λ) = ¤qn |{z} 1...1 ¤. n Затем работает копия машины T с состояниями qn+1 , ..., qn+k . Получая в качестве аргумента n, машина вычисляет функцию p(n): T (¤ |{z} 1...1 ¤) = ¤qn+k |{z} 1...1 ¤. n p(n) 142 q1 Mn qn 1:1 qn+1 T qn+k1:1 qn+k+1 T qn+2k Рисунок 25: Машина с продуктивностью p(p(n)) Последней работает копия машины T с состояниями qn+k+1 , ..., qn+2k , вычисляя максимальную продуктивность от своего аргумента: T (¤qn+k |{z} 1...1 ¤) = ¤qn+2k |{z} 1...1 ¤. p(n) p(p(n)) Следовательно, искомая машина M построена. По построению, у машины M n + 2k состояний. Следовательно, p(p(n)) = Продуктивность(M ) ≤ p(n + 2k). Тогда, p(n) ≤ n + 2k по первому пункту леммы 3.1.2. Так как последнее неравенство верно для любого натурального n, то оно верно и для n + 9: p(n + 9) ≤ n + 2k + 9. Из второго пункта леммы 3.1.2 следует, что 2n ≤ p(n + 9) ≤ n + 2k + 9. Следовательно, n ≤ 2k + 9, что противоречит произвольности выбора номера n, так как 2k + 9 заведомо известная константа. Противоречие доказывает невозможность существования машины Тьюринга T , вычисляющей функцию максимальной продуктивности. ¤ Задача 3.1.1 (проблема остановки машины Тьюринга). Пусть N (M ) — номер машины Тьюринга M согласно нумерации, использованной в доказательстве утверждения 3.1.1. Существует ли такая машина Тьюринга Ms , что для любой машины Тьюринга M ½ ¤q1¤, M (Λ) — определено, Ms (1...1 |{z} ) = ¤q¤, M (Λ) — неопределено. N (M ) 143 Следствие 3.1.4 . Проблема алгоритмически неразрешима. остановки машины Тьюринга Доказательство этого факта основывается на теореме 3.1.3. Его идея сводится к тому, что если бы существовала машина, способная определить остановится ли произвольная машина Тьюринга, нам удалось бы построить и машину Тьюринга, вычисляющую максимальную продуктивность машины Тьюринга с n состояниями. Смысл алгоритмической неразрешимости проблемы остановки машины Тьюринга состоит в том, что не может существовать алгоритма, который, получая на вход описание произвольного алгоритма, мог бы определить, завершит ли последний работу за конечное время, или его выполнение будет зациклино. Можно привести другие примеры. Например, алгоритмически неразрешимой является задача о выводимости формулы в исчислении предикатов. Задача 3.1.2 . Пусть A — формула исчисления предикатов. Выводима ли A в исчислении предикатов? 144 3.2 3.2.1 Теория N P -полных задач Сложность алгоритма Когда идет речь о сложности алгоритма, обычно имеется в виду скорость выполнения алгоритма (временная сложность) или требуемая для его работы память (емкостная сложность). При оценке времени выполнеия, память чаще всего считается неограниченной и не оценивается. Дальше будем говорить в основном о скорости выполнения, но практически все наши определения и рассуждения будут аналогичны и для оценки емкостной сложности алгоритмов. Время выполнения или требуемая память для одного и того же алгоритма будет разниться в зависимости от конкретных входных данных. Оценить сложность в этом смысле безотносительно параметров невозможно. С другой стороны оценка сложности для каждого набора входных параметров отдельно будет слишком трудоемкой. По-этому, необходимо разделить задачу на группы частных случаев, чтобы оценить сложность для каждой такой группы. Определение 3.2.1 . Массовая задача — задача с параметрами. Определение 3.2.2 . Индивидуальная задача — это массовая задача, для всех параметров которой заданы конкретные значения. Пример 3.2.1 . Например, задача сортировки массива длины n, где не указаны n и значения элементов массива является массовой. Задача отсортировать массив {8, 10, 4, 5, 1, 3, 7} является индивидуальной задачей к массовой задаче сортировки. Для оценки скорости выполнения имеет значение, на каком именно вычислительном устройстве работает алгоритм. В теории сложности алгоритмов различают машины Тьюринга с одной лентой, с k лентами и с произвольным доступом к памяти. Они имеют разные возможности и, следовательно, алгоритмы и время их работы на этих машинах будет различной. Кроме того, для выбранной машины, реальная длительность выполения данного алгоритма может зависить от быстродействия 145 машины (длительности выполнения доступных ей операций), что затрудняет использование полученной оценки. По этой причине оценивают не время по абсолютной величине, а число элементарных операций, которые необходимо выполнить при работе данного алгоритма на машине выбранного типа. Замечание 3.2.1 . На практике не так часто исследуют алгоритм в применении к машинам Тьюринга. Чаще рассматривают возможности некоего обобщенного устройства, понимающего язык высокого уровня. При этом важно помнить, что одна команда высокого уровня может требовать большого количества элементарных операций вычислительной системы. Также обычно не считают все элементарные операции алгоритма. Обычно выбирается множество ключевых операций, которые оказывают наибольшее влияние на оцениваемую величину. Например, сравнение чисел, обращения к медленной памяти и т.п. Определение 3.2.3 . Пусть заданы следующие объекты: 1) массовая задача; 2) класс индивидуальных задач данной массовой задачи; 3) алгоритм, решающий эту задачу; 4) тип машины, на которой будет работать этот алгоритм; 5) ключевые операции, играющие в алгоритме основную роль. Сложность алгоритма на этом классе индивидуальных задач — максимальное число выделенных ключевых операций, которые выполняет данный алгоритм при решении индивидуальной задачи из выделенного класса; то есть число ключевых операций, которые необходимо выполнить в худшем случае. Существуют различные подходы к тому, как выбрать класс индивидуальных задач. Первый способ состоит в том, чтобы зафиксировать один (или несколько) из параметров массовой задачи и разбить ее на такие классы, что в каждый класс входят все задачи с заданным значением этого (этих) параметра. Остальные параметры меняются произвольно в допустимых для них областях. Тогда, сложность алгоритма — функция T (n). 146 Пример 3.2.2 . Например, массовую задачу сортировки, обычно, разбивают на классы индивидуальных задач по параметру n — длине сортируемого массива. Конкретным классом индивидуальных задач в этом случае могли бы быть все задачи сортировки с массивами длины n = 7. Второй подход состоит в том, чтобы закодировать условия каждой индивидуальной задачи некоторым "разумным" способом и выбрать в качестве критерия разбиения на классы индивидуальных задач длину N слов, кодирующих задачи, — то есть включать в один класс все индивидуальные задачи, длины кодов которых не превосходят N . Величины сложности на таких классах будут описывать функцию сложности T (N ). Разумность кодирования здесь подразумевает выбор способа исходя из здравого смысла. Например, не стоит кодировать числа в единичной системе исчисления. В общем случае и величины фиксированных параметров и длина кода описания задачи характеризуют ее размер и сложность задается функцией от размера. Часто сложность алгоритма не имеет точного представления формулой над хорошо известными функциями. В этом случае для предъявления функции сложности пришлось бы предъявлять бесконечную таблицу значений. Тогда имеет смысл оценить сложность более простой функцией, например, полиномом некоторой степени. Введем следующие обозначения (O-символика): Будем писать f (n) = O(g(n)), если существуют n0 ∈ N и c ∈ R+ : f (n) ≤ c · g(n), ∀n ≥ n0 . Будем писать f (n) = Ω(g(n)), если существуют n0 ∈ N и c ∈ R+ : f (n) ≥ c · g(n), ∀n ≥ n0 . Будем писать f (n) = Θ(g(n)), если существуют n0 ∈ N и c1 , c2 ∈ R+ : c1 · g(n) ≤ f (n) ≤ c2 · g(n), Известны следующие свойства: натурального аргумента. Тогда 147 ∀n ≥ n0 . Пусть f и g — функции от 1) 2) 3) 4) 5) 6) f (n) = O(f (n)); c · O(f (n)) = O(f (n)), где c - константа; O(f (n)) + O(f (n)) = O(f (n)); O(O(f (n))) = O(f (n)); O(f (n)) · O(g(n)) = O(f (n) · g(n)); O(f (n) · g(n)) = f (n) · O(g(n)). Если f (n) = O(g(n)) будем говорить, что функция f (n) имеет порядок O(g(n)). В реальных ситуациях обычно достаточно выяснить вид функции, наиболее точно ограничивающей сложность алгоритма решения некоторой массовой задачи: полином, логарифм, экспонента и т.п. Если сложность имеет порядок полинома, чаще всего достаточно указать только старшую его степень. Если сложность оценивается экспонентой an , важно основание степени — a. Пример 3.2.3 . Известны алгоритмы решения задачи сортировки с оценкой сложности O(n · log n). Какую сложность можно считать практически приемлимой. Рассмотрим следующую таблицу (рисунок 26), на которой представлено сравнение длительности работы алгоритмов разной сложности на некоторой гипотетической машине. По горизонтали отмерены размеры входных параметров, по вертикали — T (n), сложность алгоритмов. T (n) n n2 n3 n5 2n 3n 10 10−5 с 10−4 с 10−3 с 0.1 с 0.001 с 0.059 с 20 2 · 10−5 с 0.0004 с 0.008 с 3.2 с 1.0 с 58 мин 30 3 · 10−5 с 0.0009 с 0.027 с 24.3 с 17.9 мин 6.5 лет 40 4 · 10−5 с 0.0016 с 0.064 с 1.7 мин 12.7 дней 3855 стол 50 5 · 10−5 с 0.0025 с 0.125 с 5.2 мин 35.7 лет 2 · 108 стол 60 6 · 10−5 с 0.0036 с 0.216 с 13.0 мин 366 стол 1.3 · 1013 стол Рисунок 26: Сравнение времени выполнения алгоритмов различной сложности в зависимости от размера параметра. Как можно видеть, удовлетворительными можно считать только алгоритмы, сложность которых не превосходит некоторого полинома фиксированной (не зависящей от размеров входных параметров задачи) степени. Такие алгоритмы называют полиномиальными. Алгоритмы 148 экспоненциальной сложности могут быть выполнены за приемлемое время только при небольших размерах входных данных. Быть может развитие технологий и ускорение вычислительных устройств позволит нам в скором времени выполнять и алгоритмы экспоненциальной сложности. Рассмотрим таблицу на рисунке 27. Там представлены максимальные размеры входных данных гипотетических задач различной сложности, выполняемых за час на одной и той же машине, и на сколько эти размеры могут вырости при ускорении работы компьютеров в 100 и в 1000 раз. T(n) n n2 n3 n5 2n 3n Современный компьютер N1 N2 N3 N4 N5 N6 в 100 раз быстрее в 1000 раз быстрее 100 · N1 1000 · N1 10 · N2 31.6 · N2 4.63 · N3 10 · N3 2.5 · N4 3.98 · N4 N5 + 6.64 N5 + 9.97 N6 + 4.19 N6 + 6.29 Рисунок 27: Увеличение размера задачи, выполняемой за фиксированное время при увеличении мощности компьютера. Видно, что в разы увеличивается только размер входных параметров для полиномиальных алгоритмов. Чтобы они могли быть выполненными в то же время, параметры экспоненциальных алгоритмов можно увеличить лишь на единицы. 3.2.2 Полиномиальная сводимость Можно столкнуться с разными случаями сравнения алгоритмов по сложности. Если один из алгоритмов имеет полиномиальную сложность, а другой требует, например, экспоненциального количества шагов (памяти), как показано выше, использование экспоненциальных алгоритмов может иметь смысл только для небольших входных параметров задачи. На больших данных любой полиномиальный алгоритм будет лучше любого экспоненциального. В случаях, когда для двух алгоритмов, решающих одну задачу, известна полиномиальная оценка сложности, имеет смысл находить 149 наиболее точно прибиженное к величине сложности значение полиномов и сравнивать их сначала по максимальной степени, а если она окажется одинаковой, по коэффициенту перед максимальной степенью. Принципиально иная ситуация имеет место в том случае, если вопрос о существовании полиномиального алгоритма решения некоторой задачи остается открытым. Тогда в первую очередь нужно выяснить ответ на этот вопрос и потом предпринимать действия по дальнейшей оптимизации. Если ответ положительный, можно пытаться искать наилучший из полиномиальных алгоритмов решения. Если полиномиального алгоритма решения задачи не существует, имеет смысл рассмотреть возможность нахождения "быстрого" алгоритма приближенного решения задачи. При выяснении существования для задачи полиномиального алгоритма, все оценки можно делать с точностью до полиномиальных преобразований. Например, перед решением задачу можно преобразовать в другую форму, если затраты на этот процесс не превысят полиномиальное время, поскольку это не скажется на выводе о существовании полиномиального алгоритма для исходной задачи. Также при такой постановке вопроса не важен и тип машины, на которой будет выполняться алгоритм. Таблица на рисунке 28 показывает, какова сложность моделирования машины Тьюринга одного типа с помощью машины другого типа. Рассматриваются машины Тьюринга с одной леной, с k лентами и машины с произвольным доступом к памяти. Моделируемая МТ A MT с 1 лентой MT с k лентами MT с п. д. к памяти Моделирующая МТ B MT 1 MT k MT с п. д. к п. — O(T (n)) O(T (n) log T (n)) O(T 2 (n)) — O(T (n) log T (n)) 3 3 O(T (n)) O(T (n)) — Рисунок 28: Время моделирования машин Тьюринга. В любом случае понядок сложности моделирования не больше куба от сложности алгоритма исходной машины. Из этого следует, что, если существует полиномиальный алгоритм решения задачи на машине 150 Тьюринга одного типа, то полиномиальные алгоритмы для этой задачи существуют для любого типа машин Тьюринга. Помочь доказать существование или отсутствие полиномиального алгоритма решения некоторой задачи может понятие полиномиальной сводимости. Определение 3.2.4 . Пусть имеются две массовые задачи S1 и S2 . Пусть A1 — произвольный алгоритм решения задачи S1 . Пусть существуют два алгоритма полиномиальной сложности P21 и P12 : P21 получает на входе описание индивидуальной задачи типа S2 и преобразует его в описание некоторой индивидуальной задачи типа S1 ; P12 получает на вход решение задачи типа S1 и преобразует его в решение задачи типа S2 . Если алгоритмы P21 и P12 таковы, что после преобразования описания индивидуальной задачи S2 алгоритмом P21 в описания индивидуальной задачи S1 , решения полученной задачи S1 и преобразования полученного решения с помощью P12 , мы получим решение исходной индивидуальной задачи S2 , говорят, что задача S2 полиномиально сводится к задаче S1 , и пишут S2 ∝ S1 (рис. 29). Описание Описание S2 21 Решение S1 S1 Решение 12 S2 Рисунок 29: Полиномиальная сводимость. Иными словами, S2 ∝ S1 , если связка алгоритмов A2 = P12 A1 P21 решает индивидуальную задачу s типа S2 : P12 (A1 (P21 (условия s))) = ответ на s. Пусть S2 ∝ S1 . Тогда можно сказать, что задача S1 в некотором смысле не легче, чем задача S2 . Действительно, если извстно, что у задачи S1 существует решающий ее полиномиальный алгоритм Ap , то, очевидно, алгоритм P12 Ap P21 , решающий задачу S2 , тоже будет 151 полиномиальным. С другой стороны, если известно, что для задачи S2 не существует полиномиального решения, то такого решения не может иметь и задача S1 . Если задача S1 не может быть решена за полиномиалное время, это не позволяет сделать выводов о сложности задачи S2 . Также, если за полиномиальное время можно решить задачу S2 , это не позволяет сказать, на сколько эффективно может быть решена задача S1 . Определение 3.2.5 . Если S2 ∝ S1 и S1 ∝ S2 , говорят, что задачи S1 и S2 полиномиально эквивалентны. Рассмотрим пример полиномиальной сводимости. Задача 3.2.1 . Задача о выполнимости: Дано логическое выражение в конъюнктивной нормальной форме. Является ли функция, реализуемая этой формулой, выполнимой? Другими словами, дана булева функция f (x1 , x2 , ..., xn ), определенная своей КНФ: (D1 ) ∧ (D2 ) ∧ · · · ∧ (Dk ). Требуется ответить на вопрос, существует ли такой набор значений логических переменных a1 , a2 , ..., an , что f (a1 , a2 , ..., an ) = 1. Замечание 3.2.2 . Подробнее о конъюнктивных нормальных формах булевых функций написано в параграфе 2.1.5. Пример 3.2.4 . Дана конъюнктивная нормальная форма f (x1 , x2 , x3 , x4 , x5 ) = (x1 ∨ x2 ) ∧ (x3 ∨ x5 ∨ x2 ) ∧ x4 . Можно убедиться, что f (0, 0, 0, 1, 1) = 1. Значит ответ на задачу — "Да". Замечание 3.2.3 . Очевидно, существует всего 2n различных наборов аргументов для f (x1 , x2 , ..., xn ). Значит для решения задачи о выполнимости достаточно просто перебрать все варианты. То есть, вопрос о разрешимости тут не стоит, но остается вопрос о возможности эффективного решения задачи. 152 Задача 3.2.2 . Задача о k-выполнимости — это задача о выполнимости, в условиях которой в каждом дизъюнкте не более k литералов. Теорема 3.2.1 . Задача о выполнимости полиномиально сводится к задаче о 3-выполнимости: ВЫП ∝ 3-ВЫП. Доказательство. Пусть E(x1 , x2 , ..., xn ) = (D1 ) ∧ (D2 ) ∧ ... ∧ (Dm ) — логическое выражение в конъюнктивной нормальной форме. Пусть Di = α1 ∨ α2 ∨ ... ∨ αk — один из дизъюнктов в E, состоящий не менее, чем из 4 литералов. Заменим в E дизъюнкт Di на выражение Di0 = (α1 ∨ α2 ∨ z) ∧ (α3 ∨ .... ∨ αk ∨ z), b где z — новая переменная. Обозначим результат E. Покажем, что E(x1 , x2 , ..., xn ) выполнима тогда и только тогда, когда b 1 , x2 , ..., xn , z). Пусть a1 , a2 , ..., an — набор аргументов, выполнима E(x на котором E принимает значение 1. Тогда все дизъюнкты формы E принимают на этом наборе аргументов значение 1. В частности ¯ Di (a1 , a2 , ..., an ) = 1. Тогда существует i ∈ {1, ..., k}: αi ¯ a1 ,a2 ,...,an = 1. Выберем значение для z следующим образом ½ 0, i = 1 или i = 2; b= 1, i ∈ {3, ..., k}. b 1 , a2 , ..., an , b) = 1, то есть E b — выполнима. Тогда E(a Пусть теперь E невыполнима: при любых занчениях x1 , ..., xn , E(x1 , x2 , ..., xn ) = 0. Рассмотрим некоторый произвольный набор значений a1 , ..., an . Поскольку E(a1 , a2 , ..., an ) = 0, то один из дизъюнктов формы равен нулю. Если Dj (a1 , a2 , ..., an ) = 0 и j 6= i, то b 1 , a2 , ..., an , z) = 0 для любого z. и E(a Пусть нулю равен именно i-тый дизъюнкт. Следовательно равны нулю все литералы α1 , α2 , ..., αk . Если выбрать значение z = 1, то (α3 ∨ .... ∨ αk ∨ 1) = 0. Если же выбрать значение z = 0, то (α1 ∨ α2 ∨ 0) = 0. В b также невыполнима. любом случае Di0 = 0. Следовательно E Итак, мы заменили исходную конъюнктивную нормальную форму E на эквивалентную ей в плане выполнимости конъюнктивную нормальную 153 b причем один дизъюнкт Di с k > 3 литералами был заменен на форму E, два новых дизъюнкта, один из которых содержит три литерала, а другой k − 1 литерал. Повторяя описанный процесс нужное число раз можно прийти к конъюнктивной нормальной форме, в которой не останется дизъюнктов с более чем тремя литералами. Сложность: Всего нам придется провести не более n − 3 циклов уменьшения длины для каждого дизъюнкта. То есть сложность алгоритма имеет порядок n · m — полиномиальна относительно размера входных данных. ¤ Следствие 3.2.2 . Задача о выполнимости эквивалентна задаче о 3-выполнимости. 3.2.3 полиномиально Классы задач в форме распознавания свойств Определение 3.2.6 . Будем говорить, что задача сформулирована в форме распознавания свойств, если ответ на задачу "Да" или "Нет". Другими словами, нам дан предикат и набор его параметров; необходимо ответить на вопрос: принимает ли предикат на этих параметрах значение 1 или 0? Замечание 3.2.4 . Если нам встретилась задача не в форме распознавания, ее можно переформулировать таким образом, чтобы она попала в наш класс задач. Пример 3.2.5 . Например, рассмотрим следующую задачу: Дана контурная карта с обозначенными на ней n странами и требуется раскрасить ее в разные цвета таким образом, чтобы любые два государства, соприкасающиеся участком границы, имели различный цвет. Задача в оптимизационной форме: Дана контурная карта. Требуется раскрасить ее в минимально возможное число цветов. Задача переформулированная в форме распознавания свойств: Дана контурная карта и число k. Существует ли допустимая раскраска этой карты в k цветов. 154 Очевидно, если решена задача в оптимизационной форме, то ответ на переформулированную задачу в форме распознавания будет получен простым сравнением полученного минимального числа цветов со значением k. Следовательно, в форме распознавания задача не становится сложнее исходной задачи. С другой стороны, если решена задача в форме распознавания, может быть решена задача о нахождении числа цветов в минимальной раскраске. Для ее решения достаточно перебрать все k от 1 до n. То есть, сложность задачи нахождения минимального числа цветов в допустимой раскраске не выше n · T (n), где T (n) — оценка сложности алгоритма решения задачи в форме распознавания. Эта задача полиномиально эквивалентна задаче в форме распознавания. Рассмотрим два класса задач в форме распознавания свойств, — P и N P , — изучение которых имеет большое значение для теории алгоритмов. Определение 3.2.7 . Класс P определяется, как класс всех задач в форме распознавания, для которых существует полиномиальный алгоритм решения. Пример 3.2.6 . К классу P , например относятся переформулированная в форме распознавания свойств задача нахождения минимального элемента массива: Дан массив чисел длины n и номер ячейки k. Правда ли, что в k-той ячейке находится минимальный элемент массива. Сложность решения этой задачи O(n) Определение 3.2.8 . Класс N P (от non-deterministic polynomial) определяется, как класс всех задач в форме распознавания, для которых существует недетерминированная машина Тьюринга, вычисляющая ответ на эту задачу за полиномиальное время. Недетерминированная машина Тьюринга отличается от машин Тьюринга, с которыми мы сталкивались ранее (детерминированных), тем, что в ее программе допускается наличие нескольких команд с одинаковой левой частью. Другими словами, в некоторый момент времени недетерминированная машина Тьюринга может оказаться в 155 конфигурации, из которой у нее определено более, чем один вариант дальнейших действий. Таким образом условие определенности алгоритма здесь не выполняется. В общем случае у недетерминированного алгоритма есть целое дерево различных вариантов хода выполнения. Что делать, если мы столкнулись с такой развилкой? В таком случае недетерминированная машина может копировать себя необходимое число раз и все копии начинают выполнять каждая свою возможную последовательность действий. Копии машины работают независимо и одновременно (рисунок 30). Как только хотя бы одна копия машины заканчивает вычисления с ответом "Да", все копии завершают свою работу. В случае отрицательного ответа, машина может не остановиться. Старт x 1 x2 x3 x 4 x5 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 : : : : : 1 1 1 1 0 1 1 1 1 1 нет ..... нет да нет Рисунок 30: Работа недетерминированного алгоритма Можно также говорить об угадывающем устройстве. Тогда считаем, что подойдя к развилке машина безошибочно угадывает, какой именно переход нужно выбрать, чтобы получить ответ "Да", если это возможно. Определение 3.2.9 . Говорят, что недетерминированная машина Тьюринга принимает слово α, если существует хотя бы одна ветвь дерева вычислений, где машина останавливается и дает ответ "Да". Можно привести альтернативное определение класса N P Определение 3.2.10 . Задача в форме распознавания принадлежит классу N P , если, когда на задачу дан ответ "Да" и приведено доказательство решения — некоторые дополнительные сведения, — можно за полиномиальное время проверить, что это правда. 156 Пример 3.2.7 . Задача о выполнимости лежит в классе N P . Действительно, если для некоторой КНФ дан ответ, что она выполнима, и в подтверждение приведен набор значений аргументов x1 , x2 , ..., xn , то проверить, что значение формулы действительно 1, можно за полиномиальное время, просто вычислив заданную формой функцию. Утверждение 3.2.3 . Определения 3.2.8 и 3.2.10 эквивалентны. Доказательство. Если задача удовлетворяет определению 3.2.8, то в качестве доказательства ответа "Да" можно привести номера веток дерева вариантов выполнения, которые нужно выбирать недетерминированной машине, чтобы получить ответ за полиномиальное время. Пусть задача удовлетворяет определению 3.2.10. Тогда построим недетерминированную машину, которая в начальный момент времени создает необходимое число копий и начнет рассмотрение всех возможных вариантов доказательства правильности ответа. Каждый отдельный процесс будет проводить проверку доказательства за полиномиальное время. ¤ Ответы "Да" и "Нет" в случае недетерминированной машины Тьюринга не симметричны. Пример 3.2.8 . Рассмотрим задачу о невыполнимости: Задача 3.2.3 . Дано логическое выражение в конъюнктивной нормальной форме. Является ли функция, реализуемая этой формулой, невыполнимой. Другими словами, дана функция f (x1 , x2 , ..., xn ), определенная своей КНФ: (D1 ) ∧ (D2 ) ∧ · · · ∧ (Dk ). Требуется ответить на вопрос, правда ли, что для любых наборов значений логических переменных a1 , a2 , ..., an , выполняется равенство f (a1 , a2 , ..., an ) = 0. Очевидно, что эта задача обратная к задаче о выполнимости, но она не лежит в классе N P , поскольку для нее не может существовать недетерминированного полиномиального алгоритма 157 решения: в любом случае, чтобы получить положительный ответ на данную задачу, мы должны проверить все возможные наборы логических переменных, а сложность этого процесса имеет порядок O(2n ). Недетерминированность в данном случае не может улучшить ситуацию. Действительно, если даже машина копирует себя 2n раз и каждая копия проверяет свой набор аргументов функции, ни одна копия не сможет узнать, какой ответ получили оставные, и значит не сможет дать положительный ответ на задачу. Если же нам дан ответ "Да", то мы не сможем предоставить доказательство этого ответа, которое можно было бы проверить за полиномиальное время. В любом случае нам придется проверить все 2n наборов аргументов, чтобы убедиться в правильности ответа. 3.2.4 Отношение между классами P и N P Ясно, что недетерминированная машина Тьюринга является частным случаем детерминированной, так что P ⊆ N P . Более полную систему отношений между классами задач в форме распознавания можно увидеть на рисунке 31. Кажется, что N P 6= P , поскольку недетерминированная машина может выполнять несколько процессов одновременно, при условии, что хотя бы один из них остановится и выдаст положительный результат. С другой стороны, с помощью детерминированной машины Тьюринга можно смоделировать работу недетерминированной машины, используя дополнительные состояния, когда встречается неоднозначность, подобно тому, как это делают псевдомногозадачные операционные системы. Работа такой моделирующей машины требует значительно большего времени, чем работа оригинальной недетерминированной машины Тьюринга, но не известно на сколько больше — сохранит ли полученный алгоритм свойство полиномиальности. Вопрос о том, найдется ли для любой задачи из класса N P эффективный алгоритм решения является классическим вопросом о равенстве классов P и N P , который уже много лет остается одной из центральных открытых научных проблем. Вопрос равенства классов 158 P Задачи в форме распознавания NP NP-полные Рисунок 31: Отношение между классами задач в форме распознавания. N P и P по сути состоит в следующем: если положительный ответ на задачу можно проверить за полиномиальное вермя, то правда ли, что этот ответ можно также за полиномиальное время и найти. Действительно ли задачи легче проверить, чем решить? Если бы было доказано, что P = N P , это позволило бы решить целый ряд задач, для которых до сих пор не известно полиномиальных алгоритмов решения. Большое количество классических задач лежит в классе N P . В то же время, это могло бы повлечь и проблемы, связанные, например, с ненадежностью (в этом случае) некоторых алгоритмов шифрования, основанных на предполагаемой невозможности быстро проводить определенные вычисления. В настоящее время большинство математиков считает, что эти классы не равны, но доказательство остается ненайденым. 3.2.5 N P -полные задачи Следующая теорема была доказана Куком в 1971 году. 159 Теорема 3.2.4 . Любая задача из класса N P полиномиально сводится к задаче о выполнимости. Таким образом, задача о выполнимости в некотором смысле не проще всех остальных задач из класса N P . Все подобные ей задачи названы N P -полными. Определение 3.2.11 . Задача называется N P -полной, если она принадлежит классу N P и к ней полиномиально сводятся все задачи из класса N P . Замечание 3.2.5 . эквивалентны. Все N P -полные задачи попарно полиномиально Определение 3.2.12 . Задача называется N P -трудной, если к ней полиномиально сводятся все задачи из класса N P . Пример 3.2.9 . Можно доказать, что задача о раскраске контурной карты из примера 3.2.5 в оптимизационной форме является N P -трудной, а ее переформулировка в форме распознавания свойств является N P -полной задачей. Теперь для доказательства N P -полноты задачи из класса N P достаточно показать, что к ней полиномиально сводится некоторая известная N P -полная задача. Пример 3.2.10 . Из теоремы 3.2.1 следует, что и задача о 3-выполнимости также является N P -полной. Можно заметить, что задача о 2-выполнимости лежит в классе P . Понятие N P -полной задачи может помочь прояснить ситуацию с отношением между классами P и N P . Если будет найден полиномиальный алгоритм решения одной из N P -полных задач, то любая задача из класса N P сможет быть решена за полиномиальное время и, следовательно, P = N P . Если для произвольной задачи из класса N P будет доказано, что она за полиномиаьное время не решается, то окажется верно, что P 6= N P и любая N P -полная задача не сможет лежать в P . 160 На практике полезно уметь распознавать N P -полные задачи. Если будет доказано, что рассматриваемая вами задача N P -полна, то нахождение полиномиального алгоритма решения этой задачи будет равносильно решению вопроса о равенстве или неравенстве классов P и N P , который остается без ответа уже более тридцати лет. С практической точки зрения такие задачи можно считать неразрешимыми эффективно и искать приближенные алгоритмы их решения. 161 4 Теория графов Теория графов — один из основных разделов дискретной математики Основным объектом изучения является граф. Граф исходно графический объект, рисунок (рис. 32). Это способ изобразить некоторую структуру с помощью простой схемы. У графа есть некоторое количество узлов Рисунок 32: Пример графа (точек, вершин), которые соеденины между собой линиями (ребрами). Примером графа служит схема метрополитена. Станции — вершины графа; переезды между станциями — ребра графа. Другим примером может служить система родственных связей в каком-нибудь городе. Вершинами такого графа служили бы все жители города. Люди, находящиеся в непосредственном родстве (братья, сестры, родитель и ребенок) были бы соеденены ребрами, а между дальними родственниками можно было бы найти цепочку из ребер близкого родства. Между людьми не находящимися в родстве в этом графе не нашлось бы никакой связи. Теорию графов часто не интересует конкретное изображение графа и имена вершин. Основное внимание уделяется структуре: сколько вершин 162 имеет граф, какие из них соеденены ребрами, а для ориентированных графов еще от к какой вершины к какой направлены ребра. 4.1 Определения графа Существует несколько способов сказать, что такое граф, а под словом граф в разных случаях понимают структуры, отличающиеся по своим свойствам. В каждом конкретном случае, когда вы имеете дело с графами следует понимать, что имеется в виду под этим словом, и использовать те свойства, которые характерны для данного класса графов. 2 p 7 4 q s t 6 1 8 5 3 9 a) b) c) d) Рисунок 33: Примеры графов Самым наглядным способом задания графа является его графическое изображение. Само название графа появилось благодаря этому представлению. На рисунке 33 инзображены примеры графов. Графы a), b) и d) — связные; графы b) и c) — помеченные; графы a) и d) — полные, граф b) — ориентированный 1 . Далее мы попробуем прояснить, что же такое граф и в чем особенности разных способов его определения. 4.1.1 Общее определение Рассмотрим наиболее общее определение графа. Определения большинства понятий подразумевающихся под термином "граф" являются некоторыми сужениями этого определения. Определение 4.1.1 . Пусть заданны конечные множества произвольной природы V и E, V = 6 ∅, V ∩ E = ∅, и трехместный 1 Перечисленные свойства графов будут определены в дальнейшем. 163 предикат P P (x, u, y) : V × E × V 7→ {T rue, F alse}. Будем говорить, что задан граф G = (V, E, P ) с множеством вершин V , множеством ребер E и инцидентором P , если 1. P определен для всех упорядоченных троек (v, e, w), где v, w ∈ V и e ∈ E; 2. (∀e ∈ E)(∃v, w ∈ V ){P (v, e, w)&(∀v 0 , w0 ∈ V )[P (v 0 , e, w0 ) ⇒ (v = v 0 & w = w0 ) ∨ (v = w0 & w = v 0 )]}. То есть для любого ребра всегда существует две вершины (не обязательно различные), которые оно соединяет, и никакие другие две вершины не могут быть соеденины тем же ребром. Кроме того для каждого ребра e ∈ E должно выполняться одно и только одно из соотношений: A. (∃v, w ∈ V )[v 6= w & P (v, e, w) & P (w, e, v)] B. (∃v, w ∈ V )[v 6= w & P (v, e, w) & P (w, e, v)] C. (∃v ∈ V )P (v, e, v) Ребро удовлетворяющее соотношению A называют неориентированным, удовлетворяющее соотношению B — ориентированным ребром или дугой; ребра удовлетворяющие соотношению C называют петлями. Ребро e ∈ E назовем кратным, если (∃v, w ∈ V )(∃e1 ∈ E)[P (v, e, w)&P (v, e1 , w)]. Определение 4.1.2 . Граф будем называть ориентированным или орграфом, если в нем отсутствуют ребра типа A (неориентированные ребра). Граф будем называть неориентированным, если в нем отсутствуют ребра типа B (ориентированные ребра). Если граф содержит и ориентированные и неориентированные ребра, его называют смешанным. 164 Неориентированные ребра рисуют линиями, соединяющими точки, соответствующие вершинам. Ориентированные ребра обозначают стрелками. При этом для ребра, для которого выполняется P (v, e, w), стрелка направлена от вершины v и к вершине w. Ориентированные ребра также называют дугами. Для петель ориентация не имеет смысла, так что они могут изображаться и со стрелкой и без, когда это удобно. Определение 4.1.3 . Порядком графа G = (V, E, P ) называют число n = |V |. Определение 4.1.4 . Две вершины v, w ∈ V называются смежными, если (∃e ∈ E)[P (v, e, w) ∨ P (w, e, v)] Определение 4.1.5 . Вершина v ∈ V и ребро e ∈ E инцидентны, если (∃w ∈ V )[P (v, e, w) ∨ P (w, e, v)] Определение 4.1.6 . Два ребра e, f ∈ E смежны, если существует вершина v ∈ V которой они оба инцидентны. Замечание 4.1.1 . До сих пор мы говорили о конечных графах. Существуте также понятие бесконечного графа, для которого множества V и E могут быть счетными. Мы такие графы рассматривать не будем. 4.1.2 Виды графов Определение 4.1.7 . Псевдографом будем называть общий случай графа описанного в определении 4.1.1. Определение 4.1.8 . Мультиграфом назовем граф, удовлетворяющий определению 4.1.1, который, дополнительно, не может содержать ребрер типа C (петель). Псевдограф может содержать кратные ребра и петли. Мультиграф не может содержать петель, хотя может содержать любое количество кратных ребер. Пример псевдографа приведен на рисунке 34 a), пример мультиграфа — на рисунке 34 b). 165 a) b) c) d) Рисунок 34: Псевдограф, мультиграф, обыкновенный граф и граф Бержа. При необходимости можно говорить об ориентированных и неориентированных псевдографах и мультиграфах. Приведем еще одно определение графа, которое, впрочем не является частным случаем определения 4.1.1. Определение 4.1.9 . Гиперграфом назовем пару G = (V, E), где V — конечное множество элементов произвольной природы, а E ⊂ 2V — произвольное множество подмножеств множества V . Это самый широкий класс, включающий в себя все описанные выше классы неориентированных графов. Больше мы с ним не встретимся. 4.1.3 Обыкновенный граф В самом простом случае, мы имеем дело с так называемыми обыкновенными графами (рис. 32). Такие графы не ориентированы (ребра не имеют направления, концевые вершины ребер равнозначны) и между любыми двумя вершинами может быть не более одного ребра; петель нет. Таким образом в обыкновенный граф входят только ребра типа A (неориентированные ребра), причем не более одного ребра между любыми двумя вершинами. Примеры обыкновенных гарфов приведены на рисунках 33 a), c), d) и рисунке 34 c). В большинстве случаев мы будем иметь дело именно с такими графами. 166 Обыкновенные графы удобно представлять в виде пары множеств (V, E), где V — произвольное непустое множество (множество вершин графа), а E ⊆ V (2) = {{u, v} | u, v ∈ V ; u 6= v} — множество двухэлементных подмножеств множества V (множество ребер графа). Каждая пара {u, v} ∈ E соответствует ребру соединяющему вершины u и v. Когда известно, что речь идет об обыкновенных графах, фигурные скобки часто заменяют на круглые для простоты записи и восприятия. Подразумвается, что пары тем не менее неупорядоченные ((u, v) = (v, u)). Например, граф G на рисунке 33 является обыкновенным. Его множество вершин V = {1, 2, 3, 4, 5, 6} и множество ребер E = {(1, 2), (1, 6), (2, 3), (2, 4), (3, 6), (4, 5), (5, 6)}. Будем предполагать, что имеем дело с конечными графами: |V | < ∞. Будем писать G = (V, E) для обозначения, что граф G имеет множество вершин V и множество ребер E. Если нам понадобится указать, что некоторое множество является множеством вершин или ребер именно графа G, будем писать V (G) или E(G) соответственно. Определение 4.1.10 . Порядком графа G называется число его вершин — |V (G)|. Определение 4.1.11 . Будем говорить, что вершины u и v смежны в графе G, если они соеденины ребром: (u, v) ∈ E(G). В этом случае u и v называются концевыми вершинами ребра e = (u, v). Определение 4.1.12 . Вершина v и ребро e называются инцидентными, если v является одной из концевых вершин e: e = (u, v). Определение 4.1.13 . Два ребра e1 и e2 называются смежными, если у них есть общая концевая вершина: e1 = (u, v), e2 = (v, w). Для удобства будем полагать, что G = (V, E), |V | = n, |E| = m. Будем называть такой граф, имеющий n вершин и m ребер (n, m)-графом. Определение 4.1.14 . Степенью вершины v ∈ V в графе G назовем число degG v инцидентных ей ребер. Вершина со степенью 0 называется изолированной. Вершина со степенью 1 называется висячей. 167 Определение 4.1.15 . Степенью графа ∆(G) называют максимальную из степеней вершин графа. Минимальную из степеней графа обозначают δ(G). Определение 4.1.16 . Регулярным графом называется граф, у которого все вершины имеют одинаковую степень. Теорема 4.1.1 . степени четно. В обыкновенном графе число вершин нечетной Доказательство. Для графа с n вершинами и m ребрами имеет место P равенство ni=1 degG vi = 2m, где degG vi — степень i-той вершины. ¤ 4.1.4 Примеры графов Рассмотрим несколько классов обыкновенных графов. a) b) c) d) e) Рисунок 35: O4 , F4 , C4 , W5 и двудольный граф. 1) Полный граф (35 b)). Граф называется полным, если E = V (2) . Другими словами, каждая вершина графа смежна с каждой другой. Такие графы обычно обозначают Kn или Fn . На рисунке 36 пункты a) и b) изображены полные графы K2 и K5 соответственно. 2) Пустой граф (35 a)). Граф называется пустым, если у него нет ни одного ребра: E = ∅. Пустые графы обозначают On . Пример пустого графа O3 изображен на рисутке 36 c). 3) Двудольный граф (35 e)). Граф G называется двудольным, если его множество вершин можно разбить на два подмножества, таким 168 Рисунок 36: Примеры полного, пустого, двудольного графов 169 образом, чтобы все ребра графа начинались в одном из подмножеств и заканчиваются в другом. То есть существуют такие множества V1 и V2 , что V (G) = V1 ∪ V2 , V1 ∩ V2 = ∅ и ∀(u, v) ∈ E(G) ⇒ v ∈ V1 и u ∈ V2 , или u ∈ V1 и v ∈ V2 . Граф называется полным двудольным графом, если дополнительно ∀u ∈ V1 , ∀v ∈ V2 ⇒ (u, v) ∈ E(G). Полный двудольный грав обозначают Kn1 ,n2 . На рисунке 36 d) слева приведено изображение полного двудольного графа K3,3 . На рисунке 36 d) справа этот же граф изображен так, чтобы было лучше видно множества V1 и V2 . 4) Циклы (35 c)). Циклом называется граф, состоящий из n вершин последовательно соединены ребрами в кольцо2 . Цикл из n вершин обозначают Cn . Примеры циклов изображены на рисунке 37: цикл C6 слева и C5 справа. Рисунок 37: Примеры циклов 5) Колесо (35 d)) Wn — цикл Cn−1 , к которому добавлена еще одна, смежная со всеми остальными, вершина. 6) Звезда K1,n−1 (на рис. 38 изображена звезда K1,5 ). 2 Подробнее о циклах смотри тему про маршруты. 170 Рисунок 38: Граф "Звезда" 4.1.5 Графы Бержа Самым распространенным видом ориентированных графов являются графы Бержа. Определение 4.1.17 . Граф G = (V, E, P ) называется графом Бержа, если он удовлетворяет условию (∀e, f ∈ E)(∀v, w ∈ V )[P (v, e, w)&P (v, f, w) ⇒ (e = f )]. Таким образом граф Бержа — это ориентированный граф, который имеет не более одной дуги между любыми двумя вершинами в одном направлении и не более одной петли при каждой вершине. Примеры графов Бержа приведены на рисунках 33 b) и рисунке 34 d). Не трудно видеть, что для задания графа Бержа достаточно указать отображение F : V → 2V , ставящее в соответствие каждой v вершине графа некоторое подмножество множества его вершин — вершины, в которые из v идут дуги. То есть, определение может выглядеть так: Определение 4.1.18 . Графом Бержа будем называть пару (V, F ), где V — множество элементов произвольной природы, называемых вершинами, и F : V → 2V . Определение 4.1.19 . По другому граф Бержа может быть определен, как пара G = (V, E), где V — конечное множество элементов произвольной природы, а E ⊂ V × V — множество упорядоченных пар элементов из V . 171 Определение 4.1.20 . Полустепенью исхода вершины v ∈ V ориентированного графа G называют число odeg v выходящих из v ребер, то есть odeg v = |{e ∈ E | (∃w ∈ V )P (v, e, w)}| Полустепенью захода вершины v ∈ V ориентированного графа G называют число ideg v входящих в v ребер, то есть ideg v = |{e ∈ E | (∃w ∈ V )P (w, e, v)}| Свойства смежности и инцидентности для ориентированных графов определены точно так же, как для неориентированных. 4.2 Изоморфизм графов Очень важным для теории графов является понятие изоморфизма. ¡ ¢ В обыкновенном графе с n вершинами может быть не более n2 ребер. Следовательно, если рассматривать все возможные способы расстановки n ребер, оказывается, что существует всего 2( 2 ) помеченных графов. При этом, далеко не все графы различаются структурно. На рисунке 39 изображены два графа. Очевидно, что их структура Рисунок 39: Пример изоморфизма ничем не различается, но строго по определению они не равны, поскольку их множества ребер не совпадают: ребро (1, 6) есть в левом гафе, но его нет в правом. 172 Определение 4.2.1 . Два графа G1 = (V1 , E1 , P1 ) и G2 = (V2 , E2 , P2 ) изоморфны, если существуют биекции ϕ : V1 7→ V2 и ψ : E1 → 7 E2 , такие что (∀v, w ∈ V1 )(∀e ∈ E1 )[P1 (v, e, w) ⇔ P2 (ϕ(v), ψ, (e), ϕ(w))]. Несложно показать, что изоморфизм на множестве графов является отношением эквивалентности. Действительно, чтобы доказать рефлексивность, достаточно взять в качестве ϕ и ψ тождественные отображения V1 7→ V1 и E1 7→ E1 . Симметричность доказывается, использованием в качестве искомых отображений ϕ−1 и ψ −1 . Транзитивность будет следовать из биективности композиции биективных отображений. Таким образом по свойству отношений эквивалентности все множество графов делится на классы, любые два графа в которых — изоморфны. В дальнейшем, когда нам не будут принципиальны особенности конкретных графов, мы будем обращаться со всем классом изоморфных графов, как с одним и тем же графом. Запись G1 ∼ = G2 в дальнейшем будет значить, что графы G1 и G2 изоморфны. Для обыкновенных графов и графов Бержа определение изоморфизма можно можно переформулировать проще. Определение 4.2.2 . Графы G1 = (V1 , E1 ) и G2 = (V2 , E2 ) называют изоморфными, если существует такая биекция ϕ : V1 → V2 , что ∀u, v ∈ V1 , (u, v) ∈ E1 ⇔ (ϕ(u), ϕ(v)) ∈ E2 . (32) Пример 4.2.1 . Рассмотрим графы на рисунке 40. отображение ϕ следующим образом Выберем v ϕ(v) 1 1 2 2 3 4 . 4 3 5 6 6 5 173 Рисунок 40: Изоморфные графы Несложно убедиться, что условие (32) для графов на рисунке 40 выполняется. Далее, можем говорить о помеченных и непомеченных графах. Будем говорить, что граф помеченный, если каждая вершина графа имеет индивидуальное имя. С помеченными графами имеют дело, когда необходимо хранить какую-то индивидуальную информацию о каждой вершине. Если же нам интересна только структура графа, а конкретные названия вершин не имеют значения, можно говорить, что граф непомеченный и рассматривать его с точностью до изоморфизма. 4.2.1 Инварианты графа Определение 4.2.3 . Функции, принимающие одинаковые значения для изоморфных графов называются инвариантами. Определение 4.2.4 . Систему инвариантов назовем полной системой инвариантов, если, из того что для некоторых двух графов все эти инварианты принимают одинаковые значения, следует, что данные графы изоморфны. Приведем примеры инвариантов графа. Пример 4.2.2 . 1) Простейшими примерами инвариантов графа G являются n = |V (G)| и m = |E(G)| — количества вершин и ребер графа. Очевидно, что у всех изоморфных графов эти значения совпадают. 174 2) Другим инвариантом ялвяется вектор упорядоченных по возрастанию: (d1 , d2 , . . . , dn ). 3) Хроматическое число. степеней вершин, Определение 4.2.5 . Хроматическим числом графа G назовем наименьшее целое число χ(G), такое что существует разбиение множества вершин графа V (G) = V1 ∪ V2 ∪ · · · ∪ Vχ(G) , удовлетворяющее следующему условию (∀x, y ∈ Vi )(∀e ∈ E(G))P (x, u, y), i = 1, χ(G). Другими словами ни в одном подмножестве Vi нет смежных вершин. Заметим, что графы с χ(G) = 2 и χ(G) = 1 будут двудольными. 4) Размер максимальной клики в графе (плотность). Кликой будем называть полный подграф графа G. Количество вершин максимальной клики в графе G обозначается ω(G); иногда это значение называют плотностью графа и обозначают ϕ(G). Очевидно, что ω(G) ≤ χ(G), поскольку в каждое множество Vi из определения хроматического числа может не может входить болше одной вершины из максиальной клики. Графы, для всех подграфов которых выполняется равенство ω(G) = χ(G), называются совершенными. 5) Число вершинной независимости (неплотность). Независимым множеством вершин графа G назовем множество вершин какогонибудь пустого подграфа G, то есть множество попарно несмежных вершин. Числом вершинной независимости α(G) (неплотностью) называется число вершин в максимальном независимом множестве графа G. Очевидно α(G) = ω(G). 6) Размер минимального кликового покрытия. Размером минимального кликового покрытия графа G назовем наименьшее число χ(G) клик G1 , G2 , . . . , Gχ(G) графа G, удовлетворяющих условию (∀v ∈ V (G))(∃G0 ∈ {G1 , G2 , . . . , Gχ(G) })[v ∈ V (G0 )] Нетрудно видеть, что χ(G) = χ(G). Также легко доказывается неравенство α(G) ≤ χ(G). 175 4.3 4.3.1 Операции Основные операции над графами Существует множество операций над графами и разные авторы определяют операции, которые им нужны. Рассмотрим несколько основных операций для примера. 1) Добавление вершины: G1 = G + v. V (G1 ) = V (G) ∪ {v}, E(G1 ) = E(G). 2) Добавление ребра: G1 = G + e. V (G1 ) = V (G), E(G1 ) = E(G) ∪ {e}. Операция применима, если e = (v, u) и u, v ∈ V (G). 3) Удаление ребра: G1 = G − e. V (G1 ) = V (G), E(G1 ) = E(G) \ {e}. Операция применима, если e ∈ E(G). 4) Удаление вершины: G1 = G − v. V (G1 ) = V (G) \ {v}, E(G1 ) = {e | e ∈ E(G), 6 ∃u ∈ V (G) : e = (v, u)}. 5) Объединение графов: G3 = G1 ∪ G2 . V (G3 ) = V (G1 ) ∪ V (G2 ), E(G3 ) = E(G1 ) ∪ E(G2 ). Как видно из определения, если V (G1 ) ∩ V (G2 ) = ∅ и E(G1 ) ∩ E(G2 ) = ∅, изображение графа G3 можно получить просто нарисовав рядом графы G1 и G2 . 6) Произведение графов: G3 = G1 × G2 . V (G3 ) = V (G1 ) × V (G2 ), E(G3 ) = {((u1 , u2 ), (v1 , v2 )) | u1 , v1 ∈ V (G1 ), u2 , v2 ∈ V (G2 ), (u1 = v1 и (u2 , v2 ) ∈ E(G2 )) или (u2 = v2 и (u1 , v1 ) ∈ E(G1 ))}. Пример произведения графов можно увидеть на рисунке 41. 4.3.2 Подграфы Определение 4.3.1 . Рассмотрим граф G = (V, E, P ). Пусть V 0 ⊆ V , E 0 ⊆ E, а P 0 — предикат, индуцированный (полученный сужением) инцидентором P на подмножествах V 0 и E 0 . Если V 0 и E 0 выбраны так, что G0 = (V 0 , E 0 , P 0 ) удовлетворяет определению графа, то G0 называется частью графа G. 176 Рисунок 41: Произведение графов Определение 4.3.2 . называется суграфом. Часть G0 = (V, E 0 , P 0 ) графа G = (V, E, P ) Определение 4.3.3 . Часть G0 = (V 0 , E 0 , P 0 ) графа G = (V, E, P ) называется подграфом, если (∀v, w ∈ V 0 )(∀e ∈ E)[P (v, e, w) ⇒ e ∈ E 0 ] Приведем более удобные определения для случая обыкновенного графа G = (V, E). Определение 4.3.4 . Граф G1 = (V1 , E1 ) называется подграфом графа G = (V, E), если V1 ⊆ V и E1 = {e | e = (u, v) ∈ E, u, v ∈ V1 }. Такой подграф иногда называют подграфом порожденным множеством вершин V1 , поскольку он включает все ребра графа G, которые соединяют вершины из V1 . Определение 4.3.5 . Граф G1 = (V1 , E1 ) называется частью графа G = (V, E), если V1 ⊆ V и E1 ⊆ {e | e = (u, v) ∈ E, u, v ∈ V1 }. Определение 4.3.6 . Граф G1 = (V, E1 ) называется суграфом графа G = (V, E), если E1 ⊆ E. 177 Можно сказать, что чтобы получить суграф, нужно удалить из графа часть ребер. Чтобы получить порожденный подграф, нужно удалить из графа часть вершин и каждое ребро, хотябы один концец которого был удален. Чтобы получить часть графа, нужно взять суграф от порожденного подграфа графа. Примером задачи, связанной с подграфами, является поиск наибольшей клики графа (рис. 42). Определение 4.3.7 . Кликой графа называется максимальный по включению вершин полный подграф графа. Таким образом, поиск наибольшей клики графа то же, что и поиск наибольшего полного подграфа графа. Рисунок 42: Наибольшей клика графа Неизвестно эффективного алгоритма, решающего эту задачу. Переформулируем эту задачу переформулировать в форме распознавания: Дан граф G и b ∈ R+ . Ответить на вопрос существует ли в этом графе полный подграф размера b? Эта задача является N P -полной задачей. Доказательство N P -полноты задачи о клике будет рассмотрено позже, в параграфе 4.9. 4.3.3 Дополнение графа Определение 4.3.8 . Дополнением графа G = (V, E) называется граф 178 G, такой, что V (G) = V (G) и ({u, v} ∈ E(G)) ⇔ ({u, v} ∈ / E(G)), то есть множество ребер E(G) — дополнение E(G) до множества ребер полного графа с данным числом вершин. Определение 4.3.9 . Граф изоморфный называется самодополнительным. своему дополнению Несложно показать и следующие свойства дополнения графа 1) Двойное дополнение равно исходному графу: G = G, 2) Если графы изоморфны, то изоморфны и их дополнения: G1 ∼ = G2 . = G2 ⇔ G1 ∼ 4.4 Маршруты и связность Определение 4.4.1 . Маршрутом в графе G называется последовательность вершин и ребер v0 , e1 , v1 , e2 , v2 , ..., el , vl , где v0 , v1 , ..., vl ∈ V (G), e1 , ..., el ∈ E(G) и ei инцидентна vi−1 и vi , i = 1, l. Указанный маршрут называется маршрутом из вершины v0 в вершину vl . Длиной маршрута называется число l. Проще говоря, маршрут представляет собой последовательность вершин и переходов между ними по ребрам. Определение выше избыточно, так как если указана первая вершина маршрута, остальные вершины однозначно определяются ребрами по которым проходит маршрут. Если граф обыкновенный или граф Бержа, для полного задания маршрута достаточно указать только последовательность проходимых вершин. Определение 4.4.2 . Маршрут называется цепью, если ребра в нем не повторяются. Определение 4.4.3 . Цепь называется простой цепью, если вершины в ней не повторяются. Определение 4.4.4 . v0 = vl . Замкнутым называется такой маршрут, где Определение 4.4.5 . Циклом называется замкнутая цепь. 179 Определение 4.4.6 . Прстым циклом называется замкнутая простая цепь. В этом случае, запрет на повторение вершин не распространяется на вершины v0 и vl . Определение 4.4.7 . Ориентированным маршрутом в ориентированном графе G называется последовательность вершин и дуг v0 , e1 , v1 , e2 , v2 , ..., el , vl , где v0 , v1 , ..., vl ∈ V (G), e1 , ..., el ∈ E(G) и ei = (vi−1 , vi ) — дуга из vi−1 в vi , i = 1, l. Определение 4.4.8 . Ориентированный маршрут называется путем, если он не проходит по одной дуге дважды. Определение 4.4.9 . Путь называется простым путем, если вершины в нем не повторяются. Определение 4.4.10 . Замкнутый путь называется контуром. Определение 4.4.11 . простым контуром. Замкнутый простой путь называется Определение 4.4.12 . Граф G называется связным, если между любыми двумя вершинами этого графа существует маршрут. Определение 4.4.13 . Компонентой связности графа называется максимальный по включению вершин связный подграф графа. Любой граф можно считать объединением его компонент связности. Теорема 4.4.1 . Для любого графа G верно, что хотя бы один из графов G и G — связный граф. Доказательство. Если граф G связен, теорему можно считать доказанной. Пусть, граф G несвязен. Тогда существуют больше одной компоненты связности: V (G) = V1 ∪ V2 , V1 6= ∅, V2 6= ∅, ∀u ∈ V1 , ∀v ∈ V2 , (u, v) ∈ / E(G). Докажем, что граф G связен. Для этого рассмотрим две любые вершины w1 и w2 графа и докажем, что между ними есть маршрут. 180 Рассмотрим два варианта. 1) Пусть (w1 , w2 ) ∈ E(G). Тогда вершины w1 и w2 одновременно лежат или в множестве V1 или в множестве V2 . Пусть, не умаляя общности, w1 , w2 ∈ V1 . Рассмотрим произвольную вершину u ∈ V2 . Тогда (u, w1 ) ∈ / E(G) и (u, w2 ) ∈ / E(G). Следовательно (u, w1 ) ∈ E(G) и (u, w2 ) ∈ E(G). То есть между вершинами w1 и w2 нашелся маршрут длины 2: w1 , u, w2 . 2) Пусть (w1 , w2 ) ∈ / E(G). Тогда по определению дополнения (w1 , w2 ) ∈ E(G). То есть между вершинами w1 и w2 нашелся маршрут длины 1. Между двумя прозвольными вершинами графа G существует соединяющий их маршрут, что и требовалось доказать. ¤ 4.5 Деревья Определение 4.5.1 . Деревом называется связный граф без циклов. Граф без циклов называется лесом. Каждая компонента связности леса является деревом. Теорема 4.5.1 . Пусть G = (V, E), |V | = n, |E| = m. Тогда следующие утверждения эквивалентны: 1) G — связный граф без циклов (дерево), 2) G — граф без циклов и m = n − 1, 3) G — связный граф и m = n − 1. Доказательство. 1)⇒ 2) Необходимо доказать, что m = n−1. Докажем по индукции. База индукции очевидна: Дерево с 1 вершиной не имеет ребер и соотношение выполняется. Пусть соотношение выполняется для любого дерева не более чем с n−1 вершиной. Рассмотрим дерево с n вершинами, n > 1. Выберем произвольное ребро e = (u, v) ∈ E(G). Рассмотрим граф G − e. Этот граф не может быть связным. Действительно, если бы граф G − e был связным, в нем был бы маршрут между вершинами u и v. Этот маршрут вместе с ребром e образовывал бы цикл в графе G. Значит в графе G − e две компоненты связности G1 и G2 . Обе они являются связными графами без циклов и для них выполняется 181 индукционное предположение. Значит m1 = n1 − 1, m2 = n2 − 1 и для исходного графа G: m = m1 + m2 + 1 = n1 − 1 + n2 − 1 + 1 = n − 1. 2)⇒ 3) Пусть граф G не имеет циклов и число ребер на единицу меньше числа вершин. Докажем, что граф G связный. Пусть граф G не связен. Пусть G1 , G2 , ..., Gk все компоненты связности G. Тогда каждый граф Gi связный граф без циклов — дерево. Мы уже доказали утверждение 1)⇒ 2), так что можем этим пользоваться. Следовательно для каждого из графов Gi верно E(Gi ) = V (Gi ) − 1. Таким образом n= k X V (Gi ), i=1 m= k X i=1 k X E(Gi ) = (V (Gi ) − 1) = n − k. i=1 Но нам известно, что число ребер в графе на единицу меньше числа вершин, то есть k = 1. Следовательно в графе G может быть только одна компонента связности. 3)⇒ 1) Пусть граф G связный и число ребер на единицу меньше числа вершин. Докажем, что граф G не имеет циклов. Пусть в графе G есть циклы. Рассмотрим произвольное ребро e1 , которое принадлежит какому-то циклу графа G. Граф G − e1 связен, поскольку между любыми двумя вершинами в цикле существовало как минимум две цепи. Можем повторять процесс удаления ребер до тех пор, пока в графе G − e1 − e2 − ... − ei остаются циклы. Рассмотрим граф F = G − e1 − e2 − ... − es , полученный после размыкания всех циклов графа G. Граф F связный и в нем нет циклов. Еще раз воспользуемся доказанным переходом 1)⇒ 2): E(F ) = V (F ) − 1 = V (G) − 1 = E(G), то есть после удаления s ребер число ребер в графе не изменилось. Противоречие вызвано предположением, что в графе G есть циклы. Следовательно, циклов нет, что и требовалось доказать. ¤ 182 4.6 Матрицы, связанные с графом Одним из удобных математических представлений графа является задание связанных с ним матриц. Две самых распространенных из них — это матрица смежности и матрица инцидентности, которые хранят информацию соответственно об отношении смежности между вершинами и отношении инцидентности между вершинами и ребрами. 4.6.1 Матрица смежности Пусть G = (V, E) — неориентированный граф, V = {1, 2, ..., n}. Матрица смежности A(G) для графа G представляет собой квадратную (0,1)матрицу n × n. Элементы ai,j (G) матрицы A(G) заданы следующим соотношением: ½ 1, (i, j) ∈ E(G) ai,j (G) = . (33) 0, (i, j) ∈ / E(G) Матрица смежности обыкновенного графа симметрична, поскольку (i, j) ∈ V (G) ⇔ (j, i) ∈ V (G). На диагонали стоят нулевые элементы, поскольку не допускаются петли. Сумма элементов по i-той строке или по i-тому столбцу равна степени вершины i. Сумма всех элементов матрицы смежности равна удвоенному числу ребер графа: n X n X ai,j (G) = 2|E(G)|. i=1 j=1 Пример 4.6.1 . Рассмотрим граф на рисунке 43. смежности этого графа имеет следующий вид.   0 1 0 0 1 1 0 1 0 1    . A(G) =  1 1   0 0 1 0 0  1 1 0 0 0 183 Матрица Рисунок 43: Неориентированный граф Для графа Бержа определение матрицы смежности выглядит так же, как описано в (33), но ребра уже будут считаться ориентированными, так что и симметричности матрицы может не быть. Так же диагональ матрицы смежности для графа Бержа может быть не нулевой, так как он допускает петли. Сумма элементов по i-той строке равна полустепени исхода вершины i. Сумма элементов по j-тому столбцу равна полустепени захода вершины j. Сумма всех элементов матрицы смежности ориентированного графа равна числу дуг графа: n X n X ai,j (G) = |E(G)|. i=1 j=1 Пример 4.6.2 . Рассмотрим граф на рисунке 44. смежности этого графа имеет следующий вид.   0 0 0 0 1 1 0 1 0 0    . A(G) =  1   0 0 0 0 0  0 1 0 0 0 184 Матрица Рисунок 44: Ориентированный граф Замечание 4.6.1 . Если мы захотим определить матрицу смежности для мультиграфа или псевдографа, придется выйти за рамки значений 0 и 1. Например, можно сказать, что элемент ai,j (G) равен числу ребер (дуг) соединяющих вершины i и j (идущих из вершины i в вершину j). Теорема 4.6.1 . Пусть G = (V, E) — ориентированный или неориентированный граф и A(G) — его матрица смежности. (k) Тогда элемент ai,j , стоящий на пересечении i-той строки и jтого столбца матрицы Ak (G) = (A(G))k , равен числу маршрутов из вершины i в вершину j длины k, i = 1, n, j = 1, n. В случае ориентированного графа имеется в виду ориентированный маршрут. Доказательство. Докажем по индукции. Для степени 1 утверждение верно: элемент матрицы смежности равен числу ребер из i в j. Предположим, что формула верна для степени k − 1, где 1 < k. Рассмотрим i, j-тый элемент Ak (G) = Ak−1 (G) · A(G): (k) ai,j = n X (k−1) ai,t (G) · at,j (G). (∗) t=1 (k−1) Здесь ai,t (G) — число маршрутов из i в t длины k − 1, а at,j (G) указывает наличие или отсутствие ребра из t в j. Таким образом 185 (k−1) произведение ai,t (G) · at,j (G) равно числу маршрутов из i в j длины k, где t является предпоследней вершиной. Просуммировав в формуле (*) это произведение по всем возможным промежуточным вершинам t, мы получим число всех маршрутов из i в j длины k, что и требовалось доказать. ¤ Пример 4.6.3 . Продолжим пример 4.6.1. матрицы смежности графа с рисунка 43.  2  0 1 0 0 1 2 1 1 0 1 0 1  1 3    2   A (G) = 0 1 0 1 0 =  1 0 0 0 1 0 0  0 1 1 1 0 0 0 1 1 Рассмотрим квадрат 1 2 1 1 1  1 1  1 . 0 2 Глядя на рисунок можно убедиться, что что на диагонали стоят степени соответствующих вершин. Это логично, так как маршрут из вершины i в нее же длины 2 является проходом по по каждому ребру графа смежному с i туда и обратно. Остальные элементы матрицы равны 1 в тех случаях, если между соответствующими вершинами есть цепь длины 2. Замечание 4.6.2 . Можно заметить, что изоморфным графам могут соответствовать разные матрицы смежности. Но это различие не произвольно. Изоморфные графы по сути отличаются порядком нумерации вершин. Этому порядку соответствует порядок нумерации строк и столбцов матрицы смежности. Таким образом матрицы смежности для изоморфных графов отличаются друг от друга одинаковой перестановкой строк и столбцов. 4.6.2 Матрица инцидентности Второй распространенной матрицей ассоциированной с графом является матрица инцидентности. Она определяется как прямоугольная матрица B(G) размерности |V (G)|×|E(G)|, где строки соответствуют вершинам, а 186 столбци — ребрам графа. Пусть G = (V, E) — неориентированный граф, V = {1, 2, ..., n} E = {e1 , e2 , ..., em }. ½ 1, ∃l : ej = (i, l) ∈ E(G) bi,j (G) = , i = 1, n, j = 1, m. (34) 0, иначе В каждом столбце матрицы инцидентности ровно 2 единицы. Сумма по i-той строке матрицы инциденции равна степени вершины i. Сумма всех элементов матрицы инцидентности графа равна удвоенному числу его ребер: n X m X bi,j (G) = 2|E(G)|. i=1 j=1 Пример 4.6.4 . Для обыкновенного графа на рисунке может выглядеть следующим образом  1 1 0 0 1 1  B(G) =  0 0 0 0 0 0 1 0 1 43 матрица инцидентности 1 1  0  1  1 Для определения матрицы инцидентности графа Бержа потребуется использовать дополнительное значение −1 для указания, куда заходит соответствующая дуга.   1, ∃l : ej = (i, l) ∈ E(G) (35) bi,j (G) = −1, ∃l : ej = (l, i) ∈ E(G) , i = 1, n, j = 1, m.  0, иначе Пример 4.6.5 . Для графа Бержа на рисунке 44 матрица инцидентности будет выглядеть следующим образом   1 −1 0 0 0  0 1 −1 1 0     B(G) =  −1 1    0 0 0 0 −1 −1 0 1 0 0 187 Матрицы инцидентности изоморфных графов отличаются друг от друга перестановкой столбцов. 4.6.3 Список ребер Список ребер — это еще один способ представления графа. В этом случае, каждое ребро задается двумя числами — номерами вершин, которые соединяет это ребро. Можно сказать, что это вариант матрицы инцидентности, где номера строк с единицами заданы в явном виде. 4.7 4.7.1 Обходы графов Эйлеров цикл Определение 4.7.1 . Эйлеровым циклом в графе G называется цикл, который проходит через все ребра графа ровно по одному разу. Определение 4.7.2 . Граф G называется эйлеровым графом, если в нем есть эйлеров цикл. Для проверки графа на эйлеровость есть удобный критерий. Лемма 4.7.1 . Пусть граф G является эйлеровым графом. степени всех вершин графа G четны. Тогда Доказательство. Пусть в графе G существует эйлеров цикл C = (vi1 , (vi1 , vi2 ), vi2 , (vi2 , vi3 ), ..., vil , (vil , vi1 ), vi1 ). В этом цикле присутствуют все ребра графа G причем каждое ровно один раз. В цикле C проходя некоторую вершину vij мы входим и выходим из нее по разным ребрам, что добавляет двойку к степени этой вершины. Значит степень вершины v графа G равна удвоенному числу проходов цикла C через вершину v. Следовательно степень v четна. ¤ Теорема 4.7.2 . Пусть G — связный граф. Тогда в графе G существует эйлеров цикл тогда и только тогда, когда степени всех вершин графа G четны. 188 Доказательство. Необходимость следует из леммы 4.7.1. Достаточность. Пусть ∀v ∈ V (G): degG v — четна. С помощью двухшагового процесса разобьем все ребра графа на циклы. 1) Начнем с произвольной вершины u ∈ V (G) строить цепь переходя по любым ребрам от вершины к вершине. Поскольку степени вершин четны, войдя в некоторую вершину по одному ребру мы обязательно можем из нее выйти по второму. Таким образом мы точно можем обходить вершины, пока не вернемся в исходную вершину u. Так мы построили некоторый цикл P1 = P1 (u). По лемме 4.7.1, степени всех вершин в P1 (u) четны. 2) Удалим из G все ребра, входящие в цикл P1 (u). Поскольку степени всех вершин в G и P1 (u) четны, то и в графе G−E(P1 (u)) степень каждой вершины четна. Дальше мы можем перейти к пункту 1) и искать цикл P2 в графе P G−E(P1 (u)). Процесс можно повторять до тех пор, пока в графе G− Pi остаются вершины с ненулевой степенью. Наконец мы получим набор циклов P1 , P2 , ..., Pt : E(G) = E(P1 ) ∪ E(P2 ) ∪ ... ∪ E(Pt ), E(Pi ) ∩ E(Pj ) = ∅, i 6= j. Поскольку граф G связен, эти циклы пересекаются по некоторым вершинам. Рассмотрим какие-нибудь два из этих циклов Pi и Pj , у которых есть общая вершина v. Тогда Pi = (v, (v, vs2 ), vs2 , (vs2 , vs3 ), ..., vsli , (vsli , v), v), Pj = (v, (v, vr2 ), vr2 , (vr2 , vr3 ), ..., vrlj , (vrlj , v), v). Объединим эти циклы в точке v и получим новый цикл Pi,j = (v, (v, vs2 ), vs2 , (vs2 , vs3 ), ..., vsli , (vsli , v), v, (v, vr2 ), vr2 , (vr2 , vr3 ), ..., vrlj , (vrlj , v), v). Продолжим аналогично объединять циклы, пока не получим один общий цикл, включающий все ребра графа, причем каждое ровно один раз. ¤ 189 4.7.2 Гамильтонов цикл Определение 4.7.3 . Гамильтоновым циклом в графе G называется цикл, который проходит через все вершины графа ровно по одному разу. Определение 4.7.4 . Граф G называется гамильтоновым графом, если в нем есть гамильтонов цикл. Определение гамильтонова графа похоже на определение эйлерова графа, но здесь нет такого удобного критерия для определения, является ли граф гамильтоновым. Как мы покажем позже, проверка графов на гамильтоновость является N P -полной задачей. 4.8 4.8.1 Задачи и алгоритмы Остов минимального веса Задача 4.8.1 . Пусть имеется n населенных пунктов и между некоторыми из них проложены не асфальтированные дороги известной длины. Необходимо заасфальтировать часть дорог таким образом, чтобы была возможность проехать по новой дороге из любого пункта в любой другой, и при этом, чтобы суммарная длина заасфальтированных дорог была минимальной. Сформулируем задачу на языке графов. Задача 4.8.2 . Дан граф G = (V, E) и весовая функция W , сопоставляющая каждму ребру положительное значение: W : E → R+ . Будем считать весом любого подграфа H графа G суммарный вес его ребер: X W (H) = W (e). e∈E(H) Требуется найти такой связный остовной подграф G1 = (V, E1 ), чтобы его вес W (G1 ) был минимальным из весов всех остовных подграфов. 190 Очевидно, искомый подграф — дерево. С одной стороны он должен быть связен. С другой, если бы в нем имелся хотябы один цикл, мы смогли бы удалить любое ребро этого цикла и получить подграф, удовлетворяющий нашим требованиям, но меньшего веса. Пример минимального остовного дерева для взвешенного графа приведен на рисунке 45. 8 3 1 4 4 2 4 6 5 5 7 7 4 5 4 5 3 6 5 6 5 8 Рисунок 45: Остов миниального веса Приведем алгоритм решения этой задачи. Алгоритм 4.8.1 (Алгоритм Краскала). Пусть G = (V, E), |V | = n, W : E → R+ . 1) e1 = arg mine∈E W (e). 2) i = 1; Gi = (V, Ei ) = On + e1 . 3) while(i < n − 1){ ei+1 = arg min e∈E, в Gi + e нет циклов Gi+1 = Gi + ei+1 ; i = i + 1; } 191 W (e); 9 На каждом шаге этого алгоритма мы выбираем самое "легкое" ребро графа, при добавлении которого у нас не образуется циклов вместе с уже выбранными ранее ребрами. Процесс завершается, когда мы выберем n − 1 ребро. Чтобы убедиться, что этот алгоритм решает задачу об остове минимального веса, нужно показать, что 1) мы действительно можем довести процесс до конца (всегда найдется такое n − 1 ребро); 2) построенный граф будет деревом; 3) это дерево будет минимальным по весу из всех остовных деревьев G. Теорема 4.8.1 . Пусть граф G — связный граф. Краскала строит минимальное остовное дерево. Тогда алгоритм Доказательство. 1) Во-первых, покажем, что агоритм всегда позволяет построить граф Gn−1 . Пусть на некотором шаге i (i < n−1) мы не смогли выбрать следующее ребро ei+1 . Значит не существует ни одного такого ребра e ∈ E, что в Gi + e нет циклов. Граф Gi не имеет циклов по построению. Если бы граф Gi был связен, то по теореме 4.5.1 в нем было бы n − 1 ребро. Так как i < n − 1, граф Gi не является связным. Пусть H произвольная компонента связности графа G. Поскольку граф G связен, в нем существует ребро e = (u, v), соединяющее некоторую вершину u компоненты H с вершиной v, которая не принадлежит H. По нашему предположению, Gi + e будет иметь цикл. Этот цикл должен проходить по ребру e (иначе цикл был бы и в графе Gi ). Но тогда этот цикл состоит из маршрута между вершинами u и v и ребра (u, v). То есть в графе Gi должен быть маршрут между вершинами u и v и они обе принадлежать одной компоненте связности H ?! 2) Покажем, что построенный в алгоритме граф Gn−1 есть дерево. Действительно, выбирая каждое ребро мы проверяем, что у нас не должно появляться циклов. Когда мы выберем n − 1 ребро, по теореме 4.5.1 они образуют связный граф без циклов — остовное дерево графа G. 3) Наконец докажем, что построено дерево минимального веса. Пусть Wmin (G) — вес минимального остовного дерева графа G. Пусть S = {T | T = (V, E(T )) — остовное дерево грава G, W (T ) = Wmin (G)}. 192 Пусть T ∗ остовное дерево менимального веса, которое имеет наибольшее число общих ребер с графом Gn−1 : T ∗ = arg max |E(Gn−1 ) ∩ E(T )|. T ∈S Будем доказывать от противного. Пусть Gn−1 не является ∗ минимальным остовным деревом. Тогда T не совпадает с Gn−1 . Пусть ei — первое ребро в Gn−1 , которого нет в T ∗ : ei = (u, v) ∈ E(Gn−1 ) : ei ∈ / E(T ∗ ), и ∀j < i ⇒ ej ∈ E(T ∗ ). Рассмотрим граф T ∗ + ei . В нем обязательно есть цикл C, так как T ∗ уже был связным графом — имел маршрут между вершинами u и v. Так как в графе Gn−1 нет циклов, в цикле C есть хотябы одно ребро e0 , которого нет в Gn−1 . Рассмотрим граф T ∗ + ei − e0 . В этом графе нет циклов и он связен. Значит T ∗ + ei − e0 остовное дерево. Вес T ∗ + ei − e0 не может быть меньше веса минимального остовного дерева. W (T ∗ ) + W (ei ) − W (e0 ) = W (T ∗ + ei − e0 ) ≥ W (T ∗ ). (¤) Следовательно W (ei ) ≥ W (e0 ). (∗) Посмотрим с другой стороны. На i-том шаге алгоритма мы выбирали ребро ei как ребро минимального веса из всех невыбранных ребер, не образующих циклов с ребрами ej , j < i. Все ребра ej , j < i входят и в дерево T ∗ , а значит и ребро e0 не образует с ними цикла. Таким образом, на i-том шаге алгоритма ребро e0 было кандидатом на выбор и было бы выбрано, если бы W (e0 ) < W (ei ). Следовательно W (ei ) ≤ W (e0 ). (∗∗) Из неравенств (∗) и (∗∗) следует, что W (ei ) = W (e0 ) и по формуле (¤) W (T ∗ + ei − e0 ) = W (T ∗ ) + W (ei ) − W (e0 ) = W (T ∗ ) = Wmin (G). То есть T ∗ + ei − e0 является остовным деревом минимального веса. При этом у графа T ∗ + ei − e0 на одно общее ребро с графом Gn−1 больше, чем у T ∗ , что противоречит выбору T ∗ . 193 Противоречие вызвано предположением, что Gn−1 не является деревом минимального веса. Следовательно Gn−1 , полученный с помощью алгоритма Краскала, есть минимальное остовное дерево, что и требовалось доказать. ¤ Замечание 4.8.1 . Заметим, что алгоритм Краскала является алгоритмом полиномиальной сложности. Не будем доказывать это строго. Для этого потребовалось бы определять, какие операции мы считаем элементарными, описывать алгоритм в терминах этих операций и подсчитывать их число в худшем случае в зависимости от размеров задачи. Рассмотрим лишь возможность выполнения за полиномиальное время основных действий алгоритма. В основном цикле алгоритма ровно n − 1 шаг. Самым трудоемким пунктом в этом цикле является выбор ребра, который можно разделить на два основных действия: 1) Выбор ребра e минимального веса. 2) Проверка, появится ли цикл в графе после добавления ребра e. 1) Можно однократно стоставить список ребер, упорядоченных по весу (алгоритм сортировки имеет сложность порядка n·log n). Тогда будем каждый раз брать самое легкое ребро и удалять его из списка. Всего за все итерации цикла мы в худшем случае переберем все ребра. 2) Пусть e = (u, v) — ребро под вопросом. Необходимо определить, появится ли в графе Gi + e цикл. Достаточно проверить, был ли в графе Gi маршрут между вершинами u и v. Будем приписывать метки вершинам начиная с вершины u и далее все смежные с уже помеченными вершинами. Остановимся, если смежных с помеченными непомеченных вершин больше нет (рис. 46). Максимум нам удастся пометить i + 1 вершину, так как больше соединено ребрами быть не может. По окончании процесса нам останется только проверить, есть ли метка у вершины v. Если есть, в графе Gi + e присутствовал бы цикл. Если нет, ребро e может быть выбрано в качестве ei+1 . Итого, нам потребуется порядка n · log n действий, чтобы отсортировать ребра, не более m действий выбора легких ребер, для 194 Рисунок 46: Проверка наличия маршрута между вершинами каждого из которых нужно проверить наличие цикла, и порядка const ·(n − 1) других действий Замечание 4.8.2 . Этот алгоритм относится к так называемым жадным алгоритмам. Суть жадных алгоритмов состоит в том, чтобы на каждом шаге выбирать элемент с минимальным (или максимальным) значением некоторого параметра в итоге получая оптимальное решение. Пример 4.8.1 . Легко убедиться, что жадный алгоритм применим не всегда. Например, рассмотрим задачу нахождения минимума суммы двух целых чисел с условием на значение их произведения. x + y → min, x · y = 30, x, y ∈ {2, 3, 5, 6, 10, 15}. Очевидно, что решением этой задачи являются числа 5 и 6. В то же время следуя жадной стратегии мы должны были бы сначала выбрать самое маленькое значение x = 2, а затем подобрать наименьшее значение для y, для которого выполняется условие x · y = 30 — y = 15. Решение (2, 15) очевидно не является минимумом. Жадный алгоритм здесь не дал правильного ответа. 195 4.9 4.9.1 N P -полные задачи теории графов Задача коммивояжера Рассмотрим задачу, которая по формулировке напоминает задачу об остове минимального веса, но по сложности принципиально отличается от нее. Задача 4.9.1 . Пусть имеется n городов, соединенные дорогами известной длины. Коммивояжер, живущий в одном из городов, должен объехать их все и вернуться домой таким образом, чтобы проделанный им путь был минимальным. Но есть еще одно ограничение. Поскольку продукция у коммивояжера не очень надежная, коммивояжер не может позволить себе вернуться в один из пройденных городов. Сформулируем задачу в терминах графов. Задача 4.9.2 . Дан граф G = (V, E) и весовая функция W : W : E → R+ . Требуется найти замкнутый маршрут минимального веса, который проходил бы по всем вершинам графа ровно по одному разу. Задача разпадается на два вопроса: Во-первых, стоит вопрос, существует ли вообще замкнутый маршрут, который проходил бы по всем вершинам графа ровно по одному разу. Во-вторых, если такие маршруты существуют, требуется найти тот из них, который имеет минимальный вес. Чтобы избежать такой неоднозначности вопроса, можно добавить к G ребра бесконечно большого веса между всеми несмежными вершинами. То есть мы договориваемся, что данный в задаче граф полный, а весовая функция может быть бесконечной для некоторых ребер. Тогда ответ на вопрос о существовании искомого маршрута всегда положителен и можно сосредоточиться на поиске минимума. Покажем, что эта задача, если ее сформулировать в форме распознавания, будет N P -полной задачей. Для доказательства этого факта построим цепочку N P -полных задач, к каждой из которых полиномиально сводятся предыдущие. 196 Можно переформулировать задачу коммивояжера. Задача 4.9.3 . Дан полный граф G = Kn и весовая функция W : W : E(Kn ) → R+ . Требуется найти гамильтонов цикл минимального веса. Докажем N P -полноту задачи коммивояжера, построив последовательность полиномиальных сводимостей задач теории графов. 4.9.2 Задача о клике Напомним, что клика — это максимальный по включению вершин полный подграф графа. В оптимизационной форме задача о клике выглядит следующим образом: Задача 4.9.4 . Дан граф G = (V, E). Необходимо найти наибольшую клику графа (клику графа с наибольшим для этого графа числом вершин). Используем обозначение ϕ(G) — размер наибольшей клики в гарфе G. Тогда задачу о клики можно переформулировать в форме распознавания следующим образом. Задача 4.9.5 (КЛИКА). Правда ли, что ϕ(G) ≥ b. Дан граф G = (V, E) и целое число b > 0. То есть необходимо ответить на вопрос, существует ли в графе в графе G полный подграф с b вершинами. Докажем N P -полноту задачи о клике, сведя к ней известную нам N P полную задачу о выполнимости. Задача 4.9.6 (ВЫПОЛНИМОСТЬ). Дана конъюнктивная нормальная форма A = D1 ∧ D2 ∧ ... ∧ Dk . Требуется ответить на вопрос, является ли эта формула выполнимой (то есть, найдется ли набор значений переменных, чтобы формула A принимала значение 1. Теорема 4.9.1 . ВЫПОЛНИМОСТЬ ∝ КЛИКА. 197 Доказательство. Покажем, что задача о выполнимости сводится за полиномиальное время к задаче о клике. Пусть нам поставлена следующая задача о выполнимости: дана конъюнктивная нормальная форма A = D1 ∧ D2 ∧ ... ∧ Dk , где Di — дизъюнкт, i = 1, k. Построим граф G = (V, E) следующим образом: V (G) = {(α, i) | α — литерал в Di }, E(G) = {((α, i), (β, j)) | i 6= j, α 6= β}. 1) Пусть A выполнима. Значит на определенном наборе значений переменных A = 1. Тогда в каждом дизъюнкте Di найдется хотя бы один литерал αi = 1. Рассмотрим вершины (αi , i) и (αj , j) при i 6= j. Поскольку на выбранном наборе значений переменных αi = 1 и αj = 1, то αi 6= αj . Следовательно вершины (αi , i) и (αj , j) соеденины ребром в графе G. Таким образом множество вершин {(αi , i) | i = 1, k} порождает полный подграф в графе G. 2) Пусть теперь в графе G есть клика размера k с вершинами (α1 , 1), (α2 , 2), ...(αk , k). Тогда αi 6= αj , ∀i, j = 1, k. Слендовательно можно таким образом подобрать значения переменных, чтобы все αi принимали значение 1 одновременно. Следовательно A — выполнима. 3) Итак, мы показали, что формула A является выполнимой тогда и только тогда, когда в графе G имеется клика размера k. Осталось заметить, что построение графа G можно выполнить за полиномиальное время от размера СКНФ A. ¤ Переформулированная в форме распознавания задача о клике принадлежит классу N P , так как, если ответ на задачу "да" и нам дано множество вершин, образующих полный подграф в графе G, мы можем за полиномиальное время проверить правда ли каждая из этих вершин смежна с каждой. Следствие 4.9.2 . Задача о клике является N P -полной задачей. 4.9.3 Задача о вершинном покрытии Пусть дан граф G = (V, E). 198 Определение 4.9.1 . Множество вершин R вершинным покрытием графа G, если ∀e = (u, v) ∈ E : ⊆ V называется {u, v} ∩ R 6= ∅. Теорема 4.9.3 . Пусть G = (V, E) — граф. Тогда G1 = (V1 , E1 ) — полный подграф графа G тогда и только тогда, когда V \V1 — вершинное покрытие в графе G. Доказательство. ⇒) Пусть G1 = (V1 , E1 ) — полный подграф графа G. В граф G входят те и только те ребра, которых нет в графе G. Следовательно подграф графа G, порожденный множеством вершин V1 не имеет ребер. Другими словами, если в графе G и найдется ребро, то хотябы один его конец будет принадлежать множеству V \ V1 , что и требовалось доказать. ⇐) Пусть V \ V1 — вершинное покрытие в графе G. Для любых вершин u, v ∈ V1 выполняется неравенство u, v ∩ (V \ V1 ) = 0. Следовательно, по определению вершинного покрытия между вершинами u и v нет ребра в графе G. А значит ребро (u, v) присутствует в графе G. Поскольку это выполняется для произвольных вершин из V1 , множество вершин V1 порождает полный подграф в графе G. ¤ Задача о вершинном покрытии в оптимизационной форме формулируется следующим образом. Задача 4.9.7 . Дан граф G = (V, E). Найти вершинное покрытие G наименьшей мощности. Переформулируем задачу в форме распознавания Задача 4.9.8 (ВЕРШИННОЕ ПОКРЫТИЕ). Дан граф G = (V, E) и число b > 0. Существует ли вершинное покрытие G мощности b. Следствие 4.9.4 . КЛИКА ∝ ВЕРШИННОЕ ПОКРЫТИЕ. Доказательство. Для любого графа G мы можем построить дополнение и для него решить задачу о вершинном покрытии. 199 ¤ Задача о вершинном покрытии принадлежит классу N P , так как, если ответ на задачу "да" и нам дано множество из b вершин, мы можем перебрав все ребра убедиться, что хотябы один конец каждого из них лежит в данном множестве. Следствие 4.9.5 . полной задачей. 4.9.4 Задача о вершинном покрытии является N P - Задача о гамильтоновом цикле Как мы помним, гамильтонов цикл — это цикл проходящий через каждую вершину графа ровно один раз. Задача 4.9.9 (ГАМИЛЬТОНОВ ЦИКЛ). Существует ли в графе G гамильтонов цикл? Теорема 4.9.6 . ЦИКЛ. Дан граф G = (V, E). ВЕРШИННОЕ ПОКРЫТИЕ ∝ ГАМИЛЬТОНОВ Доказательство этой теоремы приводить не будем из-за его излишней громоздкости. Задача о гамильтоновом цикле лежит в классе N P , поскольку, если ответ на задачу "да" и нам дана последовательность прохождения ребер гарфа G, мы можем за полиномиальное время убедиться, что вершины могут быть пройдены в этой последовательности по ребрам G. Следствие 4.9.7 . Задача о гамильтонове цикле является N P -полной задачей. 4.9.5 Снова задача коммивояжера Итак, задачу коммивояжера мы сформулировали следующим образом (Задача 4.9.3): Дан полный граф G = Kn и весовая функция W : W : E(Kn ) → R+ . Требуется найти гамильтонов цикл минимального веса. 200 Существует также общий (несимметричный) случай задачи. Задача 4.9.10 . Пусть G = (V, A) — полный ориентированный граф (то есть, ориентированный граф в которым любые две вершины связаны двумя противоположнонаправленными дугами). Весовая функция сопоставляет каждой дуге положительное число. Противоположные ребра могут иметь различный вес. Требуется найти гамильтонов контур минимального веса. Переформулируем симметричную задачу в форме распознавания: Задача 4.9.11 (ЗАДАЧА КОММИВОЯЖЕРА). Дан полный граф G = Kn , весовая функция W и целое число b > 0. Существует ли в G гамильтонов цикл веса не привосходящего b. Теорема 4.9.8 . КОММИВОЯЖЕРА. ГАМИЛЬТОНОВ ЦИКЛ ∝ ЗАДАЧА Доказательство. Пусть G1 = (V1 , E1 ) граф, в котором необходимо проверить наличие гамильтонова цикла. Построим граф G2 = (V2 , E2 ) и весовую функцию W следующим образом: (u, v) ∈ E1 ⇒ (u, v) ∈ E2 , W ((u, v)) = 1; (u, v) ∈ / E1 ⇒ (u, v) ∈ E2 , W ((u, v)) = 2. Нетрудно видеть, что в G1 есть гамильтонов цикл ⇔ задача коммивояжера с графом G2 и границей b = |V | имеет ответ "да". ¤ Следствие 4.9.9 . задачей. Задача коммивояжера является N P -полной Следствие 4.9.10 . Несимметричная задача коммивояжера является N P -полной задачей, так как симметричная задача коммивояжера является ее частным случаем. 201 4.9.6 Алгоритм дерева Как мы помним, для N P -полных задач не известно полиномиальных алгоритмов решения и поиск их представляется крайне сложной задачей. Алгоритм дерева — это приближенный алгоритм решения, который применим к особому случаю симметричной задачи коммивояжера с неравенством треугольника: Пусть G = (V, E) — полный неориентированный граф с n вершинами, W : E → R+ — функция весов ребер: W ((u, w)) ≤ W ((v, u)) + W ((u, w)), для всех u, v, w ∈ V . (36) При изложении алгоритма дерева нам понадобится два вспомогательных алгоритмов: построение минимального остовного дерева (алгоритм 4.8.1) и алгоритм построения эйлерова цикла. Алгоритм построения эйлерова цикла напоминает структуру доказательства теоремы 4.7.2 (рис. 47). Рисунок 47: Поиск эйлерова цикла Пусть дан эйлеров граф G = (V, E) — связный и все вершины имеют четные степени. 202 Алгоритм 4.9.1 (Эйлеров цикл). function ЭЙЛЕР (H, v1 ) { if (degH (v1 ) = 0) { ЭЙЛЕР=(v1 ) } else { 1. Построить любой цикл (v1 , v2 , ..., vk , v1 ), который ни по одному ребру не проходит дважды: (vi , vi+1 ) 6= (vj , vj+1 ), 1 ≤ i, j ≤ k 2. H = H − (v1 , v2 ) − (v2 , v3 ) − · · · − (vk , v1 ) 3. ЭЙЛЕР = (ЭЙЛЕР(H, v1 ), ЭЙЛЕР(H, v2 ), ..., ЭЙЛЕР(H, vk ), v1 ) } } main() { v = любая вершина из V ω = ЭЙЛЕР(G, v) } Замечание 4.9.1 . Заметим, что параметр H в функции ЭЙЛЕР передается по ссылке. То есть все преобразования, которые производятся с графом в функции, (удаление ребер) оказывают воздействие на исходный объект G. Таким образом, если мы удалили некоторые ребра в одной из ветвей рекурсивных вызовов функции, то ребра будут отсутствовать для всех последующих вызовов, в том числе в других ветвях рекурсии. На вход алгоритма дерева подается граф G = (V, E) и функция весов W : E → R+ , удовлетворяющая неравенству треугольника. Алгоритм 4.9.2 (Алгоритм дерева). 1) T = (V, E1 ) = Минимальное Остовное Дерево (G) 2) H = мультиграф, полученный удвоением ребер из дерева T 3) ω = ЭЙЛЕР(H, v), где v — любая из вершин V 4) τ = (Удалить повторение вершин (ω), v) Пример 4.9.1 . Предположим, что мы уже нашли минимальное остовное дерево и удвоили его ребра. Результат изображен на рисунке 48. В ходе выполнения алгоритма поиска эйлерова цикла мы могли 203 Рисунок 48: Построение гамильтонова цикла с помощью алгоритма дерева обойти сначала, скажем, цикл (1,8,1). Тогда искомый цикл должен получиться в результате вызова функций в выражении ω = (ЭЙЛЕР(H,1), ЭЙЛЕР(H,8), 1). Вершина 1 к этому моменту уже имеет степень 0, так что ЭЙЛЕР(H,1) = (1). ЭЙЛЕР(H,8) может найти, например, цикл (8, 2, 3, 2, 8). В этом случае мы выполним вызов (ЭЙЛЕР(H,8),ЭЙЛЕР(H,2),ЭЙЛЕР(H,3),ЭЙЛЕР(H,2),8). Здесь ЭЙЛЕР(H,2) = (2) в обоих случаях. ЭЙЛЕР(H,8) мог бы оказаться (8,7,8), а ЭЙЛЕР(H,3) — (3,6,5,4,5,6,3). Подставим эти циклы в (ЭЙЛЕР(H,8),ЭЙЛЕР(H,2),ЭЙЛЕР(H,3),ЭЙЛЕР(H,2),8) и получим (8,7,8,2,3,6,5,4,5,6,3,2,8). Теперь подставим это вместо ЭЙЛЕР(H,8) в выражение для ω и получим эйлеров цикл ω = (1, 8, 7, 8, 2, 3, 6, 5, 4, 5, 6, 3, 2, 8, 1). После удаления повторений в этой последовательности получим цикл τ = (1, 8, 7, 2, 3, 6, 5, 4, 1) (на рисунке 48 изображен пунктирной линией). Это и есть результат работы алгоритма — гамильтонов 204 цикл. Степень близости веса полученного в алгоритме дерева гамильтонова цикла к оптимальному описывает следующая теорема. Определение 4.9.2 . Пусть τopt (G, W ) — оптимальный цикл в задаче коммивояжера для графа G и функции весов W , а τA (G, W ) — маршрут полученный с помощью некоторого алгоритма A. Тогда алгоритм A называют ε-приближенным, если W (τA (G, W )) − W (τopt (G, W )) ≤ ε. W (τopt (G, W )) Утверждение 4.9.11 . алгоритм. Алгоритм дерева — 1-приближенный Доказательство. Пусть τopt (G, W ) — оптимальный цикл в задаче коммивояжера для графа G и функции весов W , а τT (G, W ) — маршрут полученный с помощью алгоритма дерева. Так же предполагаем, что функция W удовлетворяет неравенству треугльника (36), поскольку в прочих случаях алгоритм дерева мы не рассматриваем. При удалении любого ребра e из τopt (G, W ) мы получим некоторое остовное дерево графа G. Вес этого дерева не может быть меньше веса минимального остовного дерева T графа G. Следовательно, W (τopt (G, W )) > W (τopt (G, W ) − e) ≥ W (T ). С другой стороны τT (G, W ) построен из T с удвоенными ребрами (и весом 2W (T )) заменой последовательностей ребер (vi1 , vi2 ), (vi2 , vi3 ), ..., (vij−1 , vij ) на одиночные ребра (vi1 , vij ). Из неравенства треугольника следует, что W ((vi1 , vi2 )) + W ((vi2 , vi3 )) + · · · + W ((vij−1 , vij )) ≥ W ((vi1 , vij )). Таким образом, W (τT (G, W )) ≤ 2 · W (T ) и следовательно W (τT (G, W )) ≤ 2 · W (τopt (G, W )). Осталось записать формулу для ²-приближенности. W (τT (G, W )) − W (τopt (G, W )) 2W (τopt (G, W )) − W (τopt (G, W )) ≤ = 1. W (τopt (G, W )) W (τopt (G, W )) 205 ¤ Хотя мы и не можем пока ответить на вопрос о существовании полиномиального алгоритма для N P -трудной задачи коммивояжера, в некоторых случаях (при выполнении дополнительных условий) мы можем находить приближенное решение этой задачи. 206 5 Математическая логика: высказываний и предикатов 5.1 5.1.1 Исчисления Исчисление высказываний Пример задачи логики высказываний Рассмотрим пример. Пусть мы хотим выяснить, является ли определенная последовательность рассуждений логически правильной. Простые высказывания: A = капиталовложения останутся постоянными; B = возрастут правительственные расходы; C = возрастет безработица; D = налоги будут снижены. На основе простых высказываний построим сложные высказывания: A = A ⊃ (B ∨ C), B = ¬B ⊃ D, C = (D ∧ A) ⊃ ¬C. Здесь высказывание A можно прочитать как "если капиталовложения останутся постоянными, то возрастут правительственные расходы, или возрастет безработица". Аналогично можно читать и другие сложные высказывания. Замечание 5.1.1 . Для определенности здесь и далее простые высказывания будем обозначать большими латинскими буквами A, B, C,..., а сложные высказывания округлыми большими латинскими буквами A, B, C,... Определение 5.1.1 . Здесь A, B, C — пропозициональные буквы, A, B, C — пропозициональные формы, построенные из пропозициональных букв с помощью связок {¬, ∨, ∧, ⊃, ≡} по правилам построения формул алгебры логики. Рассмотрим следующее рассуждение: A, B, C, A B — посылки — заключение 207 Определение 5.1.2 . Высказывание A логически влечет высказывание B (B — следствие A), если пропозициональная форма A ⊃ B — тавтология. Определение 5.1.3 . тавтология. A логически эквивалентна B, если A ≡ B — Итак, нам необходимо проверить, будет ли тавтологией следующая пропозициональная форма: A ∧ C ∧ A} ⊃ | ∧ B {z конъюнкция посылок B |{z} =1? заключение Прежде чем перейти непосредственно к вычислению этой формы, необходимо выполнить предварительную проверку непротиворечивости посылок. Если окажется, что посылки в нашем рассуждении не могут быть истинными в одно и то же время, то, исходя из предположения, что все они выполняются, мы не сможем получить достоверных результатов. Кроме того, по определению импликации, если A = 0, то A ⊃ B = 1 для любых значений B, что совсем не будет свидетельствовать о правильном рассуждении. Это согласуется с одним из интуитивных логических законов: исходя из ложных посылок можно вывести как истинное, так и ложное заключение. Проверим, выполнима ли формула A ∧ B ∧ C ∧ A. Такую проверку для посылок нужно выполнять каждый раз. (A ⊃ (B ∨ C))(B ⊃ D)(DA ⊃ C)A = = (A ∨ B ∨ C)(B ∨ D)(D ∨ A ∨ C)A = = (AB ∨ AD ∨ B ∨ BD ∨ CB ∨ CD)(DA ∨ CA) = = ABDA ∨ ABCA ∨ ADDA ∨ ADCA ∨ BDA ∨ BCA∨ ∨ BDDA ∨ BDCA ∨ CBDA ∨ CBCA ∨ CDDA ∨ CDCA = = BDA ∨ BCA ∨ BDCA ∨ CBDA = ABD ∨ ABC Легко убедиться, что, например, на наборе значений A = 1, B = 1, C = 1, D = 0 полученное выражение обращается в единицу. Таким 208 образом, A ∧ B ∧ C ∧ A — выполнимая функция, т.е. посылки непротиворечивы. Вычислим теперь значение выражения A ∧ B ∧ C ∧ A ⊃ B, воспользовавшись результатами предыдущих выкладок: (ABD ∨ ABC) ⊃ B = ABD ∨ ABC ∨ B = = ABD · ABC ∨ B = (A ∨ B ∨ D)(A ∨ B ∨ C) ∨ B = = A ∨ A B ∨ AC ∨ B ∨ BC ∨ DA ∨ DB ∨ DC ∨ B = = (A ∨ B ∨ DC) ∨ B = 1 Исследуемая формула оказалась тавтологией. Значит, высказывание B действительно оказалось логическим следствием посылок A, B, C и A. При этом мы нигде не обсуждаем истинность самих высказываний A, B, C, A; возможно они неверны. Тем не менее, если они истинны, то верным окажется и заключение. Заметим, что мы рассматривали истинность только логики рассуждений независимо от смысла, который мы приписываем элементарным высказываниям A, B, C, D. Если мы опеределим отличные значения для элементарных высказываний, истинность или ложность логики рассуждений останется неизменной. Если при новых определениях будут верны посылки, верным будет и заключение. 5.1.2 Формальные теории Определение 5.1.4 . Формальная теория — это совокупность четырех объектов: 1) Алфавит A — произвольное множество элементов, которые, в этом случае, называют символами. 2) Множество формул F — некоторое множество слов в алфавите A: ∞ [ ∗ F⊆A = Ai . i=1 3) Множество аксиом B — некоторое множество формул: B ⊆ F. 209 4) Множество правил вывода R — множество отношений R на множестве формул: R ⊆ |F × F × {z· · · × F} . k+1 Определение 5.1.5 . Пусть R ∈ R — некоторое k + 1-арное правило вывода. Если A1 , A2 , ..., Ak , Ak+1 — формулы из F и (A1 , A2 , ..., Ak , Ak+1 ) ∈ R, то говорят, что Ak+1 непосредственно выводима из A1 , A2 , ..., Ak (или Ak+1 непосредственное следствие A1 , A2 , ..., Ak ) по правилу вывода R. Определение 5.1.6 . Вывод — это последовательность формул A1 , A2 , ..., An , такая что для каждого i ∈ {1, ..., n} верно одно из двух: a) Ai ∈ B — аксиома, или b) Ai непосредственно выводима из формул Aj1 , Aj2 , ..., Ajk , 1 ≤ js < i, по некоторому правилу вывода данной формальной теории. Определение 5.1.7 . Говорят, что формула A формальной теории T является теоремой (выводима в формальной теории T ), если для нее существует вывод A1 , A2 , ...,An = A. Пишут `T A. Определение 5.1.8 . Аксиоматическая теория — формальная теория, в которой существует алгоритм, позволяющий для любой формулы A определить, является ли A аксиомой. Определение 5.1.9 . Разрешимая теория — формальная теория, в которой существует алгоритм, позволяющий для любой формулы A определить, является ли A теоремой. Неразрешимая теория — теория не являющаяся разрешимой. Определение 5.1.10 . Пусть Γ ⊆ F — некоторое множество формул теории T . Формула A выводима в формальной теории T из множества посылок Γ (A — следствие формул множества Γ), если для нее существует последовательность формул A1 , A2 , ..., An = A, такая что для каждого i ∈ {1, ..., n} верно одно из трех: a) Ai ∈ B — аксиома, 210 b) Ai ∈ Γ — посылка, или c) Ai непосредственно выводима из формул Aj1 , Aj2 , ..., Ajk , 1 ≤ js < i, по некоторому правилу вывода теории T . Такую последовательность формул будем называть выводом из посылок Γ. Пишут Γ `T A. Пример 5.1.1 . Формальная теория M : 1) Алфавит: A = {|}. 2) Формулы — последовательности из символа | произвольной длины: F = A∗ 3) Аксиома: B = {||}. 4) Правило вывода: R = {(α, β) | α — формула, β = αα}. Вывод: 1. || — аксиома. 2. |||| — из строки 1 по правилу вывода R. 3. |||||||| — из строки 2 по правилу вывода R. Таким образом, теоремами этой формальной теории являются последовательности из символа | длины 2t для любого t ∈ N. Формальная теория M является аксиоматической и разрешимой. 5.1.3 Формальная теория исчисление высказываний Определим аксиоматическую теорию L — исчисление высказываний. 1. Алфавит: {A1 , A2 , ..., An , ..., ¬, ⊃, (, )}. 2. Формулы: 1) Ai — формула, для любого i ∈ N. 2) Если A и B — формулы, то ¬A и (A ⊃ B) — формулы. 3) Других формул нет. 3. Аксиомы: Пусть A, B, C — произвольные формулы. Тогда следующие формулы являются аксиомами: 1a (A ⊃ (B ⊃ A)), 2a ((A ⊃ (B ⊃ C)) ⊃ ((A ⊃ B) ⊃ (A ⊃ C))), 3a ((¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B)). Замечание 5.1.2 . Три указанные формулы являются схемами аксиом: при подстановке в одну из схем произвольных формул теории L мы получим аксиому. Таким образом существует счетное число аксиом 211 теории L. В дальнейшем мы будем говорить об аксиоме 1, 2 или 3, имея в виду одну из аксиом по схеме 1, 2 или 3 соответственно. 4. Правило вывода modus ponens (MP): MP = {(A, (A ⊃ B), B) | A, B ∈ F}. То есть, если A и B произвольные формулы теории L, то B непосредственно выводима из формул A и (A ⊃ B) по правилу вывода modus ponens. Замечание 5.1.3 . В алфавите формальной теории L нет символов ∨, ∧, ≡. Тем не менее, мы можем использовать эти символы, как краткую форму записи в некоторых сложных выражениях: (A ∨ B) = (¬A ⊃ B), (A ∧ B) = (¬(A ⊃ ¬B)), (A ≡ B) = ((A ⊃ B) ∧ (B ⊃ A)) = (¬((A ⊃ B) ⊃ ¬(B ⊃ A))). Для простоты иногда будем опускать внешние скобки в записи формул: вместо (A ⊃ B) — писать A ⊃ B. Далее в этой главе мы будем говорить только о формальной теории исчисление высказываний; для простоты, вместо `L A будем писать ` A. Лемма 5.1.1 . Пусть, A — формула. Тогда ` (A ⊃ A). Доказательство. Построим вывод для формулы (A ⊃ A): 1. ((A ⊃ ((A ⊃ A) ⊃ A)) ⊃ ((A ⊃ (A ⊃ A)) ⊃ (A ⊃ A))) — аксиома 2 после подстановки вместо A формулы A, вместо B — (A ⊃ A) и вместо C — A. 2. (A ⊃ ((A ⊃ A) ⊃ A)) — аксиома 1 после подстановки A ← A, B ← (A ⊃ A). 3. ((A ⊃ (A ⊃ A)) ⊃ (A ⊃ A)) — применение правила вывода MP к строкам 2 и 1. 4. (A ⊃ (A ⊃ A)) — аксиома 1 после подстановки A ← A, B ← A. 5. (A ⊃ A) — MP к строкам 3 и 4. ¤ 212 Замечание 5.1.4 . Формулы, для которых мы доказали, что они являются теоремами данной формальной теории, в дальнейшем можно использовать в выводах наравне с аксиомами. Действительно, раз для такой формулы существует вывод, мы всегда можем привести его как составную часть других выводов, но не будем этого делать для краткости. Пример 5.1.2 . Рассмотрим формализацию следующего рассуждения. "Если Вася баскетболист,то Вася высокий. Вася баскетболист. Следовательно Вася высокий." Обозначим через A высказывание "Вася баскетболист" и через B — "Вася высокий". Тогда наше рассуждение будет имеь вид: A ⊃ B, A . B Чтобы убедиться, что оно верно, проверим, является ли формула (A ⊃ B)A ⊃ B тавтологией. (A ⊃ B)A ⊃ B = (A ∨ B)A ∨ B = A ∨ B ∨ A ∨ B = AB ∨ A ∨ B = = (A ∨ A)(B ∨ A) ∨ B = B ∨ A ∨ B = 1. Теперь рассмотрим это рассуждение с точки зрения теории L. 1) A — посылка. 2) A ⊃ B — посылка. 3) B — MP к 1 и 2. Следовательно, A, A ⊃ B ` B. Согласно определению 5.1.2, если формула B получина по правилу вывода MP из предыдущих, формула B является их логическим следствием. 5.1.4 Теоремы исчисления высказываний Теорема 5.1.2 (Теорема о дедукции). Пусть A и B — формулы, Γ — некоторое множество формул теории L. Тогда из Γ, A ` B следует, что Γ ` (A ⊃ B). 213 Доказательство. Пусть B1 , B2 , ..., Bn = B — вывод B из множества посылок Γ ∪ {A}. Докажем по индукции, что Γ ` A ⊃ Bi , i = 1, 2, ..., n. 1) Пусть i = 1. B1 — аксиома, или B1 ∈ Γ, или B1 = A. a) Пусть B1 — аксиома. 1. B1 — аксиома. 2. B1 ⊃ (A ⊃ B1 ) — аксиома 1. 3. A ⊃ B1 — MP из 1 и 2. Следовательно ` A ⊃ B1 ⇒ Γ ` A ⊃ B1 . b) Пусть B1 ∈ Γ. 1. B1 — посылка. 2. B1 ⊃ (A ⊃ B1 ) — аксиома 1. 3. A ⊃ B1 — MP из 1 и 2. Следовательно B1 ` A ⊃ B1 ⇒ Γ ` A ⊃ B1 . c) Пусть B1 = A. По лемме 5.1.1 ` A ⊃ A = A ⊃ B1 ⇒ Γ ` A ⊃ B1 . 2) Пусть для всех l < k верно, что Γ ` A ⊃ Bl . Докажем, что Γ ` A ⊃ Bk . Bk — аксиома, или Bk ∈ Γ, или Bk = A, или Bk получена по правилу вывода modus ponens. Первые три случая доказываются аналогично соответствующим пунктам базы индукции. d) Bk — результат применения MP к формулам Bi и Bj , i, j < k. Тогда, Γ ` A ⊃ Bi , Γ ` A ⊃ Bj и Bj = Bi ⊃ Bk . Построим вывод: 1. (A ⊃ (Bi ⊃ Bk )) ⊃ ((A ⊃ Bi ) ⊃ (A ⊃ Bk )) — аксиома 2 (A ← A, B ← Bi , C ← Bk ). 2. (A ⊃ (Bi ⊃ Bk )) — посылка. 3. ((A ⊃ Bi ) ⊃ (A ⊃ Bk )) — MP из 2 и 1. 4. (A ⊃ Bi ) — посылка. 5. (A ⊃ Bk ) — MP из 4 и 3. Таким образом, (A ⊃ (Bi ⊃ Bk )), (A ⊃ Bi ) ` (A ⊃ Bk ). Следовательно, Γ ` (A ⊃ Bk ). Следовательно, Γ ` (A ⊃ B). ¤ Пример 5.1.3 . С помощью теоремы о дедукции мы могли бы гораздо проще доказать лемму 5.1.1: 1) A — посылка. 2) A ⊃ A — по теореме о дедукции, поскольку A ` A. 214 Следствие 5.1.3 . Пусть, A, B и C — некоторые формулы теории L. Тогда A ⊃ B, B ⊃ C ` A ⊃ C. Доказательство. 1) A — посылка. 2) A ⊃ B — посылка. 3) B — MP из 1 и 2. 4) B ⊃ C — посылка. 5) C — MP из 3 и 4. Таким образом, A, A ⊃ B, B ⊃ C ` C. Следовательно, по теореме о дедукции A ⊃ B, B ⊃ C ` A ⊃ C. ¤ Следствие 5.1.4 . Пусть, A, B и C — некоторые формулы теории L. Тогда A ⊃ (B ⊃ C), B ` A ⊃ C. Доказательство. 1) A — посылка. 2) A ⊃ (B ⊃ C) — посылка. 3) B ⊃ C — MP из 1 и 2. 4) B — посылка. 5) C — MP к 4 и 3. A, A ⊃ (B ⊃ C), B ` C. Следовательно, по теореме о дедукции A ⊃ (B ⊃ C), B ` A ⊃ C. ¤ Лемма 5.1.5 (Список теорем). Пусть A и B — произвольные формулы теории L. Тогда следующие формулы являются теоремами L: 1. ¬¬B ⊃ B — закон отрицания отрицания. 2. B ⊃ ¬¬B — закон отрицания отрицания. 3. ¬A ⊃ (A ⊃ B) — из ложных посылок можно вывести что угодно. 4. (¬B ⊃ ¬A) ⊃ (A ⊃ B) — доказательство от противного. 5. (A ⊃ B) ⊃ (¬B ⊃ ¬A) — доказательство от противного. 6. A ⊃ (¬B ⊃ ¬(A ⊃ B)) — из истинных посылок нельзя вывести ложное заключение. 215 7. (A ⊃ B) ⊃ ((¬A ⊃ B) ⊃ B) — если B выводима и из A и из его отрицания, то B истинна независимо от посылок. Доказательство. Докажем, например, для формул 1 и 3. 1. 1) (¬B ⊃ ¬¬B) ⊃ ((¬B ⊃ ¬B) ⊃ B) — аксиома 3. 2) ¬¬B — посылка. 3) ¬¬B ⊃ (¬B ⊃ ¬¬B) — аксиома 1. 4) ¬B ⊃ ¬¬B — MP из 2 и 3. 5) (¬B ⊃ ¬B) ⊃ B — MP из 4 и 1. 6) ¬B ⊃ ¬B — лемма 5.1.1. 7) B — MP из 6 и 5. Таким образом ¬¬B ` B и по теореме о дедукции ` ¬¬B ⊃ B. 3. 1) A ⊃ (¬B ⊃ A) — аксиома 1. 2) ¬A ⊃ (¬B ⊃ ¬A) — аксиома 1. 3) A — посылка. 4) ¬B ⊃ A — MP из 3 и 1. 5) ¬A — посылка. 6) ¬B ⊃ ¬A — MP из 5 и 2. 7) (¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B) — аксиома 3. 8) ((¬B ⊃ A) ⊃ B) — MP из 6 и 7. 9) B — MP из 4 и 8. Таким образом A, ¬A ` B. Тогда по теореме о дедукции, ¬A ` A ⊃ B и ` ¬A ⊃ (A ⊃ B). Остальные пункты утверждения предлагаются читателю для самостоятельного доказательства. ¤ 5.1.5 Теорема о полноте исчисления высказываний Лемма 5.1.6 . Аксиомы теории L являются тавтологиями. Доказательство. 1) (A ⊃ (B ⊃ A)) = A ∨ B ∨ A = 1. 216 2) ((A ⊃ (B ⊃ C)) ⊃ ((A ⊃ B) ⊃ (A ⊃ C))) = = A ∨ B ∨ C ∨ A ∨ B ∨ A ∨ C = ABC ∨ AB ∨ A ∨ C = = (AB ∨ C)(C ∨ C) ∨ (A ∨ A)(B ∨ A) = AB ∨ C ∨ B ∨ A = = (A ∨ A)(B ∨ A) ∨ C ∨ B = B ∨ A ∨ C ∨ B = 1 3) ((¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B) = B ∨ A ∨ B ∨ A ∨ B = = BA ∨ B A ∨ B = B(A ∨ A) ∨ B = B ∨ B = 1. ¤ Лемма 5.1.7 . Любая теорема теории L является тавтологией. Доказательство. Пусть для формулы A теории L существует вывод A1 , A2 , ..., An = A. Докажем по индукции, что Ai — тавтология, i = 1, n. По определению вывода, A1 является аксиомой и по лемме 5.1.6 она является тавтологией. Пусть формулы Ai — тавтология, ∀i = 1, k. Рассмотрим Ak+1 : она является аксиомой, или получена по правилу вывода modus ponens из предыдущих формул. Если Ak+1 — аксиома, то она является тавтологией по лемме 5.1.6. Пусть Ak+1 получена по правилу modus ponens из формул Ai и Aj = Ai ⊃ Ak+1 , i, j ≤ k. По индукционному предположению, Ai и Aj — тавтологии. Пусть, на некотором наборе значений пропозициональных букв формула Ak+1 принимает значение 0. Тогда на этом наборе Aj = Ai ⊃ Ak+1 = 1 ⊃ 0 = 0. ?! Противоречие. Следовательно Ak+1 — тавтология. Следовательно A — тавтология. ¤ Пусть A — формула, в которую входят пропозициональные буквы B1 , B2 , ..., Bk . Когда нам будет необходимо подчеркнуть, от каких значений 217 рассматривается A, будем писать A(α1 , α2 , ..., αk ), имея в виду, что вместо пропозициональной буквы Bi подставляется значение αi , i = 1, k. Как и раньше, будем использовать знак степени для обозначения наличия или отсутствия отрицания: ½ B, σ = 1, Bσ = ¬B, σ = 0. Лемма 5.1.8 . Пусть B1 , B2 , ..., Bk — все пропозициональные буквы, которые входят в формулу A, и пусть σ1 , σ2 , ..., σk — логические константы. Тогда B1σ1 , B2σ2 , ..., Bkσk ` AA(σ1 ,σ2 ,...,σk ) . Доказательство. Докажем по индукции по числу j логических связок в формуле A. 1) Пусть j = 0. Тогда A = B1 , A(σ1 ) = σ1 , AA(σ1 ) = B1σ1 . B σ1 ` B σ1 = AA(σ1 ) . 2) Пусть утверждение верно для любого j < n. Докажем для случая n логических связок в A. Формула A, в зависимости от своей последней логической связки, может быть одного из двух видов: A = ¬A1 или A = (A1 ⊃ A2 ). a) Пусть A = ¬A1 . Рассмотрим два варианта Пусть A1 (σ1 , ..., σk ) = 0. По индукционному предположению σ1 σ2 σk B1 , B2 , ..., Bk ` ¬A1 . ¬A1 = A = A¬A1 (σ1 ,...,σk ) = AA(σ1 ,...,σk ) . Следовательно, B1σ1 , B2σ2 , ..., Bkσk ` AA(σ1 ,σ2 ,...,σk ) . Пусть A1 (σ1 , ..., σk ) = 1. AA(σ1 ,...,σk ) = A¬A1 (σ1 ,...,σk ) = ¬A = ¬¬A1 . По индукционному предположению B1σ1 , B2σ2 , ..., Bkσk ` A1 . Построим вывод: 1. A1 ⊃ ¬¬A1 — пункт 2 из леммы 5.1.5. 218 2. A1 — посылка. 3. ¬¬A1 — MP из 2 и 1. Таким образом, A1 ` ¬¬A и B1σ1 , B2σ2 , ..., Bkσk ` ¬¬A1 = AA(σ1 ,σ2 ,...,σk ) . b) Пусть A = (A1 ⊃ A2 ). Рассмотрим несколько вариантов. Пусть A1 (σ1 , ..., σk ) = 0, A2 (σ1 , ..., σk ) = 0. Тогда B1σ1 , ..., Bkσk ` ¬A1 , B1σ1 , ..., Bkσk ` ¬A2 . AA(σ1 ,...,σk ) = A0⊃0 = A = (A1 ⊃ A2 ). Рассмотрим вывод: 1. ¬A1 — посылка. 2. ¬A1 ⊃ (A1 ⊃ A2 ) — пункт 3 из леммы 5.1.5. 3. (A1 ⊃ A2 ) — MP из 1 и 2. Таким образом, ¬A1 ` (A1 ⊃ A2 ) = AA(σ1 ,...,σk ) ⇒ B1σ1 , ..., Bkσk ` AA(σ1 ,...,σk ) . Пусть A1 (σ1 , ..., σk ) = 0, A2 (σ1 , ..., σk ) = 1. Тогда B1σ1 , ..., Bkσk ` ¬A1 , B1σ1 , ..., Bkσk ` A2 . AA(σ1 ,...,σk ) = A0⊃1 = A = (A1 ⊃ A2 ). Рассмотрим вывод: 1. ¬A1 — посылка. 2. ¬A1 ⊃ (A1 ⊃ A2 ) — пункт 3 из леммы 5.1.5. 3. (A1 ⊃ A2 ) — MP из 1 и 2. Таким образом, ¬A1 ` (A1 ⊃ A2 ) = AA(σ1 ,...,σk ) ⇒ B1σ1 , ..., Bkσk ` AA(σ1 ,...,σk ) . Пусть A1 (σ1 , ..., σk ) = 1, A2 (σ1 , ..., σk ) = 0. Тогда B1σ1 , ..., Bkσk ` A1 , B1σ1 , ..., Bkσk ` ¬A2 . AA(σ1 ,...,σk ) = A1⊃0 = A0 = ¬(A1 ⊃ A2 ). 219 Рассмотрим вывод: 1. A1 — посылка. 2. ¬A2 — посылка. 3. A1 ⊃ (¬A2 ⊃ ¬(A1 ⊃ A2 )) — пункт 6 из леммы 5.1.5. 4. ¬A2 ⊃ ¬(A1 ⊃ A2 ) — MP из 1 и 3. 5. ¬(A1 ⊃ A2 ) — MP из 2 и 4. Таким образом, A1 , ¬A2 ` ¬(A1 ⊃ A2 ) = AA(σ1 ,...,σk ) ⇒ B1σ1 , ..., Bkσk ` AA(σ1 ,...,σk ) . Пусть A1 (σ1 , ..., σk ) = 1, A2 (σ1 , ..., σk ) = 1. Тогда B1σ1 , ..., Bkσk ` A1 , B1σ1 , ..., Bkσk ` A2 . AA(σ1 ,...,σk ) = A1⊃1 = A = (A1 ⊃ A2 ). Рассмотрим вывод: 1. A2 — посылка. 2. A2 ⊃ (A1 ⊃ A2 ) — аксиома 1. 3. (A1 ⊃ A2 ) — MP из 1 и 2. Таким образом, A2 ` (A1 ⊃ A2 ) = AA(σ1 ,...,σk ) ⇒ B1σ1 , ..., Bkσk ` AA(σ1 ,...,σk ) . Утверждение доказано. ¤ Пример 5.1.4 . Пусть, A = B1 ⊃ B2 . Если σ1 = 1, σ2 = 0, то A(σ1 , σ2 ) = 0. Следовательно, по лемме 5.1.8, B1 , ¬B2 ` ¬(B1 ⊃ B2 ). Покажем, что это действительно так. Вывод: 1) B1 ⊃ (¬B2 ⊃ ¬(B1 ⊃ B2 )) — лемма 5.1.5 пункт 6. 2) B1 — посылка. 3) ¬B2 — посылка. 4) (¬B2 ⊃ ¬(B1 ⊃ B2 )) — MP из 2 и 1. 5) ¬(B1 ⊃ B2 ) — MP из 3 и 4. Что и требовалось доказать. 220 Теорема 5.1.9 (о полноте исчисления высказываний). Формула A формальной теории L есть тавтология тогда и только тогда, когда A — теорема теории L. Доказательство. Достаточность следует из леммы 5.1.7. Покажем необходимость. Пусть A — тавтология. Пусть B1 , B2 , ..., Bk — все пропозициональные буквы, которые входят в формулу A, и пусть σ1 , σ2 , ..., σk — логические константы. По лемме 5.1.8 σ k−1 B1σ1 , B2σ2 , ..., Bk−1 , Bkσk ` AA(σ1 ,σ2 ,...,σk ) . Поскольку A — тавтология, AA(σ1 ,σ2 ,...,σk ) = A для любых наборов σi . Тогда, σk−1 B1σ1 , B2σ2 , ..., Bk−1 , Bk ` A, σ k−1 B1σ1 , B2σ2 , ..., Bk−1 , ¬Bk ` A. По теореме о дедукции, σ k−1 B1σ1 , B2σ2 , ..., Bk−1 ` Bk ⊃ A, σ k−1 B1σ1 , B2σ2 , ..., Bk−1 ` ¬Bk ⊃ A. Построим вывод: 1) Bk ⊃ A — посылка. 2) ¬Bk ⊃ A — посылка. 3) (Bk ⊃ A) ⊃ ((¬Bk ⊃ A) ⊃ A) — теорема 7 из леммы 5.1.5. 4) ((¬Bk ⊃ A) ⊃ A) — MP из 1 и 3. 5) A — MP из 2 и 4. Следовательно, σk−1 B1σ1 , B2σ2 , ..., Bk−1 ` A. Таким образом, мы избавились от Bk в списке посылок для вывода формулы A. Повторяя процесс, мы можем показать, что σk−2 σ1 σ2 B1 , B2 , ..., Bk−2 ` A и так далее, пока не получим, что ` A. ¤ Замечание 5.1.5 . Формальная теория L является разрешимой, поскольку для любой формулы мы можем проверить, является ли она тавтологией и, следовательно, теоремой L. 221 Определение 5.1.11 . Формальная теория T с операцией ¬ непротиворечива, если в ней не существует такой формулы A, что `T A и `T ¬A. Следствие 5.1.10 . Формальная теория L непротиворечива. Доказательство. Если ` A, то A — тавтология. Тогда ¬A не является тавтологией и по теореме 5.1.9: 6` ¬A. ¤ 5.1.6 Независимость аксиом исчисления высказываний Определение 5.1.12 . Пусть B — множество аксиом формальной теории T . Тогда X ⊆ B — независимое множество аксиом, если существует такая формула A ∈ X, что A не может быть выведена в T без использования аксиом из B: B \ X 6` A. Теорема 5.1.11 (о независимости схем аксиом Каждая из схем аксиом 1,2,3 теории L независима. теории L). Замечание 5.1.6 . Имеется в виду, что множество всех аксиом по схеме i (i = 1, 2, или 3) независимо. Доказательство. 1) Докажем независимость схемы 1: (A ⊃ (B ⊃ A)). Поскольку вывод формул в формальной теории L происходит в соответствии с правилами вывода и независим от наших знаний от приписанной операциям логике, мы можем сопоставить символам ⊃ и 222 ¬ любые значения. Определим таблицы следующим образом: A 1 1 1 2 2 2 A ¬A 0 1 1 1 2 0 B A⊃B 1 2 2 2 2 1 2 2 1 2 Можно показать непосредственной проверкой, что, при таком задании операций, значения всех аксиом по схемам 2 и 3 всегда будет 0. A .. . B .. . C ((A ⊃ (B ⊃ C)) ⊃ ((A ⊃ B) ⊃ (A ⊃ C))) (0 ⊃ 0) ⊃ (0 ⊃ 0) = 0 ⊃ 0 = 0 (0⊃(0⊃1))⊃((0⊃0)⊃(0⊃1))= 1 =(0⊃2)⊃(0⊃2)=2⊃2=0 .. .. . . 2 2 2 A .. . 2 B .. . 2 (2⊃(2⊃2))⊃((2⊃2)⊃(2⊃2))= =(2⊃0)⊃(0⊃0)=0⊃0=0 C ((¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B) 0 (1 ⊃ 1) ⊃ ((1 ⊃ 0) ⊃ 0) = 2 ⊃ (2 ⊃ 0) = 2 ⊃ 0 = 0 .. .. . . 2 (0 ⊃ 0) ⊃ ((0 ⊃ 2) ⊃ 2) = 0 ⊃ (2 ⊃ 2) = 0 ⊃ 0 = 0 Рассмотрим, как работает правило вывода modus ponens: если A = 0 и A ⊃ B = 0, то согласно нашему описанию операции ⊃ будет верно и B = 0. При этом аксиома 1 может принимать ненулевые значения: ¯ (A ⊃ (B ⊃ A))¯A=1,B=2 = 1 ⊃ (2 ⊃ 1) = 1 ⊃ 0 = 2. Следовательно, пользуясь правилом вывода modus ponens из аксиом 2 и 3 нельзя получить любую аксиому схемы 1. 223 2) Доказательство независимости схемы аксиом 2 аналогично доказательству предыдущего пункта. Определим таблицы для операций ¬ и ⊃ следующим образом: A 1 1 1 2 2 2 A ¬A 0 1 1 0 2 1 B A⊃B 1 2 2 1 1 2 2 1 2 Можно показать непосредственной проверкой, что значения аксиом 1 и 3, при таком определении, всегда 0, а также, что modus ponens сохраняет 0. В то же время ¯ ((A ⊃ (B ⊃ C)) ⊃ ((A ⊃ B) ⊃ (A ⊃ C)))¯A=B=0,C=1 = = ((0 ⊃ (0 ⊃ 1)) ⊃ ((0 ⊃ 0) ⊃ (0 ⊃ 1))) = ((0 ⊃ 2) ⊃ (0 ⊃ 2)) = = 1 ⊃ 1 = 2. Следовательно, пользуясь правилом вывода modus ponens из аксиом 1 и 3 нельзя получить любую аксиому схемы 2. 3) Докажем независимость схемы 3: ((¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B)). Рассмотрим оператор h, сопоставляющий произвольной формуле A формулу h(A), полученную удалением всех символов ¬. Тогда, для любой аксиомы A по схеме 1 или 2, h(A) также будет аксиомой по схеме, соответственно, 1 или 2. Следовательно, по лемме 5.1.7, для любой аксиомы A по схеме 1 или 2, h(A) — тавтология. Пусть A и A ⊃ B таковы, что h(A) и h(A ⊃ B) — тавтологии. Тогда h(A) ⊃ h(B) = h(A ⊃ B) — тавтология и h(B), по свойствам операции 224 импликации, тоже тавтология. Следовательно, h от любой формулы, выводимой из аксиом 1 и 2, — тавтология. В то же время, ¯ h(((¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B)))¯A=B=0 = ¯ = ((B ⊃ A) ⊃ ((B ⊃ A) ⊃ B))¯A=B=0 = = ((0 ⊃ 0) ⊃ ((0 ⊃ 0) ⊃ 0) = 1 ⊃ (1 ⊃ 0) = 1 ⊃ 0 = 0. То есть оператор h от аксиомы по схеме 3 не обязательно тавтология. Следовательно, пользуясь правилом вывода modus ponens из аксиом 1 и 2 нельзя получить любую аксиому схемы 3. ¤ 225 5.2 5.2.1 Исчисление предикатов Пример задачи логики предикатов Рассмотрим пример. Пусть есть следующее рассуждение. Посылки: (1) Всякий, кто находится в здравом уме, может понимать математику. (2) Ни один из сыновей Гегеля не может понимать математику. (3) Сумасшедшие не допускаются к голосованию. Заключение: (4) Никто из сыновей Гегеля не допускается к голосованию. Формализуем рассуждение. A(x) — x находится в здравом уме. Здесь x предметная переменная, A — предикат; B(x) — x может понимать математику; C(x, y) — x есть сын y; D(x) — x допускается к голосованию. С помощью этих предикатов можно переписать посылки и заключение: (1) A = ∀x(A(x) ⊃ B(x)); (2) B = ∀x(C(x, Гегель) ⊃ ¬B(x)); (3) C = ∀x(¬A(x) ⊃ ¬D(x)); (4) D = ∀x(C(x, Гегель) ⊃ ¬D(x)). Здесь ∀x — квантор всеобщности, а "Гегель" — предметная константа. Как и раньше, будем говорить, что рассуждение верно, если коньюнкция посылок импликация заключение истинна. В нашем примере A B ∧ C} | ∧{z конъюнкция посылок ⊃ D. |{z} заключение Можно отметить следующие отличия от исчисления высказываний: 1) Вместо пропозициональных букв, принимающих всего два значения, используются предикаты, зависящие от переменных, которые принимают значения из некоторого множества объектов. Пример 5.2.1 . Если раньше мы могли использовать элементарное утверждение A ="Вася — баскетболист", которое могло быть только истинно или ложно, то теперь мы бы написали A(x) — "x — 226 баскетболист" имея в виду, что A(x) принимает значение 1 для всех x из заданного множества, для которых верно свойство "быть баскетболистом". 2) Появились кванторы ∀x и ∃x для записи выражений "для любых" и "существует такое" соответственно. 3) В исчислении высказываний формула была логическим законом, если принимала значение "истина" на любом наборе логических констант, подставляемых вместо пропозициональных букв. Теперь мы используем предикаты с переменными из некоторого множества, так что проверить, что формула истинна на всех наборах не так просто. Кроме того, одной и той же формуле можно приписать различные области определения и по-разному определять истинное или ложное значение входящих в нее предикатов на данных аргументах. Здесь нам будет необходимо новое понятие — интерпретация. Опишем интерпретацию для предикатов из нашего примера. Пусть M — произвольное множество; область интерпретации. AM , BM , DM — его произвольные подмножества. CM — произвольное подмножество M × M . m ∈ M — произвольный элемент. Будем полагать, что в формуле (∀x(A(x) ⊃ B(x))) ∧ (∀x(C(x, Гегель) ⊃ ¬B(x)))∧ ∧ (∀x(¬A(x) ⊃ ¬D(x))) ⊃ (∀x(C(x, Гегель) ⊃ ¬D(x))) (37) предикатам A, B, C и D сопоставлены соответственно множества AM , BM , CM и DM , "Гегелю" сопоставлен элемент m, а x принимает произвольные значения из M . Тогда A(x) = 1 тогда и только тогда, когда x ∈ AM . Аналогично для B(x) и D(x). C(x, Гегель) = 1 тогда и только тогда, когда (x, m) ∈ CM . ∀x(A(x) ⊃ B(x)) = 1, если AM ⊆ BM . ∀xA(x) = 1, если AM = M . Будем говорить, что M вместе с сопоставленными предикатам A, B, C, D подмножествами и соответствующим "Гегелю" элементом m есть интерпретация нашей формулы. Если задана интерпретация, то формула в этой интерпретации получает значение "истина" или "ложь". 227 В общем случае безотносительно интерпретации говорить значении формулы исчисления предикатов бессмысленно. Пример 5.2.2 . Рассмотрим следующую интерпретацию формулы (37): Область интерпретации M = N. ( . 1, x..4, A(x) = 0, иначе. ( . 1, x..2, B(x) = 0, иначе. ½ 1, x и y — взаимнопросты, C(x, y) = 0, иначе. ( . 1, x..100, D(x) = 0, иначе. Гегель =10. Легко убедиться, что в данной интерпретации и посылки и заключение истинны. Например, поскольку в данной интерпретации AM — множество всех чисел кратных четырем, а BM — множество всех чисел кратных двум, то AM ⊂ BM и ∀x(A(x) ⊃ B(x)) = 1. Следовательно A ∧ B ∧ C ⊃ D = 1 и наше рассуждение является верным в данной интерпретации. Замечание 5.2.1 . Заметим, что наше исходное словесное рассуждение на счет сыновей Гегеля не является интерпретацией, поскольку не определена область интерпретации M . Определение 5.2.1 . Будем говорить, что формула тождественно истинна (логически общезначима), если ее значение "истина" в любой интерпретации В общем случае определение, является ли формула логически общезначимой, — алгоритмически неразрешимая задача. Тем не менее, в некоторых частных случаях можно доказать, что формула является тождественно истинной. Покажем это для формулы (37). 228 Пусть существует интерпретация, в которой наша формула принимает значение "ложь": (∀x(A(x) ⊃ B(x))) ∧ (∀x(C(x, Гегель) ⊃ ¬B(x)))∧ ∧ (∀x(¬A(x) ⊃ ¬D(x))) ⊃ (∀x(C(x, Гегель) ⊃ ¬D(x))) = 0. Тогда, в этой интерпретации все посылки нашего рассуждения истинны, а заключение ложно. Таким образом существует xo : C(xo , Гегель) ⊃ ¬D(xo ) = 0 ¬A(xo ) ⊃ ¬D(xo ) = 1 A(xo ) ⊃ B(xo ) = 1 C(xo , Гегель) ⊃ ¬B(xo ) = 1 ⇒ ⇒ ⇒ ⇒ C(xo , Гегель) = 1, A(xo ) = 1. B(xo ) = 1. B(xo ) = 0. D(xo ) = 1. Противоречие доказывает, что такого xo не существует, что и требовалось доказать. 5.2.2 Формальная теория исчисление предикатов Определим формальную теорию исчисление предикатов. 1. Алфавит. 1) Предметные переменные: x1 , x2 , ..., xn , ... 2) Предметные константы: a1 , a2 , ..., an , ... 3) Функциональные символы: f11 , f21 , ..., f12 , f22 , ... f1n , f2n , ... 4) Предикатные символы: A11 , A12 , ..., A21 , A22 , ... An1 , An2 , ... 5) Квантор всеобщности: ∀x, где x — предметная переменная. Символы логических операций: ⊃, ¬. Скобки и запятая: ), (, ,. 2. Формулы. Формула определяется с использованием понятия "терм". Определение 5.2.2 . 1) xi и ai — термы. 2) Если t1 , t2 , ..., tn — термы и fin — функциональный символ, то fin (t1 , t2 , ..., tn ) — терм. 3) Других термов нет. 229 Определение 5.2.3 . 1) Пусть t1 , t2 , ..., tn — термы, Ani — предикатный символ. Тогда Ani (t1 , t2 , ..., tn ) — формула. 2) Если A и B — формулы и x — предметная переменная, то ¬A, ∀xA и (A ⊃ B) — формулы. 3) Других формул нет. Определение 5.2.4 . Областью действия квантора ∀x в формуле ∀xA называют подформулу A. Переменная xi называется связанной, если она входит в квантор ∀xi , или в область его действия. Иначе переменная xi называется свободной. Пример 5.2.3 . ¬A21 (x1 , a1 ) ∧ ∀x2 (∃x3 A21 (x1 , f12 (x2 , x3 )) ⊃ (A21 (x2 , x1 ) ∨ A21 (x2 , a1 ))). В этой формуле переменные x1 свободные, а переменные x2 и x3 — связанные. Определение 5.2.5 . Если в формуле нет свободных переменных, она называется замкнутой. Пример 5.2.4 . (∀x1 (A11 (x1 ) ⊃ A12 (x1 )) ∧ A11 (a1 )) ⊃ A12 (a1 ) — замкнутая формула. В дальнейшем будем писать A(xi ), подразумевая, что xi — свободная переменная формулы A. Определение 5.2.6 . Будем говорить, что терм t — свободный для переменной xi в формуле A(xi ), если в t нет такой переменной xj , что переменная xi в A(xi ) попадает в область действия квантора ∀xj . Пример 5.2.5 . Пусть A(x1 ) = ∀x2 A21 (x1 , x2 ). Тогда терм t0 = x3 — свободный для x1 в A(x1 ), терм t00 = f12 (x2 , x3 ) — не является свободным для x1 в A(x1 ). Будем обозначать A(t) формулу, полученную из A(xi ) подстановкой терма t вместо всех вхождений xi . При этом иногда специально оговаривается, что t — свободный для переменной xi в формуле A(xi ). 230 3. Аксиомы. Как и в исчислении предикатов, введем счетное множество аксиом через схемы, подставляя в которые любые формулы получим аксиому формальной теории. Пусть A, B, C — произвольные формулы. Тогда следующие формулы являются аксиомами: 1a (A ⊃ (B ⊃ A)). 2a ((A ⊃ (B ⊃ C)) ⊃ ((A ⊃ B) ⊃ (A ⊃ C))). 3a ((¬B ⊃ ¬A) ⊃ ((¬B ⊃ A) ⊃ B)). 4a (∀xi A(xi ) ⊃ A(t)), где t — терм, свободный для xi в формуле A. Если в A нет свободной переменной xi , аксиома принимает вид ∀xi A ⊃ A. 5a (∀xi (A ⊃ B) ⊃ (A ⊃ ∀xi B)), где в A нет свободной переменной xi . Если больше аксиом нет, получаем исчисление предикатов первого порядка. Если, кроме указанных, добавлены еще аксиомы, — формальную теорию первого порядка. 4. Правила вывода. 1) Правило вывода modus ponens (MP): если A и B произвольные формулы, то B непосредственно выводима из формул A и A ⊃ B по правилу вывода modus ponens. 2) Правило обобщения (Gen): если A — произвольная формула, то из A по правилу обобщения непосредственно выводима формула ∀xi A. Gen = {(A, ∀xi A) | A — формула}. Замечание 5.2.2 . В алфавит не входят символы ∨, ∧, ≡, ∃x. Тем не менее, мы можем использовать эти символы, как краткую форму записи в некоторых сложных выражениях: A ∨ B = (¬A ⊃ B), A ∧ B = (¬(A ⊃ ¬B)), A ≡ B = ((A ⊃ B) ∧ (B ⊃ A)) = (¬((A ⊃ B) ⊃ ¬(B ⊃ A))), ∃xi A = ¬∀xi ¬A. 5.2.3 Интерпретация Понятие интерпретации позволяет поставить в соответствие формуле некоторый смысл. Для этого каждому символу алфавита, который 231 используется в формуле, интерпретация сопоставляет некоторый объект, как описано ниже. 1) Для предметных переменных в интерпретации задается произвольное множество M — область интерпретации. Каждая предметная переменная может принимать произвольное значение из M. 2) В интерпретации каждой предметной константе сопоставляется единственный элемент из M . 3) Каждому функциональному символу fin в интерпретации сопоставляется функция fin : M × · · · × M} → M. | × M {z n Здесь n — число аргументов функции, а i — номер функции с данным числом аргументов. Функциональные символы в частности и термы в общем позволяют косвенно ссылаться на элемент в M . 4) Каждому предикатному символу Ani в интерпретации сопоставляется функция Ani : M × · · · × M} → {0, 1}. | × M {z n Другими словами, каждому предикатному символу Ani сопоставляется nарное отношение на множестве M . Предикатный символ представляет элементарное высказывание, утверждающее, что некоторые n объектов находятся в некотором отношении. Пример 5.2.6 . Запишем уравнение y = x2 + 2x + 1 на языке предикатов. Область интерпретации M = R. В уравненииесть одно бинарное отношение "=" и действия умножения и сложения над элементами из области интерпретации. Пусть A21 (x1 , x2 ) = 1 ⇔ x1 = x2 . Пусть f12 (x1 , x2 ) = x1 + x2 и f22 (x1 , x2 ) = x1 · x2 . Пусть c1 = 1. Тогда A(y, x) = A21 (y, f12 (f22 (x, x), f12 (f22 (f12 (c1 , c1 ), x), c1 ))) = 1 тогда и только тогда, когда y = x2 + 2x + 1. 232 Можно было бы упростить запись использовав другую интерпретацию. Например, введя f11 (x) = x2 + 2x + 1, нашу формулу можно будет записать как A(y, x) = A21 (y, f11 (x)). 5) Рассмотрим, как интерпретируются формулы, построенные из символов описанных выше с использованием логических операций и квантора всеобщности. Будем обозначать AI формулу, полученную из A заменой символов исчисления предикатов на соответствующие отношения, операции и константы интерпретации I. Пусть A(xi1 , xi2 , ..., xik ) — формула, xi1 , xi2 , ..., xik — все ее свободные переменные. I — интерпретация формулы A с областью интерпретации M. Для каждого предикатного символа мы знаем, какая функция ему сопоставляется интерпретацией. Пусть формуле A в интерпретации I соответствует функция AI : M × · · · × M} → {0, 1}. | × M {z k Тогда будем полагать, что (¬A(xi1 , xi2 , ..., xik ))I = 1 ⇐⇒ AI (xi1 , xi2 , ..., xik ) = 0, (∀xit A(xi1 , ..., xit−1 , xit , xit+1 , ..., xik ))I = 1 ⇐⇒ ⇐⇒ AI (xi1 , ..., xit−1 , x, xit+1 , ..., xik ) = 1, ∀x ∈ M, если квантор берется по свободной переменной формулы A, и (∀xs A(xi1 , xi2 , ..., xik ))I = AI (xi1 , xi2 , ..., xik ), если у A нет свободной переменной xs . Пусть A(xi1 , xi2 , ..., xik ) и B(xj1 , xj2 , ..., xjl ) — формулы, которым в интерпретации I сопоставлены соответственно функции AI и BI . Тогда (A(xi1 , ..., xik ) ⊃ B(xj1 , ..., xjl ))I = 1 ⇐⇒ ⇐⇒ AI (xi1 , ..., xik ) = 1 влечет BI (xj1 , ..., xjl ) = 1. Если задана интерпретация, замкнутая формула фиксированное значение — "истина" или "ложь". 233 принимает Пример 5.2.7 . Рассмотрим интерпретацию для формулы A(x1 ) = ¬A21 (x1 , a1 ) ∧ ∀x2 (∃x3 A21 (x1 , f12 (x2 , x3 )) ⊃ ⊃ (A21 (x2 , x1 ) ∨ A21 (x2 , a1 ))). Пусть область интерпретации M = N, A21 — отношение равенства, f12 — операция умножения, a1 = 1. Тогда формулу можно переписать следующим образом: AI (x1 ) = (x1 6= 1) ∧ ∀x2 (∃x3 (x1 = x2 · x3 ) ⊃ ((x1 = x2 ) ∨ (x2 = 1))). Таким образом, в данной интерпретации AI — функция равная 1 тогда и только тогда, когда ее единственный аргумент x1 — простое число. Пример 5.2.8 . Пусть задан алфавит: 1) Предметные переменные: x1 , x2 , ... 2) Предикатные символы A31 , A32 . 3) ⊃, ¬, ∀xi , (, ), ,. Рассмотрим интерпретацию I: M = 2D = {X | X ⊆ D}, где D — некоторое множество. A31 (x1 , x2 , x3 ) = 1 ⇔ x3 = x1 ∪ x2 . A32 (x1 , x2 , x3 ) = 1 ⇔ x3 = x1 ∩ x2 . Задача: простроить формулы для предикатов A∅ (x1 ) = 1 A= (x1 , x2 ) = 1 A⊆ (x1 , x2 ) = 1 A1 (x1 ) = 1 ⇔ ⇔ ⇔ ⇔ x1 = ∅. x1 = x2 . x1 ⊆ x2 . |x1 | = 1. Для одного логического высказывания может существовать много формул описывающих его на формальном языке. Можно предложить, например, такое решение поставленной задачи: A∅ (x1 ) = ∀x2 A31 (x1 , x2 , x2 ). A= (x1 , x2 ) = A31 (x1 , x1 , x2 ). 234 A⊆ (x1 , x2 ) = A32 (x1 , x2 , x1 ). A1 (x1 ) = ¬A∅ (x1 ) ∧ ∀x2 (A⊆ (x1 , x2 )∨ ∨ ∃x3 (A32 (x1 , x2 , x3 ) ∧ A∅ (x3 ))). Определение 5.2.7 . Будем говорить, что формула A выполнима в I, если ∃d1 ∈ M , ∃d2 ∈ M , ..., ∃dk ∈ M : AI (d1 , d2 , ..., dk ) = 1. Определение 5.2.8 . Будем говорить, что формула A истинна в I, если ∀d1 ∈ M , ∀d2 ∈ M , ..., ∀dk ∈ M : AI (d1 , d2 , ..., dk ) = 1. Пример 5.2.9 . Рассмотрим интерпретацию для формулы A = (∀x1 (A11 (x1 ) ⊃ A12 (x1 )) ∧ A11 (a1 )) ⊃ A12 (a1 ). Пусть M — множество всех когда-либо живших на земле; A11 (x) = 1 тогда и только тогда, когда x — человек; A12 (x) = 1 тогда и только тогда, когда x — смертен; a1 = Сократ. Тогда формула A может читаться следующим образом: "Любой человек смертен и Сократ — человек. Следовательно, Сократ — смертен." Формула замкнута и в интерпретации принимает фиксированное значение 1. Таким образом, формула A — истинна в данной интерпретации. Определение 5.2.9 . Будем говорить, что формула A ложна в I, если ∀d1 ∈ M , ∀d2 ∈ M , ..., ∀dk ∈ M : AI (d1 , d2 , ..., dk ) = 0. Определение 5.2.10 . Будем говорить, что I — модель для множества формул Γ, если любая формула A ∈ Γ будет истинна в I. Определение 5.2.11 . Будем говорить, что формула A выполнима, если существует интерпретация I, такая что A выполнима в I. Определение 5.2.12 . A — логически общезначима, если A истинна в любой интерпретации. Определение 5.2.13 . Будем говорить, что формула A противоречие, если ¬A — логически общезначима. 235 Определение 5.2.14 . Будем говорить, что A логически влечет B (B логическое следствие A), если (A ⊃ B) — логически общезначима. Замечание 5.2.3 . Раньше мы уже приводили определение 5.2.12 под номером 5.2.1. Здесь повторяем его, пользуясь строго определенными понятиями. Логически общезначимые формулы — аналог тавтологий в исчислении высказываний в том смысле, что они представляют собой логические законы математической логики, любая интерпретация которых будет давать нам логически истинное высказывание. В отличии от исчисления высказываний здесь нет алгоритма, позволяющего для произвольной формулы определить, является ли она логически общезначимой, хотя можно построить формальную теорию, в которой будут выводиться только логически общезначемые формулы. Теорема 5.2.1 . Пусть A — формула исчисления предикатов. Тогда, A — логически общезначима тогда и только тогда, когда `ИП A. Замечание 5.2.4 . Поскольку не существует алгоритма, позволяющего определить, является ли заданная формула логически общезначимой, формальная теория исчисление предикатов не является разрешимой. 236 Литература [1] Нефедов В.Н., Осипова В.А. Курс дискретной математики. М.: Изд-во МАИ, 1992. [2] Грэхэм Р., Кнут Д., Паташник О. Конкретная математика. М.: Мир, 1998. [3] Романовский И.В. Дискретный анализ. СПб.: Невский диалект, 2000. [4] Яблонский С.В. Введение в дискретную математику. М.: Наука, 1979. [5] Гаврилов Г.П., Сапоженко А.А. Сборник задач по дискретной математике. 1977. 367 с. [6] Гаврилов Г.П., Сапоженко А.А. Задачи и упражнения по дискретной математике. — М.: Физматлит, 2004. [7] Лавров И.А., Максимова Л.Л. Задачи по теории множеств, математической логике и теории алгоритмов. — М.: Физматлит, 1995. [8] Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. М.:Мир, 1982. 237
«Основы дискретной математики» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 938 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot