Вы находитесь на странице: 1из 907

Дискретная математика.

Конспект лекций

Ф. А. Новиков
fedornovikov51@gmail.com

Санкт-Петербург, 2020

1 / 907
Содержание
1.2.3. Линейное представление наибольше-
го общего делителя
1. Теория чисел 1.2.4. Обобщённый алгоритм Евклида
1.2.5. Анализ алгоритма Евклида
1.1. Разложение на множители 1.2.6. Свойства чисел Фибоначчи
1.1.1. Деление с остатком
1.2.7. Диофантовы уравнения
1.1.2. Отношение делимости чисел
1.1.3. Наибольший общий делитель 1.3. Цепные дроби
1.1.4. Простые числа 1.3.1. Разложение рационального числа в
1.1.5. Решето Эратосфена цепную дробь
1.1.6. Вычисление целой части квадратного 1.3.2. Подходящие дроби
корня 1.3.3. Бесконечные цепные дроби
1.1.7. Метод пробных делителей 1.3.4. Наилучшие приближения
1.1.8. Метод Ферма
1.4. Арифметика остатков
1.1.9. Позиционные системы счисления
1.4.1. Сравнения
1.2. Алгоритм Евклида 1.4.2. Системы вычетов
1.2.1. Алгоритм взаимного вычитания 1.4.3. Линейные сравнения
1.2.2. Бинарный алгоритм Евклида 1.4.4. Китайская теорема об остатках
2 / 907
1.4.5. Вычисления в остаточных классах 2.1.2. Размещения
2.1.3. Размещения без повторений
1.5. Функция Эйлера 2.1.4. Перестановки
1.5.1. Аддитивные и мультипликативные
2.1.5. Сочетания
функции
2.1.6. Сочетания с повторениями
1.5.2. Вычисление функция Эйлера
2.1.7. Дискретная вероятность
1.5.3. Теорема Эйлера–Ферма
1.6. Операции с полиномами 2.2. Перестановки
2.2.1. Циклы в перестановках
1.6.1. Сложение и умножение полиномов
2.2.2. Инверсии
1.6.2. Деление полиномов
2.2.3. Генерация перестановок
1.6.3. Теорема Безу и схема Горнера
2.2.4. Двойные факториалы
1.6.4. Алгоритм Евклида для полиномов
1.6.5. Интерполяционная формула 2.3. Биномиальные коэффициен-
Лагранжа
1.6.6. Разложение полиномов на неприво-
ты
2.3.1. Свойства биномиальных коэффициен-
димые множители
тов
2.3.2. Бином Ньютона
2. Комбинаторный анализ
2.3.3. Треугольник Паскаля
2.1. Комбинаторные задачи 2.3.4. Применение рекуррентного соотно-
2.1.1. Комбинаторные конфигурации
3 / 907
шения 2.6. Формулы обращения
2.3.5. Генерация подмножеств 2.6.1. Теорема обращения
2.3.6. Расширенные биномиальные коэффи- 2.6.2. Формулы обращения
циенты 2.6.3. Формулы для чисел Стирлинга и
2.3.7. Мультимножества и последовательно- Моргана
сти 2.6.4. Полиномы с рациональными коэффи-
2.3.8. Мультиномиальные коэффициенты циентами
2.3.9. Биномиальная система счисления
2.7. Производящие функции
2.4. Разбиения 2.7.1. Формальные степенные ряды
2.4.1. Числа Стирлинга 2.7.2. Метод неопределённых коэффициен-
2.4.2. Числа Моргана тов
2.4.3. Вычисление чисел Стирлинга 2.7.3. Числа Фибоначчи
2.4.4. Числа Белла 2.7.4. Числа Каталана
2.4.5. Треугольник Белла
2.5. Включения и исключения 3. Кодирование
2.5.1. Объединение конфигураций
3.1. Алфавитное кодирование
2.5.2. Формула включений и исключений
3.1.1. Таблица кодов
2.5.3. Комбинации свойств
3.1.2. Разделимые схемы
2.5.4. Беспорядки и субфакториал
3.1.3. Префиксные схемы
4 / 907
3.1.4. Неравенство Макмиллана общений
3.3.8. Коды Хэмминга
3.2. Кодирование с минималь- 3.3.9. Исправление одного замещения
ной избыточностью 3.4. Криптография
3.2.1. Минимизация длины кода сообщения
3.4.1. Шифрование с помощью случайных
3.2.2. Цена кодирования
чисел
3.2.3. Алгоритм Фано
3.4.2. Криптостойкость
3.2.4. Оптимальное кодирование
3.4.3. Односторонние функции
3.2.5. Алгоритм Хаффмена
3.4.4. Шифрование с открытым ключом
3.3. Помехоустойчивое кодиро- 3.4.5. Простейшие атаки на шифр с откры-
тым ключом
вание 3.4.6. Цифровая подпись
3.3.1. Кодирование с исправлением ошибок
3.3.2. Возможность исправления всех оши-
бок 4. Множества и отношения
3.3.3. Расстояния Левенштейна и Хэмминга
4.1. Множества
3.3.4. Кодовое расстояние схемы
4.1.1. Элементы и множества
3.3.5. Мощность кодирования
4.1.2. Задание множеств
3.3.6. Виды кодирования
4.1.3. Парадокс Рассела
3.3.7. Систематическая форма кодовых со-
4.1.4. Мультимножества
5 / 907
4.1.5. Конечные последовательности 4.4. Замыкание и сокращение от-
4.2. Алгебра подмножеств ношений
4.2.1. Сравнение множеств 4.4.1. Транзитивное и рефлексивное замы-
4.2.2. Равномощные множества кание
4.2.3. Конечные и бесконечные множества 4.4.2. Алгоритм Уоршалла
4.2.4. Счётные и несчётные множества 4.4.3. Транзитивное сокращение
4.2.5. Мощность конечного множества 4.4.4. Диаграммы Хассе
4.2.6. Операции над множествами
4.2.7. Разбиения и покрытия
4.5. Отношения эквивалентности
4.5.1. Классы эквивалентности
4.2.8. Булеан
4.5.2. Ядро функционального отношения
4.2.9. Свойства операций над множествами
4.5.3. Фактормножество
4.3. Отношения 4.5.4. Множества уровня
4.3.1. Упорядоченные пары и наборы 4.5.5. Толерантность
4.3.2. Прямое произведение множеств 4.5.6. Гомоморфизмы и изоморфизмы
4.3.3. Бинарные отношения
4.3.4. Композиция отношений
4.6. Отношения порядка
4.6.1. Предпорядок
4.3.5. Свойства отношений
4.6.2. Частичный и линейный порядок
4.3.6. Степень отношения и циклы
4.6.3. Минимальные и наименьшие элемен-
4.3.7. Ядро отношения
6 / 907
ты 5.2.2. Обходы графов
4.6.4. Алгоритм топологической сортировки 5.2.3. Орграфы и бинарные отношения
4.6.5. Верхние и нижние границы 5.2.4. Свойства отношений и достижимость
4.6.6. Монотонные функции в орграфах
4.6.7. Вполне упорядоченные множества 5.2.5. Граф инциденций
4.6.8. Индукция
5.3. Деревья
5.3.1. Свободные деревья
5. Теория графов 5.3.2. Ориентированные, упорядоченные
и бинарные деревья
5.1. Определения графов
5.3.3. Представление свободных деревьев в
5.1.1. История теории графов
программах
5.1.2. Основные определения
5.3.4. Представление упорядоченных кор-
5.1.3. Изоморфизм графов
невых деревьев
5.1.4. Элементы графов
5.3.5. Представление бинарных деревьев
5.1.5. Инварианты графов
5.3.6. Кратчайший остов
5.1.6. Степенные последовательности
5.1.7. Виды графов 5.4. Связность в графах и оргра-
5.1.8. Операции над графами
фах
5.2. Представления графов 5.4.1. Компоненты связности
5.2.1. Представление графов в компьютере
7 / 907
5.4.2. Точки сочленения, мосты и блоки 5.7. Циклы
5.4.3. Вершинная и рёберная связность 5.7.1. Фундаментальные циклы и разрезы
5.4.4. Теорема Менгера 5.7.3. Эйлеровы циклы
5.4.5. Связность в орграфах 5.7.4. Гамильтоновы циклы
5.5. Паросочетания 5.8. Независимые и покрываю-
5.5.1. Теорема Холла
5.5.2. Устойчивые паросочетания
щие множества
5.8.1. Независимые и покрывающие множе-
5.5.3. Наибольшее паросочетание
ства вершин и рёбер
5.6. Кратчайшие пути 5.8.2. Оценка числа вершинной независи-
5.6.1. Взвешенные орграфы мости
5.6.2. Кратчайшие пути в бесконтурном ор- 5.8.3 Построение независимых множеств
графе вершин
5.6.3. Алгоритм Беллмана–Форда 5.8.4. Улучшенный перебор
5.6.4. Алгоритм Дейкстры 5.8.5. Доминирующие множества
5.6.5. Область применимости алгоритма 5.8.6. Задача о наименьшем покрытии
Дейкстры
5.6.6. Анализ алгоритма Дейкстры
5.9. Раскраска и планарность
5.6.7. Алгоритм Флойда–Уоршалла графов
5.6.8. Алгоритмы с предобработкой 5.9.1. Хроматическое число графа и его
8 / 907
оценки 6.1.5. Функции k -значной логики
5.9.2. Хроматические числа графа и его до-
полнения
6.2. Формулы
6.2.1. Реализация функций формулами
5.9.3. Точный алгоритм раскрашивания
6.2.2. Равносильные формулы
5.9.4. Приближённые алгоритмы раскраши-
6.2.3. Подстановка и замена
вания
6.2.4. Алгебра булевых функций
5.9.5. Хроматический полином
5.9.6. Укладка графов 6.3. Двойственность и симмет-
5.9.7. Эйлерова характеристика
5.9.8. Теорема о пяти красках
рия
6.3.1. Двойственные и самодвойственные
функции
6. Булевы функции 6.3.2. Реализация двойственной функции
6.3.3. Принцип двойственности
6.1. Элементарные булевы функ-
6.3.4. Симметрические функции
ции
6.1.1. Функции алгебры логики
6.4. Нормальные формы
6.4.1. Разложение булевых функций по пе-
6.1.2. Существенные и несущественные пе-
ременным
ременные
6.4.2. Минимальные термы
6.1.3. Булевы функции одной переменной
6.4.3. Совершенные нормальные формы
6.1.4. Булевы функции двух переменных
9 / 907
6.4.4. Эквивалентные преобразования арифметическими полиномами
6.4.5. Минимальные дизъюнктивные формы 6.5.5. Карты Карно и матрицы минтермов
6.4.6. Геометрическая интерпретация 6.5.6. Булевы функции и карты Карно
6.4.7. Сокращённые дизъюнктивные формы 6.5.7. Минимизация формул картами Карно
6.5.8. Деревья решений
6.5. Представление булевых
функций в программах 6.6. Полные системы булевых
6.5.1. Табличные представления функций
6.5.2. Строковые представления 6.6.1. Замкнутые классы
6.5.3. Алгоритм вычисления значения буле- 6.6.2. Полные системы функций
вой функции 6.6.3. Полнота двойственной системы
6.5.4. Представление булевых функций 6.6.4. Теорема Поста

10 / 907
Часть I. Целочисленные алгоритмы

11 / 907
1. Теория чисел
Во всех предметных областях и языках программирования используются целые числа и
операции с ними (то есть, арифметика).
Раздел математики, изучающий числа и операции с ними, называется теорией чисел или
высшей арифметикой.
Та часть теории чисел, в которой целые числа изучаются без использования методов дру-
гих разделов математики, называется элементарной теорией чисел. В этом разделе рас-
сматривается элементарная теория чисел, вводятся обозначения и устанавливаются ос-
новные факты и алгоритмы, необходимые в приложениях.
Замечание. В изложении рассматриваются натуральные числа N и ноль (используется
Def
обозначение N0 = N + 0) только ради упрощения формулировок и доказательств. Все
определения, утверждения и алгоритмы этого раздела распространяются на множество
целых чисел Z за счёт учёта знака числа.
В соответствии с традициями, в теории чисел знак операции умножения ∗ опускается, а
запись x + (−y) упрощается до x − y .
12 / 907
1.1. Разложение на множители

Традиционно в арифметике используют четыре операции: сложение, умножение, вычи-


тание и деление. При этом операция сложения и обратная к ней операция вычитания,
а также операция умножения всегда выполнимы, а операция, обратная к умножению —
деление, выполнима не всегда (в целых числах), поэтому является в некотором смысле
особенной и требует специфического рассмотрения.
Первым вопрос, на который необходимо дать ответ: как узнать, в каких случаях операция
деления выполнима, то есть на какие числа делится данное число? Ответ всем известен
ещё из школьного курса математики: достаточно разложить данное число на простые
множители. Эта на первый взгляд несложная задача оказывается вычислительно весьма
трудоёмкой, пока неизвестны эффективные алгоритмы её решения, и именно данное об-
стоятельство лежит в основе многих современных методов защиты информации.

13 / 907
1.1.1. Деление с остатком
Теорема. ∀ a, b ∈ N (∃ q ∈ N0 , r ∈ N0 (a = bq + r & 0 6 r < b)).
Число q называется неполным частным, а число r называется остатком от деления числа
a на число b.
Доказательство. (Разбор случаев)
[ a < b ] q ← 0; r ← a.
[ a = b ] q ← 1; r ← 0
[ a > b ] ∃ q ∈ N (bq 6 a < (q + 1)b); r ← a − bq .
Доказательство. (Программное) q ← 0; r ← 0;
while a > b do a ← a − b; q ← q + 1 end while; r ← a.
Доказательство. (Геометрическое). Пусть заданы два отрезка: длины a и длины b. Отложим
отрезок b на отрезке a столько раз, сколько это возможно. Тогда количество откладыва-
ний — это неполное частное q , а оставшийся отрезок — это остаток r.
Следствие. Если a = bq + r & 0 6 r < b, то числа q и r единственны.
Доказательство. Пусть a = bq1 + r1 , 0 6 r1 < b, a = bq2 + r2 , 0 6 r2 < b.
Тогда 0 = (bq1 + r1 ) − (bq2 + r2 ) = b(q1 − q2 ) + (r1 − r2 ). Если q1 6= q2 , то |b(q1 − q2 )| > b,
но |r1 − r2 | < b, противоречие. 14 / 907
1.1.2. Отношение делимости чисел (1/3)
.
Число a ∈ N делится на число b ∈ N (обозначение a .. b), или, что то же самое, число b ∈ N
делит число a ∈ N (обозначение b|a), если ∃ q ∈ N (a = bq), то есть r = 0 в разложении
a = bq + r. Число a называется кратным числу b, число b называется делителем числа a,
а число q называется частным от деления a на b.
Теорема. Отношение делимости
1. рефлексивно: ∀ a ∈ N (a|a);
2. транзитивно: ∀ a, b, c ∈ N (a|b & b|c =⇒ a|c);
3. антисимметрично: ∀ a, b ∈ N (a|b & b|a =⇒ a = b).
Доказательство.
[ ∀ a ∈ N (a|a) ] q = 1.
[ ∀ a, b, c ∈ N (a|b & b|c =⇒ a|c) ] b = q1 a & c = q2 b =⇒ c = (q1 q2 )a.
[ ∀ a, b ∈ N (a|b & b|a =⇒ a = b) ] b = q1 a & a = q2 b =⇒ a = (q1 q2 )a =⇒ q1 = q2 = 1.

Следствие. a|b & a|c =⇒ a|(b + c).


Доказательство. c = q1 a & b = q2 a =⇒ b + c = (q1 + q2 )a
15 / 907
1.1.2. Отношение делимости чисел (2/3)
В терминах теории множеств и отношений можно сказать, что, делимость чисел — это
нестрогий частичный порядок на множестве N.
Пример. На рисунке представлена диаграмма Хассе отношения делимости для чисел от
1 до 12. Хорошо видно, что делимость имеет «нерегулярный» характер.

16 / 907
1.1.2. Отношение делимости чисел (3/3)
Отступление. С отношением делимости связано множество любопытных и поучительных число-
вых казусов и фокусов. Например, ещё в древности были обнаружены так называемые совершен-
ные числа, то есть числа, равные сумме своих делителей, считая 1, но не считая само число. Первые
совершенные числа: 6 = 1+2+3, 28 = 1+2+4+7+14, 496 = 1+2+4+8+16+31+62+124+248,
... Все обнаруженные совершенные числа являются чётными. До сих пор неизвестно, конечно ли
множество совершенных чисел и существуют ли нечётные совершенные числа.
Замечание.Все обнаруженные совершенные числа P являются треугольными числами T (k),
k
вычисляемыми по формуле T (k) = k(k + 1)/2 = i=1 i = T (k − 1) + k. Почему числа
T (n) называются треугольными, объяснено на рисунке.

17 / 907
1.1.3. Наибольший общий делитель (1/3)
Def
Множество делителей числа a ∈ N обозначается D(a) = {b ∈ N | b|a} . Очевидно, что
любое число делится на 1 и на себя. Эти делители называются тривиальными. Прочие
делители, если они есть, называются нетривиальными, или собственными.
Натуральное число c такое, что c|a и c|b, называется общим делителем чисел a и b. Мно-
жество общих делителей чисел a и b обозначим D(a, b). Наибольшее из таких чисел на-
зывается наибольшим общим делителем чисел a и b. Обозначение: gcd(a, b).
Если gcd(a, b) = 1, то числа a и b называются взаимно простыми. Обозначение: a ⊥ b.
Лемма. Если b|a, то множество общих делителей чисел a и b совпадает с множеством
делителей b:
b|a =⇒ D(a, b) = D(b).
.
Доказательство. Любой общий делитель чисел a и b, очевидно, является делителем b.
Любой делитель b делит a в силу транзитивности.
Следствие. b|a =⇒ gcd(a, b) = b.
18 / 907
1.1.3. Наибольший общий делитель (2/3)
Лемма. Если a = bq + r, то множество общих делителей чисел a и b совпадает с множе-
ством общих делителей b и r:

a = bq + r =⇒ D(a, b) = D(b, r).


Доказательство. Пусть x ∈ D(a, b). Тогда ∃ k, l (a = kx & b = lx) и kx = lxq + r,
r = (k − lq)x, следовательно x|r, x ∈ D(b, r). Пусть y ∈ D(b, r). Тогда
∃ m, n (b = my & r = ny) и a = myq + ny = (mq + n)y , следовательно, y|a, y ∈ D(a, b).
Таким образом, D(a, b) = D(b, r).
Следствие. a = bq + r =⇒ gcd(a, b) = gcd(b, r).
Пример. 60 = 7 · 8 + 4, gcd(60, 8) = gcd(8, 4) = 4,
gcd(60, 7) = gcd(7, 4) = 1.
Число d называется общим кратным чисел a и b, если a|d и b|d.
Def
Множество общих кратных M (a, b) = {d ∈ N | a|d & b|d} . Наименьшее из таких чисел
называется наименьшим общим кратным a и b. Обозначение: lcm(a, b).
19 / 907
1.1.3. Наибольший общий делитель (3/3)
Замечание. В отличие от конечного множества D(a, b), множество M (a, b) является бес-
конечным. Однако M (a, b) ⊂ N, поэтому M (a, b) имеет наименьший элемент и опреде-
ление наименьшего общего кратного корректно.
Теорема. Для любых натуральных чисел a, b и m справедливо:
1) a|m & b|m =⇒ lcm(a, b)|m;
2) gcd(a, b) lcm(a, b) = ab.
Доказательство. Пусть d = gcd(a, b), тогда a = a1 d, b = b1 d. Заметим, что a1 ⊥ b1 .
Действительно, от противного. Пусть для определенности a1 |b1 , то есть существует такое
число q , что qa1 = b1 . Значит, b = b1 , d = qa1 , d = qa. Очевидно, что a > d, значит d — не
НОД. Противоречие.
Пусть теперь m = ak . Тогда ak/b = a1 k/b1 ∈ N, следовательно b1 |k , т.е. ∃ t ∈ N (k = b1 t).
Отсюда m = ak = ab1 t = abt/d. С другой стороны, любое число вида abt/d ∈ M (a, b).
Наименьшее общее кратное достигается при t = 1, т.е. равно ab/d.

20 / 907
1.1.4. Простые числа (1/2)
Натуральное число a > 1 называется простым, если оно не имеет собственных делите-
лей. В противном случае число a называется составным.
Замечание. Число 1 имеет только один делитель, поэтому его не относят ни к простым,
ни к составным.
Множество простых чисел обозначается P.
Теорема. Для любого натурального числа a > 1 его наименьший делитель, отличный от
1, является простым числом.
Доказательство. От противного. Пусть этот делитель составной, тогда у него тоже есть
делитель, меньший его и отличный от 1. Но тогда он делит и a, а значит, исходный делитель
не был наименьшим.
Следствие. Для составного числа a > 1 его наименьший делитель, отличный от 1, не

превосходит a.
Доказательство. Пусть p > 1 — наименьший делитель a. Тогда a = pq , где q > p.
Следовательно, a > p2 .
21 / 907
1.1.4. Простые числа (2/3)
Теорема. Простых чисел бесконечно много.
Доказательство. От противного. Пусть |P| = n. Тогда P = {p1 , . . . , pn }. Cоставим число
p ← p1 p2 . . . pn + 1. Это число не делится ни на одно из чисел p1 , . . . , pn , так как даёт оста-
ток 1 при делении на каждое из них, и не совпадает ни с одним из них. Следовательно,
число p само простое. Противоречие.
Лемма. ∀ a, b, c ∈ N (b ⊥ c =⇒ gcd(ac, b) = gcd(a, b)).
Доказательство. Рассмотрим gcd(ac, b). Так как b ⊥ c, то gcd(ac, b) не имеет общих дели-
телей с c, отсюда gcd(ac, b) = gcd(a, b)
Следствие. ∀ a, b, c ∈ N (b ⊥ c & b|ac =⇒ b|a).
Лемма. [Евклида] ∀ a, b ∈ N, p ∈ P (p|ab =⇒ p|a ∨ p|b).
Доказательство. От противного. Пусть ни a, ни b не делятся на p. Тогда из простоты p
следует, что a ⊥ p, b ⊥ p. По лемме gcd(ab, p) = gcd(a, p) = 1, ab ⊥ p — противоречие.

Следствие. ∀ a1 , a2 , . . . , an ∈ N, p ∈ P (p|a1 a2 . . . an =⇒ ∃ i (p|ai )).


22 / 907
1.1.4. Простые числа (3/3)
Теорема. [Основная теорема арифметики] Любое натуральное число, большее 1, можно
представить в виде произведения простых множителей, причём единственным образом.
Доказательство.
[ Существование ] От противного. Пусть 1 < n ∈ N — наименьшее натуральное число,
не представимое в виде произведения нескольких простых чисел. Тогда если число n —
простое, то оно является своим разложением. Если же число n — составное, то n = n1 n2 ,
где n1 < n, n2 < n, причём каждое из n1 , n2 имеет разложение, а значит, можно разло-
жить и исходное число n. Противоречие.
[ Единственность ] Пусть n имеет два различных разложения на простые множители. Рас-
смотрим любое число p в одном из разложений. Тогда произведение чисел второго раз-
ложения делится на p и по следствию из леммы Евклида одно из простых чисел второ-
го разложения совпадает с p. Сократим оба разложения на p и применим к оставшим-
ся разложениям такое же рассуждение. Так по одному сократим все числа в первом раз-
ложении, найдя и сократив равные им во втором. Процесс закончится ввиду конечности
разложений.
23 / 907
1.1.5. Решето Эратосфена (1/2)
Вход: натуральное число n > 1.
Выход: множество простых чисел, не превосходящих n.
B ← {2, 3, 4, 5 . . . , n}
while B 6= ∅ do
x ← min(B) //наименьший элемент B
yield x //выдать x
B ← B − x //удалить x из B
y ← x2
while y 6 n do
B ← B − y ; y ← y + x //удалить из B все числа, кратные x
end while
end while
Обоснование. На каждом шаге алгоритма минимальный элемент x ∈ B — простое число.
В противном случае у него был бы простой делитель p < x, и x был бы удалён из B ранее,
как кратный p. Для простого x достаточно удалить из B все кратные ему, начиная с x2 ,
т.к. все меньшие составные, кратные x, были удалены из B ранее. 24 / 907
1.1.5. Решето Эратосфена (2/2)
Пример. Найдём с помощью этого алгоритма все простые числа, не превосходящие 100.
В правой нижней ячейке список простых чисел.
i Вычеркнутые составные числа Оставшиеся числа
2 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29,
24, 26, 28, 30, 32, 34, 36, 38, 40, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
42, 44, 46, 48, 50, 52, 54, 56, 58, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85,
60, 62, 64, 66, 68, 70, 72, 74, 76, 87, 89, 91, 93, 95, 97, 99
78, 80, 82, 84, 86, 88, 90, 92, 94,
96, 98, 100
3 9, 15, 21, 27, 33, 39, 45, 51, 57, 2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41,
63, 69, 75, 81, 87, 93, 99 43, 47, 49, 53, 55, 59, 61, 65, 67, 71, 73, 77, 79, 83,
85, 89, 91, 95, 97
5 25, 35, 55, 65, 85, 95 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
49, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97
7 49, 77, 91 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
53, 59, 61, 67, 71, 73, 79, 83, 89, 97 25 / 907
1.1.6. Вычисление целой части квадратного корня (1/2)
В целом ряде случаев необходимо найти для данного числа a такое целое число h, что

h2 6 a < (h + 1)2 .

Это возможно сделать с помощью следующего алгоритма.


Вход: число a > 1.
Выход: число h ∈ N, такое, что h2 6 a < (h + 1)2 .
h←a
while true do
b ←(h + a/h)/2 //уменьшаем h
if b < h then
h ← b //продолжаем
else
return h //завершить процесс
end if
end while
26 / 907
1.1.6. Вычисление целой части квадратного корня (2/2)
Обоснование. Заметим, что
√ √
(h2 − a)2 > 0 =⇒ (h2 + a)2 > 4h2 a =⇒ h2 + a > 2h a =⇒ (h + a/h)/2 > a.

Заметим также, что h 6 a =⇒ (h+a/h)/2 6 h. Стало быть, последовательность значений



h при выполнении алгоритма монотонно убывает и ограничена снизу величиной a. При
этом процесс закончится при условии b > h, то есть (h + a/h)/2 > h, значит h2 + a > 2h2
и h2 6 a < (h + 1)2 .
Замечание. Вычисления можно вести в целых числах. В частности, деление на двойку
выполнять просто сдвигом двоичного представления числа на один разряд вправо.
Пример. Рассмотрим применение алгоритма для нахождения целой части квадратного
корня из числа 221.
Номер шага 1 2 3 4 5 6
h 221 112 29 18 15 14
b 111 56 18 15 14 14
27 / 907
1.1.7. Метод пробных делителей
Наиболее прямолинейный подход k ← 0; i ← 0 //номер простого и номер делителя
к разложению числа на множите- while a > 1 do
ли состоит в том, чтобы пробовать q, r ← a/÷ pk //a = qpk + r
делить данное число g на про- if r = 0 then
стые числа 2, 3, 5, . . . по порядку. di ← pk //нашли делитель
При этом достаточно ограничить- i ← i + 1 //номер следующего делителя
ся простыми числами, не превос-
√ a ← q //следующее число
ходящими a. else
if q > pk then
Вход: число a > 1.
k ← k + 1 //следующий делитель
Выход: массив d0 , . . . , dk — дели-
else
тели числа a.
di ← a //простое число
return //завершить процесс
end if
end if
end while 28 / 907
1.1.8. Метод Ферма (1/3)
Метод пробных делителей прост, но трудоёмок, поскольку требует выполнения большого
числа «холостых» делений с остатком.
Метод Ферма использует только операции сложения и вычитания, а потому намного эф-
фективнее.
Метод основан на следующих наблюдениях.
1. Проверка числа a на чётность и выделение простого множителя 2 выполняются лег-
ко, с помощью проверки последнего бита и сдвига двоичного представления числа
вправо на один разряд, так что, не умаляя общности, число a можно считать нечёт-
ным.
2. Вычисление h — целой части квадратного корня из числа a (h2 6 a < (h + 1)2 ) вы-
полняется эффективно, так что, не умаляя общности, если h2 = a, то можно полагать
a ← h и считать, что число a уже не является полным квадратом.
3. В таких предположениях, если число a составное, то существует разложение
a = bc = (x − y)(x + y) = x2 − y 2 , где x = (b + c)/2, y = (c − b)/2, причём числа x
и y — натуральные, поскольку числа b и c — нечётные.
29 / 907
1.1.8. Метод Ферма (2/3)
Введём функцию R(x, y) = (x−y)(x+y)−a. Это функция «невязки» — если R(x, y) = 0,
то разложение найдено. Заметим, что

R(x + 1, y) = (x − y + 1)(x + y + 1) − a = R(x, y) + 2x + 1,

R(x, y + 1) = (x − y − 1)(x + y + 1) − a = R(x, y) − (2y + 1).


Обозначим Rxy = R(x, y), Rx = 2x + 1, Ry = 2y + 1.
Тогда R(x+1, y) = Rxy +Rx , R(x, y+1) = Rxy −Ry . При этом, когда значения аргументов
R(x, y) увеличиваются на 1, значения величин Rx и Ry увеличиваются на 2.
Идея алгоритма в том, чтобы, увеличивая значения величин x и y на 1, подобрать их так,
что R(x, y) = 0.
С помощью алгоритма извлечения целой части квадратного корня найдём число h такое,
что h2 6 a < (h + 1)2 . Тогда в качестве начального приближения можно взять x = h и
y = 0, поскольку меньший из искомых сомножителей не может быть больше квадратного
корня из числа a. Если число a составное, то 1 < b < h < c < a.
30 / 907
1.1.8. Метод Ферма (3/3)
Rx ← 2h + 1; Ry ← 1; Rxy ← h2 − a //начальное приближение x = h, y = 0
while Rxy 6= 0 do
if Rxy > 0 then
Rxy ← Rxy − Ry ; Ry ← Ry + 2 //невязка положительная — уменьшаем
else
Rxy ← Rxy + Rx ; Rx ← Rx + 2 //невязка отрицательная — увеличиваем
end if
end while
√ √
Обоснование. Заметим, что a = bc 6 b+c 2
, поскольку среднее геометрическое не
превосходит среднего арифметического. Заметим также, что b+c 2
< a+1
2
, поскольку
1 < c =⇒ b − 1 < bc − c =⇒ b − 1 + c + 1 < bc − c + c + 1 =⇒ b + c < a + 1.
Алгоритм закончит работу, потому что x только увеличивается, и поэтому сначала достиг-
нет величины (b + c)/2, если число составное, или позже   величины(a + 1)/2,
 достигнет
Rx −Ry Rx +Ry
если число простое. В обоих случаях R(x, y) = 0 и a = 2 2
−1 .
31 / 907
1.1.9. Позиционные системы счисления (1/3)
Теорема.
∀ a, b, k ∈ N a < bk =⇒ ∃ a0 , . . . , ak−1 ∈ 0..(b−1) a = a0 + a1 b + · · · + ak−1 bk−1 .

Pk−1
Разложение a = a0 + a1 b + · · · + ak−1 bk−1 = i=0 ai bi называется записью числа a в по-
зиционной системе счисления, числа a0 , . . . , ak−1 называются цифрами, число b называ-
ется основанием системы счисления.
Доказательство. Следующий алгоритм вычисляет цифры числа.
while a > 0 do
q, r ← a ÷
/ b //a = qb + r & r < b
k ← k + 1 //номер цифры
ak ← r //очередная цифра
a ← q //следующее число
end while
Процесс закончится, поскольку a уменьшается на каждом шаге.
Замечание. Цифры в любой системе счисления определяются однозначно, поскольку де-
ление с остатком однозначно. 32 / 907
1.1.9. Позиционные системы счисления (2/3)
Представление
k−1
X
a= ai bi = a0 + a1 b + · · · + ak−1 bk−1 = a0 + b(a1 + b(a2 + b(a3 + . . . )) . . . )
i=0

называется схемой Горнера. Эта схема позволяет, зная последовательность цифр и осно-
вание системы счисления, вычислить значение числа наиболее эффективным способом,
выполнив k сложений и умножений, без возведения в степень.
Вход: последовательность
Pk−1 цифр ak−1 , . . . , a0 , основание системы счисления b.
i
Выход: число a = i=0 ai b .
a ← 0 //вычисляемое число
for i from k − 1 downto 0 do
a ← a ∗ b + ai //очередная цифра
end for
33 / 907
1.1.9. Позиционные системы счисления (3/3)

Схема Горнера применяется во многих ситуациях, в частности, при вычислении адреса


элемента многомерного массива
Рассмотрим в качестве примера алгоритм эффективного вычисления b = am , если задано
двоичное представление показателя степени m = (bk−1 . . . b0 )2 .
b ← 1 //вычисляемое число
for i from k − 1 downto 0 do
b ← b ∗ b //возведение в квадрат
if bi = 1 then
b ← b ∗ a //умножение
end if
end for
2
Обоснование. Алгоритм основан на том факте, что am = a2m1 +b0 = (am1 ) ab0 .

34 / 907
1.2. Алгоритм Евклида

Доказанные утверждения лежат в основе алгоритма нахождения наибольшего общего


делителя двух натуральных чисел a и b, известного как алгоритм Евклида. В силу симмет-
ричности gcd(a, b), не ограничивая общности, можно считать, что a > b.

35 / 907
1.2.1. Алгоритм взаимного вычитания (1/2)
Наиболее прямолинейная реализация алгоритма Евклида называется алгоритмом взаим-
ного вычитания.
Вход: a, b — натуральные числа, a > b.
Выход: значение gcd(a, b) в переменной a.
while b > 0 do
r ← a mod b; a ← b; b ← r
end while
return a
Обоснование. На каждом шаге алгоритма пара (a, b) замещается парой (b, r), где r —
остаток от деления a на b. Согласно следствию п. 1.1.3, после каждой итерации цикла
искомый наибольший общий делитель остаётся неизменным, т. е. является инвариантом
алгоритма. Когда a станет кратно b, r будет равно нулю. Это означает, что искомый наи-
больший общий делитель найден. Цикл обязательно завершится, потому что числа a и b
не могут уменьшаться бесконечно.
Пример. gcd(616, 286) = gcd(286, 44) = gcd(44, 22) = 22.
36 / 907
1.2.1. Алгоритм взаимного вычитания (2/2)
Отступление. Алгоритм Евклида даёт повод сделать некоторые замечания относительно стиля
программирования, то есть набора необязательных правил и соглашений, направленных на улуч-
шение кода. В эту категорию входят использование дисциплины имён, отступов, комментариев и
множества других полезных приёмов. Важно понимать, что использование того или иного стиля
программирования улучшает код не абсолютно, а относительно тех целей, которые преследуют
выбранные правила. Рассмотрим в качестве примера ещё одну реализацию алгоритма Евклида.
Вход: a, b — натуральные числа.
Выход: значение gcd(a, b) есть сумма a + b.
while a 6= 0 & b 6= 0 do
if a > b then a ← a mod b else b ← b mod a end if
end while
С одной стороны, этот вариант несколько эффективнее по времени, поскольку на каждом шаге
цикла выполняется одно присваивание вместо трёх, и по памяти, поскольку используются две пе-
ременные вместо трёх. С другой стороны, этот код чуть длиннее, значительно дальше от доказан-
ных математических формул и потому требует существенного дополнительного обоснования, а
самое главное, в этом варианте нарушается «правило хорошего тона», гласящее, что каждая пе-
ременная в программе при изменении значения не должна менять свою «ответственность». 37 / 907
1.2.2. Бинарный алгоритм Евклида (1/2)
В этом параграфе описан алгоритм, который был известен в Китае еще в I-ом веке, но
опубликован Джозефом Стайном только в 1967 году. Алгоритм является более эффектив-
ным, по сравнению с алгоритмом взаимного вычитания, поскольку использует только три
операции: проверку двоичного числа на чётность (обозначение even(a)), деление чётно-
го числа пополам (сдвигом двоичного представления на один разряд вправо, обозначе-
ние >>) и вычитание (знак −). Каждая из этих операций выполняется намного быстрее,
нежели операция деления с остатком в разобранном выше алгоритме Евклида.
Заметим следующее:
1. если числа a и b оба чётные, то gcd(a, b) = 2 ∗ gcd(a/2, b/2);
2. если числа a и b имеют разную чётность (не теряя общности, пусть a чётное),
то gcd(a, b) = gcd(a/2, b);
3. если числа a и b оба нечётные, то разность a − b — чётное число и
gcd(a, b) = gcd(a − b, b) = gcd((a − b)/2, b);
4. в любом случае |a − b| < max{a, b}.
38 / 907
1.2.2. Бинарный алгоритм Евклида (2/2)
Вход: a, b — натуральные числа, a > b.
Выход: значение gcd(a, b).
k ← 0 //счётчик степени 2
while even(a) & even(b) do
k ← k + 1; a ← a >>; b ← b >> //выдавливаем общую степень 2
end while
while a 6= b do
if even(a) then a ← a >> endif //убираем 2
if even(b) then b ← b >> endif //убираем 2
max(a, b) ← |a − b| >> //уменьшаем большее число
end while
return a
Пример. gcd(616, 286) = 2 ∗ gcd(308, 143) = 2 ∗ gcd(154, 143) = 2 ∗ gcd(77, 143) =
= 2 ∗ gcd(77, 66) = 2 ∗ gcd(77, 33) = 2 ∗ gcd(44, 33) = 2 ∗ gcd(22, 33) = 2 ∗ gcd(11, 33) =
= 2 ∗ gcd(22, 11) = 2 ∗ gcd(11, 11) = 2 ∗ 11 = 22.
39 / 907
1.2.3. Линейное представление наибольшего общего делителя (1/3)
Рассмотрим протокол применения простейшего алгоритма Евклида в двух эквивалент-
ных формах.
a = bq0 + r1 r1 = a − bq0
b = r1 q1 + r2 r2 = b − r1 q 1
r1 = r2 q2 + r3 r3 = r1 − r2 q2
... ...
rn−2 = rn−1 qn−1 + rn rn = rn−2 − rn−1 qn−1
При этом rn является последним ненулевым остатком, то есть rn−1 = rn qn .
Подставляя полученные равенства снизу вверх, получаем
gcd(a, b) = rn = rn−2 − rn−1 qn−1 = rn−2 − (rn−3 − rn−2 qn−2 )qn−1 = · · · = ax + by.
Эти наблюдения позволяют сформулировать теорему.
Теорема. ∀ a, b ∈ N (∃ x, y ∈ Z (gcd(a, b) = ax + by)) .
Такое представление наибольшего общего делителя называется соотношением Безу, а
числа x и y называются коэффициентами Безу
40 / 907
1.2.3. Линейное представление наибольшего общего делителя (2/3)
Как найти коэффициенты Безу?
Алгоритм Евклида строит последовательность чисел a > b > r1 > r2 > · · · > rn > 0.
Оказывается, не только последний остаток rn = gcd(a, b), но и все числа в этой последо-
вательности выражаются в виде линейных комбинаций чисел a и b, то есть rk = axk +byk .
Коэффициенты разложения некоторого числа в линейную комбинацию чисел a, b, то есть
выражение ax + by , запишем в векторной форме (x, y). В таких обозначениях a = (1, 0),
b = (0, 1). Операции с векторами, как обычно, выполняются покомпонентно.
Рассмотрим ещё раз протокол работы алгоритма Евклида, подставляя формулы сверху
вниз и в векторной форме:
r1 = a · 1 + b(−q0 ) (1, −q0 ) = (1, 0) − q0 (0, 1)
r2 = a(−q1 ) + b(1 + q0 q1 ) (−q1 , 1 + q0 q1 ) = (0, 1) − q1 (1, −q0 )
r3 = a(1 + q1 q2 ) + b(−q0 − q2 + q0 q1 q2 ) (1 + q1 q2 , −q0 − q2 − q0 q1 q2 ) =
... = (1, −q0 ) − q2 (−q1 , 1 + q0 q1 )
...
41 / 907
1.2.3. Линейное представление наибольшего общего делителя (3/3)
Лемма. В указанных обозначениях (xk , yk ) = (xk−2 , yk−2 ) − qk−1 (xk−1 , yk−1 ).
Доказательство. По индукции. База индукции проверена выше. Индукционный переход.
Пусть утверждение верно для всех чисел, меньших k . Рассмотрим (xk , yk ). Имеем

rk = axk + byk = rk−2 − qk−1 rk−1 =


= axk−2 + byk−2 − qk−1 (axk−1 + byk−1 ) =
= a(xk−2 − qk−1 xk−1 ) + b(yk−2 − qk−1 yk−1 ).

и значит xk = xk−2 − qk−1 xk−1 , yk = yk−2 − qk−1 yk−1 .

Пример. Найдём линейное представле- i −1 0 1 2


ние наибольшего общего делителя чи- r 616 286 44 22
сел 616 и 286. Получаем q 2 6 2
22 = −6 · 616 + 13 · 286 x 1 0 1 −6
y 0 1 −2 13
42 / 907
1.2.4. Обобщённый алгоритм Евклида

Естественная идея: вычислять сразу и наибольший общий делитель и коэффициенты его


линейного представления.
Вход: a, b — натуральные числа, a > b.
Выход: значение gcd(a, b) и коэффициенты Безу x, y .
(xa , ya ) ←(1, 0); (xb , yb ) ←(0, 1) //начальные значения
while b 6= 0 do
t ← a; T ←(xa , ya ) //временные переменные
q ← t ÷ b //неполное частное
a ← b; (xa , ya ) ←(xb , yb ) //новое делимое
b ← t − qb; (xb , yb ) ← T − q(xb , yb ) //остаток = новый делитель
end while
return a, xa , ya

43 / 907
1.2.5. Анализ алгоритма Евклида (1/2)
Сколько шагов потребуется алгоритму Евклида для нахождения наибольшего общего де-
лителя двух чисел?
Алгоритм должен построить последовательность a > b > r1 > r2 > · · · > rn > 0.
Представляется интуитивно очевидным, что наиболее длинной эта последовательность
окажется при q0 = q1 = q2 = · · · = qn−1 = 1. При этом протокол работы выглядит так:
a = b + r1 , b = r1 + r2 , r1 = r2 + r3 , ... Этим интуитивным наблюдениям нетрудно придать
строгую форму.
Последовательность чисел φi называется последовательностью чисел Фибоначчи, если
φi+1 = φi + φi−1 , то есть каждое число в последовательности является суммой двух
предыдущих, за исключением двух начальных чисел, у которых нет двух предыдущих.
По традиции полагаем φ0 ← 1, φ1 ← 1. Тогда последовательность Фибоначчи имеет вид
1, 1, 2, 3, 5, 8, 13, . . .
Числа Фибоначчи обладают множеством замечательных свойств и применяются в самых
разных областях науки и техники.
44 / 907
1.2.5. Анализ алгоритма Евклида (2/2)
Теорема. [Ламе] Если a > b > 0 и a — наименьшее число, такое, что алгоритм Евклида
нашёл наибольший общий делитель gcd(a, b) за n шагов, то a = φn+2 и b = φn+1 .
Доказательство. Индукция по n. База индукции: n = 1 =⇒ b|a. Число a минимально и
при этом a > b > 0 =⇒ a = 2 = φ2 & b = 1 = φ1 . Индукционный переход: пусть утвер-
ждение теоремы справедливо для всех чисел, меньших n. Первый шаг алгоритма вычис-
лит a = bq + r и после этого алгоритм найдёт gcd(b, r) за n − 1 шаг. По индукционно-
му предположению b = φn−1+2 , r = φn−1+1 и a = qφn+1 + φn . Предположение q > 1
противоречит минимальности числа a, значит a = φn+1 + φn = φn+2 .
Отступление. Доказанная теорема характеризует «худший случай» для алгоритма Евклида. Однако
из доказанной теоремы вовсе не следует, что найдены какие-то формулы и характеристики, поз-
воляющие прямо предсказать или оценить число шагов алгоритма по значениям a и b. Алгоритм
может работать быстро, даже если a и b велики. Например, если a кратно b, то алгоритм найдёт
решение за один шаг, хотя a и b, при этом, могут быть очень большими числами. Нет прямой за-
висимости между величиной наибольшего общего делителя и временем работы алгоритма. Хотя
наибольший общий делитель взаимно простых чисел φn+1 и φn алгоритм ищет максимально дол-
го, но взаимную простоту чисел a + 1 и a алгоритм установит за один шаг. 45 / 907
1.2.6. Свойства чисел Фибоначчи
Теорема. [Соотношение Кассини] φn−1 φn+1 − φ2n = (−1)n .
Доказательство. Обозначим dn = φn−1 φn+1 − φ2n . Имеем
dn+1 = φn+2 φn − φ2n+1 = (φn+1 + φn )φn − (φn + φn−1 )2 =
= φn+1 φn + φ2n − φ2n − 2φn−1 φn − φ2n−1 = φn+1 φn − 2φn−1 φn − φ2n−1 =
= (φn + φn−1 )φn − 2φn−1 φn − φ2n−1 = φ2n − φn−1 φn − φ2n−1 =
= φ2n − (φn + φn−1 )φn−1 = φ2n − φn+1 φn−1 = −dn .
Учитывая, что d2 = 1, получаем требуемое.
Теорема. [Цекендорфа]
∀ a ∈ N (∃ k1 , . . . , kn ∈ N (a = φk1 + φk2 + · · · + φkn & ∀ i ∈ 1..n − 1 (ki > ki+1 + 1))) .
Доказательство. Индукция по a. База: a = 1 = φ1 . Пусть теорема верна для всех чисел,
меньших числа a, рассмотрим число a. Ясно, что ∀ a ∈ N (∃ k1 ∈ N (φk1 6 a < φk1 +1 )).
Положим b ← a − φk1 . Тогда по индукционному предположению, для числа b существует
разложение b = φk2 + · · · + φkn , причём это разложение не может содержать число φk1 −1 ,
так что k1 > k2 + 1.
46 / 907
1.2.7. Диофантовы уравнения
Линейные уравнения, в которых все числа целые, как известные коэффициенты, так и
неизвестные величины, называются диофантовыми.
Мы уже установили, что уравнение ax + by = gcd(a, b) всегда разрешимо в целых числах
и решениями оказываются коэффициенты Безу.
Теорема. Уравнение с целыми коэффициентами ax + by = c разрешимо в целых числах
тогда и только тогда, когда gcd(a, b)|c.
Доказательство. Обозначим d = gcd(a, b). Левая часть ax + by делится на d, значит
уравнение разрешимо тогда и только тогда, когда d|c. Пусть c = de. Уже доказано, что
уравнение ax + by = d всегда имеет решение. Обозначим это решение x0 , y0 . Тогда
x1 = x0 e, y1 = y0 e — решение уравнения ax + by = c.
Замечание. Решения уравнения ax + by = c описываются формулами
b a
x = x1 − k, y = y1 + k, k ∈ Z,
d d
где x1 , y1 — любое частное решение.
47 / 907
1.3. Цепные дроби

В этом разделе кратко рассматривается своеобразный и поучительный способ представ-


ления чисел.

48 / 907
1.3.1. Разложение рационального числа в цепную дробь
Выражение вида
1
q0 + 1 = q0 + 1/(q1 + 1/(q2 + 1/(· · · + 1/qn+1 ))) = [q0 , q1 , q2 , . . . , qn+1 ]
q1 + q2 + 1
···+ q 1
n+1

называется цепной или непрерывной дробью. Числа qi ∈ N называются звеньями цепной


дроби.
Теорема. ∀ a, b ∈ N (∃ ! q0 , . . . , qn+1 ∈ N (a/b = [q0 , . . . , qn+1 ])).
Доказательство. Рассмотрим протокол применения алгоритма Евклида к числам a и b:
a = bq0 + r1 , b = r1 q1 + r2 , . . . , rn−1 = rn qn . Получаем
a r1 1 1
= q0 + = q0 + b = q0 + r2 = · · · = [q0 , q1 , q2 , . . . , qn+1 ].
b b r1
q1 + r1

Разложение единственно, поскольку алгоритм Евклида определяет неполные частные од-


нозначно.
49 / 907
1.3.2. Подходящие дроби (1/2)
Пусть задана цепная дробь [q0 , . . . , qn+1 ]. Последовательность
1 1 + q0 q1 1 q0 + q2 + q0 q1 q2
q0 , q0 + = , q0 + 1 = , . . . , [q0 , . . . , qn+1 ]
q1 q1 q1 + q2
1 + q 1 q2
называется последовательностью подходящих дробей. Обозначим k -ю дробь ak /bk .
Теорема. Числители и знаменатели подходящих дробей связаны рекуррентными соотно-
шениями: ak = qk ak−1 + ak−2 , bk = qk bk−1 + bk−2 .
Доказательство. Индукция по числу звеньев цепной дроби. Полагая a−1 = 1, b−1 = 0,
a0 = q0 , b0 = 1 имеем a1 = q1 q0 + 1, b1 = q1 и база индукции выполнена. Пусть
ak qk ak−1 + ak−2 ak+1
[q0 , . . . , qk ] = = . Рассмотрим = [q0 , q1 , . . . , qk , qk+1 ]. Заметим, что
bk qk bk−1 + bk−2 bk+1
[q0 , q1 , . . . , qk , qk+1 ] = [q0 , q1 , . . . , qk + 1/qk+1 ], и при этом выполняются условия индукци-
ak+1 (qk + 1/qk+1 )ak−1 + ak−2
онного предположения. Значит = =
bk+1 (qk + 1/qk+1 )bk−1 + bk−2
(qk qk+1 + 1)ak−1 + ak−2 qk+1 qk+1 (qk ak−1 + ak−2 ) + ak−1 qk+1 ak + ak−1
= = = .
(qk qk+1 + 1)bk−1 + bk−2 qk+1 qk+1 (qk bk−1 + bk−2 ) + bk−1 qk+1 bk + bk−1
50 / 907
1.3.2. Подходящие
  дроби (2/2)
n+1
ak ak ak−1 (−1)k+1
Теорема. Если — подходящие цепные дроби, то − = .
bk k=1 bk bk−1 bk bk−1
ak ak−1 ak bk−1 − ak−1 bk hk
Доказательство. − = = . Но hk = ak bk−1 − ak−1 bk =
bk bk−1 bk bk−1 bk bk−1
= (qk ak−1 + ak−2 )bk−1 − ak−1 (qk bk−1 − bk−2 ) = ak−2 bk−1 − ak−1 bk−2 = −hk−1 . Учитывая,
что h0 = a0 b−1 − a−1 b0 = −1, имеем требуемое.
Следствие. Подходящие дроби несократимы.
Доказательство. ak bk−1 − ak−1 bk = (−1)k+1 =⇒ gcd(ak , bk ) = 1.
616 616 1
Пример. Рассмотрим . Имеем =2+ .
286 286 6 + 12
a0
По определению b0
= q0 = 2 и далее по рекуррентным формулам получаем:

a1 q1 a0 + a−1 6·2+1 13 a2 q 2 a1 + a0 2 · 13 + 2 28 616


= = = , = = = = .
b1 q1 b0 + b−1 6·1+0 6 b2 q 2 b1 + b0 2·6+1 13 286

51 / 907
1.3.3. Бесконечные цепные дроби (1/3)
Цепные дроби можно использовать для представления любых вещественных чисел, не
только рациональных. Пусть α ∈ R+ — некоторое число. Рассмотрим следующий процесс:
α = q0 + ρ1 = q0 + α11 , q0 ∈ N, ρ1 < 1, α1 > 1,
α1 = q1 + ρ2 = q0 + α12 , q1 ∈ N, ρ2 < 1, α2 > 1,
...
1
αk−2 = qk−2 + ρk−1 = qk−2 + αk−2 , qk−2 ∈ N, ρk−1 < 1, αk−2 > 1,
αk−1 = qk−1 + ρk , qk−1 ∈ N, ρk < 1,
Если α ∈ Q, то процесс завершится при некотором ρk = 0 и образуется цепная дробь
[q0 , . . . , qk−1 ], если же α 6∈ Q, то процесс можно продолжать сколь угодно долго.
√ √
2+1
Пример. Пусть α = 2. Тогда α = q0 + α11 = 1 + α11 , α1 = α−q 1
= √1
2−1
= 2−1
=
√ √
2+1
√ 0

= 2 + 1 = q1 + α12 = 2 + α12 , α2 = α1 −q 1
1
1
= √2−1 = 2−1 = 2 + 1 = q2 + α13 = 2 + α13
...
Мы видим, что начиная со второго шага неполные частные начинают повторяться, поэто-
му
√ корень из двух представляется бесконечной периодической цепной дробью
2 = [1, 2, 2, 2, . . . ] = [1, (2)].
52 / 907
1.3.3. Бесконечные цепные дроби (2/3)
Для любого вещественного числа α ∈ R с помощью указанного процесса всегда можно
построить последовательность подходящих дробей, конечную или бесконечную, перио-
дическую или непериодическую.
Теорема. Последовательность подходящих дробей abkk для вещественного числа α ∈ R
такова, что ab2k 2k
6 α 6 ab2k+12k+1
.
Доказательство. Оборвём процесс построения подходящих дробей на шаге k ,
α = [q0 , . . . , qk−1 , ρk ] так что последний полученный остаток ρk не раскладывается. Тогда
само число α можно считать k -й подходящей дробью. По рекуррентному соотношению
a ρk +ak−2
для подходящих дробей имеем α = bk−1 k−1 ρk +bk−2
.
Следовательноα(bk−1 ρk+bk−2 ) =ak−1 ρk +a k−2 и далее ρk (αbk−1 −ak−1 ) = ak−2 −αbk−2 ,
ak−1 ak−2
откуда ρk bk−1 α − bk−1
= bk−2 bk−2
− α . Таким образом, разности α− abk−1
k−1 ak−2
и bk−2 −α
имеют одинаковые знаки, и остаётся заметить, что a0 /b0 = q0 < α.
1
Следствие. |α − ak /bk | 6 |ak /bk − ak+1 /bk+1 | 6 .
bk bk+1
53 / 907
1.3.3. Бесконечные цепные дроби (3/3)
Рассмотрим теперь бесконечные цепные дроби, то есть бесконечные последовательности
подходящих дробей.
Теорема. Подходящие дроби с чётными номерами возрастают, а подходящие дроби с
нечётными номерами убывают.
Доказательство. Применяя уже доказанные теоремы и оценки, имеем:
a2k−1 a2k 1 a2k+1 a2k 1 a2k+1 a2k+2
− = > − = > − > 0,
b2k−1 b2k b2k−1 b2k b2k+1 b2k b2k b2k+1 b2k+1 b2k+2
поскольку знаменатели подходящих дробей возрастают.
Следствие. Последовательность подходящих дробей имеет предел.
Доказательство. Последовательность чётных подходящих дробей возрастает и ограни-
чена сверху, а значит имеет предел, аналогично последовательность нечётных подходя-
щих дробей убывает и ограничена снизу, а значит имеет предел. Эти пределы совпадают,
поскольку разность между соседними подходящими дробями стремится к нулю.
Таким образом, значением бесконечной цепной дроби является предел последователь-
ности подходящих дробей. Значение любой бесконечной цепной дроби может быть вы-
числено с любой наперёд заданной степенью точности. 54 / 907
1.3.4. Наилучшие приближения
Дробь a/b называют наилучшим приближением к числу α, если не существует такой дроби
x/y , что y 6 b и при этом |α − x/y| < |α − a/b|.
Наилучшее приближение существует всегда, при это оно не всегда единственно,
а у иррациональных чисел бесконечно много наилучших приближений.
Теорема. Если bc − ad = 1, то ∀ x/y (a/b < x/y < c/d =⇒ y > b & y > d).
Доказательство. Рассмотрим разность x/y − a/b.

1 xb − ay x a c a bc − ad
6 = − < − = .
by by y b d b bd
Следовательно, y > d. Аналогично y > b.
Следствие. Все подходящие дроби, начиная со второй, являются наилучшими приближени-
ями.
Доказательство. В последовательности подходящих дробей любые две соседние, взятые
в нужно порядке, являются концами промежутка, о котором речь идёт в теореме.
55 / 907
1.4. Арифметика остатков
Целые числа в компьютере представляются конечными последовательностями битов, при-
чём эти последовательности зачастую имеют не очень большую длину: 16 бит, 32 бита,
64 бита и т. д. Это означает, что диапазон представимых чисел ограничен: −215 .. + 215 и
тому подобное.
Возникает чрезвычайно важный с практической точки зрения вопрос: как при этом про-
изводить арифметические операции в компьютере? Если результат операции помещает-
ся в разрядную сетку компьютера, то всё в порядке. Если же результат выходит за грани-
цы представимого диапазона, то возможны три варианта. Можно диагностировать «пе-
реполнение» и считать операцию невыполнимой, можно программным путём выйти за
пределы разрядной сетки компьютера (реализовать так называемую «длинную арифме-
тику»), или же возможно так переопределить сами арифметические операции, что ре-
зультат всегда представим в заданном диапазоне. Так возникает арифметика остатков
или модулярная арифметика, которая имеет удивительно широкое, можно сказать осно-
вополагающее применение в современных информационных технологиях.
56 / 907
1.4.1. Сравнения (1/3)
Пусть числа a, b, m ∈ N. Говорят, что число a сравнимо по модулю m c числом b, если оба
числа a и b имеют одинаковый остаток при делении на m, то есть a = pm + r, b = qm + r.
Обозначение: a ≡ b (mod m) или в краткой форме a ≡ b (m).
Теорема. Пусть a, b ∈ N, a > b. Число a сравнимо с числом b по модулю m тогда и только
тогда, когда m является делителем a − b: a ≡ b (m) ⇐⇒ m|(a − b).
Доказательство.
[ a ≡ b (m) =⇒ m|(a − b) ] Пусть a = pm + r , b = qm + r .
Тогда a − b = (p − q)m + (r − r) = km и m|(a − b).
[ m|(a − b) =⇒ a ≡ b (m) ] Пусть a − b = km.
Тогда ∃ p, q, ra , rb ∈ N0 (a = pm + ra & b = qm + rb & ra < m & rb < m).
Имеем a − b = (p − q)m + (ra − rb ), откуда ra − rb = 0 и ra = rb = r.
Теорема. Отношение сравнения обладает следующими свойствами:
1. ∀ a, m ∈ N (a ≡ a (m)) рефлексивность;
2. ∀ a, b, m ∈ N (a ≡ b (m) =⇒ b ≡ a (m)) симметричность;
3. ∀ a, b, c, m ∈ N (a ≡ b (m) & b ≡ c (m) =⇒ a ≡ c (m)) транзитивность.
Доказательство. Очевидно из определения. 57 / 907
1.4.1. Сравнения (2/3)
Замечание. Рефлексивное, симметричное и транзитивное отношение называют отноше-
нием эквивалентности и обычно обозначают знаком ≡. Поэтому введённое обозначе-
ние сравнимости чисел вполне оправдано.
Рассмотрим основные свойства введённого отношения сравнимости.
Лемма. [1] Пусть a ≡ b (m) и c ≡ d (m). Тогда (a + c) ≡ (b + d) (m).
Доказательство. Пусть a = qa m + r1 , b = qb m + r1 , c = qc m + r2 , d = qd m + r2 . Тогда
a + c = qa m + r1 + qc m + r2 = qac m + r и b + d = qb m + r1 + qd m + r2 = qbd m + r. Если
r = r1 + r2 > m, то положим r ← r − m, qac ← qac + 1, qbd ← qbd + 1.
Лемма. [2] Пусть a ≡ b (m) и c ≡ d (m). Тогда ac ≡ bd (m).
Доказательство. Не ограничивая общности, можно считать, что a > b, c > d. Так как
m|(a − b) и m|(c − d), то a − b = km, c − d = lm для некоторых целых k, l. Имеем
ac = (km + b)(lm + d) = (klm + bl + dk)m + bd. Из этого равенства следует, что остатки
ac и bd при делении на m равны, а значит, ac ≡ bd (m).
Лемма. [3] Если a ≡ b (m), n ∈ N, то an ≡ bn (m).
Доказательство. Индукция по n. База при n = 1 верна по условию леммы. Индукционный
переход по лемме 2. 58 / 907
1.4.1. Сравнения (3/3)
Из доказанных лемм непосредственно следует теорема.
Теорема. Пусть f (x) = an xn + an−1 xn−1 + . . . + a0 — многочлен с натуральными коэф-
фициентами. Тогда если a ≡ b (m), то f (a) ≡ f (b) (m).
Отношение сравнимости тесно связано с отношением делимости.
Теорема. Имеют место следующие свойства:
1. a ≡ b (m) & k|m =⇒ a ≡ b (k);
2. a ≡ b (m1 ) & a ≡ b (m2 ) =⇒ a ≡ b (lcm(m1 , m2 ));
3. a ≡ b (m) =⇒ ac ≡ bc (m);
4. a ≡ b (m1 ) & a ≡ b (m2 ) & gcd(m1 , m2 ) = 1 =⇒ a ≡ b (m1 m2 );
Доказательство.
[ 1 ] Если m|(a − b), то k|(a − b).
[ 2 ] a − b кратно m1 и m2 , любое общее кратное делится на наименьшее общее кратное.
[ 3 ] (ac − bc)/(mc) = (a − b)/m.
[ 4 ] Поскольку m1 ⊥ m2 , имеем m1 |(a − b) & m2 |(a − b) =⇒ m1 m2 |(a − b).
59 / 907
1.4.2. Системы вычетов (1/4)
Замечание. Поскольку деление с остатком определено для всех целых чисел, отношение
сравнения по модулю легко может быть определено не только для натуральных, но и для
всех целых чисел. Это обстоятельство используется нами в случае необходимости без
дополнительных оговорок.
Классом вычетов по модулю m для числа a (обозначение [a]m ) называется множество
чисел, сравнимых с a:
Def
[a]m = {b ∈ Z | b ≡ a (m)} , a ∈ Z, m ∈ N.
Замечание. Слово «вычет» употребляется как синоним слова «остаток». Всего классов
вычетов по модулю m ровно m и один класс вычетов составляют все числа, дающие
один и тот же остаток при делении на m.
Определим над классами вычетов операции сложения +m и умножения ∗m :
Def Def
[x]m +m [y]m = [(x + y)]m , [x]m ∗m [y]m = [(xy)]m .
Поскольку сложение и умножение чисел однозначны, введённые операции сложения и
умножения по модулю также однозначны. 60 / 907
1.4.2. Системы вычетов (2/4)
Множество классов вычетов с введёнными операциями сложения и умножения по моду-
лю m обозначается Zm .
Полной системой вычетов по модулю m называют множество целых чисел, содержащее
ровно по одному элементу из каждого класса вычетов по модулю m.
Пример. {7, 10, −1, 3, 101} — полная система вычетов по модулю 5.
Множество {0, 1, 2, . . . , m − 1} называется системой наименьших неотрицательных вы-
четов по модулю m. По принципу Дирихле эта система полна.
Используя систему наименьших неотрицательных вычетов удобно задавать операции
сложения и умножения по модулю в виде таблиц.
Пример. Таблицы сложения и умножения для Z3 и Z4 .
+4 0 1 2 3 ∗4 0 1 2 3
+3 0 1 2 ∗3 0 1 2
0 0 1 2 3 0 0 0 0 0
0 0 1 2 0 0 0 0
1 1 2 3 0 1 0 1 2 3
1 1 2 0 1 0 1 2
2 2 3 0 1 2 0 2 0 2
2 2 0 1 2 0 2 1
3 3 0 1 2 3 0 3 2 1 61 / 907
1.4.2. Системы вычетов (3/4)
Теорема. [О полных системах вычетов] Пусть {a1 , . . . , am } — полная система вычетов
по модулю m, x, y — целые числа, x ⊥ m. Тогда {y + xa1 , . . . , y + xam } — полная система
вычетов по модулю m.
Доказательство. Покажем, что числа y + xa1 , . . . , y + xam дают различные остатки при
делении на число m. Тогда, поскольку чисел ровно m, они образуют полную систему вы-
четов. Предположим противное, пусть y + xai и y + xaj дают одинаковые остатки при
делении на m. Тогда xai + y ≡ xaj + y (m) или m|x(ai − aj ). Так как x ⊥ m, m|(ai − aj )
или ai ≡ aj (m), что противоречит тому, что исходная система вычетов {a1 , . . . , am } яв-
ляется полной системой вычетов по модулю m.
Следствие. Если число p ∈ P — простое, то ∀ x ∈ Zp \ {0} (∃ y ∈ Zp (xy ≡ 1 (p))).
Другими словами, если число p ∈ P — простое, то любой элемент Zp , кроме нуля, имеет
обратный.
Доказательство. Рассмотрим любую полную систему вычетов {a1 , . . . , ap }, умноженную
на x, {xa1 , . . . , xap }. По теореме это будет полная система вычетов, то есть,
∃ z ∈ {xa1 , . . . , xap } (z ≡ 1 (p)), где z = xai . Класс [ai ]p и будет искомым обратным
элементом для [x]p . 62 / 907
1.4.2. Системы вычетов (4/4)
Рассмотрим теперь деление сравнений.
Лемма. Если a ≡ b (m), то gcd(a, m) = gcd(b, m).
Доказательство. a ≡ b (m) =⇒ b = a + mk , k ∈ Z =⇒ gcd(a, m) = gcd(b, m).
Теорема. Если ac ≡ bc (m) и d = gcd(c, m), то a ≡ b m

d
.
Доказательство. Пусть c = c1 d и m = m1 d. Тогда ac − bc = km и
ac − bc (a − b)c1
k= = .
m m1
Следовательно, m1 |(a − b)c1 , но c1 ⊥ m1 и значит m1 |(a − b) то есть a ≡ b m

d
.
Из теоремы следуют два важных частных случая.
Следствие. ac ≡ bc (m) & m = cd =⇒ a ≡ b (d).
Другими словами, сравнения можно сокращать на общий множитель.
Следствие. ac ≡ bc (m) & m ⊥ c =⇒ a ≡ b (m).
Другими словами, сравнения можно сокращать на множитель, взаимно простой с моду-
лем.
63 / 907
1.4.3. Линейные сравнения
Уравнение ax ≡ b (m) называется линейным сравнением, по аналогии с линейным урав-
нением в алгебре.
Теорема. Сравнение ax ≡ b (m) разрешимо тогда и только тогда, когда gcd(a, m)|b.
Доказательство. Сравнение ax ≡ b (m) разрешимо тогда и только тогда, когда разреши-
мо диофантово уравнение ax − my = b. Действительно,
ax ≡ b (m) ⇐⇒ m|(ax − b) ⇐⇒ ax − b = my ⇐⇒ ax − my = b. Далее по теореме
п. 1.2.7 получаем ровно d классов решений x0 , x0 + md
, . . . , x0 + (d − 1) md , где x0 —
любое частное решение диофантова уравнения.
Пример. Решим сравнение 25x ≡ 20 (15). Здесь a = 25, b = 20, m = 15, d = 5.
Во-первых, всё сравнение можно сократить на d. Получаем сравнение 5x ≡ 4 (3).
Во-вторых, диофантово уравнение 5x − 3y = 4, как нетрудно проверить, имеет частное
решение x0 = 2, y0 = 2. Таким образом, в-третьих, исходное сравнение имеет пять
решений: x0 = 2, x1 = 2+1·3 = 5, x2 = 2+2·3 = 8, x3 = 2+3·3 = 11, x4 = 2+4·3 = 14.
Следствие. Если p — простое число, то сравнение ax ≡ b (p) имеет единственное реше-
ние за исключением случая p|a.
64 / 907
1.4.4. Китайская теорема об остатках
Замечание. Китайская теорема об остатках была сформулирована в Китае, предполо-
жительно, в 3 веке н.э., китайским математиком Сунь Цзы, откуда и получила свое назва-
ние.
Теорема. Для любых попарно взаимно простых натуральных чисел a1 , . . . , an и для любых
целых чисел r1 , . . . , rn таких, что ∀ i ∈ 1..n (0 6 ri < ai ) существует такое число s, что
деление его на каждое из чисел ai даёт в остатке число ri .
Доказательство. Индукция по n. База: при n = 1 возьмём s ← r1 . Индукционный пере-
ход. Пусть ∃ t ∈ N (∀ i ∈ 1..(n − 1) (t = qi ai + ri )). Рассмотрим систему наименьших
неотрицательных вычетов {0, . . . , an − 1} по модулю an и применим теорему о пол-
ных системах вычетов, полагая x ← a1 a2 . . . an−1 и y ← t. Тогда система чисел s1 = t,
s2 = t + x, . . . , san = t + (an − 1)x является полной системой вычетов по модулю an ,
причём ∀ i ∈ 1..(n − 1) (∀ j ∈ 1..an (sj ≡ t (ai ))) по построению. Ввиду полноты систе-
мы среди чисел s1 , . . . , san существует такое число s, которое при делении на an даст в
остатке rn .
Следствие. Пусть m ← m1 m2 . . . mn , ∀ i, j ∈ 1..n, i 6= j (mi ⊥ mj ), x, a ∈ Z.
Тогда x ≡ a (m) ⇐⇒ ∀ i ∈ 1..n (x ≡ a (mi )). 65 / 907
1.4.5. Вычисления в остаточных классах (1/3)
Замечание. Пусть M = m1 m2 . . . mk , причём числа m1 , m2 . . . mk — попарно взаимно
просты. Тогда китайская теорема об остатках позволяет ввести взаимно однозначное
соответствие между остатками при делении на M и наборами остатков от деления на
m1 , m2 . . . mk .
Пусть m ← m1 m2 . . . mn , ∀ i, j ∈ 1..n, i 6= j (mi ⊥ mj ). По следствию к китайской теоре-
ме об остатках любое число a ∈ 0..(m−1) однозначно определяется остатками a1 , . . . , an
от деления числа a на числа m1 , . . . , mn . Такая непозиционная система счисления назы-
вается системой остаточных классов, или модулярной арифметикой.
Набор чисел m1 , . . . , mn называется основанием системы остаточных классов.
Обозначение: a = (a1 , . . . , an ).
В системе остаточных классов операции сложения и умножения выполняются покомпо-
нентно, то есть, если a = (a1 , . . . , an ), b = (b1 , . . . , bn ), a+b = c, ab = d, то c = (c1 , . . . , cn ),
d = (d1 , . . . , dn ), где ci ←(ai + bi ) mod m и di ←(ai bi ) mod m соответственно.

66 / 907
1.4.5. Вычисления в остаточных классах (2/3)

Пример. Пусть система остаточных классов задана своим основанием (3, 4, 5). Вычислим
в этой системе сумму и произведение чисел 7 и 8.
Имеем: 7 = (7 mod 3, 7 mod 4, 7 mod 5) = (1, 3, 2), 8 = (2, 0, 3).
Тогда сложение:
7 + 8 = ((1 + 2) mod 3, (3 + 0) mod 4, (2 + 3) mod 5) = (0, 3, 0) и
15 = (15 mod 3, 15 mod 4, 15 mod 5) = (0, 3, 0).
Умножение:
7 · 8 = ((1 · 2) mod 3, (3 · 0) mod 4, (2 · 3) mod 5) = (2, 0, 1) и
56 = (56 mod 3, 56 mod 4, 56 mod 5) = (2, 0, 1).

67 / 907
1.4.5. Вычисления в остаточных классах (3/3)
Отступление. Вычисления в остаточных классах в некоторых специальных применениях исполь-
зуются наряду или даже вместо вычислений в обычной позиционной двоичной системе счисле-
ния.
Одним из главных преимуществ вычислений в системах остаточных классов является отсутствие
переноса разрядов при сложении и умножении, поскольку достаточно сложить или умножить
представляющие векторы поэлементно. В специализированном процессоре это можно сделать
параллельно, а поэтому время выполнения обеих операций не зависит от количества чисел в ос-
новании системы остаточных классов. Сами числа в основании системы остаточных классов мож-
но выбирать небольшими, и аппаратные операции с ними можно выполнять очень быстро.
Ограничение диапазона представления чисел не является существенным. Например, если взять
основания 3, 5, 7, 11, 13, то для хранения остатков потребуется 2 + 3 + 3 + 4 + 4 = 16 бит. При
этом диапазон представления составит 0..15014, что вполне сопоставимо с диапазоном 0..65535
для 16-битных двоичных чисел.
Действительно существенным недостатком вычислений в остаточных классах являются медлен-
ные алгоритмы перевода из позиционной системы счисления в систему остаточных классов и об-
ратно, а также деления с остатком. Эффективные алгоритмы для этих операций неизвестны.
68 / 907
1.5. Функция Эйлера

Функция и теорема Эйлера обобщают знаменитую теорему Ферма, которая является од-
ной из ключевых теорем в теории чисел, и поэтому занимают одно из центральных мест
в этой области математики.
Функцией Эйлера от натурального аргумента n называется количество чисел меньших n
и взаимно простых с n. Стандартным обозначением для функции Эйлера является ϕ(n).
Из определения ясно, что n > 1 =⇒ 1 6 ϕ(n) < n. По определению ϕ(1) = 1.
Пример. ϕ(1) = 1, ϕ(2) = 1, ϕ(3) = 2, ϕ(4) = 2, ϕ(5) = 4, ϕ(6) = 2.

69 / 907
1.5.1. Аддитивные и мультипликативные функции (1/2)
Вообще говоря, числовая функция f называется аддитивной, если она уважает сложе-
ние, т. е. f (x + y) = f (x) + f (y), и называется мультипликативной, если она уважает
умножение, т. е. f (xy) = f (x)f (y).
В теории чисел используются несколько отличающиеся определения этих понятий.
Функция f : N → N называется аддитивной, если
∀ x, y ∈ N (x ⊥ y =⇒ f (x + y) = f (x) + f (y))
и называется мультипликативной, если
∀ x, y ∈ N (x ⊥ y =⇒ f (xy) = f (x)f (y)) .
Примеры. Количество множителей в разложении числа n на простые без учета кратно-
сти Ω(n) — аддитивная функция. Число делителей числа n (обозначается d(n)) и сумма
делителей числа n (обозначается σ(n)) — мультипликативные функции.
Также в теории чисел выделяют вполне аддитивные и вполне мультипликативные функ-
ции, пренебрегая взаимной простотой в соответствующих определениях.
Пример. Степенная функция f (n) = na , a > 0 вполне мультипликативна.
70 / 907
1.5.1. Аддитивные и мультипликативные функции (2/2)
Для подсчёта значения мультипликативной функцией f (n) для произвольного n доста-
точно уметь считать значения f (pa ), где p ∈ P, a ∈ N0 . Действительно, пусть n — про-
извольное натуральное число. Тогда по основной теореме арифметики число n можно
единственным образом разложить на простые множители n = pa11 pa22 . . . pakk , и из муль-
типликативности получим f (n) = f (pa11 pa22 . . . pakk ) = f (pa11 )f (pa22 ) . . . f (pakk ).
Теорема. Функция Эйлера мультипликативна.
Доказательство. Пусть a ⊥ b. Рассмотрим множество
U = {ax + by | x ∈ {1, 2, . . . , b}, y ∈ {1, 2, . . . , a}} ,
состоящее из ab чисел. Заметим, что все они дают разные остатки при делении на ab.
Действительно, пусть ax1 + by1 ≡ ax2 + by2 (ab). Тогда ax1 ≡ ax2 (b) и by1 ≡ by2 (a),
откуда x1 = x2 и y1 = y2 . Далее, ax + by ⊥ ab ⇐⇒ x ⊥ b & y ⊥ a. Действительно, ax +
by ⊥ ab ⇐⇒ ax+by ⊥ b & ax+by ⊥ a ⇐⇒ ax ⊥ b & by ⊥ a ⇐⇒ x ⊥ b & y ⊥ a. Таким
образом, множество элементов U , взаимно простых с ab, изоморфно множеству пар (x, y)
таких, что x ∈ 1..b & x ⊥ b, y ∈ 1..a & y ⊥ a. Но | {x, y | ax + by ⊥ ab} | = ϕ(ab),
| {x ∈ 1..b | x ⊥ a} | = ϕ(a), | {y ∈ 1..a | y ⊥ b} | = ϕ(b). Поэтому ϕ(ab) = ϕ(a)ϕ(b).
71 / 907
1.5.2. Вычисление функция Эйлера  
a 1 a a−1 a
Лемма. Если p ∈ P, a ∈ N, то ϕ(p ) = p − p =p 1− .
p
Доказательство. Всех рассматриваемых чисел pa − 1. из них числами, не взаимно про-
стыми со степенью простого числа, являются те и только те, которые на это простое число
делятся. Эти числа имеют вид 1p, 2p, 3p, . . . , pa−1 p, а их ровно pa−1 − 1.
Получаем ϕ(pa ) = (pa − 1) − (pa−1 − 1) = pa − pa−1 = pa (1 − 1/p).
Теорема. Если n = pa11 pa22 . . . pakk , pi ∈ P, то
k  
Y 1
pa11 pa11 −1 pa22 pa22 −1 pakk pakk −1
  
ϕ(n) = − − ... − =n 1− .
i=1
pi
Доказательство. В разложении числа на множители сомножители взаимно просты, функ-
ция Эйлера мультипликативна, отсюда ϕ(n) = ϕ(pa11 ) . . . ϕ(pakk ) и далее применяем лем-
му k раз.
Замечание. Значение функции Эйлера — натуральное число, хотя формула «не выглядит
целочисленной».
Пример. ϕ(36) = ϕ(22 32 ) = 36(1 − 1/2)(1 − 1/3) = 36 21 23 = 12. 72 / 907
1.5.3. Теорема Эйлера–Ферма (1/2)
Приведённой системой вычетов по модулю m называют множество целых чисел, содер-
жащее ровно по одному элементу из каждого класса вычетов по модулю m, взаимно про-
стого с m.
Теорема. Если {a1 , . . . , an } — приведённая система вычетов по модулю m, x ∈ Z, x ⊥ m,
то {xa1 , . . . , xan } — приведённая система вычетов по модулю m.
Доказательство. Аналогично случаю полной системы вычетов.
Замечание. Приведённая система вычетов по модулю n содержит ϕ(n) элементов.
Теорема. [Эйлера] Если a ⊥ n, то aϕ(n) ≡ 1 (n).
Доказательство. Рассмотрим приведённую систему вычетов {x1 , . . . , xϕ(n) } по модулю n.
В ней ровно ϕ(n) элементов. Домножим каждый элемент этой системы на a. Полученная
система тоже является приведённой системой вычетов по модулю n. Таким образом,
произведение всех полученных вычетов сравнимо с произведением всех исходных (по-
скольку новая система вычетов также приведённая, то она является некоторой пере-
становкой исходной системы). Отсюда ax1 ax2 . . . axϕ(n) ≡ x1 x2 . . . xϕ(n) (n). Поскольку
x1 x2 . . . xϕ(n) взаимно просто с n, то на это произведение можно поделить обе части срав-
нения. Получим aϕ(n) ≡ 1 (n). 73 / 907
1.5.3. Теорема Эйлера–Ферма (2/2)

Следствие. [малая теорема Ферма] Пусть p — простое число. Тогда ap−1 ≡ 1 (p) для
любого a, не делящегося на p.
Пример. Покажем, как теорему Эйлера можно применять в задаче, на первый взгляд ни-
чего общего с ней не имеющей. Пусть числа m и n взаимно просты, n не делится ни
на 2, ни на 5. Оценить длину периода дроби x = m n
. Решение. Существует t такое, что
(10t − 1)x = y , где y — целое число. Отсюда x = 10ty−1 . Поскольку m
n
— несократимая
t
дробь, имеем (10 − 1)|n. Заметим, что t = ϕ(n) подходит по теореме Эйлера, а длина
периода — минимальное такое t, значит, длина периода не превосходит ϕ(n).

74 / 907
1.6. Операции с полиномами
Выражение вида Pn (x) = an xn + an−1 xn−1 + · · · + a1 x + a0 называют полиномом или
многочленом. Здесь x — переменная, ai — коэффициенты, n — степень полинома.
Для указания степени полинома можно использовать нижний индекс или функцию deg:

deg Pn (x) = n.

В конкретных построениях указывается также, из какого множества берутся коэффици-


енты и значения переменной. Обычно это подходящее числовое множество, поскольку
необходимо, чтобы были определены операции сложения и умножения с нужными свой-
ствами, а также нейтральный элемент по сложению (ноль) и нейтральный элемент по
умножению (единица).
Примеры. Здесь рассматриваются полиномы над множествами R — вещественные числа,
Q — рациональные числа, Z — целые числа, Zm — классы вычетов по модулю m. Во всех
этих множествах операции сложения и умножения определены.
75 / 907
1.6.1. Сложение и умножение полиномов (1/2)
Полином Pn (x) = an xn + an−1 xn−1 + · · · + a1 x + a0 полностью определяется последова-
тельностью своих коэффициентов (an , . . . , a0 ), причём старший коэффициент не равен
нулю. По этой причине операции с полиномами могут и должны определяться как опе-
рации над векторами длины n + 1.
Замечание. Совершенно аналогично числа полностью определяются последовательно-
стью своих цифр в позиционной системе счисления с основанием b:
n = an bn + · · · + a1 b + a0 . Поэтому операции с числами сводятся к операциям с цифрами,
которые изучаются в начальной школе.
Отступление. Операции с полиномами в чём-то даже проще операций с числами, поскольку от-
сутствуют переносы из разряда в разряд.
Пусть Pn (x) = an xn +an−1 xn−1 +· · ·+a1 x+a0 и Qm (x) = bm xm +bm−1 xm−1 +· · ·+b1 x+b0 ,
причём n > m. Тогда сумма полиномов определяется по следующей формуле:
n
X m
X
n n−1 i
Pn (x) + Qm (x) = Sn (x) = can x + cn−1 x + · · · + c1 x + c0 = ai x + (ai + bi )xi ,
i=m+1 i=0

где ci ← if i 6 m then ai + bi else ai end if. 76 / 907


1.6.1. Сложение и умножение полиномов (2/2)
Пусть Pn (x) = an xn +an−1 xn−1 +· · ·+a1 x+a0 и Qm (x) = bm xm +bm−1 xm−1 +· · ·+b1 x+b0 ,
причём n > m. Тогда произведение полиномов определяется по следующей формуле:
n+m
!
X X
Pn (x)Qm (x) = Sn+m (x) = cn+m xn+m + + · · · + c1 x + c0 = ai b j xk ,
k=0 i+j=k

где коэффициенты ck определяются следующим алгоритмом:


ck ← 0; for i from 0 to k do ck ← ck + ai bk−i end for.
Полином, состоящий из одного слагаемого an xn , называется мономом. Умножение про-
извольного полинома Qm (x) на моном an xn выполняется очень просто:
for i from 0 to n − 1 do ci ← 0 end for; for i from 0 to m do cn+i ← an bi end for.
Отсюда получается алгоритм умножения полиномов «в столбик»: достаточно умножить
первый полином на все мономы второго полинома, а потом сложить полученные произ-
ведения.
Замечание. Если хотя бы один из полиномов разреженный, то есть содержит мало нену-
левых мономов, то такой приём может сократить количество выполняемых операций.77 / 907
1.6.2. Деление полиномов
Теорема. Если An (x), Bm (x) — полиномы, причём n > m > 0, то существуют единствен-
ные полиномы Qq (x), Rr (x) такие, что An (x) = Bm (x)Qq (x)+Rr (x), причём m > r > 0.
Доказательство. Обозначим (0) — нулевой полином, то есть полином с единственным
мономом нулевой степени и нулевым коэффициентом. Существование и единственность
указанного разложения обеспечено следующим алгоритмом деления «уголком».
R ← A //начальный остаток — это делимое
Q ←(0) //начальное частное — нулевой полином
α ← 1/bm //обратное значение старшего коэффициента делителя
while r > m do
T ← αxr−m //очередной моном в неполное частное
Q ← Q + T //пополняем неполное частное
R ← R − T B //уменьшаем остаток
end while
На каждом шаге работы алгоритма сохраняется инвариант цикла A = BQ + R.
Пример. Пусть A(x) = x2 + 2x + 3, B(x) = x + 1.
Тогда x2 + 2x + 3 = x(x + 1) + (x + 3) = (x + 1)(x + 1) + 2. 78 / 907
1.6.3. Теорема Безу и схема Горнера
Теорема. [Безу] P (x) = Q(x)(x − α) + P (α).
Доказательство. Степень делителя x−α равна 1, а значит степень остатка равна 0. Имеем
P (x) = Q(x)(x − α) + r, следовательно P (α) = r.
Следствие. Бином x − α является делителем полинома P (x) тогда и только тогда, когда
α является корнем, то есть P (α) = 0.
Теорема Безу позволяет обосновать алгоритм вычисления значения полинома, извест-
ный как схема Горнера, который не требует возведения в степень и вычисления значений
мономов, а потому более эффективен (см. параграф 1.1.9).
Идея заключается в том, чтобы последовательно делить многочлен на моном x:
P (x) = x(Q1 (x)) + a0 = x(x(Q2 (x) + a1 ) + a0 = · · · = a0 + x(a1 + . . . x(an−1 + xan ) . . . ).
Алгоритм вычисления по схеме Горнера значения полинома, заданного поcледователь-
ностью коэффициентов:
s ← 0 //начальное значение
for i from 0 to n do s ← sx + ai end for //по схеме Горнера
79 / 907
1.6.4. Алгоритм Евклида для полиномов
Из предыдущих параграфов видно, что деление с остатком для полиномов и для нату-
ральных чисел обладает сходными свойствами, неполное частное и остаток определя-
ются однозначно. Однако наибольший общий делитель для полиномов однозначно не
определяется. Дело в том, что множество общих делителей двух полиномов бесконечно:
если полиномы A(x) и B(x) без остатка делятся на полином C(x), то они без остатка де-
лятся и на полином αC(x) при любом α 6= 0. В частности, любые два полинома делятся
без остатка на любую константу, не равную нулю.
Наибольшим общим делителем двух ненулевых полиномов называется полином наи-
большей степени, на который данные полиномы делятся без остатка.
Замечание. Наибольший общий делитель ненулевых полиномов существует и определя-
ется с точностью до константы.
Найти наибольший общий делитель и его линейное представление можно разложением
на множители или с помощью обобщённого алгоритма Евклида.
Пример. gcd(x3 − 1, x2 − 1) = gcd(x2 − 1, x − 1) = x − 1,
1 · (x3 − 1) − x(x2 − 1) = x − 1.
80 / 907
1.6.5. Интерполяционная формула Лагранжа (1/2)
Подобно алгоритму Евклида, на полиномы переносится и китайская теорема об остатках.
Полиномы называются взаимно простыми, если у них нет общих делителей, отличных от
константы.
Замечание. В теoреме нижние индексы у полиномов означают не степени, а номера.
Теорема. Пусть P (x), R1 (x), . . . , Rn (x), M1 (x), . . . , Mn (x) — некоторые полиномы и
пусть выполнены сравнения P (x) ≡ R1 (x) (M1 (x)) , . . . , P (x) ≡ Rn (x) (Mn (x)).
Тогда если полиномы M1 (x), . . . , Mn (x) попарно взаимно просты, то
n
X
P (x) ≡ Ci (x)Di (x)Ri (x) ( mod M (x)) ,
i=1

n
Y M (x)
где M (x) = Mi (x), Ci (x) = , Di (x)Ci (x) ≡ 1 ( mod Mi (x)).
i=1
Mi (x)
Доказательство. Аналогично случаю для чисел.
81 / 907
1.6.5. Интерполяционная формула Лагранжа (2/2)
Теорема. Если deg P (x) = n и известны значения полинома в n + 1 различных точках
P (x0 ) = y0 , P (x1 ) = y1 , . . . , P (xn ) = yn , то
n
X (x − x0 ) . . . (x − xi−1 )(x − xi+1 ) . . . (x − xn )
P (x) = yi .
i=0
(x i − x 0 ) . . . (x i − x i−1 )(x i − x i+1 ) . . . (x i − x n )
Доказательство. По теореме Безу P (xi ) = yi ⇐⇒ P (x) ≡ yi ( mod (x − xi )). Положим
n
Y M (x) Y
Ri (x) = yi , M (x) = (x − xk ), Ci (x) = = (x − xk ), где полиномы
k=0
Mi (x) k6=i
Mi = x − xi попарно взаимно просты. Тогда gcd(Ci (x), Mi (x)) = 1 и существует по-
лином Di (x), который удовлетворяет уравнению Ci (x)Di (x) + Mi (x)B(x) = 1 (линей-
ное представление), где B(x) — какой-то полином. При этом deg Di < deg Mi = 1 и
значит deg Di (x) = 0 и Di = di . Подставив это в линейное представление, имеем:
Ci (xi )di + Mi (x)B(xi ) = 1, но Mi (xi ) = 0, значит di = 1/Ci (xi ). По китайской тео-
n n n Y x − xk
X X Ci (x) X
реме об остатках P (x) = Ci (x)Di (x)Ri (x) = yi = yi .
i=0 i=0
Ci (xi ) i=0 i6=k
xk − xi
82 / 907
1.6.6. Разложение полиномов на неприводимые множители (1/2)
Полином P (x) называется неприводимым (или примитивным) над заданным множеством,
если не существует полиномов P1 (x) и P2 (x) над этим же множеством таких,
что P (x) = P1 (x)P2 (x).
Замечание. Неприводимость полинома√ зависит
√ от множества.
2
Например, полином x − 2 = (x − 2)(x + 2) разлагается на множители над веще-
ственными числами R, но этот же полином неприводим над целыми числами Z и рацио-
нальными числами Q.
Отступление. Разложение числа на простые множители является вычислительно трудоёмкой за-
дачей. Это же справедливо и для полиномов.
Для приложений дискретной математики наибольший интерес представляет разложение
полиномов над множеством рациональных чисел Q
Бином x − α является простейшим неприводимым полиномом, поэтому естественный
первый вопрос такой: в каких случаях полином P (x) над множеством рациональных чи-
сел Q делится на бином x − α? По теореме Безу P (x) = (x − α)P1 (x) ⇐⇒ P (α) = 0.
83 / 907
1.6.6. Разложение полиномов на неприводимые множители (2/2)
Таким образом, возникает эквивалентный вопрос: в каких случаях полином с рациональ-
ными коэффициентами имеет рациональные корни? Прежде всего заметим, что можно
полином с рациональными коэффициентами умножить на наибольший общий знамена-
тель всех коэффициентов и получится эквивалентный с точки зрения разложения на мно-
жители полином с целыми коэффициентами.
Теорема. Если несократимая дробь p/q ∈ Q является корнем полинома с целыми коэффи-
циентами P (x) = an xn + · · · + a0 , то p|a0 & q|an .
Доказательство. Пусть p/q — корень, тогда an (p/q)n +an−1 (p/q)n−1 +· · ·+a1 (p/q)+a0 = 0
и an pn + an−1 pn−1 q + · · · + a1 pq n−1 + a0 q n = 0. В уравнении an pn + an−1 pn−1 q + · · · +
a1 pq n−1 = −a0 q n левая часть делится на число p, значит p|a0 . Аналогично в уравнении
−an p= an−1 pn−1 q + · · · + a1 pq n−1 + a0 q n правая часть делится на число q , значит q|an .
Доказанная теорема не даёт необходимого и достаточного условия выделения бинома
из полинома, но позволяет найти такой бином подбором, если он существует.
Пример. Полином 2x2 −x+1 неприводим над множеством рациональных чисел Q, потому
что все дроби, удовлетворяющие условиям теоремы, 1/1, −1/1, −1/2 и 1/2, не являются
корнями полинома. 84 / 907
2. Комбинаторный анализ
Предмету комбинаторного анализа или, короче, комбинаторике не так просто дать крат-
кое исчерпывающее определение. В некотором смысле слово «комбинаторика» можно
понимать как синоним термина «дискретная математика», то есть исследование дискрет-
ных конечных математических структур. На школьном уровне с термином «комбинато-
рика» связывают просто набор известных формул, служащих для вычисления так назы-
ваемых комбинаторных чисел, о которых идёт речь в первых разделах этой главы. Может
показаться, что эти формулы полезны только для решения олимпиадных задач и не име-
ют отношения к практическому программированию. На самом деле это далеко не так.
Вычисления на дискретных конечных математических структурах, которые часто назы-
вают комбинаторными вычислениями, требуют комбинаторного анализа для установле-
ния свойств и выявления оценки применимости используемых алгоритмов. Без проведе-
ния такого анализа, легко совершить ошибку, и предложить алгоритм, который упешно
работает на тестовых примерах, но неприменим на реальных данных из-за эффекта так
называемого «комбинаторного взрыва». В этой теме мы уделяем особое внимание ана-
лизу применимости алгоритмов.
85 / 907
2.1. Комбинаторные задачи

Во многих практических случаях возникает необходимость подсчитать количество воз-


можных комбинаций объектов, удовлетворяющих определённым условиям. Такие зада-
чи называются комбинаторными. Во всех случаях основным инструментом такого анали-
за оказываются формулы и методы, рассматриваемые в этой теме.
Разнообразие комбинаторных задач не поддаётся исчерпывающему описанию, но сре-
ди них есть целый ряд особенно часто встречающихся, для которых известны способы
подсчёта.

86 / 907
2.1.1. Комбинаторные конфигурации (1/4)
Для формулировки и решения комбинаторных задач используются различные модели
комбинаторных конфигураций. Рассмотрим следующие две наиболее популярные:
1. Дано n мячей. Их нужно разместить по m ящикам так, чтобы выполнялись заданные
ограничения. Сколькими способами это можно сделать?
2. Рассмотрим множество функций f : 1..n → 1..m. Сколько существует функций f ,
удовлетворяющих заданным ограничениям?
Замечание. Большей частью соответствие конфигураций, описанных на «языке мячей и
ящиков» и на «языке функций», очевидно, поэтому доказательство правильности спосо-
ба подсчёта (вывод формулы) можно провести на любом языке. Если сведе́ние одной мо-
дели к другой не очевидно, то оно включается в доказательство.
Отступление. Здесь рассматриваются именно функции, то есть однозначные отношения, посколь-
ку в большинстве случаев этого оказывается достаточно, а выводить формулы для функций про-
ще. Однако встречаются комбинаторные задачи, когда для построения адекватных конфигураций
приходится использовать многозначные отношения.
87 / 907
2.1.1. Комбинаторные конфигурации (2/4)

Таким образом, при решении комбинаторных задач требуется вычислять мощность неко-
торых множеств (множества функций, множества размещений мячей по ящикам). При
этом часто оказываются полезными следующие три наблюдения из теории множеств, ко-
торым даны специальные названия.
Неформально правило суммы (или правило сложения) формулируется следующим обра-
зом: если возможности построения комбинаторной конфигурации взаимно исключают
друг друга, то их количества следует складывать.
Пример. Сколько возможных ходов имеет ферзь, стоящий на одном из центральных по-
лей пустой шахматной доски? Решение: ферзь может пойти либо по горизонтали (7 хо-
дов), либо по вертикали (7 ходов), либо по главной диагонали (7 ходов), либо по ортого-
нальной диагонали (6 ходов). Ответ: 7 + 7 + 7 + 6 = 27.

88 / 907
2.1.1. Комбинаторные конфигурации (3/4)

Неформально правило произведения (или правило умножения) формулируется следующим


образом: если возможности построения комбинаторной конфигурации независимы, то их
количества следует умножать.
Пример. Сколькими способами можно на шахматной доске поставить две ладьи разного
цвета так, чтобы они не били друг друга? Решение: первую ладью можно поставить на
любое из 64 полей, при этом она будет бить 14 полей. Вторую ладью можно поставить на
любое из оставшихся 64 − 15 = 49 полей. Ответ: 64 · 49 = 3136 способов.
Правила суммы и произведения могут применяться совместно.
Пример. Сколькими способами можно на шахматной доске поставить два короля разного
цвета так, чтобы они не били друг друга? Решение: король может стоять либо в углу доски
(4 занятых поля), либо на краю доски (6 занятых полей), либо не на краю (9 занятых
полей). Ответ: 4 · (64 − 4) + 24 · (64 − 6) + 36 · (64 − 9) = 240 + 1392 + 1980 = 3612
способов.

89 / 907
2.1.1. Комбинаторные конфигурации (4/4)
Неформально принцип Дирихле часто излагают в следующей форме: если n 6= m, то n
кроликов невозможно рассадить в m клеток так, чтобы в каждой клетке было по одному
кролику.
Примеры.
1. Пусть в равностороннем треугольнике со стороной 1 расположены 5 точек. Тогда су-
ществует по крайней мере две точки, расстояние между которыми не больше 1/2 .
Действительно, средние линии треугольника разбивают его на четыре равносторон-
них треугольника со стороной 1/2 . По принципу Дирихле две точки попадут в один
из этих треугольников. Расстояние между ними будет не больше 1/2 .
2. Пусть грани куба окрашены в два цвета. Тогда найдутся соседние одноцветные грани.
Действительно, рассмотрим три грани куба, имеющие общую вершину. Назовём их
«кроликами», а данные цвета — «клетками». По принципу Дирихле, найдутся две
соседние грани, окрашенные в один цвет.

90 / 907
2.1.2. Размещения
Число всех функций f : 1..n → 1..m (при отсутствии ограничений), или число всех воз-
можных способов разместить n мячей по m ящикам, называется числом размещений и
обозначается U (m, n).
Теорема. U (m, n) = mn .
Доказательство. Поскольку ограничений нет, мячи размещаются независимо друг от дру-
га, то есть каждый из n мячей можно разместить m способами. Таким образом, по пра-
вилу произведения получаем mn возможных размещений.
Примеры.
1. Число всех возможных бинарных последовательностей длины n равно U (2, n) = 2n .
Действительно, на каждую из n позиций в последовательности приходится 2 вари-
анта (1 или 0), значения в разных позициях независимы.
2. У кодового замка пароль состоит из трёх позиций, на каждой из них может стоять
любая из цифр от 0 до 9. Сколько возможных паролей на данном замке? Решение:
U (10, 3) = 103 = 1000.
91 / 907
2.1.3. Размещения без повторений (1/2)
Число инъективных функций f : 1..n → 1..m, или число способов разместить n мячей по
m ящикам, не более чем по одному в ящик, называется числом размещений без повторе-
ний и обозначается A(m, n), или [m]n , или (m)n .
m!
Теорема. A(m, n) = .
(m − n)!
Доказательство. Ящик для первого мяча можно выбрать m способами, для второго мя-
ча — m − 1 способами и т. д. Имеем A(m, n) = m(m − 1) . . . (m − n + 1) = m!/(m − n)!.
Def Def
Из определению ясно, что A(m, n) = 0 при n > m и A(m, 0) = 1.
Пример. В некоторых видах спортивных соревнований исходом является определение
участников, занявших первое, второе и третье места. Сколько возможно различных ис-
ходов, если в соревновании участвуют n участников? Каждый возможный исход соответ-
ствует функции F : {1, 2, 3} → 1..n (аргумент — номер призового места, результат — но-
мер участника). Всего возможно A(n, 3) = n(n − 1)(n − 2) различных исходов.
Def Qn−1
Замечание. Функцию (x)n = x(x−1) . . . (x−n+1) = i=0 (x−(i)) называют убывающим
факториалом. Имеем (m)n = A(m, n). 92 / 907
2.1.3. Размещения без повторений (2/2)
Отступление. Простые формулы, выведенные для числа размещений без повторений, дают повод
поговорить об элементарных, но весьма важных вещах. Рассмотрим две формулы:

m!
A(m, n) = m · (m − 1) · . . . · (m − n + 1) и A(m, n) = .
(m − n)!

Формула слева выглядит сложной и незавершённой, формула справа — изящной и «математич-


ной». Но формула — это частный случай алгоритма. При практическом вычислении левая форму-
ла оказывается намного предпочтительнее правой. Во-первых, для вычисления по левой форму-
ле потребуется n умножений, а по правой — 2m − n − 2 умножений и одно деление. Поскольку
n < m, левая формула вычисляется существенно быстрее. Во-вторых, число A(m, n) растёт до-
вольно быстро и при больших m и n может не поместиться в разрядную сетку. Левая формула ра-
ботает правильно, если результат помещается в разрядную сетку. При вычислении же по правой
формуле переполнение может наступить «раньше времени» (то есть промежуточные результаты
не помещаются в разрядную сетку, в то время как окончательный результат мог бы поместиться),
поскольку факториал — очень быстро растущая функция.
93 / 907
2.1.4. Перестановки
Число взаимно-однозначных функций f : 1..n → 1..n, или число перестановок n пред-
метов, обозначается P (n).
Теорема. P (n) = n!.
Доказательство. P (n) = A(n, n) = n · (n−1) · . . . · (n−n+1) = n · (n−1) · . . . · 1 = n!.
В качестве примера, рассмотрим понятие цепочки: последовательность E = (E1 , . . . , Em )
непустых подмножеств множества E (E ⊂ 2E , Ei ⊂ E , Ei 6= ∅) называется цепочкой в E ,
если ∀ i ∈ 1..(m − 1) (Ei ⊂ Ei+1 & Ei 6= Ei+1 ) . Цепочка E называется полной цепочкой
в E , если |E| = |E|. Сколько существует полных цепочек?
Замечание. Полную цепочку иногда образно называют матрёшкой.
Очевидно, что в полной цепочке каждое следующее подмножество Ei+1 получено из
предыдущего подмножества Ei добавлением ровно одного элемента из E и таким об-
разом, |E1 | = 1, |E2 | = 2, . . . , |Em | = m. Следовательно, полная цепочка определяет-
ся порядком, в котором элементы E добавляются для образования очередного элемен-
та полной цепочки. Отсюда количество полных цепочек — это количество перестановок
элементов множества E , равное m!.
94 / 907
2.1.5. Сочетания (1/2)
Число строго монотонно возрастающих функций f : 1..n → 1..m, или число размещений
n неразличимых предметов по m ящикам не более чем по одному в ящик, то есть число
способов выбрать из m ящиков n ящиков с предметами, называется числом сочетаний и
n
обозначается C(m, n), или Cm , или m
n
.
Def
По определению C(m, n) = 0 при n > m.
m!
Теорема. C(m, n) = .
n!(m − n)!
Доказательство.
[ Обоснование формулы ] Сочетание является размещением без повторений неразличи-
мых предметов. Следовательно, число сочетаний определяется тем, какие ящики заняты
предметами, поскольку перестановка предметов при тех же занятых ящиках считается
A(m, n) m!
одним сочетанием. Таким образом, C(m, n) = = .
P (n) n!(m − n)!
Замечание. Для подсчёта числа сочетаний выделяют граничные случаи: C(m, 1) = m,
C(m, m − 1) = m, C(m, m) = 1, C(m, 0) = 1, каждый из которых очевидным образом
получается прямой подстановкой параметров в формулу. 95 / 907
2.1.5. Сочетания (2/2)
Доказательство. (Окончание)
[ Сведе́ние моделей ] Число сочетаний является количеством строго монотонно возрастаю-
щих функций, потому что любая строго монотонно возрастающая функция f : 1..n → 1..m
определяется набором своих значений, причём 1 6 f (1) < . . . < f (n) 6 m. Другими
словами, каждая строго монотонно возрастающая функция определяется выбором n чи-
сел из диапазона 1..m. Таким образом, число строго монотонно возрастающих функций
равно числу n-элементных подмножеств m-элементного множества, которое равно чис-
лу способов выбрать n ящиков с предметами из m ящиков.
Пример. В начале игры в домино каждому играющему выдаётся 7 костей из имеющихся
28 различных костей. Сколько существует различных комбинаций костей, которые игрок
может получить в начале игры? Очевидно, что искомое число равно числу 7-элементных
подмножеств 28-элементного множества. Имеем

28! 28 · 27 · 26 · 25 · 24 · 23 · 22
C(28, 7) = = = 1 184 040.
7!(28 − 7)! 7·6·5·4·3·2·1
96 / 907
2.1.6. Сочетания с повторениями (1/2)
Число монотонно возрастающих функций f : 1..n → 1..m, или число размещений n
неразличимых мячей по m ящикам, называется числом сочетаний с повторениями и обо-
значается V (m, n).
Теорема. V (m, n) = C(n + m − 1, n).
Доказательство. Монотонно возрастающей функции f : 1..n → 1..m однозначно соот-
ветствует строго монотонно возрастающая функция g : 1..n → 1..(n + m − 1). Это соот-
ветствие устанавливается следующей формулой: g(k) = f (k) + k − 1.
Замечание. V (0, n) = C(n − 1, n) = 0 при n > 0 по определению для C(m, n). Однако,
Def
обычно считают, что V (0, 0) = 1.
Пример. Сколькими способами можно рассадить n вновь прибывших гостей среди m го-
стей, уже сидящих за круглым столом? Очевидно, что имеется m промежутков, в которые
можно рассаживать вновь прибывших, и число способов равно
(m + n − 1)!
V (m, n) = C(m + n − 1, n) = .
n!(m − 1)!
97 / 907
2.1.6. Сочетания с повторениями (2/2)
Теорема. V (m, n) = V (n + 1, m − 1).
(m + n − 1)! (n + m − 1)!
Доказательство. V (m, n) = C(m + n − 1, n) = = =
n!(m − 1)! (m − 1)!n!
= C(n + m − 1, m − 1) = V (n + 1, m − 1).
Пример. Сколько существует способов записать натуральное число n в виде суммы m
натуральных чисел: a1 + a2 + . . . + am = n? Любое натуральное число можно предста-
вить в виде суммы единиц. Тогда решение задачи сводится к разделению n выстроен-
ных в ряд единиц на m непустых групп с помощью m − 1 перегородки. Для перегород-
ки существует n − 1 позиция между единицами. Таким образом, число способов расста-
вить перегородки: C(n − 1, m − 1). Рассмотрим теперь похожую задачу: сколько суще-
ствует способов записать натуральное число n в виде суммы m неотрицательных целых
чисел: a1 + a2 + . . . + am = n? Сведем задачу к предыдущей. Пусть yi = ai + 1. Тогда
y1 + y2 + . . . + ym = n + m. Ответ: C(m + n − 1, m − 1) = V (m, n).
n−1
Def
Замечание. Функцию x(n) = x(x+1) . . . (x+n−1) =
Q
(x+i) называют возрастающим
i=0
факториалом. Имеем m(n) = V (m, n)/n!. 98 / 907
2.1.7. Дискретная вероятность (1/7)
Пусть задано конечное множество X = {x1 , . . . , xn }, |X| = n, и тотальная функция
n
P
P : X → [0; 1], такая, что P(xi ) = 1. Тогда число pi ← P(xi ) называется вероятностью
i=1
элемента xi , а набор чисел PX = (p1 , . . . , pn ) называется распределением вероятности
на множестве X . Распределение вероятности PX , в котором ∀ i ∈ 1..n pi = n1 , назы-


вается равномерным.
Элементы множества X могут иметь произвольную природу: это могут быть результаты
измерения числового значения некоторой физической величины, способы разложить мя-
чи по ящикам в комбинаторной конфигурации, альтернативные события реального мира,
которые могут произойти в будущем и т. д.
Пример. Одновременно бросаются два игральных кубика. Какова вероятность того, что
на двух кубиках выпадут шестёрки? Всего возможно 36 различных комбинаций, рас-
пределение естественно считать равномерным (кубики «честные»), значит вероятность
1
двух шестёрок равна 36 .
99 / 907
2.1.7. Дискретная вероятность (2/7)
Отступление. Вероятность — весьма общее понятие, которое изучается в специальном разделе
математики — теории вероятности. Теория вероятности тесно связана с другими разделами ма-
тематики: математической статистикой, теорией игр, теорией меры и др. Также теория вероятно-
сти нашла множество приложений в физике, экономике и биологии. Здесь используется упрощён-
ное понятие вероятности, достаточное для проведения комбинаторных вычислений. В настоящее
время чаще употребляется термин теория вероятностей, подобный терминам теория множеств,
теория графов и так далее. Такое словоупотребление подчёркивает однородность класса объек-
тов, свойства которых изучаются в данной теории. Мы же используем несколько устаревший тер-
мин, чтобы подчеркнуть, что рассматриваем только одно свойство — вероятность, не претендуя
на охват всего класса объектов, могущих обладать этим свойством.
Рассмотрим множество A ⊆ X . Если на X задано распределение
P вероятности, то веро-
ятностью подмножества A называется число, равное P(a).
a∈A
Из определения ясно, что P(∅) = 0, P(X) = 1, ∀A 0 6 P(A) 6 1.
Пример. В игральной колоде 52 карты четырёх мастей, в каждой из которых по 13 карт
1 1 1 1 4 1
разного достоинства. Вероятность быть тузом равна 52 + 52 + 52 + 52 = 52 = 13 .
100 / 907
2.1.7. Дискретная вероятность (3/7)

Стоит заметить, что в случае равномерного распределения вычисление вероятности под-


|A|
множества A упрощается: P(A) = .
|X|
Пример. В игре «покер» комбинация из пяти карт одинаковой масти называется «флеш».
Используется обычная игровая колода из 52-ух карт. Какова вероятность комбинации
«флеш»? Множество X содержит в качестве элементов всевозможные комбинации из пя-
ти карт, порядок которых значения не имеет. Количество таких элементов равно C(52, 5).
В одной масти 13 карт, из которых в комбинацию входят пять любых. Мастей всего 4, зна-
чит количество элементов в множестве A равно 4 · C(13, 5). Таким образом, вероятность
4·C(13,5) 33
комбинации «флеш» равна C(52,5) = 16660 ≈ 0, 002.

101 / 907
2.1.7. Дискретная вероятность (4/7)
Случайная величина — это тотальная функция ϕ : X → R, причём на множестве X зада-
ны вероятности элементов. Математическим ожиданием случайной величины при рас-
пределении вероятности PX = (p1 , . . . , pn ) называется число
n
X
Eϕ = ϕ(xk )pk = ϕ(x1 )p1 + . . . + ϕ(xn )pn .
k=1

Легко видеть, что среднее арифметическое — частный случай математического ожида-


ния для равномерного распределения. Поэтому математическое ожидание можно на-
звать средним значением случайной величины ϕ(X).
Замечание. Если элементы множества X являются числами, то в качестве функции ϕ мо-
жет рассматриваться
Pn тождественная функция. Формула математического ожидания при-
мет вид k=1 xk pk .
P6X = {1, 12, 3, 4, 5, 6}. Математическое ожидание
Пример. При броске игрального кубика
1
числа очков на верхней грани E = 6 k=1 xk = 6 (1 + 2 + 3 + 4 + 5 + 6) = 3, 5. В среднем
при одном подбрасывании кубика выпадает 3,5 очка.
102 / 907
2.1.7. Дискретная вероятность (5/7)
Замечание. Математическое ожидание — одно из важнейших понятий в теории вероят-
ности. Имеет важное прикладное значение при оценке рисков, при торговле на финан-
совых рынках и во многих других областях.
Пример. В казино предлагают сыграть в игру: игрок ставит некоторую сумму на число от
1 до 6, а потом бросает три игральных кубика. Если загаданное число не выпадет ни разу,
то его ставка сгорает. Если выпадет — ставку возвращают, а казино платит поставленную
сумму столько раз, сколько раз выпало число. Рассмотрим средний выигрыш при ставке в
1 доллар. Игрок может потерять доллар или выиграть 1, 2 или 3 доллара. Тогда множество
X = {−1, 1, 2, 3}, а математическое ожидание:

125 C(3, 1) · 52 C(3, 2) · 5 1 17


− + +2· +3· =− ≈ −0, 08
216 216 216 216 216
В среднем при каждой ставке в один доллар игрок потеряет восемь центов.

103 / 907
2.1.7. Дискретная вероятность (6/7)
К подмножества множества X можно применять обычные операции: пересечение, объ-
единение и другие.
Теорема. Если A, B ⊂ X , то P(A ∪ B) = P(A) + P(B) − P(A ∩ B).
Доказательство. Вероятности тех элементов, которые входят в пересечение, надобно
включить в сумму только один раз.
Def P(A ∩ B)
По Колмогорову условная вероятность P(A|B) определяется так: P(A|B) = .
P(B)
Отступление. Существует и с успехом используется большое количество других определений, ин-
терпретаций и трактовок понятия условной вероятности и связанных с ним понятий априорной
и апостериорной вероятности. Все эти вариации оправданы и даже необходимы при использо-
вании вероятностных подходов в конкретных предметных областях. Здесь мы ограничиваемся
простейшей возможной интерпретацией, которой, однако, достаточно, чтобы вывести формулы,
необходимые для комбинаторных вычислений.
Замечание. Множества, входящие в определение операции условной вероятности,
равноправны: P(B|A) = P(A ∩ B)/P(A).
104 / 907
2.1.7. Дискретная вероятность (7/7)
Теорема. [формула Байеса] P(A|B)P(B) = P(B|A)P(A).
Доказательство. P(A|B)P(B) = P(A ∩ B) = P(B|A)P(A).
Замечание. Формулу Байеса часто записывают в несимметричной форме

P(B|A)P(A)
P(A|B) =
P(B)
и называют A событием, а B — гипотезой. На применение формулы для вычислений это
не влияет.
Теорема. [формула полной вероятности] Если семейство множеств B1 , . . . , Bn является
рабиением множества X , то есть, если B1 ∪ · · · ∪ Bn = X и i 6= j =⇒ Bi ∩ Bj = ∅, то
n
X
P(A) = P(A|Bi )P(Bi ).
i=1
Pn Pn
Доказательство. P(A) = i=1 P(A ∩ Bi ) = i=1 P(A|Bi )P(Bi ).
105 / 907
2.2. Перестановки
Для вычисления ко-
личества перестано-
вок в п. 2.1.4 установ-
лена очень простая
формула: P (n) = n!.
Применяя эту форму-
лу при решении прак-
тических задач, не
следует забывать, что
факториал — это быст-
ро растущая функция,
в частности, факто-
риал растёт быстрее
экспоненты.

106 / 907
2.2.1. Циклы в перестановках (1/3)
Взаимно-однозначные функции на отрезках натурального ряда (перестановки) удобно
задавать таблицами подстановки. В таблице подстановки нижняя строка (значения функ-
ции) является перестановкой элементов верхней строки (значения аргумента). Если при-
нять соглашение, что элементы верхней строки (аргументы) всегда располагаются в опре-
делённом порядке (например, по возрастанию), то верхнюю строку можно не указы-
вать — подстановка определяется одной нижней строкой. Таким образом, подстановки
(таблицы) взаимно-однозначно соответствуют перестановкам (функциям).
Перестановка f (и соответствующая ей подстановка) элементов 1, . . . , n обозначается
(a1 , . . . , an ), где ai = f (i) и a1 , . . . , an — все различные числа из диапазона 1..n. Если
f (i) = i, то i называется неподвижной точкой перестановки, если же f (i) 6= i, то i назы-
вается подвижной точкой перестановки.
Если задана перестановка f , то циклом называется последовательность элементов
x1 , . . . , xk , такая, что f (xi ) = xi+1 при 1 6 i < k и f (xk ) = x1 . Множество элементов,
входящих в цикл, называется орбитой.
107 / 907
2.2.1. Циклы в перестановках (2/3)
Количество элементов в цикле называется длиной цикла. Цикл длины 1 называется три-
виальным циклом или петлёй. Цикл длины 2 называется транспозицией. Иногда пере-
становки удобно представлять в графической форме, проводя стрелки от каждого эле-
мента x к элементу f (x).
Замечание. Из графического представления перестановки наглядно видно происхожде-
ние термина «цикл».
Перестановка длины n, которая содержит ровно один нетривиальный цикл длины k , на-
зывается циклической (перестановкой длины k ), k 6 n. В циклической перестановке все
элементы цикла — подвижные точки, а остальные элементы — неподвижные точки.
Пример. В перестановке (2, 3, 1, 4, 5) точки 1, 2, 3 — подвижные точки, и образуют цикл
(1, 2, 3), а точки 4 и 5 — неподвижные точки. Эта перестановка циклическая.
Перестановка может содержать несколько нетривиальных циклов.
Лемма. Орбиты различных циклов в перестановке не пересекаются.
Доказательство. От противного. Допустим, существует элемент x, который входит в два
цикла. Тогда «следующий» элемент f (x) также входит в оба цикла и т. д. Ввиду конечности
циклов, заключаем, что циклы совпадают. 108 / 907
2.2.1. Циклы в перестановках (3/3)
Теорема. Всякая неединичная перестановка представляется как суперпозиция цикличе-
ских перестановок с непересекающимися орбитами, причём представление единственно.
Доказательство. [ существование ] Построим требуемое разложение: возьмём произволь-
ный элемент и выделим орбиту, которой он принадлежит. Построим циклическую пере-
становку с циклом, соответствующим выделенной орбите. Затем возьмём любой элемент
из оставшихся (не вошедших в найденные орбиты), и повторим выделение орбиты, соот-
ветствующей элементу. Ввиду конечности перестановок процесс закончится.
[ единственность ] Допустим, что существует такая перестановка σ , что ее разложение на
суперпозицию непересекающихся циклов не единственно, т. е. σ = σ1 . . . σm = τ1 . . . τn .
Тогда выберем некоторые циклы σi , τj (i, j ∈ N, i 6 m, j 6 n) такие, что для любого x,
являющегося подвижной точкой, было выполнено σi (x) = τj (x) (такие i, j обязательно
существуют, иначе σ(x) 6= σ(x) — противоречие). Тогда σi (x) = τj (x), σi2 (x) = τj2 (x),
. . . , σis (x) = τjs (x) = x. Повторяя рассуждение для всех оставшихся циклов в разложе-
нии перестановки, убеждаемся, что m = n и разложение перестановки как суперпози-
цию непересекающихся циклических перестановок единственно вплоть до порядка при-
менения циклических перестановок. 109 / 907
2.2.2. Инверсии
Если в перестановке f = (a1 , . . . , an ) для элементов ai и aj имеет место неравенство
ai > aj при i < j , то пара (ai , aj ) называется инверсией. Обозначим I(f ) — число инвер-
сий в перестановке f .
Теорема. Произвольную перестановку f можно представить в виде суперпозиции I(f )
транспозиций соседних элементов.
Доказательство. Пусть f = (a1 , . . . , 1, . . . , an ). Переставим 1 на первое место, меняя её
местами с соседними слева элементами. Обозначим последовательность этих транспо-
зиций через t1 . При этом все инверсии (и только они), в которых участвовала 1, пропа-
дут. Затем переставим 2 на второе место и т. д. Таким образом, f ◦ t1 ◦ . . . ◦ tn = e и по
−1
свойству группы f = t−1n ◦ . . . ◦ t1 , причём |t1 | + |t2 | + . . . + |tn | = I(f ).

Рассмотрим входную последовательность, состоящую из n элементов: (a1 , a2 , . . . , an ).


Задача сортировки состоит в поиске такой перестановки (b1 , b2 , . . . , bn ) входной после-
довательности, что: ∀ i ∈ 1..n − 1 (bi 6 bi+1 ).
Следствие. Всякая сортировка может быть выполнена перестановкой соседних элемен-
тов.
110 / 907
2.2.3. Генерация перестановок (1/5)
На множестве перестановок естественным образом можно определить порядок на осно-
ве упорядоченности элементов. А именно, говорят, что перестановка (a1 , . . . , an ) лекси-
кографически предшествует перестановке (b1 , . . . , bn ), если

∃ k 6 n (ak < bk & ∀ i < k (ai = bi )) .


Аналогично, говорят, что перестановка (a1 , . . . , an ) антилексикографически предшеству-
ет перестановке (b1 , . . . , bn ), если ∃ k 6 n (ak > bk & ∀ i > k (ai = bi )).
Следующий алгоритм генерирует все перестановки элементов 1, . . . , n в антилексико-
графическом порядке, при этом массив P : array [1..n] of 1..n является глобальным и
предназначен для хранения перестановок.
Вход: n — количество элементов
Выход: последовательность перестановок элементов 1, . . . , n в антилексикографическом
порядке.
for i from 1 to n do P [i] ← i end for //инициализация
Antilex(n) //вызов рекурсивной процедуры Antilex
111 / 907
2.2.3. Генерация перестановок (2/5)
Генерация перестановок выполняется рекурсивной процедурой Antilex.
Вход: m — параметр процедуры — количество первых элементов массива P , для кото-
рых генерируются перестановки.
Выход: последовательность перестановок 1, . . . , m в антилексикографическом порядке.
if m = 1 then
yield P //очередная перестановка
else
for i from 1 to m do
Antilex(m − 1) //рекурсивный вызов
if i < m then
P [i] ↔ P [m] //следующий элемент
Reverse(m − 1) //изменение порядка элементов
end if
end for
end if
112 / 907
2.2.3. Генерация перестановок (3/5)
Вспомогательная процедура Reverse переставляет элементы заданного отрезка массива
P в обратном порядке.
Вход: k — номер элемента, задающий отрезок массива P , подлежащий перестановке
в обратном порядке.
Выход: первые k элементов массива P переставлены в обратном порядке
j ← 1 //нижняя граница обращаемого диапазона
while j < k do
P [j] ↔ P [k] //меняем местами элементы
j ← j + 1 //увеличиваем нижнюю границу
k ← k − 1 //уменьшаем верхнюю границу
end while
Пример. Последовательность перестановок в антилексикографическом порядке
для n = 3: (1, 2, 3), (2, 1, 3), (1, 3, 2), (3, 1, 2), (2, 3, 1), (3, 2, 1).

113 / 907
2.2.3. Генерация перестановок (4/5)

Обоснование. Заметим, что искомую последовательность перестановок n элементов мож-


но получить из последовательности перестановок n − 1 элементов следующим образом.
Нужно выписать n блоков по (n − 1)! перестановок в каждом, соответствующих после-
довательности перестановок n − 1 элементов в антилексикографическом порядке. Затем
ко всем перестановкам в первом блоке нужно приписать справа n, во втором — n − 1 и
т. д. в убывающем порядке. Затем в каждом из блоков (кроме первого), к перестановкам
которого справа приписан элемент i, нужно в перестановках блока заменить все вхож-
дения элемента i на элемент n. В полученной последовательности все перестановки раз-
личны, и их n(n − 1)! = n!, то есть перечислены все перестановки. При этом антилекси-
кографический порядок соблюдён для последовательностей внутри одного блока, пото-
му что этот порядок был соблюдён в исходной последовательности, а для последователь-
ностей на границах двух блоков — потому что происходит уменьшение самого правого
элемента.

114 / 907
2.2.3. Генерация перестановок (5/5)

Обоснование. (Окончание) Обратимся к процедуре Antilex — легко видеть, что в ней реа-
лизовано указанное построение. В основном цикле сначала строится очередной блок —
последовательность перестановок первых m − 1 элементов массива P (при этом эле-
менты P [m], . . . , P [n] остаются неизменными). Затем элемент P [m] меняется местами с
очередным элементом P [i]. Вызов вспомогательной процедуры Reverse необходим, по-
скольку последняя перестановка в блоке является обращением первой, а для генерации
следующего блока на очередном шаге цикла нужно восстановить исходный порядок.

115 / 907
2.2.4. Двойные факториалы (1/2)
Содержание этого параграфа не имеет отношения к основной теме раздела — переста-
новкам и включено в раздел по сходству обозначений и с целью привести две форму-
лы, которые иногда используются в практических комбинаторных расчётах и требуются
в последующих разделах.
Двойным факториалом натурального числа n (обозначается n!!) называется произведе-
ние числа n и всех меньших натуральных чисел той же чётности.
Пример. 10!! = 10 · 8 · 6 · 4 · 2 = 3840.
Теорема.
1. (2k)!! = 2k · k!.
(2k + 1)!
2. (2k + 1)!! = .
2k · k!
Доказательство.
[ 1 ] (2k)!! = 2 · 4 · · · · · (2k − 2) · 2k = (2 · 1) · (2 · 2) · · · · · (2 · (k − 1)) · (2 · k) =
= (2 · 2 · · · · · 2 · 2) ·(1 · 2 · · · · · ·(k − 1) · k) = 2k · k!.
| {z }
k раз
[ 2 ] Достаточно заметить, что (2k + 1)! = (2k + 1)!!(2k)!!.
116 / 907
2.2.4. Двойные факториалы (2/2)
Def
По определению 0!! = 1.
Перестановками Стирлинга называются перестановки набора чисел
{1, 1, 2, 2, . . . , k, k} такие, что между любыми двумя равными числами могут находиться
лишь бо́льшие по значению.
Пример. (1, 2, 3, 3, 2, 1, 4, 4).
Теорема.Число перестановок Стирлинга равно (2k − 1)!!.
Доказательство. База: при k = 1 существует единственная перестановка 1, 1, (2k−1)!! = 1.
Индукционный переход: пусть число перестановок Стирлинга 1, 1, 2, 2, . . . , k − 1, k − 1
равно (2(k − 1) − 1)!! = (2k − 3)!!. Так как в перестановке нет чисел бо́льших k , то
элементы k, k могут стоять только рядом. Мы можем их отбросить, получив перестановку
с числами 1..k − 1, учитывая, что у нас существует 2k − 1 место, куда можно поставить
пару k, k . Добавив k, k получим (2k − 3)!! · (2k − 1) = (2k − 1)!!.

117 / 907
2.3. Биномиальные коэффициенты

Число сочетаний C(m, n) — это число различных n-элементных подмножеств


m-элементного множества. Числа C(m, n) обладают целым рядом свойств, рассматри-
ваемых в этом разделе, которые оказываются очень полезными при решении различных
комбинаторных задач.

118 / 907
2.3.1. Свойства биномиальных коэффициентов (1/5)
Основная формула для числа сочетаний

m!
C(m, n) =
n!(m − n)!
позволяет получить следующие элементарные тождества.
Теорема. [1]
1. C(m, n) = C(m, m − n).
2. C(m, n) = C(m − 1, n) + C(m − 1, n − 1).
3. C(n, i)C(i, m) = C(n, m)C(n − m, i − m).
m
4. C(m, n) = n
C(m − 1, n − 1).
Доказательство.
m! m!
[ 1 ] C(m, m − n) = = = C(m, n).
(m − n)! (m − (m − n))! (m − n)! n!
119 / 907
2.3.1. Свойства биномиальных коэффициентов (2/5)
Доказательство.
[ 2 ] C(m − 1, n) + C(m − 1, n − 1) =
(m − 1)! (m − 1)!
= + =
n!(m − n − 1)! (n − 1)! (m − 1 − (n − 1))!
(m − 1)! (m − 1)!
= + =
n(n − 1)! (m − n − 1)! (n − 1)! (m − n)(m − n − 1)!
(m − n)(m − 1)! + n(m − 1)! (m − n + n)(m − 1)! m!
= = = = C(m, n).
n(n − 1)! (m − n)(m − n − 1)! n! (m − n)! n! (m − n)!
n! i! n!
[ 3 ] C(n, i)C(i, m) = = =
i!(n − i)! m!(i − m)! m!(i − m)!(n − i)!
n!(n − m)! n! (n − m)!
= = =
m!(i − m)!(n − i)!(n − m)! m!(n − m)! (i − m)!(n − i)!
= C(n, m)C(n − m, i − m).
m! m(m − 1)! m
[ 4 ] C(m, n) = = = C(m − 1, n − 1).
n!(m − n)! n(n − 1)!((m − 1) − (n − 1))! n
120 / 907
2.3.1. Свойства биномиальных коэффициентов (3/5)
Биномиальные коэффициенты обладают целым рядом других замечательных свойств.
m
nC(m, n) = m2m−1 .
P
Теорема. [2]
n=0
Доказательство. Рассмотрим следующую последовательность, составленную из чисел
1, . . . , m. Сначала выписаны все подмножества длины 0, потом все подмножества длины
1 и т. д. Имеется C(m, n) подмножеств мощности Pmn, и каждое из них имеет длину n, та-
ким образом, всего в этой последовательности n=0 nC(m, n) чисел. С другой стороны,
каждое число x входит в эту последовательность 2|{1,...,m}\{x}| = 2m−1 раз, а всего чисел
m.
k
P
Теорема. [3] C(m + n, k) = C(m, i)C(n, k − i).
i=0
Доказательство. C(n + m, k) — это число способов выбрать k шаров из m + n шаров.
Шары можно выбирать в два приема: сначала выбрать i шаров из первых m шаров, а
затем выбрать недостающие k − i шаров
Pk из оставшихся n шаров. Отсюда общее число
способов выбрать k шаров составляет i=0 C(m, i)C(n, k − i).
Замечание. Последнее свойство известно как тождество Коши.
121 / 907
2.3.1. Свойства
m
биномиальных коэффициентов (4/5)
(C(m, n))2 = C(2m, m).
P
Теорема. [4]
n=0
Доказательство. Рассмотрим множество из 2m объектов. Число способов выбрать из него
m объектов равно C(2m, m). Разобьём это множество на 2 равномощных подмножества.
Теперь применим тождество Коши при n = m, k = m. Тогда общее число способов
m
(C(m, n))2 в силу того, что C(m, n) = C(m, m − n).
P
выбрать m предметов будет
n=0
n
P
Теорема. [5] C(m, n) = C(m − (k + 1), n − k)).
k=0
Доказательство. Рассмотрим множество из m элементов и представление подмножеств
этого множества с помощью битовых шкал, п. 1.3.1. Число n-элементных подмножеств
равно C(m, n). При этом число битовых шкал, в которых первый слева ноль стоит в раз-
ряде k + 1, равно C(m − (k + 1), n − k), поскольку в таких шкалах все разряды определе-
ны до разряда k + 1 включительно, и остаётся выбрать n − k разрядов для размещения
единиц среди m − (k + 1) неопределённых разрядов. В битовой шкале для n-элемент-
ного подмножества ровно m − n нулей, значит первый слева ноль может находиться в
разряде с номером из диапазона 1..(n + 1). 122 / 907
2.3.1. Свойства биномиальных коэффициентов (5/5)
Отступление. Указанные свойства биномиальных коэффициентов нетрудно доказать, проводя ал-
гебраические выкладки обычным образом. Например, теорему 2 можно получить так:
m m m
X X nm! X m(m − 1)!
nC(m, n) = = =
(m − n)!n! (m − n)!(n − 1)!
n=0 n=1 n=1
m−1 m−1
X (m − 1)! X
=m =m C(m − 1, n) = m2m−1 .
(m − n − 1)!n!
n=0 n=0
В доказательстве использованы рассуждения «в комбинаторном духе», чтобы проиллюстрировать
«неалгебраические» способы решения комбинаторных задач.
Иногда наблюдается и обратный эффект: комбинаторные рассуждения оказываются короче да-
же простейших алгебраических выкладок. Например, теорему 1 пункт 2 можно получить следую-
щим рассуждением. Зафиксируем произвольный элемент x. Тогда количество способов выбрать
n элементов из m элементов, то есть число C(m, n), складывается из количества способов вы-
брать n элементов, включающих элемент x, то есть числа C(m − 1, n − 1), и количества способов
выбрать n элементов не включающих элемент x, то есть C(m − 1, n).
123 / 907
2.3.2. Бином Ньютона (1/2)
Числа сочетаний C(m, n) называются также биномиальными коэффициентами. Смысл
этого названия устанавливается следующей теоремой, известной также как формула би-
нома Ньютона.
m
X
m
Теорема. (x + y) = C(m, n)xn y m−n .
n=0
Доказательство. По индукции. База, m = 1: (x + y)1 = x + y = 1x1 y 0 + 1x0 y 1 =
1
= C(1, 1)x1 y 0 + C(1, 0)x0 y 1 = C(1, n)xn y 1−n .
P
n=0
Индукционный переход:
m−1
X
m m−1
(x + y) = (x + y)(x + y) = (x + y) C(m − 1, n)xn y m−n−1 =
n=0
m−1
X m−1
X
= xC(m − 1, n)xn y m−n−1 + yC(m − 1, n)xn y m−n−1 =
n=0 n=0

124 / 907
2.3.2. Бином Ньютона (2/2)
m−1
X m−1
X
n+1 m−n−1
= C(m − 1, n)x y + C(m − 1, n)xn y m−n =
n=0 n=0
Xm m−1
X
= C(m − 1, n − 1)xn y m−n + C(m − 1, n)xn y m−n =
n=1 n=0
m−1
X
= C(m − 1, 0)x0 y m + (C(m − 1, n − 1) + C(m − 1, n))xn y m−n +
n=1
m
X
m 0
+ C(m − 1, m − 1)x y = C(m, n)xn y m−n .
Pm n=0
Следствие. n=0 C(m, n) = 2m .
Доказательство.
Pm Достаточно взять x = y = 1.
n
Следствие. n=0 (−1) C(m, n) = 0.
Доказательство. Достаточно взять x = −1, y = 1.
125 / 907
2.3.3. Треугольник Паскаля (1/7)
Из второй формулы теоремы п. 2.3.1 вытекает эффективный способ рекуррентного вы-
числения значений биномиальных коэффициентов, который можно представить в гра-
фической форме, известной как треугольник Паскаля

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . . . . .

В этом равнобедренном треугольнике каждое число (кроме единиц на боковых сторонах)


является суммой двух чисел, стоящих над ним. Число сочетаний C(m, n) находится в
(m + 1)-м ряду на (n + 1)-м месте.

126 / 907
2.3.3. Треугольник Паскаля (2/7)

Рассмотрим вопрос реализации процесса вычислений биномиальных коэффициентов.


Если просто по рекуррентной формуле C(m, n) = C(m − 1, n) + C(m − 1, n − 1) со-
ставить рекурсивную процедуру, то можно столкнуться с переполнением стека вызовов
из-за большой глубины рекурсии. Кроме того, прямая рекурсивная реализация сугубо
неэффективна, поскольку при рекурсивной реализации один и тот же биномиальный ко-
эффициент будет вычисляться несколько раз. Например,

C(5, 3) = C(4, 3) + C(4, 2) = C(3, 3) + C(3, 2) + C(3, 2) + C(3, 1) = . . . .

Для случая рекурсивного вычисления C(m, n), получаем 2n сложений, так как на каждом
шаге рекурсии количество вычислений увеличивается в два раза, а всего шагов n. А для
нерекурсивного метода имеем n сложений, то есть рекурсивный метод экспоненциально
хуже нерекурсивного.

127 / 907
2.3.3. Треугольник Паскаля (3/7)

Замечательные свойства треугольника Паскаля позволяют организовать процесс вычис-


лений намного эффективнее. Представим треугольник в другой форме, повернув его на
45 градусов против часовой стрелки. Получится бесконечная матрица, в которой верх-
няя строка и левый столбец содержат единицы, а каждый внутренний элемент является
суммой двух элементов: соседнего слева и соседнего сверху.

1 1 1 1 1 1
1 2 3 4 5
1 3 6 10
1 4 10
1 5
1

128 / 907
2.3.3. Треугольник Паскаля (4/7)
Вход: целые неотрицательные числа m и n
Выход: число сочетаний C(m, n)
if n = 1 ∨ m = n + 1 then return m end if //граничные случаи
if n > m then return 0 end if //по определению
if n = m ∨ n = 0 then return 1 end if //граничные случаи
if n > m − n then n ← m − n end if //в силу симметрии
A : array[0..n] of int //рабочий массив
for i from 0 to n do
A[i] ← 1 //первая строка треугольника Паскаля
end for
for i from 1 to m − n do
for j from 1 to n do
A[j] ← A[j] + A[j − 1] //согласно рекуррентной формуле
end for
end for
return A[n] 129 / 907
2.3.3. Треугольник Паскаля (5/7)
Обоснование. Сначала в алгоритме проверяются граничные случаи, для которых значе-
ния известны заранее (п. 2.1.5). Значение C(m, n) находится в (m − n + 1)-ой строке на
(n + 1)-м месте. Весь треугольник хранить в памяти нет нужды, достаточно хранить толь-
ко одну строку. Первая строка содержит все единицы, а каждая следующая получается
перевычислением слева направо по формуле A[j] := A[j] + A[j − 1]. При этом в пра-
вой части оператора A[j] — это «старое» значение, то есть элемент из «верхней» стро-
ки, а A[j − 1] — только что вычисленное значение слева. Перевычислив таким образом
массив m − n раз, получаем C(m, n) = A[n].
Пример. Рассмотрим вычисление C(5, 2). Здесь m = 5, n = 2, m − n = 3.
i A
1 1 1
1 1 2 3
2 1 3 6
3 1 4 10

130 / 907
2.3.3. Треугольник Паскаля (6/7)

Замечание. В силу симметрии треугольника Паскаля можно было бы использовать массив


большей длины m − n + 1 и сократить количество повторений основного цикла по i.
Однако это не даёт сокращения вычислений: необходимое количество сложений остаётся
равным n(m − n).

131 / 907
2.3.3. Треугольник Паскаля (7/7)
Отступление. Для доказательства применимости и полезности приведённого алгоритма оценим
максимальные значения числа сочетаний, которые можно вычислить по основной формуле и по
алгоритму. Предположим, что используется 32-разрядная арифметика, беззнаковые целые числа,
максимально представимое число 232 − 1. При фиксированном m биномиальный коэффициент
C(m, n) имеет максимум для n = m/2. Найдём максимально допустимые C(m, n) и m, для
которых возможно вычисление. Для формулы это C(12, 6) = 924, поскольку вычислить m! уже не
представляется возможным при m > 12 для используемого представления чисел в компьютере.
Использование формулы

C(m, n) = ((m − n + 1) · (m − n + 2) · · · · · m)/(m − n)!

не приведёт к существенному расширению диапазона вычисляемых значений. A для приведён-


ного алгоритма максимальное m = 34, C(34, 17) = 2333606220. Если же варьировать n от 0 до
m, то получим максимальное значение C(222, 5) = 4294249674, что близко к 232 , то есть, к мак-
симальному представимому числу. Значит, алгоритм применим для гораздо более широкого на-
бора чисел m и n по сравнению с замкнутой формулой из параграфа 2.1.5, что делает его весьма
полезным.
132 / 907
2.3.4. Применение рекуррентного соотношения (1/5)
Использование рекуррентных соотношений является одним из основных приёмов орга-
низации эффективных вычислений как в комбинаторике, так и в других областях мате-
матики.
Замечание. Однопараметрическое рекуррентное соотношение ai = f (ai−1 ) позволяет
построить итеративный алгоритм вычисления чисел an без использования дополнитель-
ной памяти.
Построим однопараметрическое рекуррентное соотношение для вычисления биноми-
альных коэффициентов.
m−n+i
Положим a1 ← m − n + 1 и положим ai ← ai−1 , i = 2, 3, ..., n.
i
Лемма. В указанных обозначениях ai = C(m − n + i, i).
m−n+1
Доказательство. Действительно, a1 = m − n + 1 = = C(m − n + 1, 1),
1
m−n+2 m−n+2
a2 = a1 = C(m − n + 1, 1) = C(m − n + 2, 2) по пункту 4 теоре-
2 2
m m
мы п. 2.3.1, и так далее вплоть до an = an−1 = C(m − 1, n − 1) = C(m, n).
n n
133 / 907
2.3.4. Применение рекуррентного соотношения (2/5)
Замечание. Число ai при любом допустимом i — целое, поскольку является числом со-
четаний. Значит, мы можем в процессе вычислений смело осуществлять целочисленное
деление произведения величин (m − n + i)ai−1 на i.
Вход: целые неотрицательные числа m и n
Выход: число сочетаний C(m, n)
if n = 1 ∨ m = n + 1 then return m end if //граничные случаи
if n > m then return 0 end if //по определению
if n = m ∨ n = 0 then return 1 end if //граничные случаи
if n > m − n then n ← m − n end if //в силу симметрии
a ← m − n + 1 //первый элемент рекуррентной схемы
k ← m − n + 2 //для реализации рекуррентной схемы
for i from 2 to n do
a ← a div i ∗ k + a mod i ∗ k div i //рекуррентная схема
k←k + 1
end for
return a //последний элемент рекуррентной схемы: C(m, n) 134 / 907
2.3.4. Применение рекуррентного соотношения (3/5)
Обоснование. Формула a ← a div i ∗ k + a mod i ∗ k div i получается из следующих со-
ображений: представляем число ai−1 /i в виде неполного частного и остатка ai−1 = ti+r,
(ti + r)(m − n + i) r(m − n + i)
раскрываем скобки и получаем: ai = = t(m − n + i) + .
i i
В силу того, что числа ai целые, формула даёт правильный результат вне зависимости от
того, какая именно из величин произведения (m − n + i)ai−1 делится на i нацело.
Пример. Рассмотрим нахождение биномиального коэффициента C(6, 3).
Начальный элемент a1 = m − n + 1 = 4, k = 5, i = 2.
Первая итерация: a2 = 4 div 2 ∗ 5 + 4 mod 2 ∗ 5 div 2 = 2 ∗ 5 + 0 ∗ 2 = 10.
Вторая итерация: a3 = 10 div 3 ∗ 6 + 10 mod 3 ∗ 6 div 3 = 3 ∗ 6 + 1 ∗ 2 = 18 + 2 = 20.
Замечание. При вычислении числа ai растут, и промежуточные результаты их не превос-
ходят. Поэтому построенный алгоритм имеет такую же область определения и сохраняет
споcобность работать без переполнения, что и предыдущий алгоритм. Алгоритм содер-
жит один цикл и имеет трудоёмкость O(n).
На следующих двух слайдах проведено сравнение двух представленных алгоритмов вы-
числения биномиальных коэффициентов по области применения и по быстродействию.
135 / 907
2.3.4. Применение рекуррентного соотношения (4/5)

Области определения этих алгоритмов


совпадают. На рисунке представлена
область определения алгоритмов, то
есть множество пар (m, n) для кото-
рых величина C(m, n) может быть вы-
числена в 32-х разрядной арифметике.
На данном графике разными цветами,
в зависимости от величины, обозначе-
ны значения биномиальных коэффици-
ентов. В незакрашенной части значения
не могут быть вычислены. Участки, близ-
кие к границам (n = 0 или n = m), об-
резаны.

136 / 907
2.3.4. Применение рекуррентного соотношения (5/5)
Асимптотическая сложность первого алго-
ритма O(n ∗ (m − n)), а второго — O(n).
Но не стоит слепо доверять асимптотической
оценке — на реальное быстродействие алго-
ритмов влияют и другие факторы, в частно-
сти, скорость выполнения арифметических
операций. Известно, что, в сравнении со сло-
жением, операции умножения и особенно
деления являются более затратными по вре-
мени выполнения. График справа отража-
ет минимальное (из двух) время, затрачен-
ное для нахождения значений биномиаль-
ных коэффициентов. Черная кривая обозна-
чает границу, ниже которой квадратичный
алгоритм справляется с поставленной зада-
чей быстрее линейного!
137 / 907
2.3.5. Генерация подмножеств (1/4)

Элементы множества {1, . . . , m} естественным образом упорядочены. Поэтому каждое


n-элементное подмножество этого множества также можно рассматривать как упорядо-
ченную последовательность. На множестве таких последовательностей определяется лек-
сикографический порядок. Следующий простой алгоритм генерирует все n-элементные
подмножества m-элементного множества в лексикографическом порядке.
Вход: n — мощность подмножества, m — мощность множества, m > n > 0.
Выход: последовательность всех n-элементных подмножеств m-элементного множества
в лексикографическом порядке.
for i from 1 to m do
A[i] ← i //инициализация исходного множества
end for
if m = n return A[1..n] end if

138 / 907
2.3.5. Генерация подмножеств (2/4)
p ← n //p — номер первого изменяемого элемента
while p > 1 do
yield A[1..n] //очередное подмножество в первых n элементах массива A
if A[n] = m then
p ← p − 1 //нельзя увеличить последний элемент
else
p ← n //можно увеличить последний элемент
end if
if p > 1 then
for i from n downto p do
A[i] ← A[p] + i − p + 1 //увеличение элементов
end for
end if
end while
139 / 907
2.3.5. Генерация подмножеств (3/4)

Обоснование. Заметим, что в искомой последовательности n-элементных подмножеств


(каждое из которых является возрастающей последовательностью n чисел из диапазона
1..m) вслед за последовательностью (a1 , . . . , an ) следует последовательность
(b1 , . . . , bn ) = (a1 , . . . , ap−1 , ap + 1, ap + 2, . . . , ap + n − p + 1), где p — максимальный
индекс, для которого bn = ap + n − p + 1 6 m. Другими словами, следующая последова-
тельность получается из предыдущей заменой некоторого количества элементов в хво-
сте последовательности идущими подряд натуральными числами, но так, чтобы послед-
ний элемент не превосходил m, а первый изменяемый элемент был на 1 больше, чем
соответствующий элемент в предыдущей последовательности. Таким образом, индекс p,
начиная с которого следует изменить «хвост последовательности», определяется по зна-
чению элемента A[n]. Если A[n] < m, то следует изменять только A[n], и при этом p ← n.
Если же уже A[n] = m, то нужно уменьшать индекс p ← p − 1, увеличивая длину изменя-
емого хвоста.

140 / 907
2.3.5. Генерация подмножеств (4/4)

Пример. Последовательность n-элементных подмножеств m-элементного множества


в лексикографическом порядке для n = 3 и m = 4: (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4).
Отступление. Часто встречаются задачи, в которых требуется найти в некотором множестве эле-
мент, обладающий определёнными свойствами. При этом исследуемое множество может быть ве-
лико, а его элементы устроены достаточно сложно. Если неизвестно заранее, как именно следу-
ет искать элемент, то остаётся перебирать все элементы, пока не попадётся нужный (поэтому та-
кие задачи называют переборными). При решении переборных задач совсем необязательно и, как
правило, нецелесообразно строить всё исследуемое множество (пространство поиска) в явном
виде. Достаточно иметь итератор, перебирающий элементы множества в подходящем порядке.
Многие рассмотренные алгоритмы являются примерами таких итераторов для некоторых типич-
ных пространств поиска. Чтобы использовать эти алгоритмы в качестве итераторов при перебо-
ре, достаточно вставить вместо оператора yield проверку того, что очередной элемент является
искомым.

141 / 907
2.3.6. Расширенные биномиальные коэффициенты (1/3)
Сократим множитель (m − n)! в формуле для числа сочетаний:
m(m − 1) . . . (m − n + 1)
C(m, n) = .
n!
При определении чисел C(m, n) по смыслу комбинаторной конфигурации параметры на-
туральны: m, n ∈ N. Однако данная формула сохраняет свою вычислимость и при отри-
цательных значениях m, что позволяет ввести в рассмотрение расширенные биномиаль-
ные коэффициенты для m ∈ Z и n ∈ N0 .
Замечание. В качестве области определения расширенных биномиальных коэффициен-
тов можно рассматривать также рациональные m ∈ Q и вещественные значения m ∈ R.
Def Def
Пусть m ∈ Z, n ∈ N0 . Положим C(m, n) = 0 при 0 < m < n, и положим C(m, 0) = 1
Def
при n = 0. В остальных случаях C(m, n) = (m(m − 1) . . . (m − n + 1))/n!.
Def
Замечание. Можно доопределить C(m, n) = 0 при n < 0. Тогда ∀ m ∈ Z (C(m, 0) = 1)
и ∀ n ∈ Z, n 6= 0 (C(0, n) = 0). Однако расширение области определения n не имеет
существенного вычислительного смысла.
142 / 907
2.3.6. Расширенные биномиальные коэффициенты (2/3)
Теорема. C(m, n) = (−1)n C(n − m − 1, n).
Доказательство. Заметим, что m(m − 1) . . . (m − n + 1) =
= (−1)n (−m)(−m + 1) . . . (−m + n − 1) = (−1)n (n − m − 1) . . . (n − m − 1 − (n − 1)).
Откуда C(m, n) = m . . . (m − n + 1)/n! = (−1)n (n − m − 1) . . . (−m)/n! =
= (−1)n C(n − m − 1, n).
Доказанное тождество можно использовать для вычисления биномиальных коэффици-
ентов с отрицательным первым параметром по уже вычисленным значениям коэффици-
ентов с положительными параметрами.
Замечание. В теореме п. 2.3.1 при доказательстве тождества
C(m, n) = C(m − 1, n − 1) + C(m − 1, n)
нигде не использовано то обстоятельство, что число m > 0, что позволяет организовать
рекуррентное вычисление биномиальных коэффициентов и для случая m < 0.
Используя эти тождества, можно построить расширенный треугольник Паскаля, в кото-
ром положительные значения m распространяются вправо, отрицательные значения m
распространяются влево, а n распространяется вниз.
143 / 907
2.3.6. Расширенные биномиальные коэффициенты (3/3)
Поскольку при m = 0 имеем C(m, n) = 0, средний столбец, обозначенный n, содержит
сами значения n, подобно тому, как верхняя строка содержит значения m.
m
−4 −3 −2 −1 n
0 1 2 3 4
1 1 1 1 0 1 1 1 1 1
−4 −3 −2 −1 1 0 1 2 3 4
10 6 3 1 2 0 0 1 3 6
−20 −10 −4 −1 3 0 0 0 1 4
35 15 5 1 4 0 0 0 0 1

Пример. Расширенные биномиальные коэффициенты применяются для разложения дро-


бей в ряд:
∞ ∞
1 −m
X
n
X
= (1 + x) = C(−m, n)x = (−1)n C(m + n − 1, n)xk .
(1 + x)m n=0 n=0

144 / 907
2.3.7. Мультимножества и последовательности (1/2)
В п. 2.1.5 показано, что число n-элементных подмножеств m-элементного множества
равно C(m, n). Поскольку n-элементные подмножества — это n-элементные индикато-
ры, ясно, что число n-элементных индикаторов над m-элементным множеством также
равно C(m, n).
Общее число n-элементных мультимножеств [xn1 1 , . . . , xnmm ], в которых n1 + · · · + nm = n,
над m-элементным множеством X = {x1 , . . . , xm } нетрудно определить, если заметить,
что это число способов разложить n мячей по m ящикам, то есть число сочетаний с по-
вторениями V (m, n) = C(n + m − 1, n).
Пусть задано множество X = {x1 , . . . , xm } и последовательность Y = (y1 , . . . , yn ), где
∀ i (yi ∈ X), причём в последовательности Y элемент xi встречается ni раз. Тогда муль-
тимножество X b = [xn1 1 , . . . , xnm ] называется составом последовательности Y . Ясно, что
m
состав любой последовательности определяется однозначно, но разные последователь-
ности могут иметь один и тот же состав.
Пример. Пусть X = {1, 2, 3}, Y1 = {1, 2, 3, 2, 1}, Y2 = {1, 1, 2, 2, 3}. Тогда последователь-
ности Y1 и Y2 имеют один и тот же состав X b = [12 , 22 , 31 ].
145 / 907
2.3.7. Мультимножества и последовательности (2/2)
Отступление. Из органической химии известно, что существуют различные вещества, имеющие
один и тот же химический состав. Они называются изомерами.
Очевидно, что все последовательности над множеством X = {x1 , . . . , xm }, имеющие
b = [xn1 1 , . . . , xnm ], имеют одну и ту же длину n = n1 + · · · + nm .
один и тот же состав X m
Обозначим число последовательностей одного состава C(n; n1 , . . . , nm ).
n!
Теорема. C(n; n1 , . . . , nm ) = .
n 1 ! . . . nm !
Доказательство. Рассмотрим мультимножество X b = [xn1 1 , . . . , xnmm ], которое можно за-
писать в форме последовательности x1 , . . . , x1 , x2 , . . . , x2 , . . . , xm , . . . , xm , где элемент
xi встречается ni раз. Ясно, что все последовательности одного состава X b получаются
из указанной последовательности перестановкой элементов. При этом если переставля-
ются одинаковые элементы, например, xi , то получается та же самая последовательность.
Таких перестановок ni !. Таким образом, общее число перестановок n1 ! . . . nm !C(n; n1 , . . . , n
С другой стороны, число перестановок n элементов равно n!.
146 / 907
2.3.8. Мультиномиальные коэффициенты (1/3)

Числа C(n; n1 , . . . , nm ) встречаются в практических задачах довольно часто, поскольку


обобщают случай индикаторов, которые описываются биномиальными коэффициентами,
на случай произвольных мультимножеств. В частности, справедлива формула, обобщаю-
щая формулу бинома Ньютона, в которой участвуют числа C(n; n1 , . . . , nm ), поэтому их
иногда называют мультиномиальными X коэффициентами.
Теорема. (x1 + . . . + xm ) = n
C(n; n1 , . . . , nm )xn1 1 · · · xnmm .
n1 +...+nm =n
Доказательство. Индукция по m. База: при m = 2 по формуле бинома Ньютона имеем
n n
X X n! X n! n1 n2
(x1 + x2 )n = C(n, i)xi1 xn−i
2 = xi1 xn−i
2 = x1 x2 . Пусть те-
i=0
i!(n − i)! n +n =n
n1 !n 2 !
Xi=0 1 2
n
перь (x1 + . . . + xm−1 ) =n
C(n; n1 , . . . , nm−1 )xn1 1 m−1
· · · xm−1 .
n1 +...+nm−1 =n

147 / 907
2.3.8. Мультиномиальные коэффициенты (2/3)

n
Доказательство. (Продолжение) Рассмотрим (x1 + . . . + xm ) . Имеем (x1 + . . . + xm )n =
n
X
= ((x1 + . . . + xm−1 ) + xm )n = C(n, i)(x1 + . . . + xm−1 )i xm n−i
=
 i=0 
n
X n! X i! nm−1  n−i
=  xn1 1 · · · xm−1 xm =
i=0
i!(n − i)! n +...+n =i
n 1 ! · · · n m−1 !
1 m−1
n
X X n!i! nm−1 n−i
= xn1 1 · · · xm−1 xm =
i=0 n1 +...+nm−1 =i
i!(n − i)!n1 ! · · · n m−1 !
X n! nm−1 nm
= xn1 1 · · · xm−1 xm ,
n1 +...+nm−1 +nm
n ! · · · nm−1 !nm !
=n 1
где nm ← n − i.

148 / 907
2.3.8. Мультиномиальные коэффициенты (3/3)
X n!
Следствие. = mn .
n1 +...+nm
n
=n 1
! · · ·!n m !
X n!
Доказательство. mn = (1 . . + 1})n =
| + .{z 1n1 . . . 1nm =
n1 +...+nm
n ! · · ·!nm !
=n 1
m раз
X n!
= .
n1 +···+nm =n
n 1 ! . . .!n m !
Пример. При игре в преферанс трём играющим сдаётся по 10 карт из 32 карт и 2 карты
остаются в «прикупе». Сколько существует различных раскладов?

32!
C(32; 10, 10, 10, 2) = = 2 7 5 3 2 9 4 4 0 8 5 0 4 6 4 0.
10!10!10!2!

149 / 907
2.3.9. Биномиальная система счисления (1/3)
k-биномиальной системой счисления называется непозиционная система счисления, где
каждое натуральное число n представляется в виде:
k
X
n = C(b1 , 1) + C(b2 , 2) + · · · + C(bk , k) = C(bi , i), k ∈ N, 0 6 b1 < b2 < · · · < bk .
i=1

Пример. Пусть k = 2.
1 = C(0, 1) + C(2, 2) = 0 + 1
2 = C(1, 1) + C(2, 2) = 1 + 1
3 = C(0, 1) + C(3, 2) = 0 + 3
4 = C(1, 1) + C(3, 2) = 1 + 3
5 = C(2, 1) + C(3, 2) = 2 + 3
6 = C(0, 1) + C(4, 2) = 0 + 6
и т. д.
Замечание. По определению, C(p, q) = 0 при целых p и q таких, что 0 6 p < q .
150 / 907
2.3.9. Биномиальная система счисления (2/3)
Покажем состоятельность данной системы счисления.
Теорема. При заданном натуральном значении k для любого натурального числа n суще-
ствуют и единственны натуральные числа b1 , . . . , bk , такие что 0 6 b1 < b2 < · · · < bk
k
P
и n = C(b1 , 1) + C(b2 , 2) + · · · + C(bk , k) = C(bi , i).
i=1
Доказательство.
[ Существование ] Всякой паре натуральных чисел n и k сопоставим набор
0 6 b1 < b2 < · · · < bk строго возрастающих натуральных чисел по следующему правилу.
Сначала выберем bk > 0 так, чтобы удовлетворялись неравенства
C(bk , k) 6 n < C(bk + 1, k). Такой выбор однозначен, потому что по основному рекур-
рентному соотношению C(bk + 1, k) = C(bk , k) + C(bk , k − 1) и существует единственное
число bk : C(bk , k) 6 n < C(bk , k) + C(bk , k − 1). Затем определим bk−1 :
C(bk−1 , k − 1) 6 n − C(bk , k) < C(bk−1 + 1, k − 1). При таких условиях обязательно
выполняется неравенство bk > bk−1 . Действительно, C(bk−1 , k − 1) 6 n − C(bk , k) <
< C(bk + 1, k) − C(bk , k) = C(bk , k − 1), откуда bk−1 < bk .
151 / 907
2.3.9. Биномиальная система счисления (3/3)
Доказательство. (Продолжение) Продолжая действовать подобным образом, определим
числа bk−2 , bk−3 , . . . , b1 . Имеем C(b1 , 1) 6 n − C(bk , k) − · · · − C(b2 , 2) < C(b1 + 1, 1).
Откуда n = C(b1 , 1) + C(b2 , 2) + · · · + C(bk , k). Таким образом, построили требуемый
набор чисел 0 6 b1 < b2 < · · · < bk , дающий искомое представление числа n.
[ Единственность ] Индукция по k . При k = 1 имеем C(n, 1) = n. Пусть для k − 1 пред-
ставление единственно и существует отличный от построенного набор натуральных чи-
сел 0 6 c1 < c2 < · · · < ck такой, что n = C(c1 , 1) + C(c2 , 2) + · · · + C(ck , k). В силу
условия на bk имеем ck 6 bk , причем равенство ck = bk противоречит предположению
индукции. Значит, ck 6 bk − 1, и имеем цепочку неравенств n − C(ck , k) >
> C(bk , k) − C(ck , k) > C(bk , k) − C(bk − 1, k) = C(bk − 1, k − 1) > C(ck , k − 1). С
другой стороны, в силу предположения индукции, представление числа n − C(bk , k) в
виде n = C(c1 , 1) + C(c2 , 2) + · · · + C(ck−1 , k − 1) единственно, причем n − C(ck , k) <
< C(ck−1 + 1, k − 1). Сравнивая два последних неравенства, приходим к противоречию
ck−1 + 1 > ck .

152 / 907
2.4. Разбиения

Разбиения не рассматривались среди типовых комбинаторных конфигураций в п. 2.1.1,


потому что получить для них явную формулу не так просто, как для остальных. В этом
разделе отмечаются основные свойства разбиений, а окончательные формулы приведе-
ны в п. 2.6.3.

153 / 907
2.4.1. Числа Стирлинга (1/3)
Пусть B = {B1 , . . . , Bn } — разбиение множества X из m элементов на n подмножеств:
n
[
Bi ⊂ X, Bi = X, Bi 6= ∅, Bi ∩ Bj = ∅ приi 6= j.
i=1

Подмножества Bi называются блоками разбиения.


Между разбиениями с непустыми блоками и отношениями эквивалентности существует
взаимно-однозначное соответствие (п. 1.7.1). Если E1 и E2 — два разбиения X , то говорят,
что разбиение E1 есть измельчение разбиения E2 , если каждый блок E2 есть объединение
блоков E1 . Измельчение является частичным порядком на множестве разбиений.
Число разбиений m-элементного множества на n блоков, или число способов разло-
жить m мячей по n неразличимым ящикам, называется числом Стирлинга и обознача-
Def Def
ется S(m, n). По определению положим S(m, m) = 1 при m > 0, S(m, 0) = 0 при
Def
m > 0, S(m, n) = 0 при n > m.
154 / 907
2.4.1. Числа Стирлинга (2/3)

Теорема. S(m, n) = S(m − 1, n − 1) + nS(m − 1, n).


Доказательство. Пусть B — множество всех разбиений множества M ←{1, . . . , m} на n
блоков. Положим

B1 ← {X ∈ B | ∃ B ∈ X (B = {m})} , B2 ← {X ∈ B | ¬∃ B ∈ X (B = {m})} ,

то есть в B1 входят разбиения, в которых элемент m образует отдельный блок, а в B2 —


все остальные разбиения. Заметим, что B2 = {X ∈ B | m ∈ X =⇒ |X| > 1}. Тогда
B = B1 ∪ B2 , B1 ∩ B2 = ∅. Имеем |B1 | = S(m − 1, n − 1), |B2 | = n S(m − 1, n), так
как все разбиения B2 получаются следующим образом: берём все разбиения множества
{1, . . . , m − 1} на n блоков (их S(m − 1, n)) и в каждый блок по очереди помещаем
элемент m. Следовательно, так как B1 ∩ B2 = ∅,
S(m, n) = |B| = |B1 | + |B2 | = S(m − 1, n − 1) + nS(m − 1, n).

155 / 907
2.4.1. Числа Стирлинга (3/3)

m−1
P
Теорема. S(m, n) = C(m − 1, i)S(i, n − 1).
i=n−1
Доказательство. Пусть B — множество разбиений множества M
 всех M S←{1, . . . , m} на n
блоков. Рассмотрим семейство B ← B ⊂ 2 | m ∈ B . Тогда B = B∈B BB ,
где BB ← {X | X ∈ B & B ∈ X}, причём BB 0 ∩ B B00 = ∅, если B 0 6= B 00 . Пусть B ∈ B и
b ← |B|. Тогда |BB | = S(m−b, n−1). Заметим, что B ∈ B | b = |B| = C(m−1, b−1).
Имеем
m−(n−1)
P S m−(n−1)
P
S(m, n) = |B| = BB = C(m − 1, b − 1)S(m − b, n − 1) =


b=1 B∈B & |B|=b b=1
n−1
P m−1
P
= C(m − 1, m − i − 1)S(i, n − 1) = C(m − 1, i)S(i, n − 1), где i ← m − b.
i=m−1 i=n−1

156 / 907
2.4.2. Числа Моргана (1/2)

Число сюръективных функций, то есть число размещений m мячей по n ящикам, таких,


что все ящики заняты, называется числом Моргана и обозначается M (m, n).
Замечание. Числа Стирлинга называют также числами Стирлинга второго рода, а числа
Моргана называют числами Стирлинга первого рода и обозначают s(m, n).
Теорема. [1] M (m, n) = n! S(m, n).
Доказательство. Каждое разбиение множества {1, . . . , m} соответствует семейству мно-
жеств уровня сюръективной функции и обратно. Таким образом, число различных се-
мейств множеств уровня сюръективных функций — это число Стирлинга S(m, n). Всего
сюръективных функций M (m, n) = n! S(m, n), так как число сюръективных функций с
заданным семейством множеств уровня равно числу перестановок множества значений
функции.

157 / 907
2.4.2. Числа Моргана (2/2)
Теорема. [2] M (m, n) = M (m − 1, n − 1) + (m − 1)M (m − 1, n).
Доказательство. Рассмотрим множество сюръективных функций из множества X в мно-
жество Y (|X| = m, |Y | = n). Зафиксируем элемент n ∈ Y . Разобьем множество сюръ-
екций из X в Y на два множества:
S1 = {f : X → Y | |f −1 (n)| = 1} S2 = {f : X → Y | |f −1 (n)| > 1}.
Тогда |S1 | = M (m − 1, n − 1) (в элемент n переходит только какой-то элемент X , все
остальные переходят «как хотят»), |S2 | = (m − 1)M (m − 1, n) (мы добавляем в f −1
какой-то из m − 1 оставшихся элементов X , всего m − 1 способ это сделать). Поскольку
S1 ∩ S2 = ∅, имеем M (m, n) = M (m − 1, n − 1) + (m − 1)M (m − 1, n).
Pm
Теорема. [3] k=1 M (m, k) = m!.
Доказательство. Индукция по m. Случай m = 1 тривиален. Пусть теорема верна для всех
натуральных
Pm P что 0 < n < m. Тогда, по предыдущей
n таких,
m m
P теореме имеем:
k=1 M (m, k) = k=1 M (m − 1, k − 1) + (m − 1) k=1 M (m − 1, k) =
P m−1
= k=1 M (m − 1, k)(1 + m − 1) = (m − 1)!m = m!.
158 / 907
2.4.3. Вычисление чисел Стирлинга (1/4)
В п. 2.4.1 выведены две формулы для вычисления чисел Стирлинга. Вторая формула
m−1
X
S(m, n) = C(m − 1, i)S(i, n − 1)
i=n−1

требует вcпомогательного вычисления биномиальных коэффициентов и выполнения боль-


шого количества сложений и умножений.
При использовании первой рекуррентной формулы

S(m, n) = S(m − 1, n − 1) + nS(m − 1, n)

встаёт вопрос о хранении уже посчитанных чисел Стирлинга, необходимых для проме-
жуточных вычислений, а также многократного перевычисления одних и тех же чисел в
случае прямого использования рекурсии.

159 / 907
2.4.3. Вычисление чисел Стирлинга (2/4)
Пример. Вычислим S(7, 3). Для этого построим таблицу начальных значений
чисел Стирлинга, пользуясь первой рекуррентной формулой.

m\n 0 1 2 3 4 5 6 7
0 1
1 0 1
2 0 1 1
3 0 1 3 1
4 0 1 7 6 1
5 0 1 15 25 10 1
6 0 1 31 90 65 15 1
7 0 1 63 301 350 140 21 1

Значения, которые необходимые для вычисления числа S(7, 3), обведены прямоуголь-
никами.
160 / 907
2.4.3. Вычисление чисел Стирлинга (3/4)
Вход: неотрицательные целые числа m и n
Выход: число Стирлинга S(m, n)
if m = n then return 1 end if //можем сразу вернуть известные значения
if n = 0 then return 0 end if
if n > m then return 0 end if
if n = 1 then return 1 end if
d ← min(n, m − n + 1) //длина рабочего массива
D : array[1..d] of integer //рабочий массив
s ← max(n, m − n + 1) //количество повторений
for i from 1 to d do D[i] ← 1 end for //инициализация
for i from 2 to s do
for j from 2 to d do
D[j] ← if d = n then D[j − 1] + j ∗ D[j] else D[j] + i ∗ D[j − 1] end if
end for
end for
return D[d] //число Стирлинга
161 / 907
2.4.3. Вычисление чисел Стирлинга (4/4)
Обоснование. Чтобы вычислить число Стирлинга, необходимо вычислить все значения,
показанные в «параллелограмме» предыдущего примера. При этом хранить достаточно
лишь рабочий массив, равный длине более короткой стороны «параллелограмма». При
этом количество повторений соответствует более длинной стороне «параллелограмма».
Таким образом, рабочий массив соответствует либо диагонали, которая на каждой итера-
ции опускается вниз, либо столбцу, который на каждой итерации сдвигается вправо-вниз.
В любом случае вначале рабочий массив инициализируется значениями 1. Далее на каж-
дом шаге цикла по i перевычисляется рабочий массив. Таким образом, вычисляются толь-
ко необходимые промежуточные элементы, причём по одному разу.
В любом случае перевычисляется (n − 1)(m − n) элементов.
Замечание. При оценке области применимости алгоритма следует обратить внимание на
то, что числа Стирлинга для фиксированного m с ростом n сначала возрастают, а потом
убывают.

162 / 907
2.4.4. Числа Белла
Число всех разбиений m-элементного множества называется числом Белла и обознача-
ется B(m),
m
Def Def
X
B(m) = S(m, n), B(0) = 1.
n=0
m
P
Теорема. B(m + 1) = C(m, i)B(i).
i=0
Доказательство. Пусть B — множество всех разбиений множества M1 = 1..(m + 1).
Рассмотрим
 множество
подмножеств
множества M1 , содержащих элемент m + 1:
B ← B ⊂ 2M1 m + 1 ∈ B . Тогда B =
S
BB , где BB ← {X ∈ B | B ∈ X}.
B∈B 
Пусть B ∈ B и b = |B|. Тогда |BB | = B(m + 1 − b). Заметим, что | B ∈ B | |B| = b | =
= C(m, b − 1). Следовательно, B(m + 1) = |B| = m+1
P
b=1 C(m, b − 1)B(m − b + 1) =
P0 m
P
= i=m C(m, m − i)B(i) = C(m, i)B(i), где i ← m − b + 1.
i=0

163 / 907
2.4.5. Треугольник Белла (1/4)
Вычисление числа Белла по рекуррентной формуле, выведенной в предыдущем парагра-
фе, даже при условии хранения всех предыдущих вычисленных значений чисел Белла,
имеет трудоёмкость O(n3 ). Рассмотрим алгоритм, использующий специальную структуру
данных, который в неявном виде хранит все предыдущие вычисленные значения для би-
номиальных коэффициентов и имеет трудоёмкость O(n2 ). Треугольник Белла — это беско-
нечная треугольная матрица, где каждое число (кроме чисел на левой боковой стороне)
является суммой двух чисел: стоящего слева от него в этой же строке и слева над ним.
Первое число в каждой строке (кроме первой) является последним числом из предыду-
щей строки. Число в первой строке — единица.

1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
. . . . . .
164 / 907
2.4.5. Треугольник Белла (2/4)
Для вычислений треугольник Белла удобнее хранить в виде бесконечной нижней тре-
угольной матрицы:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
. . . . . .
Обозначим An,k — k -ый элемент в n-ой строке треугольника Белла. По построению тре-
угольника An,k = An,k−1 + An−1,k−1 при k > 1, n > 1, An,1 = An−1,n−1 при n > 1 и
A1,1 = 1.
n
P
Лемма. An,k = C(k − 1, i − n + k − 1)Ai,1 .
i=n−k+1 Pn
Доказательство. Индукция по k . База. An,1 = i=n C(0, i − n)Ai,1 = C(0, 0)An,1 = An,1 .
165 / 907
2.4.5. Треугольник Белла (3/4)
Доказательство. (Продолжение) Индукционный переход. An,k = An,k−1 + An−1,k−1 =
n
P n−1
P
= C(k − 2, i − n + k − 2)Ai,1 + C(k − 2, i − n + k − 1)Ai,1 =
i=n−k+2 i=n−k+1
n−1
P
= (C(k − 2, i − n + k − 2) + C(k − 2, i − n + k − 1)) Ai,1 +
i=n−k+2
+ C(k − 2, k − 2)An,1 + C(k − 2, 0)An−k+1,1 =
n−1
P
= C(k − 1, i − n + k − 1)Ai,1 + C(k − 1, k − 1)An,1 + C(k − 1, 0)An−k+1,1 =
i=n−k+2
Pn
= C(k − 1, i − n + k − 1)Ai,1 .
i=n−k+1
Теорема. B(m) = Am+1,1 = Am,m .
Доказательство. Индукция по m. База B(0) = 1 = A1,1 по построению треугольника.
m
P
Пусть B(m) = Am+1,1 . Тогда по лемме Am+2,1 = Am+1,m+1 = C(m, i)Ai+1,1 =
i=0
m
P
= C(m, i)B(i) = B(m + 1).
i=0
166 / 907
2.4.5. Треугольник Белла (4/4)
Из теоремы непосредственно следует алгоритм.
Вход: число m
Выход: число Белла B(m)
if m = 0 then return 1 end if //по определению
A : array [1..m] of integer //рабочий массив, A[k] хранит An,k
A[1] := 1 //A1,1 = B(1) = 1
for n from 2 to m do
t ← A[1] //переменная t хранит An−1,k−1
A[1] ← A[n − 1] //An,1 = An−1,n−1
for k from 2 to n do
s ← A[k] //переменная s хранит An−1,k
A[k] ← A[k − 1] + t //An,k = An,k−1 + An−1,k−1
t ← s //k ← k + 1
end for
end for
return A[m] //число Белла 167 / 907
2.5. Включения и исключения

Приведённые в предыдущих четырёх разделах формулы и алгоритмы дают способы вы-


числения комбинаторных чисел для некоторых распространённых комбинаторных кон-
фигураций. Практические задачи не всегда прямо сводятся к известным комбинаторным
конфигурациям. В этом случае используются различные методы сведе́ния одних комби-
наторных конфигураций к другим. В этом и двух следующих разделах рассматриваются
три наиболее часто используемых метода.
Мы начинаем с самого простого и прямолинейного, но имеющего ограниченную область
применения метода включений и исключений.

168 / 907
2.5.1. Объединение конфигураций (1/2)

Часто комбинаторная конфигурация является объединением других, число комбинаций в


которых вычислить проще. В таком случае требуется уметь вычислять число комбинаций
в объединении. В простых случаях формулы для вычисления очевидны:

|A ∪ B| = |A| + |B| − |A ∩ B|,


|A ∪ B ∪ C| = |A| + |B| + |C| − |A ∩ B| − |B ∩ C| − |A ∩ C| + |A ∩ B ∩ C|.

169 / 907
2.5.1. Объединение конфигураций(2/2)

Пример. Сколько существует натуральных чисел, меньших 1000, которые не делятся ни


на 3, ни на 5, ни на 7? Всего чисел, меньших тысячи, 999. Из них:
999 : 3 = 333 делятся на 3,
999 : 5 = 199 делятся на 5,
999 : 7 = 142 делятся на 7,
999 : (3 ∗ 5) = 66 делятся на 3 и на 5,
999 : (3 ∗ 7) = 47 делятся на 3 и на 7,
999 : (5 ∗ 7) = 28 делятся на 5 и на 7,
999 : (3 ∗ 5 ∗ 7) = 9 делятся на 3, на 5 и на 7.
Имеем: 999 − (333 + 199 + 142 − 66 − 47 − 28 + 9) = 457.

170 / 907
2.5.2. Формула включений и исключений (1/3)
Следующая формула, известная как формула включений и исключений, позволяет вычис-
лить мощность объединения нескольких множеств, если известны их мощности и мощ-
ности всех возможных пересечений.
Теорема.
n n
[ X X X
Ai = |Ai | − |Ai ∩ Aj | + |Ai ∩ Aj ∩ Ak | − . . .


i=1 i=1 16i<j6n 16i<j<k6n

+ (−1)n−1 |A1 ∩ . . . ∩ An |.
Доказательство. Индукция по n. Для n = 2, 3 теорема проверена в предыдущем пара-
графе. Пусть

n−1 n−1
[ X X
Ai = |Ai | − |Ai ∩ Aj | + . . . + (−1)n−2 |A1 ∩ . . . ∩ An−1 |.

i=1 i=1 16i<j6n−1

171 / 907
2.5.2. Формула включений и исключений
 (2/3) n−1
S n−1
S
Доказательство. (Продолжение) Заметим, что Ai ∩ An = (Ai ∩ An ), и по ин-
i=1 i=1
дукционному предположению

n−1
[ X n−1 X
(Ai ∩ An ) = |Ai ∩ An | − |Ai ∩ Aj ∩ An | + · · · +


i=1 i=1 16i<j6n−1
n−2
+ (−1) |A1 ∩ . . . ∩ An−1 ∩ An |.
Тогда
! !
[n n−1
[ n−1[ n−1
[
Ai = Ai ∪ An = Ai + |An | − Ai ∩ An =


i=1 i=1 i=1 i=1
n
X X
= |Ai | − |Ai ∩ Aj | + . . . + (−1)n−1 |A1 ∩ . . . ∩ An |.
i=1 16i<j6n

172 / 907
2.5.2. Формула включений и исключений (3/3)

Пример. Докажем формулу для функции Эйлера ϕ(n) (см. п. 1.5.1) с помощью метода
включений и исключений.
Пусть n = pα1 1 pα2 2 . . . pαk k и ϕ(n) — количество чисел, меньших n и взаимно простых с ним.
Пусть Ai — множество чисел, не превосходящих n и делящихся на pi . Тогда
k
n n
S
ϕ(n) = n − | Ai |. Заметим, что |Ai | = pi
и |Ai1 ∩ Ai2 ∩ · · · ∩ Ais | = pi1 pi2 ...pis
, где
i=1
деление подразумевается нацело. Отсюда получаем
ϕ(n) = n − ( pn1 + pn2 + · · · + pnk ) + ( p1np2 + p2np3 + · · · + pk−1
n
pk
) − · · · + (−1)k p1 p2n...pk =
= n(1 − p11 )(1 − p12 ) . . . (1 − p1k ), что согласуется с формулой, выведенной в п. 1.5.2.
Замечание. Обозначения сумм с неравенствами в пределах суммирования, использо-
ванные в формулировке и доказательстве P
теоремы, являются не
Pболее чем сокращённой
n−1 Pn
формой записи кратных сумм. Например, 16i<j6n означает i=1 j=i+1 .

173 / 907
2.5.3. Комбинации свойств
Достаточно часто комбинаторная задача формулируется как задача подсчёта количества
объектов, обладающих или не обладающих определёнными свойствами.
Уточним постановку задачи. Пусть имеется множество объектов M , |M | = m, и мно-
жество свойств a1 , . . . , an , то есть одноместных предикатов ai : M → 0..1. Обозначим
N (ai1 , . . . , ais ) — количество элементов, обладающих свойствами ai1 , . . . , ais ,
N (aj1 , . . . , ajt ) — количество элементов, не обладающих свойствами aj1 , . . . , ajt .
n
N (ai , aj ) + . . . + (−1)n N (a1 , . . . , an ).
P P
Теорема. N (a1 , . . . , an ) = m − N (ai ) +
i=1 16i<j6n
Доказательство. Каждый одноместный предикат является характеристическим предика-
том подмножества Mi = {x ∈ M | ai (x)}. Поэтому
n n
\ [
N (a1 , . . . , an ) = Mi = |M | − Mi


i=1 i=1

и далее по формуле включений и исключений.


174 / 907
2.5.4. Беспорядки и субфакториал (1/3)

Перестановка без неподвижных точек называется беспорядком. Количество всех беспо-


рядков n предметов называется субфакториалом числа n и обозначается !n.
n
(−1)k /k!.
P
Теорема. !n = n!
k=0
Доказательство. Обозначим через D(n, k) — количество перестановок из n элементов,
в которых k элементов — неподвижные точки. Существует P (n − k) перестановок, в ко-
торых k элементов остаются на своей позиции. Выбрать k неподвижных элементов из n
можно C(n, k) способами. Окончательно получаем D(n, k) = C(n, k)P (n − k). Общее
количество перестановок равняется n!. Воспользуемся формулой включений и исключе-
ний. Имеем: !n =
= n!−C(n, 1)P (n−1)+C(n, 2)P (n−2)−...+(−1)k C(n, k)P (n−k)+· · ·+(−1)n C(n, n) =
1)! + n!(n − 2)!/(n − 2)!2! − . . . +(−1)k n!(n − k)!/(n − k)!k! − . . .
= n! − n!(n − 1)!/(n −P
+(−1)n n!/(0! · n!) = nk=0 (−1)k n!/k!.

175 / 907
2.5.5. Беспорядки и субфакториал (2/3) Pn (−1)k
Замечание. Cумма в правой части формулы !n = n! k=0 k! является частичной сум-
мой разложения e−1 = 1 − 1/1! + 1/2! − . . . + (−1)n /n! + . . . . Поэтому субфакториал
является ближайшим целым числом к числу n!/e.
Теорема. !n = (n − 1)(!(n − 1)+!(n − 2)).
Доказательство.
 (n − 1) (!(n − 1)+!(n − 2)) = 
n−1
P (−1)k n−2
P (−1)k
= (n − 1) (n − 1)! k!
+ (n − 2)! k!
=
 k=0 n−1
k=0 
P (−1)k n−2 P (−1)k
= (n − 1)(n − 2)! (n − 1) k!
+ k!
=
 n−1 k=0 k=0 
P (−1)k n−1 P (−1)k n−2 P (−1)k
= (n − 1)! n k!
− k!
+ k!
=
k=0
 n−1 k=0  k=0
P (−1)k (−1)n−1
= (n − 1)! n k!
− (n−1)! =
k=0
 n−1 
P (−1)k n
n(−1)n P (−1)k
= (n − 1)! n k!
+ n(n−1)! = n(n − 1)! k!
= !n.
k=0 k=0
176 / 907
2.5.5. Беспорядки и субфакториал (3/3)
Следствие. !n =!(n − 1) · n + (−1)n .
Доказательство. По индукции. База: !1 = 0. Пусть !(n − 1) =!(n − 2) · (n − 1) + (−1)n−1 .
Тогда !n = (n − 1) (!(n − 1)+!(n − 2)) =!(n − 1) · n−!(n − 1)+!(n − 2) · n−!(n − 2) =
=!(n − 1) · n − (!(n − 2) · (n − 1) + (−1)n−1 )+!(n − 2) · n−!(n − 2) =
=!(n − 1) · n−!(n − 2) · n+!(n − 2) + (−1)n +!(n − 2) · n−!(n − 2) =
=!(n − 1) · n + (−1)n .
Пример. Профессор собирается поручить четырём студентам A, B, C, D проверить друг у
друга контрольную работу. Ни один студент не должен проверять свою работу. Сколько у
профессора вариантов раздать работы на проверку? Из всех P (4) = 4! = 24 перестано-
вок, подходят только !4 = 9 : BADC , BCDA, BDAC , CADB , CDAB , CDBA, DABC ,
DCAB , DCBA. Любая другая перестановка будет иметь как минимум одну неподвиж-
ную точку.
Для справки: !1 = 0, !2 = 1, !3 = 2, !4 = 9, !5 = 44, !6 = 265, !7 = 1 854, !8 = 14 833,
!9 = 133 496.
177 / 907
2.6. Формулы обращения

Полезную, но очень специфическую группу приёмов образуют различные способы пре-


образования уже полученных комбинаторных выражений. В этом разделе рассматрива-
ется один частный, но важный случай.

178 / 907
2.6.1. Теорема обращения
Пусть an,k и bn,k — некоторые (комбинаторные) числа, зависящие от параметров n и k ,
причём 0 6 k 6 n. Если известно выражение чисел an,k через числа bn,k , то в некоторых
случаях можно найти и выражение чисел bn,k через числа an,k , то есть решить комбина-
торное уравнение.   
n
P
Теорема. Пусть ∀ n ∀k 6 n an,k = λn,k,i bn,i и пусть
i=0 ( !!!
Pn 1, m = k,
∃ µn,k,i ∀ k 6 n ∀ m 6 n µn,k,i λn,i,m = .
i=0 0, m 6= k
 n

P
Тогда ∀ k 6 n bn,k = µn,k,i an,i .
i=0  n 
Pn Pn P
Доказательство. µn,k,i an,i = µn,k,i λn,i,m bn,m =
 i=0  i=0 m=0
Pn n
P
= µn,k,i λn,i,m bn,m = bn,k .
m=0 i=0
179 / 907
2.6.2. Формулы обращения (1/3)
Применение теоремы обращения предполагает отыскание для заданных чисел λn,k,i (ко-
эффициентов комбинаторного уравнения) соответствующих чисел µn,k,i , удовлетворяю-
щих условию теоремы обращения. Особенно часто числами λn,k,i являются биномиаль-
ные коэффициенты. (
n
X 1, m = n,
Лемма. (−1)i−m C(n, i)C(i, m) =
i=0
0, m < n.
Доказательство. Используя формулу 3 из п. 2.3.1 и тот факт, что C(n − m, i − m) = 0 при
i < m, имеем
n
X n
X
(−1)i−m C(n, i)C(i, m) = (−1)i−m C(n, m)C(n − m, i − m) =
i=0 i=0
n
X
= (−1)i−m C(n, m)C(n − m, i − m) =
i=m
n
X
= C(n, m) (−1)i−m C(n − m, i − m).
i=m
180 / 907
2.6.2. Формулы обращения (2/3)
Доказательство. (Продолжение) Но при m < n имеем
n
X n−m
X
(−1)i−m C(n − m, i − m) = (−1)j C(n − m, j) = 0,
i=m j=0
n
(−1)i−m C(n−m, i−m) =
P
где j ← i−m. С другой стороны, при m = n имеем C(n, m)
i=m
= C(n, n)(−1)n−n C(0, 0) = 1.
k k
C(k, i)bn,i , то bn,k = (−1)k−i C(k, i)an,i .
P P
Теорема. Если an,k =
i=0 i=0
Доказательство. Здесь λn,k,i = C(k, i) и µn,k,i = (−1)k−i C(k, i). При k 6 n, m 6 n
n n
(−1)k−i C(k, i)C(i, m) = (так как C(k, i) = 0 при i > k )
P P
имеем: µn,k,i λn,i,m =
i=0 i=0
k k
(−1)k−i+m−m C(k, i)C(i, m) = (−1)k−m (−1)i−m C(k, i)C(i, m) =
P P
=
i=0 i=0
= if k = m then 1 else 0 end if.
181 / 907
2.6.2. Формулы обращения (3/3)
n n
(−1)i−k C(i, k)an,i .
P P
Теорема. Если an,k = C(i, k)bn,i , то bn,k =
i=k i=k
Доказательство. Здесь λn,k,i = C(i, k) и µn,k,i = (−1)i−k C(i, k). При k 6 n, m 6 n
n n
(−1)i−k C(i, k)C(m, i) =
P P
имеем: µn,k,i λn,i,m =
i=0 i=0
n
i−k
P
= (−1) C(m, i)C(i, k) = if k = n then 1 else 0 end if.
i=0
Отступление. Вообще говоря, формулы, подобные приведённым формулам обращения, имеют
широкое использование в области алгебры,анализа и теории чисел (например, формулы обраще-
ния Мёбиуса), но такие применения выходят за рамки этого курса, поэтому здесь мы ограничива-
емся примерами, результаты которых можно было бы получить и более элементарными способа-
ми. Разбирая приведённые примеры, следует иметь в виду, что этими примерами область приме-
нения формул обращения отнюдь не исчерпывается.

182 / 907
2.6.3. Формулы для чисел Стирлинга и Моргана
В качестве примера использования формул обращения рассмотрим получение явных
формул для чисел Стирлинга и Моргана. Рассмотрим множество функций f : A → B ,
где |A| = n и |B| = k . Число всех таких функций равно k n . С другой стороны, число
функций f , таких, что |f (A)| = i, равно M (n, i), поскольку M (n, i) — это число сюръек-
тивных функций f : 1..n → 1..i. Но множество значений функции (при заданном i) мож-
k
но выбрать C(k, i) способами. Поэтому k n =
P
C(k, i)M (n, i).
i=0
Обозначив an,k ← k n и bn,i ← M (n, i), имеем по первой теореме п. 2.6.2
k
X
M (n, k) = (−1)k−i C(k, i)in .
i=0
Учитывая связь чисел Стирлинга и Моргана, окончательно имеем
k
1 X
S(n, k) = (−1)k−i C(k, i)in .
n! i=0
183 / 907
2.6.4. Полиномы с рациональными коэффициентами (1/2)
Комбинаторные числа — это целые числа по определению. Заметим, что формулы, кото-
рыми выражаются комбинарные комбинаторные числа, зачастую остаются вычислимы-
ми и при других, не обязательно целых значениях аргумента.
x(x − 1) . . . (x − n + 1)
Def
Пример. Функция C(x, n) = определена для любых веществен-
n!
ных x и выражается полиномом степени n с рациональными коэффициентами.
Любой полином с целыми коэффициентами принимает целые значения при целых зна-
чениях аргумента — это очевидно. Если же коэффициенты не целые, то значения поли-
нома при целых аргументах не обязаны быть целыми.
Пример. Полином 1/2x принимает целые значения только при чётных целых x, а при
нечётных — не принимает.
В тоже время существуют полиномы с нецелыми коэффициентами, которые принимают
целые значения при целых аргументах.
Пример. Рассмотренная функция C(x, n) для любых целых x принимает целые значения
(п. 2.3.6).
184 / 907
2.6.4. Полиномы с рациональными коэффициентами (2/2)
Теорема. Пусть f (x) — полином степени не более n с рациональным коэффициентами.
Тогда
∀ a ∈ Z (f (a) ∈ Z) ⇐⇒ f (0) ∈ Z & f (1) ∈ Z & . . . f (n) ∈ Z.
Доказательство.
[ ⇒ ] Очевидно.
[ ⇐ ] Заметим, что любой полином f (x) степени не больше n с рациональными коэффи-
циентами можно представить в виде
n n
X X x(x − 1) . . . (x − i + 1)
f (x) = gi C(x, i) = gi .
i=0 i=0
i!
Pm
Тогда ∀P
m ∈ 0..n (f (m) = i=0 gi C(m, i)), и по теореме обращения
m m−i
gm = i=0 (−1) f (i)C(m, i) — целое число (т. к. это линейная
Pn комбинация целых
чисел).Поскольку ∀ x ∈ Z (C(x, i) ∈ Z) и gi ∈ Z, имеем f (x) = i=0 gi C(x, i) ∈ Z для
любого целого x.
185 / 907
2.7. Производящие функции

Для решения комбинаторных задач в некоторых случаях можно использовать методы


математического анализа. Разнообразие применяемых здесь приёмов весьма велико и
не может быть в полном объёме рассмотрено в рамках этого курса. В данном разделе
рассматривается только основная идея метода производящих функций, применение ко-
торой иллюстрируется несколькими простыми примерами.

186 / 907
2.7.1. Формальные степенные ряды (1/4)
Пусть есть последовательность комбинаторных чисел ai и последовательность функций
ϕi (x). Рассмотрим формальный ряд
Def
X
F(x) = ai ϕi (x).
i

Выражение F(x) называется производящей функцией (для заданной последовательности


комбинаторных чисел ai относительно заданной последовательности функций ϕi (x)).
Def Def
Обычно используют ϕi (x) = xi или ϕi (x) = xi /i!.
Пример. Из формулы бинома Ньютона при y = 1 имеем
n
X
(1 + x)n = C(n, i)xi .
i=0

Таким образом, (1 + x)n является производящей функцией для биномиальных коэффи-


циентов.
187 / 907
2.7.1. Формальные степенные ряды (2/4)
Лемма. V (m, n) = V (m − 1, n) + V (m, n − 1).
Доказательство. V (m, n) = C(n + m − 1, n) = C(n + m − 2, n) + C(n + m − 2, n − 1) =
= V (m − 1, n) + V (m, n − 1).
Пример. Производящая P V (m, n) при заданном m.
функция для
ϕm (x) = ∞ V (m, n)xn = 1 + ∞ n
P
P∞ n=0 n=1 V (m, n)x =
= 1 + n=1 V (m − 1, n)xn + ∞ n
P
n=1 V (m, n − 1)x =
= 1 + n=1 V (m − 1, n)xn + x ∞
P∞ P n−1
P∞ n=1 V (m, n − 1)x =
n
P ∞ n
= n=0 V (m − 1, n)x + x n=0 V (m, n)x = ϕm−1 (x) + xϕm (x).
Получили, что ϕm (x) = 1/(1 − x)ϕm−1 (x) =
= 1/(1 − x)2 ϕm−2 (x) = . . . = 1/(1 − x)m ϕ0 (x) = 1/(1 − x)m так как
ϕ0 (x) = ∞
P n
P∞ n
n=0 V (0, n)x = V (0, 0) + n=1 V (0, n)x = 1 + 0 = 1.
В итоге, ϕm (x) = 1/(1 − x)m .

188 / 907
2.7.1. Формальные степенные ряды (3/4)
Степенные ряды рассматриваются здесь именно как формальные суммы, как конечные,
так и бесконечные, причём вопросы сходимости рядов и аналитичности функций не ста-
вятся. P∞
Пример. Пусть F(x) = 1 + x + x2 + · · · = i=0 xi . Тогда F(x) = 1 + x + x2 + · · · =
= 1 + x(1 + x + x2 + . . . ) = 1 + xF(x). Решая полученное функциональное уравнение от-

2
X 1
носительно F заключаем, что F(x) = 1 + x + x + · · · = xi = . В полученное
i=0
1−x
выражение бессмысленно подставлять числовые значения — это не числовое равенство!
Производящие функции используются как удобный «контейнер», хранящий информацию
о комбинаторных числах в их совокупности.
Пример. Определим
P∞ производящую функцию натурального
P∞ ряда.PПусть F(x)P = 1 + 2x+
2 i i ∞ i ∞ i
+3x + · · · = P i=0 (i + 1)xP . Тогда F(x) P = i=0 (i + 1)x = i=0 ix + i=0 x . Но
P ∞ i 1 ∞ i ∞ i ∞ i−1
P ∞ i
i=0 x = 1−x , а i=0 ix = i=1 ix = x i=1 ix = x i=0 (i + 1)x , поэтому
F(x) = xF(x) + 1/(1 − x), и значит 1 + 2x + 3x + · · · = 1/(1 − x)2 .
2

189 / 907
2.7.1. Формальные степенные ряды (4/4)
Производящие функции для последовательности единиц (или любых других констант) и
натурального ряда найдены составлением и решением функциональных уравнений от-
носительно неизвестной производящей функции. Составление и решение функциональ-
ных уравнений — это отнюдь не единственный способ нахождения производящих функ-
ций. Не возбраняется использовать любые средства математического анализа.

X 1 n
Пример. Определим производящую функцию гармонического ряда F(x) = x .
n=1
n
∞ ∞
X 1 n X 1
Очевидно, что x = xn+1 . Заметим, что функция n+1
1
xn+1 является перво-
n=1
n n=0
n + 1
образной функции xn . Напомним, что производящая функция суммы определяется сле-
X∞
дующим образом: степеней xn = 1/(1 − x). Поэтому
n=0
∞ ∞ ∞
Z Z ! Z
X 1 X X dx 1
F(x) = xn+1 = n
x dx = x n
dx = = ln .
n=0
n+1 n=0 n=0
1−x 1−x
190 / 907
2.7.2. Метод неопределённых коэффициентов (1/2)
Из математического анализа известно, что если
X X
F(x) = ai ϕi (x) и F(x) = bi ϕi (x),
i i

то ∀ i (ai = bi ) (для рассматриваемых здесь систем функций ϕi ).


В качестве примера применения производящих функций докажем теорему 4 из п. 2.3.1.
n
X
Теорема. C(2n, n) = C(n, k)2 .
k=0
Доказательство. Имеем: (1 + x)2n = (1 + x)n (1 + x)n . Следовательно,
2n
X n
X n
X
i i
C(2n, i)x = C(n, i)x · C(n, i)xi .
i=0 i=0 i=0
n
Приравняем коэффициент при x :
n
X n
X
C(2n, n) = C(n, k)C(n, n − k) = C(n, k)2 .
k=0 k=0 191 / 907
2.7.2. Метод неопределённых коэффициентов (2/2)
Пример. Какие числа можно представить суммой степеней числа 2 и сколькими способа-
ми? Для решения этой задачи рассмотрим произведение
k
n k
Y
G(x) = (1 + x2 ) = (1 + x)(1 + x2 ) . . . (1 + x2 ).
n=0

После раскрытия скобок и приведения подобных G(x) представляется в виде суммы


P k+1
G(x) = 2n=0 −1 gn xn , в которой xn получается как произведение каких-то одночленов
m
x2 , то есть коэффициент gn — это количество различных представлений числа n в ви-
де суммы некоторых степеней 2 (не исключая случая gn = 0). Умножим теперь G(x) на
k
(1−x). По формуле для разности квадратов получаем (1−x)(1+x)(1+x2 ) . . . (1+x2 ) =
k k+1 k+1
= (1−x2 )(1+x2 ) . . . (1+x2 ) = ... = 1−x2 . Имеем G(x) = (1−x2 )/(1−x). Cумма
k+1 k+1
геометрической прогрессии: 1 + x + x2 + · · · + x2 −1 = (1 − x2 )/(1 − x) = G(x) =
P k+1
= 2n=0 −1 gn xn . По методу неопределённых коэффициентов, получаем ∀ n (gn = 1), что
означает, любое число n можно представить в виде линейной комбинации степеней чис-
ла 2 и притом единственным образом.
192 / 907
2.7.3. Числа Фибоначчи (1/4)
Числа Фибоначчи F (n) определяются следующим образом:
Def Def Def
F (0) = 1, F (1) = 1, F (n + 2) = F (n + 1) + F (n).
Найдём выражение для F (n) через n. Для этого найдём производящую функцию ϕ(x)
для последовательности чисел F (n). Имеем

X ∞
X
n 0 1
ϕ(x) = F (n)x = F (0)x + F (1)x + (F (n − 2) + F (n − 1)) xn =
n=0 n=2

X ∞
X
=1+x+ F (n − 2)xn + F (n − 1)xn =
n=2 n=2

X ∞
X
= 1 + x + x2 F (n − 2)xn−2 + x F (n − 1)xn−1 =
n=2 n=2
∞ ∞
!
X X
= 1+x+x2 F (n)xn + x F (n)xn − F (0) = 1+x+x2 ϕ(x) + x (ϕ(x) − 1) .
n=0 n=0
193 / 907
2.7.3. Числа Фибоначчи (2/4)
Решая это функциональное уравнение относительно ϕ(x), получаем, что

1
ϕ(x) = .
1 − x − x2

2
√ по степеням x. Действительно,
Последнее выражение нетрудно разложить в ряд √ уравне-
ние 1 − x − x = 0 имеет корни x1 = −(1 + 5)/2 и x2 = −(1 − 5)/2, причём, как
нетрудно убедиться,
√ √
2 1+ 5 1− 5
1 − x − x = (1 − ax)(1 − bx), где a = , b= .
2 2
Далее,

1 α β a −b
= + , где α = , β= .
(1 − ax)(1 − bx) 1 − ax 1 − bx a−b a−b

194 / 907
2.7.3. Числа Фибоначчи (3/4)
Из математического анализа известно, что для малых x

1 X
= γ n xn .
1 − γx n=0
Таким образом,
∞ ∞
α β X
n n
X
ϕ(x) = + =α a x +β bn x n =
1 − ax 1 − bx n=0 n=0
∞ ∞ ∞
X a n n X b n n X an+1 − bn+1 n
= a x − b x = x .
n=0
a−b n=0
a−b n=0
a−b
Окончательно получаем соотношение, известное как формула Бине
√ !n+1 √ !n+1
 
n+1 n+1
a −b 1 1+ 5 1− 5
F (n) = =√  − .
a−b 5 2 2

195 / 907
2.7.3. Числа Фибоначчи (4/4)

Пример. Число Fn+2 = Fn+1 + Fn является количеством двоичных последовательностей


длины n, в которых нет двух 1, находящихся на соседних позициях. Доказательство по
индукции. База: n = 1, F3 = 2, последовательности 0 и 1; n = 2, F4 = 3, последователь-
ности 00, 01, 10. Индукционный переход: пусть Fn+2 — число способов построить требу-
емые последовательности длины n. Построим последовательность длины n + 1: возьмем
все такие последовательности длины n и допишем к ним 0 слева, не нарушая условие.
Также мы можем взять все последовательности длины n − 1 и дописать к ним 10 сле-
ва. Таким образом, количество способов получить последовательность длины n + 1 будет
равно Fn+2 + Fn+1 = Fn+3 .
Def √
Отступление. Число Φ = (1 + 5)/2 ≈ 1, 618 принято называть золотым сечением, поскольку
a b
оно является решением пропорции = — меньшее так относится к большему, как большее
b a+b
к сумме. Это число известно ещё с древних времен и занимает важное место в науке и искусстве.

196 / 907
2.7.4. Числа Каталана (1/4)
Числа Каталана C(n) можно определить следующим образом:
n−1
Def Def
X
C(0) = 1, C(n) = C(k)C(n − k − 1).
k=0
Числа Каталана используются при решении различных комбинаторных задач.
Пример. Пусть нужно вычислить элемент s0 ∗ · · · ∗ sn . Сколькими способами это можно
сделать? То есть сколькими способами можно расставить скобки, определяющие порядок
вычисления выражения? Обозначим число способов C(n). Ясно, что C(0) = 1. При любой
схеме вычислений на каждом шаге выполняется некоторое вхождение операции ∗ над
соседними элементами и результат ставится на их место. Пусть последним выполняется
то вхождение операции ∗, которое имеет номер k в исходном выражении. При этом слева
от выбранного вхождения знака ∗ находилось и было выполнено k − 1 знаков операции
∗, а справа,
Pn соответственно, (n − 1) P
− (k − 1) = n − k знаков операции ∗. Тогда ясно, что
C(n) = k=1 C(k − 1)C(n − k) = n−1 k=0 C(k)C(n − k − 1), и ответом на поставленный
вопрос является число Каталана C(n).
197 / 907
2.7.4. Числа Каталана (2/4)
Числа Каталана выражаются через биномиальные коэффициенты. Получим это выраже-
ние, используя метод производящих функций.
C(2n, n)
Теорема. C(n) = .
n+1

C(n)xn ,
P
Доказательство. Найдём производящую функцию для чисел Каталана ϕ(x) =
n=0
x 6= 0. Для этого рассмотрим квадрат этой функции:

!2 ∞ ∞
X X X
2 n m
ϕ (x) = C(n)x = C(m)x · C(n)xn =
n=0 m=0 n=0

X ∞ X
X n ∞
X
m+n n
= C(m)C(n)x = C(k)C(n − k)x = C(n + 1)xn =
m,n=0 n=0 k=0 n=0
∞ ∞
!
n+1
X x 1 X 1
= C(n + 1) = C(n)xn − C(0) = (ϕ(x) − 1) .
n=0
x x n=0
x
198 / 907
2.7.4. Числа Каталана (3/4)
Доказательство. (продолжение) Решая уравнение ϕ(x) = xϕ2 (x) + 1 относительно функ-
ции ϕ(x), имеем √
1± 1 − 4x
ϕ(x) = .
√ 2x
Обозначим f (x) ← 1 − 4x и разложим f (x) в ряд по формуле Тейлора:

X f (k) (0) k
f (x) = f (0) + x .
k=1
k!
dk
   
1 1 1 1 1
Имеем k (1 − 4x) 2 = · − 1 · ··· · − k + 1 · (1 − 4x) 2 −k · (−4)k =
dx 2 2 2
1 1
−k
k
= −2 · 1 · 3 · · · · · (2k − 3) · (1 − 4x) 2 = −2k · (2k − 3)!! · (1 − 4x) 2 −k =
(2k − 3)! 1 (2k − 2)!(k − 1)(k − 1)! 1
= −2k k−2 (1 − 4x) 2 −k = −22 (1 − 4x) 2 −k =
2 (k − 2)! (2k − 2)(k − 1)!(k − 1)!
(2k − 2)! 1 1
= −2(k − 1)! (1 − 4x) 2 −k = − 2(k − 1)!C(2k − 2, k − 1)(1 − 4x) 2 −k .
(k − 1)!(k − 1)!
199 / 907
2.7.4. Числа Каталана (4/4)
Доказательство. (продолжение) Таким образом,

X 1
f (k) (0) = −2(k − 1)!C(2k − 2, k − 1), f (x) = 1 − 2 C(2k − 2, k − 1)xk .
k=1
k

Подставляя выражение f (x) в формулу для ϕ(x), следует выбрать знак «минус» перед
корнем, чтобы удовлетворить условию C(0) = 1. Окончательно имеем
∞ P∞ 1
X
n 1 − f (x) 1−1+2 n=1 n C(2n − 2, n − 1)xn
C(n)x = ϕ(x) = = =
n=0
2x 2x
∞ ∞
X 1 n−1
X C(2n, n) n
= C(2(n − 1), n − 1)x = x ,
n=1
n n=0
n+1

и по методу неопределённых коэффициентов C(n) = C(2n, n)/(n + 1).


200 / 907
3. Кодирование (1/4)
Вопросы кодирования издавна играли заметную роль в математике.
Примеры.
1. Десятичная позиционная система счисления — это универсальный способ кодиро-
вания чисел, в том числе натуральных.
2. Римские цифры — другой способ кодирования небольших натуральных чисел, при-
чём гораздо более наглядный и естественный: палец — I, пятерня — V, две пятерни —
X.
Однако при этом способе кодирования трудно выполнять арифметические опера-
ции над большими числами, поэтому он был вытеснен десятичной позиционной си-
стемой.
3. Декартовы координаты — способ кодирования геометрических объектов числами.
Ранее средства кодирования играли вспомогательную роль и не рассматривались как от-
дельный предмет математического изучения, но с появлением компьютеров ситуация ра-
дикально изменилась. Кодирование буквально пронизывает информационные техноло-
гии и является центральным вопросом при решении самых разных задач программиро-
вания. 201 / 907
3. Кодирование (2/4)
Примеры. 1) Представление данных произвольной природы (например чисел, текста,
графики) в памяти компьютера; 2) защита информации от несанкционированного досту-
па; 3) обеспечение помехоустойчивости при передаче данных по каналам связи; 4) сжа-
тие информации в базах данных.
Замечание. Само составление текста программы часто и совершенно справедливо назы-
вают кодированием.
Не ограничивая общности, задачу кодирования можно сформулировать следующим об-
разом.
Пусть заданы алфавиты A = {a1 , . . . , an }, B = {b1 , . . . , bm } и функция F : A∗ → B ∗ ,
причём Dom F = S , где S — некоторое множество слов в алфавите A, S ⊂ A∗ . Тогда
функция F называется кодированием, элементы множества S — сообщениями, а элемен-
ты β = F (α), α ∈ S , β ∈ B ∗ — кодами (соответствующих сообщений). Обратная функ-
ция F −1 (если она существует!) называется декодированием. Если |B| = m, то F назы-
вается m-ичным кодированием. Наиболее распространенный случай B = {0, 1} — двоич-
ное кодирование. Именно этот случай рассматривается в последующих разделах; слово
«двоичное» опускается. 202 / 907
3. Кодирование (3/4)
Типичная задача теории кодирования формулируется следующим образом: при задан-
ных алфавитах A, B и множестве сообщений S найти кодирование F , которое облада-
ет определёнными свойствами (то есть удовлетворяет заданным ограничениям) и опти-
мально в некотором смысле. Критерий оптимальности, как правило, связан с минимиза-
цией длин кодов. Свойства, которые требуются от кодирования, бывают самой разнооб-
разной природы.
I Существование декодирования, или однозначность кодирования: функция кодиро-
вания F обладает тем свойством, что α1 6= α2 =⇒ F (α1 ) 6= F (α2 ). Это очень есте-
ственное свойство, однако даже оно требуется не всегда. Например, трансляция про-
граммы на языке высокого уровня в машинные команды — это кодирование, для ко-
торого не требуется однозначного декодирования.
I Помехоустойчивость, или исправление ошибок: продолжение функции декодиро-
вания F −1 обладает тем свойством, что F −1 (β) = F −1 (β 0 ), где β ∈ Im F ,
β 0 ∈ B ∗ \ Im F , если β 0 в определённом смысле близко к β (см. раздел 3.3).
203 / 907
3. Кодирование (4/4)
I Заданная сложность (или простота) кодирования и декодирования. Например, в крип-
тографии изучаются такие способы кодирования, при которых функция F вычисля-
ется просто, но определение значения функции F −1 требует очень сложных вычис-
лений (см. п. 3.4.3).
Большое значение для задач кодирования имеет природа множества сообщений S . При
одних и тех же алфавитах A, B и требуемых свойствах кодирования F оптимальные
решения для разных S могут кардинально различаться. Для описания множества S (как
правило, очень большого или бесконечного) применяются различные методы:
I теоретико-множественное описание, например S = {α | α ∈ A∗ & |α| = n};
I вероятностное описание, например S = A∗ , и заданы вероятности pi появления
Pn
букв ai в сообщении, i=1 pi = 1;
I логико-комбинаторное описание, например S задано порождающей формальной
грамматикой.
В этой главе рассматривается несколько наиболее важных задач теории кодирования и
демонстрируется применение большей части вышеупомянутых методов.
204 / 907
3.1. Алфавитное кодирование

Кодирование F может сопоставлять код всему сообщению из множества S как единому


целому или же строить код сообщения из кодов его частей. Элементарной частью сооб-
щения является одна буква алфавита A. Этот простейший случай рассматривается в этом
и следующих двух разделах.

205 / 907
3.1.1. Таблица кодов
Алфавитное (или побуквенное) кодирование задается схемой (или таблицей кодов) σ :
Def
σ = ha1 → β1 , . . . , an → βn i, ai ∈ A, βi ∈ B ∗ .
Def
Множество кодов букв V = {βi } называется множеством элементарных кодов (множе-
ством кодовых слов).
Алфавитное кодирование пригодно для любого множества сообщений,
Def
поскольку F : A∗ → B ∗ , и если ai1 . . . aik = α ∈ A∗ , то F (α) = βi1 . . . βik .
Пример. Рассмотрим алфавиты A ←{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, B ←{0, 1} и схему
σ1 ←h0 → 0, 1 → 1, 2 → 10, 3 → 11, 4 → 100, 5 → 101, 6 → 110, 7 → 111,
8 → 1000, 9 → 1001i. Эта схема однозначна, но кодирование не является взаимно-одно-
значным: Fσ1 (333) = 111111 = Fσ1 (77), а значит, декодирование невозможно. С другой
стороны, схема σ2 ←h0 → 0000, 1 → 0001, 2 → 0010, 3 → 0011, 4 → 0100,
5 → 0101, 6 → 0110, 7 → 0111, 8 → 1000, 9 → 1001i, известная под названием
«двоично-десятичное кодирование», допускает однозначное декодирование.
206 / 907
3.1.2. Разделимые схемы
Рассмотрим схему алфавитного кодирования σ и различные слова, составленные из эле-
ментарных кодов. Схема σ называется разделимой, если

βi1 . . . βik = βj1 . . . βjl =⇒ k = l & ∀ t ∈ 1..k (it = jt ) ,

то есть любое слово, составленное из элементарных кодов, единственным образом раз-


лагается на элементарные коды. Алфавитное кодирование с разделимой схемой допус-
кает декодирование.
Если таблица кодов содержит одинаковые элементарные коды, то есть если

∃ i, j (i 6= j & βi = βj ) ,

где βi , βj ∈ V , то схема заведомо не является разделимой. Такие схемы далее не рас-


сматриваются, то есть
∀ i 6= j (βi , βj ∈ V =⇒ βi 6= βj ) .

207 / 907
3.1.3. Префиксные схемы
Схема σ называется префиксной, если элементарный код одной буквы не является пре-
фиксом элементарного кода другой буквы:
∀ i 6= j (βi , βj ∈ V ) =⇒ ∀ β ∈ B ∗ (βi 6= βj β) .¬∃ βi , βj ∈ V, β ∈ B ∗ (i 6= j & βi = βj β) .
Теорема. Префиксная схема является разделимой.
Доказательство. От противного. Пусть кодирование с префиксной схемой σ не является
разделимым. Тогда существует такое слово β ∈ Fσ (A∗ ), что
β = βi1 . . . βik = βj1 . . . βjl & ∃ t (∀ s < t (βis = βjs & βit 6= βjt )) .
Поскольку βit . . . βik = βjt . . . βjl , значит, ∃ β 0 (βit = βjt β 0 ∨ βjt = βit β 0 ), но это противо-
речит тому, что схема префиксная.
Замечание. Свойство быть префиксной достаточно, но не необходимо для разделимости
схемы.
Пример. Разделимая, но не префиксная схема:
A = {a, b}, B = {0, 1}, σ = ha → 0, b → 01i.
208 / 907
3.1.4. Неравенство Макмиллана (1/6)
Чтобы схема алфавитного кодирования была разделимой, необходимо, чтобы длины эле-
ментарных кодов удовлетворяли определённому соотношению, известному как неравен-
ство Макмиллана.
n
n
2−|βi | 6 1.
P
Теорема. Если схема σ = hai → βi ii=1 разделима, то
i=1
Доказательство. Обозначим li ← |βi |, l ← max li . Рассмотрим некоторую k -ю степень ле-
i∈1..n
 n
k
2−li (2li1 +...+lik )−1 ,
P P
вой части неравенства . Раскрывая скобки, имеем сумму
i=1 (i1 ,...,ik )
где i1 , . . . , ik — различные наборы номеров элементарных кодов. Обозначим через ν(k, t)
количество входящих в эту сумму слагаемых вида 1/2t , где t = li1 + . . . + lik . Для
kl
P ν(k,t)
некоторых t может быть, что ν(k, t) = 0. Приводя подобные, имеем сумму 2t
.
t=1
Каждому слагаемому вида (2li1 +...+lik )−1 можно сопоставить код (слово в алфавите B )
вида βi1 . . . βik . Это слово состоит из k элементарных кодов и имеет длину t.
209 / 907
3.1.4. Неравенство Макмиллана (2/6)
Доказательство. (Продолжение) Таким образом, ν(k, t) — это число некоторых слов вида
βi1 . . . βik , таких, что |βi1 . . . βik | = t. В силу разделимости схемы ν(k, t) 6 2t , в против-
ном случае заведомо существовали бы два одинаковых слова βi1 . . . βik = βj1 . . . βjk ,
kl kl
ν(k,t) 2t
P P
допускающих различное разложение. Имеем 2t
6 2t
= kl. Следовательно,
! t=1 t=1
k
√ √
 n
 n
 n
−li
2−li 6 k
2−li 6 lim k
P P P
∀k 2 6 kl , и, значит, ∀ k kl , откуда kl = 1.
i=1 i=1 i=1 k→∞

Неравенство Макмиллана является не только необходимым, но и в некотором смысле


достаточным условием разделимости схемы алфавитного кодирования.
n
2−li 6 1, то существует
P
Теорема. Если числа l1 , . . . , ln удовлетворяют неравенству
i=1
n
такая разделимая (даже префиксная) схема алфавитного кодирования σ = hai → βi ii=1 ,
что ∀ i (|βi | = li ).
210 / 907
3.1.4. Неравенство Макмиллана (3/6)
Доказательство. Без ограничения общности можно считать, что l1 6 l2 6 · · · 6 ln .
Разобьем множество {l1 , . . . , ln } на классы эквивалентности по равенству {L1 , . . . , Lm },
m
P
m 6 n. Пусть λi ∈ Li , µi ← |Li |. Тогда µi = n, λ1 < λ2 < · · · < λm . В этих обозна-
i=1
m
P µi
чениях неравенство Макмиллана можно записать так: 2λi
6 1. Из этого неравенства
i=1
следуют m неравенств для частичных сумм:
µ1
2λ1
6 1 =⇒ µ1 6 2λ1 ,
µ1
2λ1
+ 2µλ22 6 1 =⇒ µ2 6 2λ2 − µ1 2λ2 −λ1 ,
...
µ1 µ2 µm
2λ1
+ 2λ2
+ ... + 2λm
6 1 =⇒ µm 6 2λm − µ1 2λm −λ1 − µ2 2λm −λ2 − . . . − µm−1 2λm −λm−1 .
Рассмотрим слова длины λ1 в алфавите B . Поскольку µ1 6 2λ1 , из этих слов можно вы-
брать µ1 различных слов β1 , . . . , βµ1 длины λ1 . Исключим из дальнейшего рассмотрения
все слова из B ∗ , начинающиеся со слов β1 , . . . , βµ1 .

211 / 907
3.1.4. Неравенство Макмиллана (4/6)
Доказательство. (Продолжение) Далее рассмотрим множество слов в алфавите B длиной
λ2 и не начинающихся со слов β1 , . . . , βµ1 . Таких слов будет 2λ2 − µ1 2λ2 −λ1 .
Но µ2 6 2λ2 − µ1 2λ2 −λ1 , значит, можно выбрать µ2 различных слов. Обозначим их
βµ1 +1 , . . . , βµ1 +µ2 . Исключим слова, начинающиеся с βµ1 +1 , . . . , βµ1 +µ2 , из дальнейшего
рассмотрения. И далее, используя неравенства для частичных сумм, мы будем на i-м ша-
ге выбирать µi слов длины λi , βµ1 +µ2 +...+µi−1+1 , . . . , βµ1 +µ2 +...+µi−1 +µi , причём эти слова
не будут начинаться с тех слов, которые были выбраны раньше. В то же время длины
этих слов всё время растут (так как λ1 < λ2 < . . . < λm ), поэтому они не могут быть
префиксами тех слов, которые выбраны раньше. Итак, в конце имеем набор из n слов
β1 , . . . , βµ1 +...+µm = βn , |β1 | = l1 , . . . , |βn | = ln , коды β1 , . . . , βn не являются префиксами
друг друга, а значит, схема σ = hai → βi ini=1 будет префиксной и, по теореме предыду-
щего подраздела, разделимой.
Замечание. Неравенство Макмиллана справедливо не только для двоичного, но и для
m-ичного кодирования.
212 / 907
3.1.4. Неравенство Макмиллана (5/6)
Пример. Азбука Морзе — это схема алфавитного кодирования
hA → 01, B → 1000, C → 1010, D → 100, E → 0,
F → 0010, G → 110, H → 0000, I → 00, J → 0111,
K → 101, L → 0100, M → 11, N → 10, O → 111,
P → 0110, Q → 1101, R → 010, S → 000, T → 1,
U → 001, V → 0001, W → 011, X → 1001, Y → 1011,
Z → 1100i,
где по историческим и техническим причинам 0 называется точкой и обозначается зна-
ком «·», а 1 называется тире и обозначается знаком «—». Имеем
1/4 + 1/16 + 1/16 + 1/8 + 1/2 +
+ 1/16 + 1/8 + 1/16 + 1/4 + 1/16 +
+ 1/8 + 1/16 + 1/4 + 1/4 + 1/8 +
+ 1/16 + 1/16 + 1/8 + 1/8 + 1/2 +
+ 1/8 + 1/16 + 1/8 + 1/16 + 1/16 +
+ 1/16 = 2/2 + 4/4 + 8/8 + 12/16 =
= 3 + 3/4 > 1.
213 / 907
3.1.4. Неравенство Макмиллана (6/6)

Таким образом, неравенство Макмиллана для азбуки Морзе не выполнено, и эта схема
не является разделимой. Более того, в азбуке Морзе многие кодовые слова являются
префиксами других слов, а потому некоторые комбинации букв неразличимы.
Примеры. AM = 0111 = J, T O = 1111 = M M, W M W = 01111011 = JY .
На самом деле в азбуке Морзе имеются дополнительные элементы — паузы между буква-
ми (и словами), которые позволяют декодировать сообщения. Эти дополнительные эле-
менты определены неформально, поэтому приём и передача сообщений с помощью аз-
буки Морзе, особенно с высокой скоростью, являлись некоторым искусством, а не про-
стой технической процедурой.
n
Следствие. Если схема алфавитного кодирования σ = hai → βi ii=1 разделима, то суще-
n
ствует префиксная схема σ 0 = hai → βi0 ii=1 , причём ∀ i (|βi | = |βi0 |).
Пример. Схема ha → 0, b → 01i — разделимая, но не префиксная, а схема ha → 0, b → 10i —
префиксная (и разделимая).

214 / 907
3.2. Кодирование с минимальной избыточностью

Для практики важно, чтобы коды сообщений имели по возможности наименьшую дли-
ну. Алфавитное кодирование пригодно для любых сообщений, то есть для S = A∗ . Если
больше про множество S ничего не известно, то точно сформулировать задачу оптими-
зации затруднительно. Однако на практике часто доступна дополнительная информация.
Например, для текстов на естественных языках известно распределение вероятности по-
явления букв в сообщении. Использование такой информации позволяет строго поста-
вить и решить задачу построения оптимального алфавитного кодирования.

215 / 907
3.2.1. Минимизация длины кода сообщения (1/2)
n
Если задана разделимая схема алфавитного кодирования σ = hai → βi ii=1 , то любая
n
схема σ 0 = hai → βi 0 ii=1 , где последовательность hβ 0 1 , . . . , β 0 n i является перестановкой
последовательности hβ1 , . . . , βn i, также будет разделимой. Если длины элементарных ко-
дов равны, то перестановка элементарных кодов в схеме не влияет на длину кода сооб-
щения. Но если длины элементарных кодов различны, то длина кода сообщения зависит
от состава букв в сообщении и от того, какие элементарные коды каким буквам назна-
чены. Если заданы конкретное сообщение и конкретная схема кодирования, то нетрудно
подобрать такую перестановку элементарных кодов, при которой длина кода сообщения
будет минимальна. Пусть k1 , . . . , kn — количества вхождений букв a1 , . . . , an в сообще-
ние s ∈ S , а l1 , . . . , ln — длины элементарных кодов β1 , . . . , βn соответственно. Тогда, ес-
ли ki 6 kj и li > lj , то ki li + kj lj 6 ki lj + kj li . Действительно, пусть kj = k + a, ki = k и
lj = l, li = l + b, где a, b > 0. Тогда (ki lj + kj li ) − (ki li + kj lj ) = (kl + (k + a)(l + b))−
−(k(l + b) + l(k + a)) = (kl + al + bk + ab + kl) − (kl + al + kl + bk) = ab > 0.

216 / 907
3.2.1.Минимизация длины кода сообщения (2/2)

Отсюда вытекает алгоритм назначения элементарных кодов, при котором длина кода
конкретного сообщения s ∈ S будет минимальна: нужно отсортировать буквы сообщения
s в порядке убывания количества вхождений, элементарные коды отсортировать в поряд-
ке возрастания длины и назначить коды буквам в этом порядке.
Пример. Для алфавита из трёх букв кратчайшая разделимая схема имеет вид
hx → 0, y → 10, z → 11i (или hx → 1, y → 01, z → 00i), поскольку схемы с более ко-
роткими кодовыми словами не удовлетворяют неравенству Макмиллана. Если необход-
мо передать сообщение «SOS SOS SOS», то самой выгодной является схема
hS → 0, O → 10, → 11i.
Замечание. Этот простой метод решает задачу минимизации длины кода только для фик-
сированного сообщения s ∈ S и фиксированной схемы σ .

217 / 907
3.2.2. Цена кодирования (1/3)
Пусть заданы алфавит A = {a1 , . . . , an } и вероятности появления букв в сообщении
P = hp1 , . . . , pn i (pi — вероятность появления буквы ai ). Не ограничивая общности, мож-
но считать, что pi + . . . + pn = 1 и p1 > . . . > pn > 0 (то есть можно сразу исключить
буквы, которые не могут появиться в сообщении, и упорядочить буквы по убыванию ве-
n
роятности их появления). Для каждой (разделимой) схемы σ = hai → βi ii=1 алфавитно-
го кодирования математическое ожидание коэффициента увеличения длины сообщения
при кодировании σ (обозначается lσ ) определяется следующим образом:
n
Def Def
X
lσ (P ) = pi li , где li = |βi |,
i=1

и называется средней ценой (или длиной) кодирования σ при распределении вероятно-


стей P .
Пример. Для разделимой схемы A = {a, b}, B = {0, 1}, σ = ha → 0, b → 01i при рас-
пределении вероятностей h0, 5; 0, 5i цена кодирования составляет 0, 5 ∗ 1+0, 5 ∗ 2 = 1, 5,
а при распределении вероятностей h0, 9; 0, 1i она равна 0, 9 ∗ 1 + 0, 1 ∗ 2 = 1, 1.
218 / 907
3.2.2. Цена кодирования (2/3)
Введём обозначения:
Def Def Def
l∗ (P ) = inf lσ (P ), p∗ = min pi , L = blog(n − 1)c + 1.
σ i∈1..n
n
Очевидно, что всегда существует разделимая схема σ = hai → βi ii=1 , такая, что
∀ i (|βi | = L). Такая схема называется схемой равномерного кодирования. Следовательно,
1 6 l∗ (P ) 6 L, и достаточно учитывать только такие схемы, для которых ∀ i (pi li 6 L),
где li — целое и li 6 L/p∗ . Таким образом, имеется лишь конечное число схем σ , для ко-
торых l∗ (P ) 6 lσ (P ) 6 L. Значит, существует схема σ∗ , на которой инфимум достигается:
lσ∗ (P ) = l∗ (P ).
Алфавитное (разделимое) кодирование σ∗ , для которого lσ∗ (P ) = l∗ (P ), называется ко-
дированием с минимальной избыточностью, или оптимальным кодированием, для рас-
пределения вероятностей P .
Пример. Пусть в алфавите 8 букв. Рассмотрим цену равномерного кодирования C1 и
«наиболее неравномерного» кодирования C2 , при равномерном P1 и неравномерном
P2 распределении вероятностей.
219 / 907
3.2.2. Цена кодирования (3/3)
C1 l1 P1 L11 P2 L12 C2 l2 P1 L21 P2 L22
000 3 0,125 0,375 0,31 0,93 0 1 0,125 0,125 0,31 0,31
001 3 0,125 0,375 0,24 0,72 10 2 0,125 0,25 0,24 0,48
010 3 0,125 0,375 0,17 0,51 110 3 0,125 0,375 0,17 0,51
011 3 0,125 0,375 0,11 0,33 1110 4 0,125 0,5 0,11 0,44
100 3 0,125 0,375 0,09 0,27 11110 5 0,125 0,625 0,09 0,45
101 3 0,125 0,375 0,05 0,15 111110 6 0,125 0,75 0,05 0,3
110 3 0,125 0,375 0,02 0,06 1111110 7 0,125 0,875 0,02 0,14
111 3 0,125 0,375 0,01 0,03 11111110 8 0,125 1 0,01 0,08
1 3 1 3 1 4,5 1 2,71
Из таблицы видно, что при равномерном кодировании распределение вероятностей не
влияет на цену кодирования, в то время как неравномерное кодирование по сравнению
с равномерным кодированием существенно проигрывает при равномерном распределе-
нии вероятностей и несколько выигрывает при неравномерном распределении вероят-
ностей.
220 / 907
3.2.3. Алгоритм Фано (1/4)

Рекурсивный алгоритм Фано строит разделимую префиксную схему алфавитного коди-


рования, близкого к оптимальному.
Вход: P : array [1..n] of real — массив вероятностей появления букв в сообщении, упо-
рядоченный по невозрастанию;
Выход: C : array [1..n, 1..L] of 0..1 — массив элементарных кодов.
Fano(1, n, 0) // вызов рекурсивной процедуры Fano
Алгоритм Фано использует функцию Med, которая находит медиану указанной части мас-
сива P [b..e], то есть определяет такой индекс m (b 6 m < e), что сумма
элементов P [b..m]

Xm e
X
наиболее близка к сумме элементов P [(m+1)..e], то есть min P [i] − P [i] .

m∈b..(e−1)
i=b i=m+1

221 / 907
3.2.3. Алгоритм Фано (2/4)
Рекурсивная процедура Fano описана на этом слайде.
Вход: b — индекс начала обрабатываемой части массива P , e — индекс конца обрабаты-
ваемой части массива P , k — длина уже построенных кодов в обрабатываемой части
массива C .
Выход: заполненный массив C .
if e > b then
k ← k + 1 //место для очередного разряда в коде
m ← Med(b, e) //деление массива на две части
for i from b to e do
C[i, k] ← i > m //в первой части добавляем 0, во второй — 1
end for
Fano(b, m, k) //обработка первой части
Fano(m + 1, e, k) //обработка второй части
end if
Функция Med описана на следующем слайде.
222 / 907
3.2.3. Алгоритм Фано (3/4)
Вход: b — индекс начала обрабатываемой части массива P , e — индекс конца обраба-
тываемой части массива P .
Выход: m — индекс медианы
Sb ← 0 //сумма элементов первой части
for i from b to e − 1 do
Sb ← Sb + P [i] //вначале все, кроме последнего
end for
Se ← P [e] //сумма элементов второй части
m ← e //начинаем искать медиану с конца
repeat
d ← |Sb − Se | //разность сумм первой и второй частей
m ← m − 1 //сдвигаем границу медианы вниз
Sb ← Sb − P [m]; Se ← Se + P [m] //перевычисляем суммы
until |Sb − Se | > d
return m
223 / 907
3.2.3. Алгоритм Фано (4/4)
Обоснование. При каждом удлинении кодов в одной части коды удлиняются нулями, а
в другой — единицами. Таким образом, коды одной части не могут быть префиксами
другой. Удлинение кода заканчивается тогда и только тогда, когда длина части равна 1,
то есть остается единственный код. Таким образом, схема по построению префиксная, а
потому разделимая.
Пример. Коды, построенные алгоритмом Фано для заданного неравномерного распре-
деления вероятностей (n = 8).
pi li pi li
0,31 0,31 0 1 0,31
0,24 0,69 0,24 100 3 0,72
0,17 0,41 0,17 101 3 0,51
0,11 0,28 0,11 110 3 0,33
0,09 0,17 0,09 1110 4 0,36
0,05 0,08 0,05 11110 5 0,25
0,02 0,03 0,02 111110 6 0,12
0,01 0,01 111111 6 0,06
2,66
224 / 907
3.2.4. Оптимальное кодирование (1/5)
Оптимальные схемы алфавитного кодирования обладают определёнными структурны-
ми свойствами, устанавливаемыми в следующих леммах. Нарушение этих свойств для
какой-либо схемы означает, что схема не оптимальна.
n
Лемма. [1] Пусть σ = hai → βi ii=1 — схема оптимального кодирования для распределения
вероятностей P = p1 > . . . > pn > 0. Тогда если pi > pj , то li 6 lj .
Доказательство. От противного. Пусть i < j , pi > pj и li > lj . Тогда рассмотрим схему
σ 0 = {a1 → β1 , . . . , ai → βj , . . . , aj → βi , . . . , an → βn }. Имеем

lσ − lσ0 = (pi li + pj lj ) − (pi lj + pj li ) = (pi − pj )(li − lj ) > 0,

что противоречит тому, что схема σ — оптимальна.


Таким образом, не ограничивая общности, можно считать, что l1 6 . . . 6 ln .
Замечание. Фактически, лемма 1 повторяет для вероятностей то, что было обнаружено
для частот в п. 3.2.1.

225 / 907
3.2.4. Оптимальное кодирование (2/5)

n
Лемма. [2] Если σ = hai → βi ii=1 — схема оптимального префиксного кодирования для
распределения вероятностей P = p1 > . . . > pn > 0, то среди элементарных кодов име-
ются два кода максимальной длины, которые различаются только в последнем разряде.
Доказательство. По предыдущей лемме кодовые слова максимальной длины являются
последними в схеме. Далее от противного.
[ 1 ] Пусть кодовое слово максимальной длины одно и имеет вид βn = βb,
где b = 0 ∨ b = 1. Имеем ∀ i ∈ 1..n − 1 (li 6 |β|). Так как схема префиксная, то слова
β1 , . . . , βn−1 не являются префиксами β . С другой стороны, β не является префиксом слов
β1 , . . . , βn−1 , иначе было бы β = βj , а значит, βj было бы префиксом βn . Тогда схема
σ 0 ←ha1 → β1 , . . . , an → βi тоже префиксная, причём lσ0 (P ) = lσ (P ) − pn , что противо-
речит оптимальности σ .

226 / 907
3.2.4. Оптимальное кодирование (3/5)

Доказательство. (Окончание)
[ 2 ] Пусть теперь два кодовых слова βn−1 и βn максимальной длины различаются не в
последнем разряде, то есть βn−1 = β 0 b0 , βn = β 00 b00 , β 0 6= β 00 , причём β 0 , β 00 не являются
префиксами для β1 , . . . , βn−2 и наоборот. Тогда схема
σ 0 ← ha1 → β1 , . . . , an−2 → βn−2 , an−1 → β 0 b0 , an → β 00 i также является префиксной, при-
чём lσ0 (P ) = lσ (P ) − pn , что противоречит оптимальности σ .
[ 3 ] Пусть кодовых слов максимальной длины больше двух. Тогда среди них найдутся
два, которые различаются не только в последнем разряде, что противоречит уже дока-
занному пункту 2.
Замечание. В примере п. 3.2.3 имеется два элементарных кода максимальной длины,
различающиеся в последнем разряде, но в примере п. 3.2.5 показано, что кодирование
Фано не оптимально. Это говорит о том, что условие леммы 2 необходимо, но не доста-
точно для оптимальности.

227 / 907
3.2.4. Оптимальное кодирование (4/5)
n−1
Теорема. Если σn−1 = hai → βi ii=1 — схема оптимального префиксного кодирования для
распределения вероятностей P = p1 > . . . > pn−1 > 0 и pj = q 0 + q 00 ,
причём p1 > . . . > pj−1 > pj+1 > . . . > pn−1 > q 0 > q 00 > 0, то кодирование со схемой

σn = ha1 → β1 , . . . , aj−1 → βj−1 , aj+1 → βj+1 , . . . ,


an−1 → βn−1 , aj → βj 0, an → βj 1i

является оптимальным префиксным кодированием для распределения вероятностей


Pn = p1 , . . . , pj−1 , pj+1 , . . . , pn−1 , q 0 , q 00 .
Доказательство. Заметим следующее.
[ 1 ] Если σn−1 было префиксным, то σn тоже будет префиксным по построению.
[ 2 ] Цена кодирования для схемы σn больше цены кодирования для схемы σn−1 на ве-
личину pj : lσn (Pn ) = p1 l1 + p2 l2 + . . . + pj−1 lj−1 + pj+1 lj+1 + . . . + pn−1 ln−1 +
+q 0 (lj + 1) + q 00 (lj + 1) = p1 l1 + . . . + pn−1 ln−1 + lj (q 0 + q 00 ) + (q 0 + q 00 ) =
= p1 l1 + . . . + pn−1 ln−1 + lj pj + pj = lσn−1 (Pn−1 ) + pj .
228 / 907
3.2.4. Оптимальное кодирование (5/5)
Доказательство. (Продолжение)
[ 3 ] Пусть некоторая схема σn0 ←hai → βi ini=1 оптимальна для Pn . Тогда по лемме 2 два
кода максимальной длины различаются в последнем разряде:
σn0 = ha1 → β10 , . . . , an−2 → βn−2
0
, an−1 → β0, an → β1i. Положим l0 ← |β| и рассмотрим
0
схему σn−1 ←ha1 → β10 , . . . , aj → β, . . . , an−2 → βn−2
0
i, где j определено так, чтобы
0 00 0
pj−1 > q + q > pj+1 . Цена кодирования для схемы σn больше цены кодирования для
0
схемы σn−1 также на величину pj :

lσn0 (Pn ) = l1 p1 + . . . + ln−2 pn−2 + (l0 + 1)q 0 + (l0 + 1)q 00 =


= l1 p1 + . . . + ln−2 pn−2 + l0 (q 0 + q 00 ) + (q 0 + q 00 ) = lσn−1
0 (Pn−1 ) + pj .

[ 4 ] Схема σn0 — префиксная, значит, схема σn−1


0
— тоже префиксная.
[ 5 ] Схема σn−1 — оптимальна, значит, lσn−1
0 (Pn−1 ) > lσn−1 (Pn−1 ).
[ 6 ] Имеем lσn (Pn ) = lσn−1 (Pn−1 ) + pj 6 lσn−1
0 (Pn−1 ) + pj = lσn0 (Pn ). Но схема σn0
оптимальна, значит, схема σn также оптимальна.
229 / 907
3.2.5. Алгоритм Хаффмена (1/5)
Рекурсивный алгоритм Хаффмена строит схему оптимального префиксного алфавитного
кодирования для заданного распределения вероятностей появления букв.
Вход: n > 1 — количество букв, P : array [1..n] of real — глобальный массив вероятностей
букв, упорядоченный по убыванию.
Выход: C : array [1..n, 1..L] of 0..1 — глобальный массив элементарных кодов,
` : array [1..n] of 1..L — глобальный массив длин элементарных кодов
if n = 2 then
C[1, 1] ← 0; `[1] ← 1 //первый элемент
C[2, 1] ← 1; `[2] ← 1 //второй элемент
else
q ← P [n − 1] + P [n] //сумма двух последних вероятностей
j ← Up(n, q) //поиск места и вставка суммы
Huffman(n − 1) //рекурсивный вызов
Down(n, j) //достраивание кодов
end if
230 / 907
3.2.5. Алгоритм Хаффмена (2/5)
Функция Up находит в массиве P место, в котором должно находиться число q (см. пре-
дыдущую теорему), и вставляет это число, сдвигая вниз остальные элементы.
Вход: n — длина обрабатываемой части массива P , q — вставляемая сумма.
Выход: измененный массив P .
j ← 1 //место вставляемого элемента
for i from n − 1 downto 2 do
if P [i − 1] < q then
P [i] ← P [i − 1] //сдвиг элемента массива
else
j ← i //определение места вставляемого элемента
exit for i //всё сделано — цикл не нужно продолжать
end if
end for
P [j] ← q //запись вставляемого элемента
return j

231 / 907
3.2.5. Алгоритм Хаффмена (3/5)
Процедура Down строит оптимальный код для n букв на основе построенного оптималь-
ного кода для n − 1 буквы. Для этого код буквы с номером j временно исключается из
массива C путем сдвига вверх кодов букв с номерами, большими j , а затем в конец об-
рабатываемой части массива C добавляется пара кодов, полученных из кода буквы с но-
мером j удлинением на 0 и 1 соответственно. Здесь C[i, ∗] означает вырезку из массива,
то есть i-ю строку массива C .
Вход: n — длина обрабатываемой части массива P , j — номер «разделяемой» буквы.
Выход: оптимальные коды в первых n элементах массивов C и `.
c ← C[j, ∗], l ← `[j] //запоминание кода буквы j и длины этого кода
for i from j to n − 2 do
C[i, ∗] ← C[i + 1, ∗] //сдвиг кода
`[i] ← `[i + 1] //и его длины
end for
C[n − 1, ∗] ← c; C[n, ∗] ← c //копирование кода буквы j
C[n − 1, l + 1] ← 0; C[n, l + 1] ← 1 //наращивание кодов
`[n − 1] ← l + 1; `[n] ← l + 1 //и увеличение длин
232 / 907
3.2.5. Алгоритм Хаффмена (4/5)
Обоснование. Для пары букв при любом распределении вероятностей оптимальное ко-
дирование очевидно: первой букве нужно назначить код 0, а второй — 1. Именно это и
делается в первой части оператора if основной процедуры Huffman. Рекурсивная часть
алгоритма в точности следует доказательству теоремы предыдущего подраздела. С по-
мощью функции Up в исходном упорядоченном массиве P отбрасываются две послед-
ние (наименьшие) вероятности, и их сумма вставляется в массив P так, чтобы массив (на
единицу меньшей длины) остался упорядоченным. Заметим, что при этом место встав-
ки сохраняется в локальной переменной j . Так происходит до тех пор, пока не останется
массив из двух элементов, для которого оптимальный код известен. После этого в обрат-
ном порядке строятся оптимальные коды для трёх, четырёх и т. д. элементов. Заметим,
что при этом массив вероятностей P уже не нужен — нужна только последовательность
номеров кодов, которые должны быть изъяты из массива кодов и продублированы в кон-
це с добавлением разряда. А эта последовательность хранится в экземплярах локальной
переменной j , соответствующих рекурсивным вызовам процедуры Huffman.

233 / 907
3.2.5. Алгоритм Хаффмена (5/5)
Пример. Построение оптимального кода Хаффмена для n = 8. В левой части таблицы
показано изменение массива P , а в правой части — массива C . Позиция, соответствую-
щая текущему значению переменной j , выделена полужирным начертанием шрифта.
pi C li pi li
0,31 0,31 0,31 0,31 0,31 0,41 0,59 0 1 1 00 00 00 00 2 0,62
0,24 0,24 0,24 0,24 0,28 0,31 0,41 1 00 01 10 10 10 10 2 0,48
0,17 0,17 0,17 0,17 0,24 0,28 01 000 11 11 11 11 2 0,34
0,11 0,11 0,11 0,17 0,17 001 010 011 011 011 3 0,33
0,09 0,09 0,09 0,11 011 0100 0100 0100 4 0,36
0,05 0,05 0,08 0101 01010 01010 5 0,25
0,02 0,03 01011 010110 6 0,12
0,01 010111 6 0,06
2,56

Цена кодирования составляет 2, 56, что несколько лучше, чем в кодировании, полученном
алгоритмом Фано.
234 / 907
3.3. Помехоустойчивое кодирование

Надёжность электронных устройств по мере их совершенствования всё время возраста-


ет, но тем не менее в их работе возможны как систематические, так и случайные ошиб-
ки. Сигнал в канале связи может быть искажён помехой, поверхность магнитного носите-
ля может быть повреждена, в разъёме может быть потерян контакт и т. п. Ошибки аппа-
ратуры ведут к искажению или потере передаваемых или хранимых данных. При опре-
делённых условиях, некоторые из которых рассматриваются в этом разделе, можно при-
менять методы кодирования, позволяющие правильно декодировать исходное сообще-
ние, несмотря на ошибки в данных кода. В качестве исследуемой модели достаточно рас-
смотреть канал связи с помехами, потому что к этому случаю легко сводятся остальные.
Например, запись на диск можно рассматривать как передачу данных в канал, а чтение
с диска — как приём данных из канала.

235 / 907
3.3.1. Кодирование с исправлением ошибок (1/4)
Пусть имеется канал связи, содержащий источник помех. Помехи проявляются в том,
что принятое сообщение может отличаться от переданного, то есть имеется отношение
C ⊂ K × K 0 , K, K 0 ⊂ B ∗ , где K — множество переданных, а K 0 — соответствующее
множество принятых по каналу сообщений. Используя запись s0 = C(s), s ∈ K , s0 ∈ K 0
подразумеваем, что разные «вызовы» отношения C с одним и тем же аргументом могут
возвращать различные результаты. Кодирование F : A∗ → B ∗ (вместе с декодировани-
ем F −1 : B ∗ → A∗ ), обладающее тем свойством, что

F C F −1
S −→ K −→ K 0 −→ S, ∀ s ∈ S ⊂ A∗ F −1 (C(F (s))) = s ,


называется помехоустойчивым, или самокорректирующимся, или кодированием с исправ-


лением ошибок. Без ограничения общности можно считать, что A = B = {0, 1}. Кроме
того, естественно предположить, что содержательное кодирование (вычисление F и F −1 )
выполняется на устройстве, свободном от помех, то есть F и F −1 являются функциями в
обычном смысле.
236 / 907
3.3.1. Кодирование с исправлением ошибок (2/4)
Замечание. Функция F −1 является декодированием для кодирования F , но она не явля-
ется обратной функцией для функции F в смысле определений пп. 1.4.4, 1.6.2.
Вообще говоря, ошибки в канале могут быть следующих типов:
I 0 7→ 1, 1 7→ 0 — ошибка типа замещения разряда;
I 0 7→ ε, 1 7→ ε — ошибка типа выпадения разряда;
I ε 7→ 1, ε 7→ 0 — ошибка типа вставки разряда.
Если про источник помех C ничего не известно, то функции F и F −1 не могут быть опре-
делены, за исключением тривиального случая S = ∅.
Пример. Если канал физически разорвать, то все разряды выпадут, и никакое декодиро-
вание невозможно.
Таким образом, для решения поставленной задачи необходимо иметь описание возмож-
ных ошибок (проявлений помех). Вообще говоря, помехи могут иметь различные харак-
теристики в зависимости от физической природы канала:
I ошибки могут зависеть от самого передаваемого сообщения;
I ошибки могут случайно возникать с некоторой вероятностью;
I ошибки могут определяться физическим устройством канала.
237 / 907
3.3.1. Кодирование с исправлением ошибок (3/4)
Здесь рассматривается простейшая математическая модель канала, практически не за-
висящая от его физической природы. Предполагается, что:
I сообщения передаются блоками определённой длины n, причём ошибки в различ-
ных блоках независимы;
I значения разрядов 0 и 1 равноправны: если возможна ошибка 0 7→ 1, то возможна
и ошибка 1 7→ 0;
I для каждого типа ошибок известна верхняя граница количества ошибок в блоке дли-
ны n.
Общая характеристика ошибок канала (то есть их количество и типы) обозначается
δ = hδ1 , δ2 , δ3 i, где δ1 , δ2 , δ3 — верхние оценки количества ошибок замещения, выпаде-
ния, вставки разряда, соответственно.
Пример. Допустим, что имеется канал с характеристикой δ = h1, 0, 0i, то есть в канале
возможно не более одной ошибки типа замещения разряда при передаче блока длины n.
Кодирование: F (a) ← aaa (то есть каждый разряд в сообщении утраивается) и декоди-
рование F −1 (abc) ← a + b + c > 1 (то есть разряд восстанавливается методом «голосо-
вания») кажется помехоустойчивым для данного канала.
238 / 907
3.3.1. Кодирование с исправлением ошибок (4/4)
Пример. (Продолжение) Однако метод голосования очень расточителен (потребуется пе-
редать три блока вместо одного) и не вполне надёжен — если длина блока n не кратна
трём, то граница блоков пройдёт по коду одного разряда, и если ошибка произойдёт в
последнем разряде первого блока и в соседнем первом разряде второго блока, то вос-
становление пройдёт неверно.
Таким образом, при построении помехоустойчивого кодирования необходимо найти ба-
ланс между надёжностью и эффективностью.
Отступление. Следует различать обнаружение ошибок и исправление ошибок. Например, ранее
при передаче данных широко использовался бит чётности, то есть дополнительный разряд, ко-
торый добавлялся к каждому блоку так, чтобы общее количество разрядов, имеющих значение 1,
было чётным (или нечётным). Очевидно, что этот простой метод позволяет обнаружить одиноч-
ную ошибку типа замещения, но не позволяет её исправить. В настоящее время бит чётности при-
меняется реже, поскольку имеет невысокую помехоустойчивость: если в одном блоке произойдут
две ошибки типа замещения, то они не будут обнаружены.

239 / 907
3.3.2. Возможность исправления всех ошибок (1/6)

Рассмотрим множество сообщений S ⊂ {0, 1}∗ , некоторое кодирование


F : {0, 1}∗ → {0, 1}∗ и канал C с характеристикой δ . Пусть EFδ (s) — множество слов,
которые могут быть получены из сообщения s ∈ S в результате кодирования F и всех
возможных комбинаций допустимых в канале ошибок типа δ . Возможность исправления
ошибок определяется свойствами семейства множеств EFδ (s).
Пример. Пусть S = {00, 11}, кодирование F добавляет к сообщению третий разряд (бит
чётности), а δ = h1, 0, 0i для блоков длины 3. Тогда F (00) = 000 и EFδ (00) = {000, 001,
010, 100}, F (11) = 110 и EFδ (11) = {110, 111, 100, 010}. Имеем EFδ (00) ∩ EFδ (11) =
= {100, 010}, и если из канала получен один из кодов 100 или 010, то однозначно опре-
делить исходное сообщение невозможно.
Если же в качестве третьего разряда при кодировании взять конъюнкцию, то F (00) = 000
и EFδ (00) = {000, 001, 010, 100}, F (11) = 111 и EFδ (11) = {111, 110, 101, 011}. При этом
EFδ (00) ∩ EFδ (11) = ∅ и исходное сообщение определяется однозначно.

240 / 907
3.3.2. Возможность исправления всех ошибок (2/6)
Замечание. Множество сообщений S является существенным фактором. Например, если
в условиях предыдущего примера множество сообщений S = {01, 10}, то, как нетрудно
проверить, никакое добавление третьего разряда не является помехоустойчивым коди-
рованием.
Теорема. Чтобы существовало помехоустойчивое кодирование F с исправлением всех 
ошибок типа δ , необходимо и достаточно, чтобы ∀ s1 , s2 ∈ S EFδ (s1 ) ∩ EFδ (s2 ) = ∅ .
Доказательство.
[ =⇒ ] Если кодирование помехоустойчивое, то EFδ (s1 ) ∩ EFδ (s2 ) = ∅, иначе F −1 невоз-
можно было бы определить как функцию. 
[ ⇐= ] Из условия ∀ s1 , s2 ∈ S EFδ (s1 ) ∩ EFδ (s2 ) = ∅ по теореме п. 1.7.1 следует, что
существует разбиение B = {Bs }s∈S множества {0, 1}∗ , причём ∀ s ∈ S EFδ (s) ⊂ Bs .


По разбиению B требуемая функция F −1 : {0, 1}∗ → S строится следующим образом:


if s0 ∈ Bs then F −1 (s0 ) ← s end if.

241 / 907
3.3.2. Возможность исправления всех ошибок (3/6)

Таким образом, сама возможность исправления ошибок зависит от трёх факторов: мно-
жества сообщений, применяемого кодирования и характеристики канала. Как правило,
множество сообщений и характеристика канала считаются заданными, и задача состоит
в том, чтобы подобрать по возможности эффективное помехоустойчивое кодирование.
Однако в некоторых практических случаях исправление всех ошибок невозможно.
Пример. Рассмотрим канал, в котором в любом передаваемом разряде может происхо-
дить ошибка типа замещения с вероятностью p, причём замещения различных разря-
дов статистически независимы. Такой канал называется двоичным симметричным. В этом
случае любое слово может быть преобразовано в любое другое слово той же длины за-
мещениями разрядов. Таким образом, исправить все ошибки в двоичном симметричном
канале невозможно даже при сколь угодно малом p > 0.

242 / 907
3.3.2. Возможность исправления всех ошибок (4/6)

Отступление. Для различных моделей со случайными ошибками (в том числе для двоичного сим-
метричного канала) средствами теории вероятностей рассматривается и решаются, в частности,
такие задачи как:

I определение максимального количества информации, которая может быть передана через


канал при наличии помех (пропускная способность канала);
I определение математического ожидания вероятности исправления ошибок в канале (досто-
верность декодирования);
I определение минимального количества информации, которую необходимо передать через
канал с сохранением возможности последующего использования данных (сжатие с поте-
рями).

Все эти вопросы являются предметом теории информации, которая здесь не рассматривается.

243 / 907
3.3.2. Возможность исправления всех ошибок (5/6)
Рассмотрим возможность исправления всех ошибок с практической точки зрения. Пусть
в канале возможны только ошибки замещения разрядов (выпадение и вставка разрядов
исключены), сообщения передаются блоками длины n и в каждом разряде возможна
ошибка с вероятностью p. Это допущение соответствует устройству шины передачи дан-
ных в современном компьютере. Тогда вероятность того, что произойдёт ровно k ошибок
равна v = pk (1 − p)n−k . Рассмотрим численное значение этой величины при некоторых
типичных значениях величин n, k и p.

n k p v n k p v
−03 −04 −03 −04
32 1 10 9, 695 · 10 64 1 10 9, 389 · 10
32 1 10−06 1, 000 · 10−06 64 1 10−06 9, 999 · 10−07
32 2 10−03 9, 704 · 10−07 64 2 10−03 9, 399 · 10−07
32 3 10−03 9, 714 · 10−10 64 3 10−03 9, 408 · 10−10
32 2 10−06 1, 000 · 10−12 64 2 10−06 9, 999 · 10−13
32 3 10−06 1, 000 · 10−18 64 3 10−06 9, 999 · 10−19
244 / 907
3.3.2. Возможность исправления всех ошибок (6/6)

Таким образом, возможностью одновременного возникновения ошибок большой кратно-


сти можно пренебречь, и достаточно рассматривать только каналы с ограниченной ха-
рактеристикой δ << n, для которых задача исправления всех ошибок оказывается раз-
решимой.
Окончательно приходим к следующему определению. F является кодированием с ис-
правлением p ошибок типа δ , если существует декодирование F −1 такое, что

∀ s ∈ S ∀ s0 ∈ EFδ (s) |E δ hF (s), s0 i| 6 p =⇒ F −1 (s0 ) = s



.

245 / 907
3.3.3. Расстояния Левенштейна и Хэмминга (1/4)
Неотрицательная функция d(x, y) : M × M → R+ называется расстоянием (или метри-
кой) на множестве M , если выполнены три условия, которые называются аксиомами мет-
рики.
1. Аксиома тождества: d(x, y) = 0 ⇐⇒ x = y .
2. Аксиома симметрии: d(x, y) = d(y, x).
3. Неравенство треугольника:
p d(x, y) 6 d(x, z) + d(y, z).
Пример. Функция (x1 − x2 )2 + (y1 − y2 )2 + (z1 − z2 )2 является метрикой и называет-
ся евклидовым расстоянием между точками (x1 , y1 , z1 ) и (x2 , y2 , z2 ) в трёхмерном про-
странстве R3 .
Множество {y | d(x, y) 6 p} называется шаром, или метрической окрестностью, с цен-
тром в x и радиусом p.
Ошибки замещения, выпадения и вставки символов можно рассматривать как операции
с двоичными словами. Применяя эти операции, возможно одно слово α ∈ {0, 1}∗ пре-
образовать в другое слово β ∈ {0, 1}∗ .
07→1 17→0 07→ε ε7→0 ε7→0 07→ε
Пример. 01 −→ 11 −→ 10; 01 −→ 1 −→ 10; 01 −→ 010 −→ 10.
246 / 907
3.3.3. Расстояния Левенштейна и Хэмминга (2/4)
Минимальное число операций, переводящее слово α в слово β называется расстоянием
Левенштейна и обозначается L(α, β).
Пример. L(01, 10) = 2.
Лемма. Расстояние Левенштейна L является метрикой.
Доказательство.
[ 1 ] L(α, β) = 0 ⇐⇒ α = β , поскольку преобразование отсутствует тогда и только тогда,
когда слова совпадают.
[ 2 ] L(α, β) = L(β, α), поскольку ошибки симметричны и, значит, преобразования слов
обратимы.
[ 3 ] L(α, β) 6 L(α, γ) + L(β, γ), поскольку конкатенация последовательностей преоб-
разования α 7→ γ и γ 7→ β является некоторой последовательностью, преобразующей α
в β , а L(α, β) является длиной кратчайшей из таких последовательностей.
Замечание. Расстояние Левенштейна нетрудно определить для слов в произвольном ал-
фавите, а не только в алфавите {0, 1}. В таком случае это расстояние часто называют ди-
станцией редактирования.
247 / 907
3.3.3. Расстояния Левенштейна и Хэмминга (3/4)

Отступление. На операции редактирования могут быть наложены различные ограничения. При


этом, если преобразования слов остаются обратимыми, а конкатенация преобразований являет-
ся преобразованием, то расстояние Левенштейна остаётся метрикой. Например, в популярной
интеллектуальной игре требуется преобразовать одно слово в другое, заменяя по одной букве. В
этой игре 3 6 L(коза, волк) 6 5, поскольку
коза7→поза7→пола7→полк7→волк.
Пусть некоторый канал имеет характеристику δ = hδ1 , δ2 , δ3 i. Пусть E δ (α) — множество
слов, которые могут быть получены из слова α в результате всех возможных комбинаций
допустимых в канале ошибок типа δ . Поскольку рассматриваются симметричные ошибки,
ясно что β ∈ E δ (α) ⇐⇒ α ∈ E δ (β).

248 / 907
3.3.3. Расстояния Левенштейна и Хэмминга (4/4)
Положим H δ (α, β) ← if α ∈ E δ (β) then L(α, β) else +∞ end if.
Функция H δ называется расстоянием Хэмминга. Расстояние Хэмминга является метрикой
по тем же причинам, что и расстояние Левенштейна, а потому множество E δ (α) уместно
называть δ -окрестностью слова α.
Пример. Расстояние Хэмминга в E2n . Пусть δ = hn, 0, 0i, то есть допускаются только ошиб-
ки типа замещения разрядов. Рассмотрим слова α = a1 . . . an и β = b1 . . . bn . Тогда
n
Def
X
δ
H (α, β) = (ai 6= bi ).
i=1

То есть расстоянием Хэмминга между битовыми шкалами одной длины является чис-
ло несовпадающих разрядов. Именно этот частный случай часто называют расстояни-
ем Хэмминга в E2n и обозначают H n .
Замечание. В последней формуле, так же как и в других местах этого конспекта, исполь-
зуется неявное приведение false 7→ 0, true 7→ 1.
249 / 907
3.3.4. Кодовое расстояние схемы (1/3)
Рассмотрим применение введённых понятий к простейшему случаю алфавитного коди-
n
рования. Пусть σ = hai → βi ii=1 — схема алфавитного кодирования, а d — некоторая
метрика на B ∗ . Тогда минимальное расстояние между элементарными кодами
Def
d(σ) = min d(βi , βj )
16i<j6n

называется кодовым расстоянием схемы σ в метрике d.


n
Теорема. Алфавитное кодирование со схемой σ = hai → βi ii=1 и с кодовым расстоянием
Хэмминга H(σ) = 0min 00
H δ (β 0 , β 00 ) является кодированием с исправлением h ошибок
β ,β ∈V
типа δ тогда и только тогда, когда H(σ) > 2h.
Доказательство. Если можно исправить ошибки в каждом из кодовых слов, то можно ис-
править ошибки и во всем сообщении. Поэтому достаточно рассматривать только кодо-
вые слова. Заметим, что множество E δ (α) — это шар радиуса h с центром в α. Таким об-
разом, E δ (βi ) ∩ E δ (βj ) = ∅ ⇐⇒ H(σ) > 2h.
По теореме п. 3.3.2 условие E δ (βi ) ∩ E δ (βj ) = ∅ равносильно существованию декоди-
рования.
250 / 907
3.3.4. Кодовое расстояние схемы (2/3)

Другими словами, исправление ошибок типа δ возможно тогда и только тогда, когда ко-
довые слова схемы не лежат в δ -окрестностях друг друга.
Следствие. Рассмотрим схему равномерного кодирования σ = hai → βi ini=1 ,
где ∀ i (|βi | = m), m > blog(n − 1)c + 1. Такая схема   h ошибок типа
может исправлять
m
P
замещения в m разрядах, если, и только если min βi [k] 6= βj [k] > 2h, то есть
16i<j6n k=1
если, и только если любые два кодовых слова различаются не менее чем в 2h разрядах.

251 / 907
3.3.4. Кодовое расстояние схемы (3/3)

Пример. На рисунке представлен гиперкуб для про-


странства E23 и две 1-окрестности точек 101 и 010
(то есть два шара радиуса 1 с центрами в точках 101
и 010). Очевидно, что можно взять два любых ин-
версных кода, и шары с центрами в этих кодах не
пересекаются, но все другие шары радиуса 1 с цен-
трами в других точках пересекаются с обоими вы-
деленными шарами. Из этого наблюдения и теоре-
мы следует, что трёхразрядный код может исправ-
лять одну ошибку типа замещения для алфавитно-
го кодирования только двухбуквенного алфавита.

252 / 907
3.3.5. Мощность кодирования (1/4)
Мощностью кодирования называется мощность множества сообщений S , которые удаёт-
ся закодировать с выполнением заданных условий. Чем мощнее кодирование, тем боль-
ше различных сообщений возможно закодировать с его помощью.
Из теоремы п. 3.3.2 следует, что помехоустойчивое кодирование максимальной мощно-
сти достигается в том случае, когда разбиение множества принятых сообщений имеет
максимальную мощность.
Пример. Помехоустойчивое кодирование с исправлением не более одной ошибки типа
замещения в блоке длины 3 имеет мощность не более 2.
Рассмотрим случай канала, в котором возможно не более h ошибок замещения разря-
дов в блоках длины n. Какова максимальная возможная мощность помехоустойчивого
кодирования? В рассматриваемом случае в метрическом пространстве E2n с расстояни-
ем Хэмминга H n множество возможных ошибок в сообщении s определяется как шар
радиуса h с центром в коде сообщения F (s):

hh,0,0i Def
EF (s) = V n (F (s), h), где V n (x, h) = {y ∈ E2n | H n (x, y) 6 h} .
253 / 907
3.3.5. Мощность кодирования
 (2/4) 
h
E2n n
P
Лемма. ∀ x ∈ ∀h > 0 |V (x, h)| = C(n, i) .
i=0
h
Доказательство. V n (x, h) = {y ∈ E2n | H n (x, y) 6 h} = {y ∈ E2n | H n (x, y) = i},
S
i=0
| {y ∈ E2n | H n (x, y) = i} | = C(n, i).
Замечание. Доказанную лемму можно обобщить для любого дискретного метрическо-
го пространства, в частности, пространства слов над любым алфавитом с расстоянием
Левенштейна.
Теорема. Мощность помехоустойчивого кодирования для канала, в котором возможно не
более h ошибок замещения разрядов в блоках длины n, не превосходит числа шаров, ко-
2n
торые можно уложить в пространстве E2n без пересечений: |S| 6 h
.
P
C(n, i)
i=0
Доказательство. Для каждого сообщения множество возможных ошибок является шаром
радиуса h, для помехоустойчивости шары не должны пересекаться, а всего в простран-
стве 2n точек.
254 / 907
3.3.5. Мощность кодирования (3/4)
Пример. В следующей таблице показаны верхние оценки для мощности помехоустойчи-
вовго кодирования в зависимости от h и n.
n
h\ 2 3 4 5 6 7 8 9 10 11 12
0 4 8 16 32 64 128 256 512 1024 2048 4096
1 1 2 3 5 9 16 28 51 93 170 315
2 1 1 1 2 2 4 6 11 18 30 51
3 1 1 1 2 2 2 3 5 7 11 17
Замечание. Случай h = 0 соответствует максимальной мощности кодирования при отсут-
ствии ограничений. Такое кодирование называется безызбыточным.
Специфические особенности множества сообщений S можно использовать при постро-
ении кодирования, однако это требует специальных ухищрений и не является универ-
сальным решением. Для практики наиболее важен случай S = E2m , |S| = 2m , то есть со-
общением может быть любое слово длины m.
Следствие. Если S = E2m и существует помехоустойчивое кодирование для канала, в ко-
тором возможно не более одной ошибки замещения в блоке длины n, то 2m 6 2n /(n + 1).
Доказательство. По формуле теоремы C(n, 0) + C(n, 1) = 1 + n. 255 / 907
3.3.5. Мощность кодирования (4/4)
Помехоустойчивое кодирование не может быть безызбыточным. Обозначим k ← n−m —
минимальное количество контрольных разрядов, то есть избыточных разрядов, необхо-
димых для помехоустойчивости.
Пример. В следующей таблице показано соотношение для m, n и k при h = 1. Здесь
n0 ←b2n /(n + 1)c. Для n = 1, 2 помехоустойчивого кодирования не существует.
n 3 4 5 6 7 8 9 10 11 12 13 14 15 16
n0 2 3 5 9 16 28 51 93 170 315 585 1092 2048 3855
2m 2 2 4 8 16 16 32 64 128 256 512 1024 2048 2048
m 1 1 2 3 4 4 5 6 7 8 9 10 11 11
k 2 3 3 3 3 4 4 4 4 4 4 4 4 5
Можно заметить, например, что 7-разрядные блоки передают столько же информации и
с такой же надёжностью, что и 8-разрядные, аналогичная ситуация для 15-разрядных и
16-разрядных кодов и т. д. Доля контрольных разрядов, необходимых для существова-
ния помехоустойчивого кодирования, начиная с n = 6 не превышает половины всех раз-
рядов блока и с ростом n постепенно уменьшается. В частности, при n ∈ 27..57 имеем
k = 6, а при n = 64 имеем k = 7.
256 / 907
3.3.6. Виды кодирования (1/5)
Предложено множество разнообразных способов помехоустойчивого кодирования. Все
эти способы подчиняются выведенным количественным ограничениям, но отличаются ис-
пользуемым математическим аппаратом, удобством применения, наглядностью и други-
ми качественными характеристиками.
Пример. Пусть m = 2, h = 1. Тогда минимально n = 5, k = 3. Можно подобрать подходя-
щие четыре пятиразрядных кода так, чтобы их 1-окрестности в метрике Хэмминга не пе-
ресекались. В частности, с помощью карты Карно, как показано на рисунке. Выбранные
коды (центры шаров) выделены полужирным начертанием и подчёркнуты, сами шары
выделены различной штриховкой.

257 / 907
3.3.6. Виды кодирования (2/5)
Пример. (Продолжение) Затем можно произвольно назначить коды сообщениям:
00 7→ 00001, 01 7→ 01010, 11 7→ 11111, 10 7→ 10100. Декодирование можно реализовать
с помощью дерева решений, как показано на рисунке.

Варианты с пометкой «err» означают появление ошибки, при которой произошло более
одного замещения разряда. Такую ошибку данное кодирование исправить не может, но
может обнаружить.
Замечание. Выбор системы непересекающихся шаров в E2n , назначения кодов словам из
E m является произвольным. Если сохранить этот выбор в тайне, то кодирование, наряду
с помехоустойчивостью, станет обладать и свойствами тайнописи.
258 / 907
3.3.6. Виды кодирования (3/5)

Среди пестроты методов помехоустойчивого кодирования своей простотой и ясностью


выделяется группа методов, основанных на применении математического аппарата и
обозначений линейной алгебры.
Замечание. В контексте этого раздела знак + означает сложение по модулю 2, а знак
умножения опускается, что позволяет использовать обычные обозначения линейной ал-
гебры, имея в виду, что все векторы и матрицы — булевы, и операции выполняются по со-
ответствующим правилам. Размеры матриц и векторов, если нужно, указываются в ниж-
нем индексе.
Введём обозначения: 0m означает вектор из m нулей, 0m×n означает матрицу размера
m × n из нулей, а Im означает единичную матрицу размера m × m.

259 / 907
3.3.6. Виды кодирования (4/5)
Рассмотрим простейший случай кодирования, когда исходными сообщениями являются
все слова длины m, а кодами являются блоки длины n, n > m.
Пусть α = a1 . . . am ∈ E2m — исходное сообщение, а β = b1 . . . bn ∈ E2n — кодовый блок.
Рассмотрим случай, когда каждый разряд β можно представить в виде линейной функции
от разрядов α. ТогдаPmкодирование записывается следующим образом:
∀ j ∈ 1..n (bj = i=1 ai gi,j ). Используя обозначения линейной алгебры, код β можно
представить в виде произведения вектора α и булевой матрицы Gm×n , составленной из
коэффициентов gi,j , или β = αG. Матрица G называется порождающей матрицей кода.

 1 0 0 1 0
Пример. Рассмотрим сообщение α = 0 1 1 . Пусть матрица G = 0 1 0 0 1.

  0 0 1 1 1
 1 0 0 1 0 
Тогда β = 0 1 1 0 1 0 0 1 = 0 1 1 1 0 . Здесь m = 3, k = 2, n = 5.
0 0 1 1 1
260 / 907
3.3.6. Виды кодирования (5/5)
Если ∃ G−1
n×m (GG
−1
= Im ), то βG−1 = (αG)G−1 = α(GG−1 ) = αIm = α, и декодиро-
вание выполняется умножением кода на матрицу G−1 .

Теорема. Если ∃ Hk×n GH T = 0m×k , то β = αG ⇐⇒ βH T = 0k .
Доказательство. β = αG ⇐⇒ βH T = αGH T = α0m×k = 0k .
Матрица H называется проверочной, поскольку с помощью равенства βH T = 0k позво-
ляет проверить, является ли принятый через канал код β действительно кодом некото-
рого сообщения α при кодировании
 G. 
0 1 1 1 0
Пример. Матрица H = является проверочной для матрицы G преды-
1 0 1 0 1
 
 1 0  
1 0 0 1 0 0
 1 0 0
дущего примера: GH T = 0 1 0 0 1 
1 1= 0 0 .
 
0 0 1 1 1 1 0  0 0
0 1
261 / 907
3.3.7. Систематическая форма кодовых сообщений (1/3)
Известен очень простой способ определения матриц G, G−1 и H , который из-за сво-
ей формы называется систематическим кодированием. При систематическом кодирова-
нии блок из n разрядов состоит из m информационных разрядов, за которыми следуют
k = n − m проверочных (или контрольных) разрядов, причём информационные разря-
ды копируются в код без изменения, а проверочные разряды вычисляются как линей-
ные функции от информационных разрядов. В этих соглашениях порождающая матрица
имеет вид G = [Im |Pm×k ], где Im — единичная матрица, формирующая информацион-
ные разряды, а Pm×k — матрица, определяющая проверочную часть.
Отступление. В терминах линейной алгебры, если строки порождающей матрицы G линейно
независимы, то коды различных сообщений образуют линейное подпространство векторного про-
странства E2n . В этом случае проверочная матрица H задаёт ортогональное дополнение вектор-
ного пространства, заданного матрицей G. Все положения распространяются на случай вектор-
ных пространств над любым конечным полем, а не только E2 . Использование понятий линейной
алгебры (в том числе понятий, выходящих за рамки изложенных в главе 2) позволяет сделать опи-
сание кодирования лаконичным и общим, но не меняет алгоритмической сути дела.
262 / 907
3.3.7. Систематическая форма кодовых сообщений (2/3)
Теорема. Если G = [Im |Pm×k ], то:
−1 T
1) Gn×m ← [Im |0m×k ] и при этом GG−1 = Im ;
 T 
2) Hk×n ← Pk×m |Ik и при этом GH T = 0m×k .
Доказательство.
[ 1 ] Положим Cm×m ← GG−1 . Имеем Gi,l = if i = l then 1 else 0 end if или, короче,
n
Gi,l = (i = l) при 1 6 i, l 6 m, и также G−1 Gi,l G−1
P
l,j = (l = j). Тогда Ci,j = l,j = (i = j),
l=1
то есть C = Im .
[ 2 ] Положим Cm×k ← GH T . Имеем Gi,l = (i = l) при 1 6 i, l 6 m, Hl,j
T
= (l − m = j)
T
при m + 1 6 l 6 m + k, 1 6 j 6 k , а также Gi,l = Pi,l−m при l > m и Hl,j = Pl,j при
n m n
T T T
P P P
1 6 l 6 m. Тогда Ci,j = Gi,l Hl,j = Gi,l Hl,j + Gi,l Hl,j = Pi,j + Pi,j = 0.
l=1 l=1 l=m+1
Замечание. Напомним, что матрицы булевы, и в операциях с матрицами знак + означает
сложение по модулю 2.
263 / 907
3.3.7. Систематическая форма кодовых сообщений (3/3)
Систематическая форма кодовых сообщений позволяет удобно кодировать и декодиро-
вать сообщения, и позволяет обнаруживать некоторые ошибки, но не гарантирует ис-
 
правления ошибок. 1 0 0 1 0  
0 1 1 1 0
Пример. В условиях примеров G = 0 1 0 0 1 , H = .
1 0 1 0 1
 0 0 1 1 1 
Пусть α = 0 1 1 . Тогда β = αG = 0 1 1 1 0 . Пусть теперь  произошла ошибка
0
в третьем разряде и из канала принято слово β = 0 1 0 1 0 .
0 −1

Тогда β G = 0 1 0 и сообщение декодировано неверно,
 
1 0
 0 1 
 
0 T

но β H = 0 1 0 1 0 1 1 
 = 1 1 и ошибка обнаружена.
1 0 
0 1
Замечание. По теореме п. 3.3.5 кодирование с параметрами m = 3, k = 2, n = 5, не
может быть помехоустойчивым. Если m = 3, то необходимо k > 3.
264 / 907
3.3.8. Коды Хэмминга (1/4)
При помехоустойчивом кодировании основная задача состоит в том, чтобы определить,
какую дополнительную информацию надо передать, чтобы её объём был минимальным,
а декодирование по возможности несложным.
Видимо, наиболее известным систематическим самокорректирующимся кодом в настоя-
щее время является код Хэмминга.
Введём обозначения. Пусть α ∈ E2m — исходный блок, β ∈ E2n — кодовый блок, получен-
ный с помощью порождающей матрицы Gm×n , для которой известна проверочная мат-
рица Hk×n , такая, что GH T = 0m×k . Пусть β 0 ∈ E2n — блок с возможной ошибкой, полу-
ченный через канал, а  ∈ E2n — битовая шкала ошибок, которая содержит 1 там, где про-
изошла ошибка, и 0 в остальных разрядах. Результат применения проверочной матрицы
к блоку с ошибкой называется синдромом и обозначается ζ ← β 0 H T .
Теорема. Синдром зависит только от битовой шкалы ошибок: ζ = H T .
Доказательство. По определению β 0 = β + , где + означает поразрядное сложение
битовых шкал по модулю 2. Далее ζ = β 0 H T = (β + )H T = βH T + H T = H T ,
поскольку βH T = 0.
265 / 907
3.3.8. Коды Хэмминга (2/4)
Отсюда вытекает метод кодирования и декодирования с исправлением одиночной ошиб-
ки замещения разряда в блоке длины n.
1. По формулам или таблицам п. 3.3.5 подобрать число m так, чтобы 2m 6 2n /(n + 1)
и положить k ← n − m.
2. Определить булевы матрицы: порождающую матрицу Gm×n , строки которой линей-
но независимы; матрицу декодирования G−1 n×m , такую что GG
−1
= Im ; провероч-
T
ную матрицу Hk×n , такую что GH = 0m×k . Все эти матрицы определяются неод-
нозначно.
3. Разбить исходное сообщение на блоки длины m.
4. Каждый блок α длины m независимо умножить на порождающую матрицу, получая
блок β ← αG длины n.
5. Блок β передать через канал, получая блок β 0 = b1 . . . bn , возможно содержащий
одну ошибку замещения.
6. Вычислить синдром ζ ← β 0 H T .
7. Если синдром ζ = 0k , то ошибок нет, а если ζ 6= 0k , то определить j — номер
того столбца проверочной матрицы, который совпадает с синдромом, после чего
инвертировать j -й разряд: bj ← 1 + bj .
8. Декодировать блок α0 ← β 0 G−1 .
266 / 907
3.3.8. Коды Хэмминга (3/4)
Теорема. В указанных обозначениях α = α0 .
Доказательство. Если ошибок не случилось, и β 0 = β , то α0 = α по свойству матриц G
и G−1 . Пусть произошла ошибка в разряде j . Известно, что ζ = H T . Поскольку битовая
шкала  содержит 1 в j -м разряде и 0 во всех остальных разрядах, синдром равен j -му
столбцу матрицы H . Инверсия j -го разряда устраняет ошибку в коде и позволяет произ-
вести обычное декодирование.
Замечание. Шаги 1 и 2 выполняются только один раз, и их трудоёмкость некритична.
Прочие шаги выполняются для каждого блока, и скорость их выполнения важна. Особого
внимания заслуживают шаги 6 и 7, поскольку это «накладные расходы» ради помехо-
устойчивости на кодирование и декодирования.
Основная идея кода Хэмминга состоит в том, чтобы в проверочной матрице H исполь-
зовать к качестве j -го столбца двоичную запись номера этого столбца. Тогда вычисление
синдрома сразу даёт номер разряда, в котором произошла ошибка. Если синдром равен
нулю, то ошибки нет. Соотношение между n и k таково, что k разрядов как раз достаточ-
но для записи чисел в диапазоне 1..n.
267 / 907
3.3.8. Коды Хэмминга (4/4)  
0 0 0 1 1 1 1
Пример. Пусть m = 4, тогда k = 3 и n = 7. Матрица H = 0 1 1 0 0 1 1
1 0 1 0 1 0 1
является проверочной. Пусть α = 1100 и используется систематическое кодирование.
Тогда β = 1100b5 b6 b7 . Соотношения
P для проверочных
 символов получаем из условия
T n
βH = 0k , то есть ∀ i ∈ 1..k j=1 bj Hj,i = 0 . Имеем b5 + b6 + b7 = 0, 1 + b6 + b7 = 0,
1 + b5 + b7 = 0. Получаем b5 = 1, b6 = 1, b7 = 0. Значит β = 1100110. Пусть во время
0
прохождения через канал произошла ошибка в третьем  символе: β = 1110110. Найдём
0 0 1
0 1 0
   
0 1 1 0
 
синдром в данном случае: ζ = 1 1 1 0 1 1 0   1 0 0  = 1. Имеем j = 3,

1 0 1 1
 
1 1 0
1 1 1
в этом разряде как раз и произошла ошибка. 268 / 907
3.3.9. Исправление одного замещения (1/3)
Существуют другие способы линейного кодирования, отличные от систематических ко-
дов, при которых проверочные разряды находятся на позициях, облегчающих кодиро-
вание. Рассмотрим в качестве примера случай одного замещения.
Определим последовательности натуральных чисел в соответствии с их представлениями
в двоичной системе счисления следующим образом:
V1 ← 1, 3, 5, 7, 9, 11, . . . — все числа, у которых разряд 1 равен 1;
V2 ← 2, 3, 6, 7, 10, . . . — все числа, у которых разряд 2 равен 1;
V3 ← 4, 5, 6, 7, 12, . . . — все числа, у которых разряд 3 равен 1,
и т. д. По определению последовательность Vk начинается с числа 2k−1 . Также рассмотрим
последовательности Vk0 , где Vk0 получается из Vk отбрасыванием первого элемента. Эти
последовательности определены статически и могут быть вычислены заранее.
Пусть заданы числа n, m, причём 2m 6 2n /(n + 1) и k = n − m. Рассмотрим k разрядов
с номерами 20 = 1, 21 = 2, 22 = 4, . . . 2k−1 в слове b1 . . . bn . Эти разряды считаются кон-
трольными. Остальные разряды, а их ровно m, считаются информационными. Поместим
в информационные разряды все разряды слова a1 . . . am как они есть.
269 / 907
3.3.9. Исправление одного замещения (2/3)
Контрольные разряды определим следующим образом:
b1 ← b3 + b5 + b7 + . . . , то есть сумма всех разрядов с номерами из V10 ;
b2 ← b3 + b6 + b7 + . . . , то есть сумма всех разрядов с номерами из V20 ;
. . . , то есть сумма всех разрядов с номерами из V30 ;
b4 ← b5 + b6 + b7 + P
и вообще, b2j−1 ← bi , причём сложение выполняется по модулю 2. Пусть после про-
i∈Vj0
хождения через канал получен код c1 . . . cn и пусть I — номер разряда, в котором, воз-
можно, произошла ошибка замещения. Пусть это число имеет следующее двоичное пред-
ставление: I = il . . . i1 . Определим число J = jl . . . j1 следующим образом:
j1 ← c1 + c3 + c5 + c7 + . . . , то есть сумма всех разрядов с номерами из V1 ;
j2 ← c2 + c3 + c6 + c7 + . . . , то есть сумма всех разрядов с номерами из V2 ;
j3 ← c4 + c5 + c6P+ c7 + . . . , то есть сумма всех разрядов с номерами из V3 ;
и вообще, jp ← cq , где сложение выполняется по модулю 2.
q∈Vp

270 / 907
3.3.9. Исправление одного замещения (3/3)

Теорема. В указанных обозначениях I = J .


Доказательство. Эти числа равны, потому что поразрядно равны их двоичные представ-
ления. Действительно, пусть i1 = 0. Тогда I ∈
/ V1 и, значит,

j1 = c1 + c3 + c5 + . . . = b1 + b3 + b5 + . . . = 0

по определению разряда b1 . Пусть теперь i1 = 1. Тогда I ∈ V1 и, значит,

j1 = c1 + c3 + c5 + . . . = b1 + b3 + b5 + . . . + bx + . . . = 1,

так как если в сумме по модулю 2 изменить ровно один разряд, то изменится и значение
всей суммы. Итак, i1 = j1 . Аналогично (используя последовательности V2 и т. д.) имеем
i2 = j2 и т. д. Таким образом, I = J .

271 / 907
3.4. Криптография (1/3)
Защита информации, хранящейся в компьютере, от несанкционированного доступа, ис-
кажения и уничтожения в настоящее время является серьёзной социальной проблемой.
Применяются различные подходы к решению этой проблемы.
[1] Поставить между злоумышленником и данными в компьютере непреодолимый «фи-
зический» барьер, то есть исключить саму возможность доступа к данным путем изоля-
ции компьютера с данными в охраняемом помещении, применения аппаратных ключей
защиты и т. п. Такой подход надёжен, но он затрудняет доступ к данным для законных
пользователей, а потому постепенно уходит в прошлое.
[2] Поставить между злоумышленником и данными в компьютере «логический» барьер,
то есть проверять наличие прав на доступ к данным и блокировать доступ при отсут-
ствии таких прав. Для этого применяются различные системы паролей, регистрация и
идентификация пользователей, разграничение прав доступа и т. п. Практика показывает,
что борьба между «хакерами» и разработчиками модулей защиты операционных систем
идёт с переменным успехом.
272 / 907
3.4. Криптография (2/3)
[3] Хранить данные таким образом, чтобы они могли «сами за себя постоять». Другими
словами, так закодировать данные, чтобы, даже получив к ним доступ, злоумышленник
не смог бы нанести ущерба.
Этот раздел посвящён обсуждению методов кодирования, применяемых в последнем
случае.
Шифрование — это кодирование данных с целью защиты от несанкционированного до-
ступа. Процесс кодирования сообщения называется шифрованием (или зашифровкой), а
процесс декодирования — расшифровыванием (или расшифровкой). Само кодированное
сообщение называется шифрованным (или просто шифровкой), а применяемый метод на-
зывается шифром.
Основное требование к шифру состоит в том, чтобы расшифровка (и, может быть, зашиф-
ровка) была возможна только при наличии санкции, то есть некоторой дополнительной
информации (или устройства), которая называется ключом шифра. Процесс декодирова-
ния шифровки без ключа называется дешифрованием (или дешифрацией, или просто рас-
крытием шифра).
273 / 907
3.4. Криптография (3/3)
Область знаний о методах создания и раскрытия шифров называется криптографией
(или тайнописью). Свойство шифра противостоять раскрытию называется криптостой-
костью (или надёжностью) и обычно оценивается сложностью алгоритма дешифрации.
Отступление. В практической криптографии криптостойкость шифра оценивается из экономиче-
ских соображений. Если раскрытие шифра стоит (в денежном выражении, включая необходимые
компьютерные ресурсы, специальные устройства, услуги специалистов и т. п.) больше, чем сама
зашифрованная информация, то шифр считается достаточно надёжным.
Криптография известна с глубокой древности и использует самые разнообразные шиф-
ры, как чисто информационные, так и механические.
Среди современных информационных шифров различают симметричные шифры, в ко-
торых для зашифровки и расшифровки применяется один и тот же ключ, и асимметрич-
ные шифры, в которых для зашифровки и расшифровки применяются разные ключи.
В настоящее время наибольшее практическое значение имеет защита данных в компью-
тере, поэтому далее рассматриваются программные шифры для сообщений в алфавите
{0, 1}. 274 / 907
3.4.1. Шифрование с помощью случайных чисел (1/2)
Пусть имеется датчик псевдослучайных чисел, работающий по некоторому определённо-
му алгоритму. Часто используют следующий алгоритм: Ti+1 ←(a · Ti + b) mod c, где Ti —
предыдущее псевдослучайное число, Ti+1 — следующее псевдослучайное число, а коэф-
фициенты a, b, c постоянны и хорошо известны. Обычно c = 2n , где n — разрядность про-
цессора, a ≡ 1 (4), а b — нечётное. В этом случае последовательность псевдослучайных
чисел имеет период c.
Процесс шифрования определяется следующим образом. Шифруемое сообщение пред-
ставляется в виде последовательности слов S0 , S1 , . . . , каждое длины n, которые по-
разрядно складываются по модулю 2 со словами последовательности T0 , T1 , . . . , то есть
Ci ← Si +2 Ti .
Замечание. Последовательность T0 , T1 , . . . называется гаммой шифра.
Процесс расшифровывания заключается в том, чтобы ещё раз сложить шифрованную по-
следовательность с той же самой гаммой шифра: Si ← Ci +2 Ti . Ключом шифра являет-
ся начальное значение T0 , которое является секретным и должно быть известно только
отправителю и получателю шифрованного сообщения.
275 / 907
3.4.1. Шифрование с помощью случайных чисел (2/2)

Замечание. Шифрование с помощью случайных чисел является примером симметрично-


го шифра.
Если период последовательности псевдослучайных чисел достаточно велик, чтобы гамма
шифра была длиннее сообщения, то дешифровать сообщение можно только подбором
ключа. При увеличении n экспоненциально увеличивается криптостойкость шифра.
Отступление. Этот очень простой и эффективный метод часто применяют «внутри» программных
систем, например, для защиты данных на локальном диске. Для защиты данных, передаваемых по
открытым каналам связи, особенно в случае многостороннего обмена сообщениями, этот метод
применяют не так часто, поскольку возникают трудности с надёжной передачей секретного ключа
многим пользователям.

276 / 907
3.4.2. Криптостойкость (1/2)

Описанный в предыдущем параграфе метод шифрования обладает существенным недо-


статком. Если известна хотя бы часть исходного сообщения, то всё сообщение может быть
легко дешифровано. Действительно, пусть известно одно исходное слово Si . Тогда

Ti ← Ci +2 Si ,

и далее вся правая часть гаммы шифра определяется по указанной формуле датчика
псевдослучайных чисел.
Замечание. На практике часть сообщения вполне может быть известна злоумышленнику.
Например, многие текстовые редакторы помещают в начало файла документа одну и ту
же служебную информацию. Если злоумышленнику известно, что исходное сообщение
подготовлено в данном редакторе, то он сможет легко дешифровать сообщение.

277 / 907
3.4.2. Криптостойкость (2/2)

Для повышения криптостойкости симметричных шифров применяют различные приёмы:

1) вычисление гаммы шифра по ключу более сложным (или секретным) способом;


2) применение вместо +2 более сложной (но обратимой) операции для вычисления
шифровки;
3) предварительное перемешивание битов исходного сообщения по фиксированному
алгоритму.

Наиболее надёжным симметричным шифром считается DES (Data Encryption Standard), в


котором используется сразу несколько методов повышения криптостойкости.

278 / 907
3.4.3. Односторонние функции
Функция f называется односторонней функцией, если есть эффективный алгоритм вы-
числения y = f (x) для любого x, но для вычисления x = f −1 (y) эффективного алгорит-
ма нет.
Отступление. Важно уточнить, какой смысл придаётся терминам в этом определении. В настоящее
время обычно считают, что эффективный алгоритм — это алгоритм, имеющий асимптотически по-
линомиальную верхнюю оценку трудоёмкости, а выражение «алгоритма нет» означает, что либо
такой алгоритм принципиально невозможен, либо он пока не найден. В таком понимании, напри-
мер, функция f (x) = xe mod m, где e, m ∈ N, — односторонняя функция, поскольку для возви-
дения натурального числа в натуральную степень эффективный алгоритм известен, а для реше-
ния сравнения xe ≡ a (m) эффективного алгоритма (предположительно!) не существует. Однако
если считать, что эффективный алгоритм — это такой алгоритм, который может быть выполнен
за допустимое время на специализированном оборудовании, а выражение «алгоритма нет» под-
разумевает строгое математическое доказательство того, что алгоритма с заданными свойствами
не существует, то в этом случае приходится признать, что существование односторонних функций
пока строго не доказано.
279 / 907
3.4.4. Шифрование с открытым ключом (1/5)

В настоящее время широкое распространение получили шифры с открытым ключом.


Эти шифры не являются симметричными — для зашифровки и расшифровки использу-
ются разные ключи. При этом ключ, используемый для зашифровки, является открытым
(не секретным) и может быть сообщен всем желающим отправить шифрованное сообще-
ние, а ключ, используемый для расшифровки, является закрытым и хранится в секрете
получателем шифрованных сообщений. Даже знание всего зашифрованного сообщения
и открытого ключа, с помощью которого оно было зашифровано, не позволяет дешиф-
ровать сообщение (без знания закрытого ключа).
Шифров с открытым ключом предложено множество, здесь рассматривается алгоритм
RSA опубликованный Rivest, Shamir, Adleman в 1976 году. Этот конкретный алгоритм вы-
бран потому, что в нём в качестве односторонней функции используется возведение в
степень по модулю, разобранное нами ранее.

280 / 907
3.4.4 Шифрование с открытым ключом (2/5)
Шифрование с открытым ключом производится следующим образом.
1. Получателем сообщений производится генерация открытого ключа (пара чисел n и
e) и закрытого ключа (число d). Для этого:
I выбираются два простых числа, p и q ;

I вычисляется первая часть открытого ключа n ← pq ;

I определяется вторая часть открытого ключа — выбирается небольшое нечётное число


e, взаимно простое с числом (p − 1)(q − 1) (заметим, что
(p − 1)(q − 1) = pq(1 − 1/p)(1 − 1/q) = ϕ(n));
I определяется закрытый ключ: d ← e−1 mod (p − 1)(q − 1).
После чего открытый ключ (числа n и e) сообщается всем отправителям сообщений.
2. Отправитель шифрует сообщение (разбивая его, если нужно, на слова Si длиной
менее log n разрядов):
Ci ←(Si )e mod n, и отправляет получателю.
3. Получатель расшифровывает сообщение с помощью закрытого ключа d:
Pi ←(Ci )d mod n.
281 / 907
3.4.4. Шифрование с открытым ключом (3/5)
Теорема. Шифрование с открытым ключом корректно, то есть в предыдущих обозначе-
ниях Pi = Si .
Доказательство. Легко видеть, что Pi = (Si )ed mod n. Покажем, что
∀ M < n M ed ≡ M mod n .


Действительно, числа d и e взаимно обратны по модулю (p − 1)(q − 1), то есть


ed = 1 + k(p − 1)(q − 1)
при некотором k . Если M 6≡ 0 mod p, то по малой теореме Ферма имеем
k(q−1)
M ed ≡ M M (p−1) ≡ M · 1k(q−1) ≡ M mod p.
Если M ≡ 0 mod p, то сравнение M ed ≡ M mod p, очевидно, выполняется. Таким обра-
зом, ∀ 0 6 M < n M ed ≡ M mod  p . Совершенно аналогично имеем
∀ 0 6 M < n M ed ≡ M mod  q и по следствию из китайской теоремы об остатках
ed
∀ M < n M ≡ M mod n . Поскольку Si < n и Pi < n, заключаем, что ∀ i (Pi = Si ).
282 / 907
3.4.4. Шифрование с открытым ключом (4/5)
Пример. Генерация ключей:
1. p ← 3, q ← 11.
2. n ← pq = 3 ∗ 11 = 33.
3. (p − 1)(q − 1) = 2 ∗ 10 = 20, e ← 7.
4. d ← 7−1 mod 20 = 3, (7 ∗ 3 mod 20 = 1).
Пусть S1 ← 3, S2 ← 1, S3 ← 2 (S1 , S2 , S3 < n = 33). Тогда код определяется следующим
образом:
1. C1 ← 37 mod 33 = 2187 mod 33 = 9.
2. C2 ← 17 mod 33 = 1 mod 33 = 1.
3. C3 ← 27 mod 33 = 128 mod 33 = 29.
При расшифровке имеем
1. P1 ← 93 mod 33 = 729 mod 33 = 3.
2. P2 ← 13 mod 33 = 1 mod 33 = 1.
3. P3 ← 293 mod 33 = 24389 mod 33 = 2.
283 / 907
3.4.4. Шифрование с открытым ключом (5/5)
Отступление. Шифры с открытым ключом сравнительно просты в реализации, очень практичны
(поскольку нет необходимости пересылать по каналам связи закрытый ключ и можно безопасно
хранить его в одном месте) и в то же время обладают высочайшей криптостойкостью. Кажется, что
дешифровать сообщение несложно: достаточно разложить открыто опубликованное число n на
множители, восстановив числа p и q , и далее можно легко вычислить секретный ключ d. Однако
дело заключается в следующем. В настоящее время известны эффективные алгоритмы определе-
ния простоты чисел, которые позволяют за несколько минут подобрать пару очень больших про-
стых чисел (по 100 и больше цифр в десятичной записи). В то же время неизвестны эффектив-
ные алгоритмы разложения очень больших чисел на множители. Разложение на множители чис-
ла в 200 и больше цифр потребовало бы сотен лет работы самого лучшего суперкомпьютера. При
практическом применении шифров с открытым ключом используют действительно большие про-
стые числа (не менее 100 цифр в десятичной записи, а обычно значительно больше). В резуль-
тате вскрыть этот шифр оказывается невозможно, если не существует эффективных алгоритмов
разложения на множители (что очень вероятно, хотя и не доказано строго).

284 / 907
3.4.5. Простейшие атаки на шифр с открытым ключом
Появление новой системы шифрование вызвало многочисленные попытки взломать её.
Пока эти попытки не увенчались успехом.
Рассмотрим так называемую циклическую атаку. Считаем, что злоумышленнику известна
открытая часть ключа n, e и кодированное сообщение C = S e mod n. Цель злоумыш-
ленника — восстановить сообщение S . Метод заключается в том, чтобы подобрать число
j
j так, чтобы C e mod n = C . Другими словами, злоумышленник j раз проводит шифро-
вание перехваченного сообщения C известным ему открытым ключом.
j−1
Если такое число j злоумышленниксумеетподобрать, то C e = S и сообщение дешиф-
e
ei ej−1
ровано, потому что C mod n = C mod n = C и C = S e mod n.
Атака выглядит опасно, однако это не так. Известно, что асимптотическая трудоёмкость
этого подбора не меньше, чем разложение числа n на множители.
Метод RSA считается достаточно надёжным, если число n имеет не менее 1024 бит в
двоичной записи.
285 / 907
3.4.6. Цифровая подпись (1/3)
Шифр с открытым ключом позволяет выполнять и многие другие полезные операции,
помимо шифрования и посылки сообщений в одну сторону. Прежде всего, для организа-
ции многосторонней секретной связи каждому из участников достаточно сгенерировать
свою пару ключей (открытый и закрытый), а затем сообщить всем партнёрам свой откры-
тый ключ.
Заметим, что операции зашифровки и расшифровки, по существу, одинаковы, и разли-
чаются только показателем степени, а потому коммутируют:

M = (M e )d mod n = M ed mod n = M de mod n = (M d )e mod n = M.

Это обстоятельство позволяет применять различные приёмы, известные как цифровая


(или электронная) подпись.
Рассмотрим следующую схему взаимодействия корреспондентов X и Y . Отправитель X
кодирует сообщение S своим закрытым ключом (C ← S d mod n) и посылает получателю
Y пару hS, Ci, то есть подписанное сообщение. Получатель Y , получив такое сообщение,
кодирует подпись сообщения открытым ключом отправителя X .
286 / 907
3.4.6. Цифровая подпись (2/3)

То есть вычисляет S 0 ← C e mod n. Если оказывается, что S = S 0 , то это означает, что


(нешифрованное!) сообщение S действительно было отправлено корреспондентом X .
Если же S 6= S 0 , то сообщение было искажено при передаче или фальсифицировано.
Отступление. В подобного рода схемах возможны различные проблемы, которые носят уже не
математический, а социальный характер. Например, допустим, что злоумышленник Z имеет тех-
ническую возможность контролировать всю входящую корреспонденцию получателя Y незамет-
но для последнего. Тогда, перехватив сообщение отправителя X , в котором сообщался открытый
ключ e, злоумышленник Z может подменить открытый ключ отправителя X своим собственным
открытым ключом. После этого злоумышленник сможет фальсифицировать все сообщения отпра-
вителя X , подписывая их своей цифровой подписью, и, таким образом, действовать от имени от-
правителя X . Другими словами, цифровая подпись удостоверяет, что сообщение S пришло из то-
го же источника, из которого был получен открытый ключ e, но не более того.

287 / 907
3.4.6. Цифровая подпись (3/3)

Можно подписывать и шифрованные сообщения. Для этого отправитель X сначала ко-


дирует своим закрытым ключом сообщение S , получая цифровую подпись C , а затем ко-
дирует полученную пару hS, Ci открытым ключом получателя Y . Получив такое сообще-
ние, получатель Y сначала расшифровывает сообщение своим закрытым ключом, а по-
том убеждается в подлинности полученного сообщения, сравнив его с результатом при-
менения открытого ключа отправителя X к подписи C .
Замечание. К сожалению, даже эти меры не смогут защитить от злоумышленника Z , су-
мевшего подменить открытый ключ отправителя X . Конечно, в этом случае злоумышлен-
ник не сможет дешифровать исходное сообщение, но он сможет подменить исходное со-
общение фальсифицированным, а получатель не сможет обнаружить подмену сообще-
ния.

288 / 907
Часть II. Графы и отношения

289 / 907
4. Множества и отношения

Понятия «множество», «отношение», «функция» и близкие к ним составляют основной


словарь дискретной (равно как и «непрерывной») математики. Именно эти базовые по-
нятия кратко рассматриваются здесь, тем самым закладывается необходимая основа для
дальнейших построений. Особенность изложения состоит в том, что здесь рассматрива-
ются почти исключительно конечные множества, а тонкие и сложные вопросы, связанные
с рассмотрением бесконечных множеств, излагаются с «программистской» точки зрения.
С другой стороны, значительное внимание уделяется «представлению» множеств в про-
граммах. Эти вопросы не имеют прямого отношения к собственно теории множеств в её
классическом виде, но очень важны для практикующего программиста.

290 / 907
4.1. Множества

При построении доступной для рационального анализа картины мира часто используется
термин «объект» для обозначения некой сущности, отделимой от остальных. Выделение
объектов — это не более чем произвольный акт нашего сознания. В одной и той же си-
туации объекты могут быть выделены по-разному, в зависимости от точки зрения, целей
анализа и других обстоятельств. Но как бы то ни было, выделение объектов и их совокуп-
ностей — естественный (или даже единственно возможный) способ организации нашего
мышления, поэтому неудивительно, что он лежит в основе главного инструмента описа-
ния точного знания — математики.

291 / 907
4.1.1. Элементы и множества (1/2)
Множество — это любая определённая совокупность объектов. Объекты, из которых со-
ставлено множество, называются его элементами. Элементы множества различны и от-
личимы друг от друга. Как множествам, так и элементам можно давать имена или при-
сваивать символьные обозначения.
Примеры. Множество S слайдов в данной презентации. Множество N натуральных чисел
{1, 2, 3, . . . }. Множество P простых чисел {2, 3, 5, 7, 11, . . . }. Множество Z целых чисел
{. . . , −2, −1, 0, 1, 2, . . . }. Множество R вещественных чисел. Множество A различных
символов на этом слайде.
Принадлежность элемента множеству: x ∈ M ( x ∈
/ M ).
Множество, не содержащее элементов, называется пустым: ∅.
Множества как объекты могут быть элементами других множеств. Множество, элемента-
ми которого являются множества, иногда называют семейством. Обычно семейства обо-
значают «рукописными» буквами (M), множества — прописными буквами (M ), а элемен-
ты — строчными буквами (m).
292 / 907
4.1.1. Элементы и множества (2/2)
Отступление. Понятия множества, элемента и принадлежности, которые на первый взгляд представ-
ляются интуитивно ясными, при ближайшем рассмотрении такую ясность утрачивают. Во-первых,
даже возможность различить элементы при более глубоком рассмотрении представляет некото-
рую проблему. Например, символы «а» и «а», которые встречаются на предыдущем слайде, — это
один элемент множества A или два разных элемента? Или же, например, два вхождения симво-
ла «о» в слово «множество» — графически они неразличимы невооружённым глазом, но это сим-
волы букв, которые обозначают звуки, а читаются эти две гласные по-разному: первая под ударе-
нием, а вторая — безударная. Во-вторых, проблематична возможность (без дополнительных уси-
лий) указать, принадлежит ли данный элемент данному множеству. Например, является ли число
86958476921537485067857663 простым?
Совокупность объектов, которая не является множеством, называется классом (со срав-
нительно меньшей ответственностью за определённость, отличимость и бесповторность
элементов).

293 / 907
4.1.2. Задание множеств (1/2)
Способы задания множеств:
перечисление элементов: M ←{a, b, c, . . . , z};
характеристический предикат: M ← {x | P (x)} ;
порождающая процедура: M ← {x | x ← f }.
Примеры.
M9 ←{1, 2, 3, 4, 5, 6, 7, 8, 9}.
M9 ← {n | n ∈ N & n < 10}.
M9 ← {n | for n from 1 to 9 do yield n end for}.
При задании множеств перечислением обозначения элементов иногда снабжают индек-
k
сами и указывают множество, из которого берутся индексы. В частности, запись {ai }i=1
означает то же, что {a1 , . . . , ak }.
Знак многоточия (. . . ), который употребляется при задании множеств, является сокра-
щённой формой записи, в которой порождающая процедура для множества индексов
считается очевидной.

Пример. {a1 , a2 , a3 , . . . } = {ai }i=1 .
294 / 907
4.1.2. Задание множеств (2/2)
Def
Множество целых чисел в диапазоне от m до n: m..n = {k ∈ Z | m 6 k & k 6 n} =
= {k ∈ Z | for k from m to n do yield k end for} .
Перечислением элементов можно задавать только конечные множества. Бесконечные мно-
жества задаются характеристическим предикатом или порождающей процедурой.
Def
Пример. N = {n | n ← 0; while true do n ← n + 1; yield n end while}.
Если x ∈
/ A, то элемент x можно добавить в множество A:
Def
A + x = {y | y ∈ A ∨ y = x} .

Если x ∈ A, то элемент x можно удалить из множества A:


Def
A − x = {y | y ∈ A & y 6= x} .

Примеры. M9 ← ∅ + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9.
Def
Множество натуральных чисел с нулём: N0 = N + 0.
295 / 907
4.1.3. Парадокс Рассела(1/2)
Возможность задания множеств характеристическим предикатом зависит от предиката.
Использование некоторых предикатов для этой цели может приводить к противоречиям.
Например, все рассмотренные в примерах множества не содержат себя в качестве эле-
мента, то есть множества, не содержащие себя в качестве элемента, заведомо существу-
ют. Рассмотрим множество Y всех множеств, не содержащих себя в качестве элемента:
Def
Y = {X | X ∈
/ X} .

Если множество Y существует, то мы должны иметь возможность ответить на следующий


вопрос: Y ∈ Y ? Пусть Y ∈ Y , тогда Y 6∈ Y . Пусть Y 6∈ Y , тогда Y ∈ Y . Имеем неустрани-
мое логическое противоречие — парадокс. Три способа избежать этого парадокса.
1. Ограничить используемые характеристические предикаты видом
P (x) = x ∈ A & Q(x), где A — известное, заведомо существующее множество (уни-
версум). Обычно при этом используют обозначение {x ∈ A | Q(x)}. Для Y универ-
сум не указан, а потому Y множеством не является.
296 / 907
4.1.3. Парадокс Рассела (2/2)
2. Теория типов. Объекты имеют тип 0, множества элементов типа 0 имеют тип 1, мно-
жества элементов типа 0 и 1 — тип 2 и т. д. Класс Y не имеет типа и потому множе-
ством не является.
3. Явный запрет принадлежности множества самому себе: X ∈ X — недопустимый
предикат. При аксиоматическом построении теории множеств соответствующая ак-
сиома называется аксиомой регулярности.

При этом, однако, нет полной уверенности в том, что не обнаружатся другие противоре-
чия. Полноценным выходом из ситуации являлось бы аксиоматическое построение тео-
рии множеств и доказательство непротиворечивости построенной формальной теории.
Однако исследование парадоксов и непротиворечивости систем аксиом является техни-
чески трудной задачей и уводит далеко в сторону от программистской практики, для ко-
торой важнейшими являются конечные множества. Поэтому здесь мы ограничиваемся
наивной теорией множеств.
297 / 907
4.1.4. Мультимножества
Мультимножеством X b называется совокупность элементов множества X , в которую эле-
мент xi входит ai раз, ai > 0. Мультимножество обозначается одним из следующих спо-
собов:

b = [xa11 , . . . , xan ] = hx1 , . . . , x1 ; . . . ; xn , . . . , xn i = ha1 (x1 ), . . . , an (xn )i.


X n

b = [a0 , b3 , c4 ] = hb, b, b; c, c, c, ci = h0(a), 3(b), 4(c)i.


Пример. Пусть X = {a, b, c}. Тогда X
Пусть Xb = ha1 (x1 ), . . . , an (xn )i — мультимножество над множеством X = {x1 , . . . , xn }.
Тогда число ai называется показателем элемента xi , множество X — носителем, число
m = a1 + . . . + an — мощностью, а X b = {xi ∈ X | ai > 0} называется составом мульти-
множества X b.
Пример. Пусть X b = [a0 , b3 , c4 ] — мультимножество над множеством X = {a, b, c}. Тогда
Xb = {b, c}.
Мультимножество X b = ha1 (x1 ), . . . , an (xn )i над множеством X = {x1 , . . . , xn } называ-
ется индикатором, если ∀ i ∈ 1..n (ai = 0 ∨ ai = 1).
298 / 907
4.1.5. Конечные последовательности (1/3)
К понятию мультимножества тесно примыкает широко используемое понятие (конечной)
последовательности.
Пусть задано множество X = {x1 , . . . , xn }. Рассмотрим мультимножество
b = ha1 (x1 ), . . . , an (xn )i
X
Pn
над X , i=1 ai = m. Элементы мультимножества можно пронумеровать, назначив им но-
мера из отрезка 1..m. Это можно сделать многими различными способами. Мультимно-
жество с конкретной нумерацией называется последовательностью длины m над мно-
жеством элементов X . Другими словами, если задана последовательность, то всегда мож-
но сказать, какой элемент стоит на i-м месте в последовательности. Отсюда вытекает об-
щепринятый способ записи последовательностей: выписать элементы мультимножества
слева направо в порядке возрастания номеров.
Пример. Пусть X = {a, b} — исходное множество элементов, X b = h2(a), 2(b)i — мульти-
множество, тогда aabb, abab, abba, baab, baba, bbaa — все 6 возможных в данном случае
последовательностей.
Замечание. Конечную последовательность чисел часто называют вектором. 299 / 907
4.1.5. Конечные последовательности (2/3)
Отступление. Одномерный массив A : array [1..n] of X является программным представлением
последовательности длины n над множеством X . При этом множество X называется типом (эле-
ментов) массива, а выражение A[i] доставляет i-й элемент последовательности. Выражение A[i]
вычисляется очень эффективно, при условии, что все элементы массива (последовательности) за-
нимают одинаковый объём памяти компьютера.
Пусть теперь элементами исходного множества являются буквы, или символы. В таком
случае множество букв называется алфавитом и обычно обозначается A.
Последовательность букв называется словом, или цепочкой, в данном алфавите A. Одна
буква может входить в слово несколько раз, каждый отдельный экземпляр буквы в слове
называется вхождением буквы в слово.
Если слово α = a1 . . . ak , ai ∈ A, то количество букв в слове называется длиной слова:
Def
|α| = |a1 . . . ak | = k . Пустое слово обозначается ε; |ε| = 0.
Множество слов в алфавите A, включая пустое слово, обозначается A∗ . Пустое слово не
содержит букв алфавита, но считается словом: ε 6∈ A, но ε ∈ A∗ . Если пустое слово
исключается из рассмотрения, то множество слов в алфавите A обозначается A+ .
300 / 907
4.1.5. Конечные последовательности (3/3)
Для слов определена операция конкатенации, или сцепления. Обычно операция конка-
тенации никак не обозначается, а сцепляемые слова просто записываются подряд.
Пример. Конкатенация слов «пара» и «план» образует слово «параплан».
Если α = α1 α2 , то α1 называется началом, или префиксом, слова α, а α2 — окончанием,
или постфиксом, слова α.
Пример. Слова «д» и «до» являются префиксами, а слова «ом» и «м» являются постфик-
сами слова «дом».
Замечание. Каждое слово является своим постфиксом и префиксом.
Слова α и β могут пересекаться. При пересечении либо одно слово является частью дру-
гого, α = γβδ , либо постфикс одного слова является префиксом другого, α = δγ, β = γζ .
Для пары слов α и β тройка слов γ , δ , ζ определяется однозначно, если выбирать наи-
большее пересечение.
Пример. Пусть α = abb, β = bbc. Тогда можно взять γ ← b, δ ← ab, ζ ← bc. Однако наи-
большее пересечение даёт единственная тройка γ ← bb, δ ← a, ζ ← c.
Произвольное множество L слов в некотором алфавите называется языком в этом алфа-
вите; L ⊂ A∗ . 301 / 907
4.2. Алгебра подмножеств
Самого по себе понятия множества ещё недостаточно — нужно определить способы кон-
струирования новых множеств из уже имеющихся, то есть определить операции над мно-
жествами. Рассматриваемый совместно набор операций, определённых на некотором
множестве, образует алгебру. При этом рассматриваемое множество объектов называ-
ют носителем алгебры.
Пример. Арифметика, изучаемая в начальной школе, — это алгебра, включающая опера-
ции сложения (+), умножения (×), вычитания (−) и деления с остатком (/), причём носи-
телем является множество натуральных чисел и ноль.
Наряду с операциями, результаты которых принадлежат носителю, часто бывают необ-
ходимы и такие операции, результаты которых не принадлежат носителю.
Примеры. В арифметике, наряду с арифметическими операциями, используются опера-
ции сравнения: больше (>), меньше (<) и другие. Аргументами этих операций являются
натуральные числа, а результатами — истинностные значения. Операция вычитания мо-
жет дать отрицательное число, которое не считается натуральным.
Мы начинаем с операций сравнения множеств, затем рассматриваем понятие мощности
множества, и заканчиваем рассмотрение операциями над множествами. 302 / 907
4.2.1. Сравнение множеств (1/2)
Множество A содержится в множестве B (множество B включает множество A), если
Def
каждый элемент множества A есть элемент множества B : A ⊂ B = x ∈ A =⇒ x ∈ B.
При этом говорят, что A — подмножество B , B — надмножество A.
По определению ∀ M (∅ ⊂ M ).
Два множества равны, если они являются подмножествами друг друга:
Def
A = B = A ⊂ B & B ⊂ A.
Теорема. Включение множеств обладает следующими свойствами:
1) ∀ A (A ⊂ A);
2) ∀ A, B (A ⊂ B & B ⊂ A =⇒ A = B);
3) ∀ A, B, C (A ⊂ B & B ⊂ C =⇒ A ⊂ C).
Доказательство.
[ 1) ] Имеем x ∈ A =⇒ x ∈ A и, значит, A ⊂ A.
[ 2) ] По определению.
[ 3) ] Если x ∈ A =⇒ x ∈ B и x ∈ B =⇒ x ∈ C , то x ∈ A =⇒ x ∈ C и A ⊂ C .
303 / 907
4.2.1. Сравнение множеств (2/2)
Если A ⊂ B и A 6= B , A 6= ∅, то A называется собственным подмножеством B , а B —
собственным надмножеством A. Таким образом, само множество и пустое множество
считаются несобственными подмножествами.
Пример. Любое одноэлементное множество имеет два различных несобственных под-
множества и не имеет собственных подмножеств.
Замечание. В этом курсе для обозначения включения собственных подмножеств исполь-
зуется знак , а для несобственных — ⊆. В других источниках иногда для обозначения
собственного включения используют знак ⊂, оставляя знак ⊆ для обозначения общего
случая включения, которое может быть несобственным.
Следствие. A B ⊆ C =⇒ A C .
Замечание. Нетрудно видеть, что понятие подмножества множества X равнообъёмно по-
нятию индикатора над множеством X . Действительно, если X = {x1 , . . . , xn } — множе-
ство, а Y — любое подмножество множества X , Y ⊂ X , то существует единственный ин-
дикатор Yb = ha1 (x1 ), . . . , an (xn )i над множеством X , такой, что
∀ i ∈ 1..n (ai = 1 ⇐⇒ xi ∈ Y ) .
304 / 907
4.2.2. Равномощные множества (1/3)
Говорят, что установлено соответствие из множества A в множество B , если каждому
элементу множества A поставлен в соответствие один и только один элемент множе-
ства B , причём различным элементам множества A поставлены в соответствие различ-
ные элементы множества B . В этом случае говорят также, что множество A вложено в
множество B , и используют обозначение A ,→ B . Если элементу a ∈ A соответствует
элемент b ∈ B , то данное обстоятельство обозначают следующим образом: a 7→ b.
Пример. N ,→ Q. Соответствие: n 7→ n1 .
Замечание. Весьма общее понятие соответствия трактуется здесь с сугубо программист-
ских позиций. Если сказано, что установлено соответствие из множества A в множество
B , то подразумевается, что задан способ по любому элементу a ∈ A однозначно опреде-
лить соответствующий ему элемент b ∈ B . Способ может быть любым, если возможность
его применения не вызывает сомнений. Например, это может быть массив array [A] of B ,
или функция типа func (A) : B , или же выражение, зависящее от переменной типа A и
доставляющее значение типа B .
305 / 907
4.2.2. Равномощные множества (2/3)
Всякий элемент любого множества очевидно соответствует сам себе, поэтому
A ⊂ B =⇒ A ,→ B.
Пример. Поскольку N ⊂ Q ⊂ R, имеем N ,→ Q ,→ R.
Говорят, что между множествами A и B установлено взаимно-однозначное соответст-
вие, если каждому элементу A поставлен в соответствие один и только один элемент B ,
и для каждого элемента B один и только один элемент A поставлен в соответствие этому
элементу B . В этом случае говорят также, что множества A и B изоморфны, и используют
обозначение A ∼ B . Если элементу a ∈ A взаимно-однозначно соответствует элемент
b ∈ B , то данное обстоятельство обозначают так: a ↔ b.
Примеры. Соответствие n ↔ 2n устанавливает взаимно-однозначное соответствие меж-
ду множеством натуральных чисел N и множеством чётных натуральных чисел 2N:
N ∼ 2N.
Соответствие n ↔ n2 устанавливает взаимно-однозначное соответствие между множе-
ством натуральных чисел и множеством полных квадратов.
306 / 907
4.2.2. Равномощные множества (3/3)
Если между двумя множествами, A и B , может быть установлено взаимно-однозначное
соответствие, то говорят, что множества имеют одинаковую мощность, или что множества
равномощны, и записывают это так: |A| = |B|.
Теорема. Равномощность множеств обладает следующими свойствами:
1) ∀ A (|A| = |A|);
2) ∀ A, B (|A| = |B| =⇒ |B| = |A|);
3) ∀ A, B, C (|A| = |B| & |B| = |C| =⇒ |A| = |C|).
Доказательство.
[ 1) ] достаточно рассмотреть соответствие a ↔ a, где a ∈ A;
[ 2) ] ввиду взаимной однозначности соответствия a ↔ b;
[ 3) ] соответствие устанавливается с использованием элемента b ∈ B : a ↔ b ↔ c, где
a ∈ A, b ∈ B, c ∈ C .
B Def B
Пусть A ,→ B . Обозначим A,→ = {b ∈ B | ∃ a ∈ A (a 7→ b)}. Заметим, что A,→ ⊂ B .
B
Замечание. Если B ясно из контекста, то его можно опустить: A,→ = A,→ .
Лемма. A ,→ B =⇒ |A| = |A,→ |.
Доказательство. Достаточно положить a ↔ b если и только если a 7→ b. 307 / 907
4.2.3. Конечные и бесконечные множества (1/2)
Вопрос о том, чем конечное отличается от бесконечного, может поставить в тупик. Здесь
мы рассматриваем применительно к множествам один из возможных ответов на этот
вопрос. С античных времен известен принцип: «часть меньше целого». Оказывается, для
бесконечных множеств этот принцип не имеет места.
Множество A называется конечным, если у него нет равномощного собственного подмно-
жества:
∀ B ((B ⊂ A & |B| = |A|) =⇒ (B = A)) .
Для конечного множества A используется запись |A| < ∞. Все остальные множества
называются бесконечными:

∃ B (B ⊂ A & |B| = |A| & B 6= A) ,

то есть бесконечное множество равномощно некоторому своему собственному подмно-


жеству. Для бесконечного множества A используется запись |A| = ∞.
308 / 907
4.2.3. Конечные и бесконечные множества (2/2)
Пример. Множество натуральных чисел бесконечно, |N| = ∞, поскольку оно равномощ-
но своему собственному подмножеству чётных чисел.
Теорема. Множество, имеющее бесконечное подмножество, бесконечно:
(B ⊂ A & |B| = ∞) =⇒ (|A| = ∞).
Доказательство. Множество B бесконечно, значит B ∼ C , причём C ⊂ B . Обозначим
это соответствие x 7→ x0 . Построим соответствие между множеством A и его собственным
подмножеством D: x 7→ if x ∈ B then x0 else x end if.
Другими словами, на элементах из B мы пользуемся за-
данным соответствием, а остальным элементам сопостав-
ляем их самих. Это взаимно-однозначное соответствие
между множеством A и его собственным подмножеством
D, и, значит, |A| = ∞.
Следствие. Все подмножества конечного множества конечны.
Доказательство. Пусть ∃ A ⊂ B (|A| = ∞ & |B| < ∞). Но по теореме |B| = ∞, так как
|A| = ∞ & A ⊂ B . Противоречие. 309 / 907
4.2.4. Счётные и несчётные множества (1/2)
Бесконечные множества, равномощные множеству натуральных чисел, называются счёт-
ными. Счётные множества отличаются тем, что для каждого элемента можно указать
взаимно-однозначно соответствующее натуральное число, то есть номер. Другими сло-
вами, множество счётно, если его элементы можно перенумеровать.
Пример. Множество целых чисел Z счётно: 0, 1, −1, 2, −2, . . . .
Не все бесконечные множества являются счётными. Существуют несчётные множества.
Теорема. Множество всех подмножеств натурального ряда несчётно.
Доказательство. Допустим, что множество всех подмножеств натурального ряда счёт-
но. Тогда их можно перенумеровать, и каждое множество чисел получит свой номер.
Обозначим N (X) — номер множества X . Может статься, что некоторые множества чи-
сел содержат свой номер в качестве элемента, а другие не содержат. Рассмотрим число-
вое множество Y , которое состоит из номеров множеств, не содержащих свой номер в
качестве элемента: Y = {x ∈ N | ∃ X ⊂ N (x = N (X) & x 6∈ X)} . Пусть множество Y
имеет номер y = N (Y ). Тогда, если y 6∈ Y , то множество Y не содержит свой номер, а
значит, по своему определению, y ∈ Y . Обратно: если y ∈ Y , то y 6∈ Y . Противоречие, и
значит нумерация всех числовых множеств невозможна. 310 / 907
4.2.4. Счётные и несчётные множества (2/2)
Следующий алгоритм перечисляет все конечные подмножества натурального ряда, откуда
следует, что множество всех конечных подмножеств натурального ряда счётно.
n ← 0 //добавляемое число
Q ← ∅ //очередь множеств содержит пустое множество
yield ∅ //первое подмножество пустое
while true do
S ← Q //извлекаем первое множество из очереди
if S = ∅ then n ← n + 1 end if //следующее добавляемое число
Q ← S //возвращаем извлечённое множество в очередь
S ← S + n //добавляем число n в множество S
Q ← S //добавляем новое множество в очередь
yield S //очередное множество
end while
Обоснование. Множество всех конечных подмножеств отрезка 1..n состоит из двух рав-
номощных частей: множества всех подмножеств отрезка 1..(n − 1) и множества этих же
подмножеств, в каждое из которых добавлено число n.
311 / 907
4.2.5. Мощность конечного множества (1/5)
Теорема. Любое непустое конечное множество равномощно некоторому отрезку нату-
рального ряда: ∀ A (A 6= ∅ & |A| < ∞ =⇒ ∃ k ∈ N (|A| = |1..k|)) .
Доказательство. Рассмотрим следующую программу:
i ← 0 //счётчик элементов
while A 6= ∅ do
select x ∈ A //выбираем элемент
i ← i + 1 //увеличиваем счётчик
x 7→ i //ставим элементу в соответствие его номер
A ← A − x //удаляем элемент из множества
end while
Если эта программа не заканчивает работу, то она даёт соответствие B ∼ N для некото-
рого множества B ⊂ A, что невозможно ввиду конечности A. Значит, процедура закан-
чивает работу при i = k . Но в этом случае построено взаимно-однозначное соответствие
A ∼ 1..k .
312 / 907
4.2.5. Мощность конечного множества (2/5)
Лемма. Любое непустое подмножество множества натуральных чисел содержит наи-
меньший элемент.
Доказательство. Пусть A — произвольное подмножество множества натуральных чисел,
конечное или бесконечное. Рассмотрим задание множества A следующей порождающей
процедурой:
n ← 0 //переменная для натуральных чисел
while true do
n ← n + 1 //следующее натуральное число
if n ∈ A then
yield n //число входит в множество A
end if
end while
Ясно, что множество A действительно порождается этой процедурой, причём тот элемент,
который порождается первым, является наименьшим.
313 / 907
4.2.5. Мощность конечного множества (3/5)
Теорема. Любой отрезок натурального ряда конечен:

∀ n ∈ N (|1..n| < ∞) .

Доказательство. От противного. Пусть существуют бесконечные отрезки натурального ря-


да. Рассмотрим наименьшее n такое, что |1..n| = ∞. Тогда отрезок 1..n равномощен
некоторому своему собственному подмножеству A: |1..n| = |A|, A ( 1..n, то есть суще-
ствует взаимно-однозначное соответствие 1..n ∼ A. Пусть при этом соответствии n ↔ i.
Может случиться так, что n ∈ A и n 6= i. Тогда «подправим» соответствие так, что n ↔ n
и i ↔ i. Рассмотрим теперь соответствие между отрезком 1..(n − 1) и его собственным
подмножеством A − i, задаваемое соответствием между отрезком 1..n и множеством A.
Это соответствие является взаимно-однозначным, а значит, отрезок 1..(n−1) изоморфен
своему собственному подмножеству и является бесконечным, что противоречит выбору
n.

314 / 907
4.2.5. Мощность конечного множества (4/5)
Следствие. Различные отрезки натурального ряда неравномощны:

n 6= m =⇒ |1..n| =
6 |1..m|.
Доказательство. Пусть для определённости n > m. Тогда 1..m ⊂ 1..n и 1..m 6= 1..n. Если
|1..n| = |1..m|, то |1..n| = ∞, что противоречит теореме.
Замечание. Это следствие часто излагают в следующей форме: если n 6= m, то n кроли-
ков невозможно рассадить в m ящиков так, чтобы в каждом ящике было по одному кро-
лику. Действительно, если бы рассадить кроликов было возможно, то было бы установле-
но взаимно-однозначное соответствие между различными отрезками натурального ря-
да. Это утверждение называется принцип Дирихле.
Говорят, что конечное множество A имеет мощность k (обозначения: |A| = k , card A = k ,
#A = k ), если оно равномощно отрезку 1..k :
Def
|A| = k = A ∼ 1..k.
315 / 907
4.2.5. Мощность конечного множества (5/5)
Замечание. Таким образом, если множество A конечно, |A| = k , то элементы A всегда
можно перенумеровать, то есть поставить им в соответствие номера из отрезка 1..k с
помощью некоторой процедуры. Наличие такой процедуры подразумевается, когда упо-
требляется запись A = {a1 , . . . , ak }.
Def
По определению |∅| = 0.
Отступление. Определение мощности конечного множества как натурального числа позволяет
сравнивать конечные множества по мощности естественным и привычным образом, например,
констатировать, что A ⊂ B =⇒ |A| 6 |B|. Однако указанное определение мощности для конеч-
ных множеств не распространяется на бесконечные множества, поэтому сравнивать по мощно-
сти бесконечные множества надобно с большой осторожностью. Для этого вводятся кардиналь-
ные числа и другие трансфинитные построения. Точное определение соответствующих понятий
выходит за намеченные здесь рамки наивной теории множеств, поскольку эти понятия никогда
не используются в программировании.

316 / 907
4.2.6. Операции над множествами (1/4)
Обычно рассматриваются следующие операции над множествами:
Def
объединение: A ∪ B = {x | x ∈ A ∨ x ∈ B};
Def
пересечение: A ∩ B = {x | x ∈ A & x ∈ B};
Def
разность: A \ B = {x | x ∈ A & x ∈
/ B};
Def
симметрическая A M B = (A ∪ B) \ (A ∩ B);
Def
разность: A M B = {x | x ∈ A 6≡ x ∈ B};
Def
дополнение: / A}.
A = {x | x ∈

Результаты операций объединения, пересечения, разности и симметрической разности


множеств всегда определены и являются множествами. Операция дополнения подразу-
мевает, что задан некоторый универсум U : A = U \ A. В противном случае операция до-
полнения не определена.
Пример. Пусть A ←{1, 2, 3}, B ←{3, 4, 5}. Тогда A ∩ B = {3}, A ∪ B = {1, 2, 3, 4, 5},
A \ B = {1, 2}, A M B = {1, 2, 4, 5}.
317 / 907
4.2.6. Операции над множествами (2/4)
На рисунке приведены диаграммы Венна, иллюстрирующие операции над множествами.
Сами исходные множества изображаются фигурами (в данном случае прямоугольника-
ми), а результат выделяется графически (в данном случае для выделения использована
заливка серым).

В некоторых случаях операции над множествами выразимы через комбинации других


операций.
∪, ∩ ∪, \ ∪, M
A∪B = A∪B A∪B A∪B
A∩B = A∩B A \ (A \ B) (A ∪ B) M (A M B)
A\B = — A\B (A ∪ B) M B
AMB= — (A \ B) ∪ (B \ A) AMB
318 / 907
4.2.6. Операции над множествами (3/4)
∩, \ ∩, M \, M
A∪B = — (A M B) M (A ∩ B) (A M B) M (A \ (A \ B))
A∩B = A∩B A∩B A \ (A \ B)
A\B = A\B A M (A ∩ B) A\B
AMB= — AMB AMB
В то же время, в четырёх случаях выражения не существует.
Разность и симметрическая разность невыразимы через объединение и пересечение.
Действительно, если A = B 6= ∅, то A \ B = ∅, A M B = ∅, при этом любые ком-
бинации объединения и пересечения непустого множества с самим собой дают это же
самое множество.
Объединение и симметрическая разность невыразимы через пересечение и разность, по-
скольку результат пересечения и разности всегда является подмножеством первого ар-
гумента, и поэтому значение любого выражения, составленного из пересечений и разно-
стей, является подмножеством одного из исходных аргументов.
319 / 907
4.2.6. Операции над множествами (4/4)
Если множества A и B конечны, то из определений и диаграмм Венна ясно, что
|A ∪ B| = |A| + |B| − |A ∩ B|,
|A \ B| = |A| − |A ∩ B|,
|A M B| = |A| + |B| − 2|A ∩ B|.

Операции пересечения и объединения двух множеств допускают следующее обобщение.


Пусть задано семейство множеств {Ai }i∈I . Тогда
Def Def
[ \
Ai = {x | ∃ i ∈ I (x ∈ Ai )} , Ai = {x | ∀ i ∈ I (x ∈ Ai )} .
i∈I i∈I
Замечание. Если операция ассоциативна, то неважно, как расставлены скобки в выраже-
нии с этой операцией. В таком случае можно считать, что операция допускает перемен-
ное количество аргументов, два или более, и считать операцию
S групповой.
T Примерами
групповых операций являются
P введённые объединение
Q и пересечение , а также хо-
рошо известные сумма и произведение .
320 / 907
4.2.7. Разбиения и покрытия (1/5)
Пусть E = {Ei }i∈I — семейство подмножеств множества M ; Ei ⊂ M . Семейство E назы-
вается покрытием множества M , если каждый элемент M принадлежит хотя бы одному
из Ei :
∀ x ∈ M (∃ i ∈ I (x ∈ Ei )) .
Семейство E называется дизъюнктным, если элементы этого семейства попарно не пе-
ресекаются, то есть каждый элемент M принадлежит не более чем одному из множеств
Ei :
∀ i, j ∈ I (i 6= j =⇒ Ei ∩ Ej = ∅) .
Дизъюнктное покрытие называется разбиением множества M . Элементы разбиения, то
есть подмножества множества M , часто называют блоками разбиения.
Теорема. Если E = {Ei }i∈I есть дизъюнктное семейство подмножеств множества M ,
то существует разбиение B = {Bi }i∈I множества M такое, что каждый элемент дизъ-
юнктного семейства E является подмножеством блока разбиения B : ∀ i ∈ I (Ei ⊂ Bi ) .

321 / 907
4.2.7. Разбиения и покрытия (2/5)
Доказательство. Выберем произвольный элемент i0 ∈ I и построим семейство
B = {Bi }i∈I следующим образом:
[
Bi0 ← M \ Ei , ∀ i ∈ I − i0 (Bi ← Ei ) .
i∈I−i0

Семейство B по построению является дизъюнктным покрытием, то есть разбиением. Ясно,


что Ei0 ⊂ Bi0 , а для остальных элементов требуемое включение имеет место по постро-
ению.
Пример. Пусть M ←{1, 2, 3}. Тогда элементы дизъюнктного семейства
E = {E1 = {1}, E2 = {2}} являются подмножествами блоков разбиения
B = {E1 = {1, 3}, E2 = {2}}.
Следствие. Если все множества Ei конечны и множество индексов I конечно, а семейство
E = {Ei }i∈I дизъюнктно, то
[ X
Ei = |Ei |.


i∈I i∈I
322 / 907
4.2.7. Разбиения и покрытия (3/5)
Теорема. Если A ,→ B и A ←- B , то A ∼ B .
Доказательство. Определим операцию ∗ так: ∀ C ⊂ A (C ∗ ← A \ (B \ C ,→ )←- ).
Заметим, что D ⊂ C ⊂ A =⇒ D,→ ⊂ C ,→ ⊂ B =⇒ B \ C ,→ ⊂ B \ D,→ =⇒
=⇒ (B \ C ,→ )←- ⊂ (B \ D,→ )←- =⇒ A \ (B \ D,→ )←- ⊂ A \ (B \ C ,→ )←- =⇒ D∗ ⊂ C ∗ ⊂ A,
поскольку ∀ X, Y, Z (X ⊂ Y ⊂ Z =⇒ Z \ Y ⊂ Z \ X) (то есть введённая операция ∗
монотонна по включению). Заметим также, что (C ∪ D)∗ = C ∗ ∪ D∗ , поскольку
∀ X, Y, Z, W (X \ (Y \ (Z ∪ W )) = (X \ (Y \ Z)) ∪ (X \ (Y \ W ))) . Пусть теперь

M = {CS ⊂ A | C ⊂ C }. Семейство S M непустое:S∅ ∈ M∗. Рассмотрим множество
∗ ∗
S = C∈M C . Имеем S = C∈M C = C∈M C , значит S ⊂ S ∗ и S ∈ M.
По свойству монотонности получаем S ⊂ S ∗ ∗ , так что S ∗ ∈ M, а значит, S ∗ ⊂ S .

Таким образом, S = S ∗ = A \ (B \ S ,→ )←- , откуда A \ S = (B \ S ,→ )←- , поскольку


∀ X, Y, Z (X = Y \ Z =⇒ Z = Y \ X). Теперь рассмотрим разбиение множества
A = (A \ S) ∪ S и множества B = (B \ S ,→ ) ∪ S ,→ . Определим требуемое взаимно-
однозначное соответствие на подмножествах S и S ,→ с помощью вложения A ,→ B , а на
подмножествах A \ S и B \ S ,→ с помощью вложения A ←- B .
323 / 907
4.2.7. Разбиения и покрытия (4/5)
Приведём доказательство этой важной теоремы без опоры на понятие семейства.
Доказательство. Введём обозначения: A0 ← A, B0 ← B , B1 ← A,→ , A1 ← B ←- , и так
←-
далее, Bi+1 ← A,→
i , Ai+1 ← Bi . В этих обозначениях A0 ⊃ A1 ⊃ A2 ⊃ . . . ,
B0 ⊃ B1 ⊃ B2 ⊃ . . . , причём A0 ∼ B1 ∼ A2 ∼ . . . , B0 ∼ A1 ∼ B2 ∼ . . . ,
то есть Ai ∼ Ai+2 , Bi ∼ Bi+2 . Осталось доказать, что A0 ∼ A1 . Обозначим Ci ← Ai \Ai+1 .
Имеем Ci = Ai \ A Ti+1 ∼ Ai+2 \ Ai+1+2 = Ci+2 .
Обозначим C ← i Ai — «сердцевина», воз-
можно, пустая. По построению A0 = C0 ∪ C1 ∪
C2 ∪ · · · ∪ C и A1 = C1 ∪ C2 ∪ · · · ∪ C . Пусть
вложение A ,→ B элементу a ∈ A сопоставля-
ет элемент f (a) ∈ B , а вложение A ←- B эле-
менту b ∈ B сопоставляет элемент g(b) ∈ A.
Тогда построим соответствие h из A0 в A1 : h(a) ← if a ∈ C2n then g(f (a)) else a end if. Это
соответствие взаимно-однозначно. В самом деле, h(C2n ) = C2n+2 , h(C2n+1 ) = C2n+1 , и
h(C) = C . Таким образом, h(A0 ) = h(C0 ∪ C1 ∪ C2 ∪ · · · ∪ C) = C1 ∪ C2 ∪ · · · ∪ C = A1 ,
и значит A0 ∼ A1 . 324 / 907
4.2.7. Разбиения и покрытия (5/5)
Замечание. Доказанное утверждение в отечественной традиции называется теоремой
Кантора–Бернштейна, а в зарубежной традиции — теоремой Шрёдера–Бернштейна.
Следствие. Если A ⊂ B ⊂ C и A ∼ C , то B ∼ C .
Доказательство. B ⊂ C =⇒ B ,→ C , A ⊂ B & A ∼ C =⇒ B ←- C
Отступление. Для случая конечных множеств теорема Кантора–Бернштейна представляется инту-
итивно очевидной. Однако доказательство теоремы для общего случая оказывается сравнительно
сложным. Это не случайно, при трансфинитных построениях интуиция часто подводит, поскольку
рассуждения не опираются на повседневный опыт. В таких случаях формализация оказывается
более надёжным инструментом по сравнению с интуицией.
Пример. Пусть A — множество точек квадрата, а B — множество то-
чек вписанного в него круга. С одной стороны, поскольку круг впи-
сан в квадрат, имеем
√ B ,→ A. С другой стороны, исходный квадрат
можно сжать в 2/2 раз (биекция), получив квадрат A0 , и вписать
его в круг так, что A ∼ A0 ,→ B . Получаем A ∼ B , причём соответ-
ствие хорошо видно на рисунке: белые точки соответстствуют√ сами
себе, а чёрные точки сопоставляет друг другу гомотетия 1/ 2.
325 / 907
4.2.8. Булеан (1/4)
Множество всех подмножеств множества M называется булеаном множества M и обо-
значается 2M :
Def
2M = {A | A ⊂ M } .
Теорема. Если множество M конечно, то |2M | = 2|M | .
Доказательство. Индукция по |M  |. База: если |M | = 0, то M = ∅ и 2 = {∅}. Пусть

M |M |
∀ M |M  | < kM=⇒ |2 | = 2 . Рассмотрим
 M = {a 1 , . . . , ak }, |M | = k . Положим
M1 ← X ∈ 2 | a k ∈ / X и M2 ← X ∈ 2 | ak ∈ X . Имеем 2M = M1 ∪ M2 ,
M

M1 ∩ M2 = ∅, M1 ∼ M2 за счёт взаимно-однозначного соответствия X ↔ X + ak


и M1 ∼ 2{a1 ,...,ak−1 } . По индукционному предположению |2{a1 ,...,ak−1 } | = 2k−1 , и, значит,
|M1 | = |M2 | = 2k−1 . Следовательно, |2M | = |M1 | + |M2 | = 2k−1 + 2k−1 = 2k .
Примеры. 2∅ = {∅}; |2∅ | = 2|∅| = 20 = 1.
2{1} = {∅, {1}}; |2{1} | = 2|{1}| = 21 = 2.
Применение операций к подмножествам универсума не выводит за его пределы.
Множество всех подмножеств множества U с операциями пересечения, объединения,
разности и дополнения образует алгебру подмножеств множества U .
326 / 907
4.2.8. Булеан (2/4)
В булеане 2M естественно выделяются семейства подмножеств C k (M ), состоящие из под-
множеств множества M , имеющих одинаковую мощность k , то есть
C k (M ) = {S ⊂ M | k = |S|}. Такие семейства называются семействами равномощных
подмножеств. Заметим, что семейства равномощных подмножеств, за исключением
C 0 (M ), являются покрытиями множества M , а C 1 (M ) — семейство одноэлементных под-
множеств множества M — является разбиением. Кроме того, семейства C k (M ) не пере-
секаются. Если |M | = n, то очевидно, что
n
[ n
X
M k n
2 = C (M ) и 2 = |C k (M )|.
k=0 k=0
Замечание. В п. 2.1.5. показано, что мощность семейства равномощных подмножеств
C k (M ) является биномиальным коэффициентом, |C k (M )| = C(n, k).
Пример. Множество всех подмножеств множества {1, 2, 3} содержит одно несобствен-
ное подмножество ∅, семейство из трёх одноэлементных подмножеств {1}, {2}, {3}, се-
мейство из трёх двухэлементных подмножеств {1, 2}, {2, 3}, {1, 3} и одно несобствен-
ное подмножество {1, 2, 3}.
327 / 907
4.2.8. Булеан (3/4)
Неравномощные множества можно сравнивать. Если множества A и B неравномощны,
|A| 6= |B|, и при этом в множестве B существует собственное подмножество C , C B ,
такое что |A| = |C|, то говорят, что множество B мощнее множества A и записывают это
так: |A| < |B|. Более формально:
Def
|A| < |B| = A ,→ B & |A| =
6 |B|.
Теорема. Булеан множества мощнее множества: |A| < |2A |.
Доказательство. От противного. Пусть A — некоторое множество и существует взаимно-
f
однозначное соответствие A ∼ 2A . Положим Y ← {x ∈ A | x ∈ / f (x)}. Имеем Y ∈ 2A ,
значит ∃ y ∈ A (f (y) = Y ). Рассмотрим элемент y и множество Y . Если y ∈ Y , то y ∈
/ Y,
а если y ∈
/ Y , то y ∈ Y — противоречие. Следовательно, соответствие f не существует, а
значит множество и его булеан неравномощны. Но множество A равномощно множеству
одноэлементных подмножеств, которое является собственным подмножеством булеана,
A ∼ C 1 (A).
Def
Замечание. Иногда используют обозначение |A| 6 |B|, полагая |A| 6 |B| = A ,→ B .
328 / 907
4.2.8. Булеан (4/4)
Следствие. Не существует множества всех множеств.
Доказательство. От противного. Пусть множество всех множеств существует, обозначим
его U . Тогда U ∼ C 1 (U ) ⊂ 2U , и значит U ,→ 2U . С другой стороны, все элементы булеана
также являются множествами, ∀ X ∈ 2U (X ∈ U ), то есть 2U ⊂ U , и значит 2U ,→ U . По
теореме Кантора–Бернштейна имеем U ∼ 2U , что противоречит |U | < |2U |.
Замечание. Это следствие известно как парадокс Кантора.
Пример. Множества всех конечных множеств также не существует. Действительно, пусть
такое множество M существует. Тогда ∀ A (A ,→ M ): a 7→ {a}, a ∈ A, {a} ∈ M , и значит
|A| 6 |M |. Если взять A ← 2M , то |2M | 6 |M |, что противоречит теореме Кантора.
Отступление. При обобщении любой теории неизбежно возникают трудные вопросы, на которые
надобно ответить для обоснования обобщения. Разобранный парадокс Кантора является приме-
ром ответа на такой вопрос в наивной теории множеств. Другие примеры трудных вопросов: су-
ществует ли надмножество всех множеств? Существует ли множество максимальной мощности?
Существует ли множество Y , такое что |X| < |Y | < |2X | для бесконечного множества X ? (обоб-
щённая континуум-гипотеза). При поиске ответа на трудные вопросы следует оценить, окупит ли
найденный ответ затраты на решение вопроса? 329 / 907
4.2.9. Свойства операций над множествами (1/4)
Теорема. Пусть A, B, C ⊂ U 6= ∅. Тогда операции над множествами обладают
следующими свойствами:
1) идемпотентность: A ∪ A = A, A ∩ A = A;
2) коммутативность: A ∪ B = B ∪ A, A ∩ B = B ∩ A;
3) ассоциативность: A ∪ (B ∪ C) = (A ∪ B) ∪ C ,
A ∩ (B ∩ C) = (A ∩ B) ∩ C ;
4) дистрибутивность: A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C),
A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C);
5) поглощение: (A ∩ B) ∪ A = A, (A ∪ B) ∩ A = A;
6) свойства нуля: A ∪ ∅ = A, A ∩ ∅ = ∅;
7) свойства единицы: A ∪ U = U, A ∩ U = A;
8) инволютивность дополнения: A = A;
9) законы де Моргана A ∩ B = A ∪ B, A ∪ B = A ∩ B ;
10) свойства дополнения: A ∪ A = U, A ∩ A = ∅;
11) выражение для разности: A \ B = A ∩ B.
330 / 907
4.2.9. Свойства операций над множествами (2/4)
Доказательство. Для первого равенства: x ∈ A ∪ A ⇐⇒ x ∈ A ∨ x ∈ A ⇐⇒ x ∈ A.
Аналогично и для остальных равенств.
Отступление. Чтобы наглядно усмотреть справедливость указанных равенств, очень полезно на-
рисовать соответствующие диаграммы Венна.
Введённые операции над множествами — объединение, пересечение, разность и сим-
метрическая разность — примечательны тем, что определены для любых множеств, по-
скольку элементы множества-результата берутся из множеств-операндов.
Замечание. Если наложить ограничение, что в результат операции над множествами вхо-
дят только элементы операндов, то набор из четырёх введённых операций оказывается
исчерпывающим.
Однако в алгебре подмножеств любого множества U возможно определять такие опера-
ции, в результаты которых входят элементы множества U , не входящие в операнды.
Def
Пример. Результат операции дополнения A = {a ∈ U | a 6∈ A} состоит из элементов,
которые не входят в операнд.
331 / 907
4.2.9. Свойства операций над множествами (3/4)
Рассмотрим ещё две операции: | и ↓ над подмножествами множества U :
Def Def
A | B = {x ∈ U | x 6∈ A ∨ x 6∈ B} , A ↓ B = {x ∈ U | x 6∈ A & x 6∈ B} .
Замечание. В алгебре подмножеств эти операции обычно не рассматриваются, а потому
не именуются. Аналогичные операции в алгебре логики называются штрих Шеффера и
стрелка Пирса, соответственно.
Нетрудно показать, что введённые здесь операции выражаются через привычные опера-
ции над множествами:
A | B = U \ (A ∩ B) = A ∩ B = A ∪ B, A ↓ B = U \ (A ∪ B) = A ∪ B = A ∩ B.
Это наблюдение позволяет заметить, что некоторые нетривиальные свойства привычных
операций выполняются и для вновь введённых операций, например, законы де Моргана
A | B = A ↓ B, A ↓ B = A | B.
Замечание. Если определена инволютивная операция дополнения, то операции, для ко-
торых выполняются законы де Моргана, называются двойственными. Двойственными яв-
ляются пересечение и объединение, штрих Шеффера и стрелка Пирса. 332 / 907
4.2.9. Свойства операций над множествами (4/4)
Все традиционные операции над множествами непосредственно выражаются как через
штрих Шеффера, так и через стрелку Пирса:
A = A ∪ A = A | A = A ∩ A = A ↓ A,
A ∪ B = (A | A) | (B | B) = (A ↓ B) ↓ (A ↓ B),
A ∩ B = (A | B) | (A | B) = (A ↓ A) ↓ (B ↓ B),
A \ B = A ∩ B = (A | (B | B)) | (A | (B | B)) = (A ↓ A) ↓ B,
A4B = (A \ B) ∪ (B \ A) = (((A ↓ A) ↓ B) ↓ ((B ↓ B) ↓ A)) ↓ (((A ↓ A) ↓ B) ↓ ((B ↓ B) ↓ A)).
Отступление. Отмеченные свойства операций бывают присущи различным операциям, в частно-
сти, они присущи арифметическим операциям с числами. Однако операции над множествами от-
личаются от числовых операций в следующем существенном аспекте. Образно говорят, что би-
нарная операция  обладает памятью, если по результату операции и одному из операндов мож-
но восстановить второй операнд. Другими словами, если уравнение a  x = b имеет однозначное
решение, выражаемое через a и b. Например, в арифметике, если a + x = b, то x = b − a. Однако,
если A ∪ X = B , то в общем случае можно утверждать, что B \ A ⊂ X ⊂ B , но не более того.
333 / 907
4.3. Отношения

Обычное широко используемое понятие «отношение» имеет вполне точное математиче-


ское значение, которое вводится в этом разделе.
Формально отношения являются множествами, и четвёртую тему курса можно было бы
назвать «Множества, в том числе отношения». Однако с помощью отношений вводят в
рассмотрение целый ряд понятий и обозначений, которые находят, может быть, даже
больше применений, чем рассмотренные операции с множествами. В частности, широко
используемое понятие «граф», рассматриваемое в следующей теме, в сущности равно-
объёмно понятию «бинарное отношение».
Поэтому понятие «отношение» вполне правомерно поставить в один ряд с понятием
«множество».

334 / 907
4.3.1. Упорядоченные пары и наборы (1/2)
Если a и b — объекты, то через (a, b) обозначим упорядоченную пару. Равенство упорядо-
ченных пар определяется следующим образом:
Def
(a, b) = (c, d) = a = c & b = d.
Вообще говоря, (a, b) 6= (b, a), если a 6= b.
Пример. Место в зрительном зале обычно определяется парой натуральных чисел: номер
ряда и номер места в ряду.
Замечание. Формально, упорядоченные пары можно определить как множества, если
Def
определить их так: (a, b) = {{a}, {a, b}}. Таким образом, введённое понятие упорядо-
ченной пары не выводит рассмотрение за пределы наивной теории множеств.
Аналогично упорядоченным парам можно рассматривать упорядоченные тройки, четвёр-
ки и т. д. В общем случае подобные объекты называются n-ками, кортежами, наборами
или (конечными) последовательностями. Упорядоченный набор из n элементов обозна-
чается (a1 , . . . , an ).
Замечание. Обычно элементы последовательности считают однотипными, то есть при-
надлежащими одному множеству, хотя, вообще говоря, это не обязательно. 335 / 907
4.3.1. Упорядоченные пары и наборы (2/2)
Набор (a1 , . . . , an ) можно определить рекурсивно, используя понятие упорядоченной па-
Def
ры: (a1 , . . . , an ) = ((a1 , . . . , an−1 ) , an ) . Количество элементов в наборе называется его
длиной и обозначается следующим образом: |(a1 , . . . , an )|.
Замечание. Наиболее естественным представлением в программе n-ки с элементами из
множества A является массив array [1..n] of A.
Теорема.
 Два набора одной длины равны, если равны  их соответствующие элементы:
n
V
∀n (a1 , . . . , an ) = (b1 , . . . , bn ) ⇐⇒ ai = b i .
i=1
Доказательство. Индукция по n. База: при n = 2 по определению равенства упорядочен-
n−1
V
ных пар. Пусть теперь (a1 , . . . , an−1 ) = (b1 , . . . , bn−1 ) ⇐⇒ ai = bi . Тогда
i=1
(a1 , . . . , an ) = (b1 , . . . , bn ) ⇐⇒ ((a1 , . . . , an−1 ) , an ) = ((b1 , . . . , bn−1 ) , bn ) ⇐⇒
Vn
⇐⇒ (a1 , . . . , an−1 ) = (b1 , . . . , bn−1 ) & an = bn ⇐⇒ ai = b i .
i=1
Отсюда следует, что порядок «отщепления» элементов в рекурсивном определении кор-
тежа не имеет значения.
336 / 907
4.3.2. Прямое произведение множеств (1/2)
Пусть A и B — два множества. Прямым (декартовым) произведением двух множеств A и B
называется множество всех упорядоченных пар, в которых первый элемент принадлежит
множеству A, а второй принадлежит множеству B :
Def
A × B = {(a, b) | a ∈ A & b ∈ B} .
Замечание. Точка на плоскости может быть задана упорядоченной парой координат, т. е.
двумя точками на координатных осях. Таким образом, R2 = R × R. Своим появлением
метод координат обязан Декарту, отсюда и название «декартово произведение».
Теорема. Если множества A и B конечны, то |A × B| = |A| |B|.
Доказательство. Первый компонент упорядоченной пары можно выбрать |A| способами,
второй — |B| способами, причём независимо от выбора первого элемента. Таким обра-
зом, всего имеется |A||B| различных упорядоченных пар.
Понятие прямого произведения допускает обобщение.
Def
A1 × · · · × An = {(a1 , . . . , an ) | a1 ∈ A1 & . . . & an ∈ An } .
337 / 907
4.3.2. Прямое произведение множеств (2/2)
В прямом произведении A1 × · · · × An множества Ai не обязательно различны.
Следствие. |A1 × · · · × An | = |A1 | · · · · · |An |.
Прямое произведение нескольких множеств можно вычислять в произвольном порядке.
Лемма. (A × B) × C ∼ A × (B × C).
Доказательство. (A × B) × C = {((a, b), c) | (a, b) ∈ A × B & c ∈ C} =
(a,b,c)↔(a,(b,c))
= {(a, b, c) | a ∈ A & b ∈ B & c ∈ C} ∼
∼ {(a, (b, c)) | a ∈ A & (b, c) ∈ B × C} = A × (B × C).
Степенью множества A называется его n-кратное прямое произведение самого на себя.
Def Def Def
Обозначение: An = A · · × A} . Соответственно, A1 = A, A2 = A × A и вообще
| × ·{z
n раз

Def
An = An−1 × A.

Следствие. |An | = |A|n .


338 / 907
4.3.3. Бинарные отношения (1/4)

Бинарным отношением между множествами A и B называется тройка hA, B, Ri, где R —


подмножество прямого произведения A и B : R ⊂ A×B. Множество R называется графи-
ком отношения, A называется областью отправления, а B — областью прибытия. Если
множества A и B определены контекстом, то часто просто говорят, что задано отноше-
ние R. При этом для краткости отношение обозначают тем же символом, что и график.
Замечание. Принято говорить «отношение между множествами», хотя порядок множеств
имеет значение и отношение между A и B совсем не то же самое, что отношение меж-
ду B и A. Поэтому иногда, чтобы подчеркнуть это обстоятельство, употребляют оборот
«отношение R из множества A в множество B ».
Среди элементов множеств A и B могут быть такие, которые входят в одну или несколько
пар, определяющих отношение R, а могут быть такие, которые не входят ни в одну из пар,
определяющих отношение R.

339 / 907
4.3.3. Бинарные отношения (2/4)
Множество элементов области отправления, которые присутствуют в парах отношения,
называется областью определения отношения R и обозначается Dom R, а множество эле-
ментов области прибытия, которые присутствуют в парах отношения, называется обла-
стью значений отношения R и обозначается Im R:
Def
Dom R = {a ∈ A | ∃ b ∈ B ((a, b) ∈ R)} , Dom R ⊂ A
Def
Im R = {b ∈ B | ∃ a ∈ A ((a, b) ∈ R)} , Im R ⊂ B .
Если A = B (R ⊂ A2 ), то говорят, что R есть отношение на множестве A. Для бинарных
Def
отношений обычно используется инфиксная форма записи : aRb = (a, b) ∈ R ⊂ A × B.
Инфиксная форма позволяет более кратко записывать некоторые формы утверждений
Def
относительно отношений: aRbRc = (a, b) ∈ R &(b, c) ∈ R.
Пример. Пусть задано множество U . Тогда ∈ (принадлежность) — отношение между эле-
ментами множества U и элементами булеана 2U , а ⊂ (включение) и = (равенство) — от-
ношения на 2U . Хорошо известны отношения =, <, 6, >, >, 6= между числами.
340 / 907
4.3.3. Бинарные отношения (3/4)
Пусть R — отношение между множествами A и B : R ⊂ A × B . Введём следующие поня-
тия:
Def
Обратное отношение: R−1 = {(b, a) | (a, b) ∈ R} ⊂ B × A.
Def
Дополнение отношения: R = {(a, b) | (a, b) ∈ / R} ⊂ A × B .
Def
Универсальное отношение: U = {(a, b) | a ∈ A & b ∈ B} = A×B .
Пример. Графики отношений
R = {(x, y) | 4 > x − y > 1},
x ∈ 1..5, y ∈ 1..4 и
R−1 = {(x, y) | 4 > y − x > 1},
x ∈ 1..4, y ∈ 1..5.

341 / 907
4.3.3. Бинарные отношения (4/4)
На любом множестве можно определить тождественное отношение:
Def
I = {(a, a) | a ∈ A} ⊂ A2 . Обычно для обозначения тождественного отношения исполь-
зуют знак равенства =.
Примеры. Равенство множеств и равенство чисел — тождественные отношения.
Замечание. График тождественного отношения на множестве A иногда называют диаго-
налью в A × A.
Обобщённое понятие отношения: n-местное (n-арное) отношение R — это подмножество
прямого произведения n множеств, то есть множество кортежей:
Def
R ⊂ A1 × · · · × An = {(a1 , . . . , an ) | a1 ∈ A1 & . . . & an ∈ An } .
Обычно вместо (a1 , . . . , an ) ∈ R пишут R(a1 , . . . , an ). Число n, то есть длину кортежей
отношения, называют иногда вместимостью.
Отступление. Многоместные отношения используются, например, в теории баз данных. Само на-
звание «реляционная» база данных происходит от слова relation (отношение).
Далее рассматриваются только двуместные (бинарные) отношения, при этом слово «би-
нарные» опускается.
342 / 907
4.3.4. Композиция отношений (1/2)
Пусть R1 ⊂ A × C — отношение из A в C , а R2 ⊂ C × B — отношение из C в B .
Композицией двух отношений R1 и R2 называется отношение R ⊂ A × B из A в B ,
определяемое следующим образом:
Def
R = R1 ◦ R2 = {(a, b) | a ∈ A & b ∈ B & ∃ c ∈ C (aR1 c & cR2 b)} .
Другими словами, a(R1 ◦ R2 )b ⇐⇒ ∃ c ∈ C (aR1 c & cR2 b) .
Теорема. Композиция отношений ассоциативна, то есть
∀R1 ⊂ A × B, R2 ⊂ B × C, R3 ⊂ C × D ((R1 ◦ R2 ) ◦ R3 = R1 ◦ (R2 ◦ R3 )) .
Доказательство.
a(R1 ◦ R2 ) ◦ R3 d ⇐⇒ ∃ c ∈ C (aR1 ◦ R2 c & cR3 d) ⇐⇒
⇐⇒ ∃ c ∈ C ((∃ b ∈ B (aR1 b & bR2 c)) & cR3 d) ⇐⇒
⇐⇒ ∃ b ∈ B, c ∈ C (aR1 b & bR2 c & cR3 d) ⇐⇒
⇐⇒ ∃ b ∈ B (aR1 b & (∃ c ∈ C (bR2 c & cR3 d))) ⇐⇒
⇐⇒ ∃ b ∈ B (aR1 b & bR2 ◦ R3 d) ⇐⇒ aR1 ◦ (R2 ◦ R3 )d.
343 / 907
4.3.4. Композиция отношений (2/2)

Композиция отношений на множестве A является отношением на множестве A.


Пример. Композиция отношений < и 6 на множестве вещественных чисел совпадает с
отношением <: < ◦ 6 = <.
Замечание. В общем случае композиция отношений не коммутативна, то есть
R1 ◦ R2 6= R2 ◦ R1 .
Пример. На множестве людей определены отношения кровного родства и супружества.
Отношения «кровные родственники супругов» и «супруги кровных родственников» раз-
личны.
Из определения композиции непосредственно следует, что если S1 ⊂ R1 & S2 ⊂ R2 ,
то S1 ◦ S2 ⊂ R1 ◦ R2 .

344 / 907
4.3.5. Свойства отношений (1/4)
Пусть R ⊂ A2 . Тогда отношение R называется
рефлексивным, если ∀ a ∈ A (aRa);
антирефлексивным, если ∀ a ∈ A (¬aRa);
симметричным, если ∀ a, b ∈ A (aRb =⇒ bRa);
антисимметричным, если ∀ a, b ∈ A (aRb & bRa =⇒ a = b);
транзитивным, если ∀ a, b, c ∈ A (aRb & bRc =⇒ aRc);
линейным, если ∀ a, b ∈ A (a = b ∨ aRb ∨ bRa).
Замечание. Иногда линейное отношение R называют полным. Такой термин является
оправданным, поскольку для любых двух различных элементов, a и b, либо пара (a, b),
либо пара (b, a) принадлежит отношению R. Отношение, не обладающее свойством пол-
ноты, при этом вполне естественно называть частичным. Однако использование терми-
на «полное отношение» может порождать терминологическую путаницу. Дело в том, что
словосочетание «вполне упорядоченное множество», оказывается созвучным словосо-
четанию «множество с полным порядком», хотя эти словосочетания обозначают суще-
ственно различные объекты. Поэтому здесь термин «линейное отношение» считается ан-
тонимом термину «частичное отношение». 345 / 907
4.3.5. Свойства отношений (2/4)
Теорема. Пусть R ⊂ A × A — отношение на A. Тогда:

1. R рефлексивно ⇐⇒ I ⊂ R;
2. R симметрично ⇐⇒ R = R−1 ;
3. R транзитивно ⇐⇒ R ◦ R ⊂ R;
4. R антисимметрично ⇐⇒ R ∩ R−1 ⊂ I ;
5. R антирефлексивно ⇐⇒ R ∩ I = ∅;
6. R линейно ⇐⇒ R ∪ I ∪ R−1 = U .

Доказательство. Используя определения свойств отношений, имеем:


[ 1. ⇐⇒ ] ∀ a ∈ A (aRa) ⇐⇒ ∀ a ∈ A ((a, a) ∈ R) ⇐⇒ I ⊂ R.
[ 2. ⇐⇒ ] ∀ a, b ∈ A (aRb =⇒ bRa) ⇐⇒ ∀ a, b ∈ A ((a, b) ∈ R =⇒ (b, a) ∈ R) ⇐⇒
⇐⇒ ∀ a, b ∈ A (((a, b) ∈ R =⇒ (b, a) ∈ R) & ((b, a) ∈ R =⇒ (a, b) ∈ R)) ⇐⇒
⇐⇒ ∀ a, b ∈ A (((a, b) ∈ R =⇒ (a, b) ∈ R−1 ) & ((a, b) ∈ R−1 =⇒ (a, b) ∈ R)) ⇐⇒
⇐⇒ R ⊂ R−1 & R−1 ⊂ R ⇐⇒ R = R−1 .
346 / 907
4.3.5. Свойства отношений (3/4)
Доказательство.(Продолжение)
[ 3. ⇐⇒ ] ∀ a, b, c ∈ A (aRb & bRc =⇒ aRc) ⇐⇒
⇐⇒ ∀ a, b, c ∈ A ((a, b) ∈ R & (b, c) ∈ R =⇒ (a, c) ∈ R) ⇐⇒
⇐⇒ ∀ a, c ∈ A (∃ b ∈ A ((a, b) ∈ R & (b, c) ∈ R) =⇒ (a, c) ∈ R) ⇐⇒
⇐⇒ ∀ a, c ∈ A ((a, c) ∈ R ◦ R =⇒ (a, c) ∈ R) ⇐⇒
⇐⇒ ∀ a, c ∈ A (aR ◦ Rc =⇒ aRc) ⇐⇒ R ◦ R ⊂ R.
[ 4. =⇒ ] От противного. R ∩ R−1 6⊂ I =⇒ ∃ a 6= b (aRb & aR−1 b) =⇒
=⇒ ∃ a 6= b (aRb & bRa).
[ 4. ⇐= ] R ∩ R−1 ⊂ I =⇒ (aRb & aR−1 b =⇒ a = b) =⇒ (aRb & bRa =⇒ a = b).
[ 5. =⇒ ] От противного. R ∩ I 6= ∅ =⇒
=⇒ ∃ a ∈ A (aRa & aIa) ⇐⇒ ∃ a ∈ A (aRa) ⇐⇒ ¬∀ a ∈ A (¬aRa).
[ 5. ⇐= ] R ∩ I = ∅ =⇒ ¬∃ a ∈ A (aRa) =⇒ ∀ a ∈ A (¬aRa).
[ 6. ⇐⇒ ] ∀ a, b ∈ A (a = b ∨ aRb ∨ bRa) ⇐⇒
⇐⇒ ∀ a, b ∈ A ((a, b) ∈ I ∨ (a, b) ∈ R ∨ (a, b) ∈ R−1 ) ⇐⇒
⇐⇒ U ⊂ I ∪ R ∪ R−1 ⇐⇒ U = R ∪ I ∪ R−1 .
347 / 907
4.3.5. Свойства отношений (4/4)
Пример. Пусть на множестве M = {1, 2, 3, 4} задано би-
нарное отношение R, график которого показан справа.
Какими из перечисленных свойств обладает это отно-
шение? Отношение R не является ни рефлексивным, ни
симметричным, ни транзитивным, ни линейным, ни анти-
рефлексивным, ни антисимметричным.
Свойства отношений не являются полностью независимыми, в некоторых случаях они
несовместны.
Пример. Отношение не может одновременно быть рефлексивным и антирефлексивным.
Теорема. Если отношение линейно, симметрично и транзитивно, то оно рефлексивно.
Доказательство. Рассмотрим R ⊂ M 2 . Пусть a ∈ M, b ∈ M, a 6= b. Тогда, в силу линей-
ности, aRb ∨ bRa, ввиду симметричности aRb & bRa и по транзитивности aRa.
Замечание. Однако из симметричности и транзитивности рефлексивность не вытекает.
Контрпример — пустое отношение, которое симметрично и транзитивно, но не линейно,
а потому и не рефлексивно.
348 / 907
4.3.6. Степень отношения и циклы (1/4)
Пусть R — отношение на множестве A. Степенью отношения R на множестве A называ-
ется его n-кратная композиция с самим собой. Обозначение:
Def
Rn = R
| ◦ ·{z
· · ◦ R} .
n раз

Def Def Def Def


Соответственно, R0 = I , R1 = R, R2 = R ◦ R и вообще Rn = Rn−1 ◦ R.
Если (a, b) ∈ Rn , то это значит, что ∃ c1 , . . . , cn−1 ∈ A (a R c1 R . . . R cn−1 R b). Последо-
вательность промежуточных элементов, если их индивидуальные имена не важны, обо-
значим для краткости ha R . . . R bi. Количество промежуточных элементов на 1 меньше
степени отношения. Заметим, что не все элементы в последовательности элементов обя-
зательно различны. Вполне может быть, что (a, a) ∈ Rn . В таком случае последователь-
ность ha R . . . R ai называется циклом. Количество вхождений отношения R в запись цик-
ла (т. е. степень отношения) называется длиной цикла.
349 / 907
4.3.6. Степень отношения и циклы (2/4)

Примеры. Простейший цикл длины 2 образует симметричная пара (a, b), такая что
aRb & bRa. Тройка элементов (a, b, c), такая что (a, b) ∈ R & (b, c) ∈ R & (c, a) ∈ R,
образует цикл длины 3 и называется треугольником и т. д.
Замечание. Строго говоря, рефлексивный элемент a, такой что (a, a) ∈ R = R1 , также
образует цикл длины 1 и называется петлёй. Однако такой цикл является тривиальным
и неинтересным с точки зрения свойств отношения в целом. Действительно, если aRa, то
∀ n (aRn a). По петле можно «накручивать» сколь угодно длинные циклы, и это не даёт
никакой новой информации. Поэтому петли обычно не считают циклами.
Отношение R на множестве A (R ⊂ A2 ) называется ациклическим, если оно не содержит
циклов, т. е. последовательностей ha R . . . R ai. Свойство ацикличности тесно связано с
другими свойствами отношений.

350 / 907
4.3.6. Степень отношения и циклы (3/4)

Лемма. [1] Если отношение R на множестве A антисимметрично и транзитивно, то оно


ациклично.
Доказательство. От противного. Пусть ha R b R . . . R ai — цикл. Тогда с одной стороны,
aRb, но с другой стороны, bRa по транзитивности, что противоречит антисимметрично-
сти.
Лемма. [2] Если отношение R на множестве A ациклично, то оно не симметрично и не
содержит симметричных пар aRb & bRa.
Доказательство. Действительно, каждая такая пара образует цикл длины 2.
Вообще говоря, допустимо рассматривать произвольные степени отношения, то есть по-
следовательности элементов и, в частности, циклы произвольной длины. Однако это не
имеет особого смысла, как показывает следующая теорема.

351 / 907
4.3.6. Степень отношения и циклы (4/4)
Теорема. Если некоторая пара (a, b) принадлежит какой-либо степени отношения R на
множестве A мощности n, то эта пара принадлежит и некоторой степени R не выше
n − 1:
R ⊂ A2 & |A| = n =⇒ ∀ a, b ∈ A ∃ k aRk b =⇒ ∃ k < n aRk b .
 

Доказательство. Обозначим c0 ← a, ck ← b. По определению

(a, b) ∈ Rk =⇒ ∃ c1 , . . . , ck−1 ∈ A (c0 Rc1 Rc2 R . . . Rck−1 Rck ) .


Далее, если |A| = n & k > n, то по принципу Дирихле ∃ i, j (ci = cj & i 6= j), то есть
цикл hci R . . . Rcj i, который можно удалить, получив последовательность меньшей дли-
ны c0 Rc1 R . . . Rci Rcj+1 R . . . Rck−1 Rck , то есть (a, b) ∈ Rk−(j−i) . Обозначим через d про-
цедуру, которая вычисляет пару чисел (i, j). Существование требуемого числа k (степени
отношения R) обеспечивается следующим построением:
while k > n do (i, j) ← d(); k ← k −S(j − i) endSwhile
∞ n−1
Следствие. R ⊂ A2 & |A| = n =⇒ i=1 Ri = i=1 Ri .
352 / 907
4.3.7. Ядро отношения (1/3)
Если R ⊂ A × B — отношение между множествами A и B , то композиция R ◦ R−1
называется ядром отношения R и обозначается ker R. Другими словами,
a1 ker R a2 ⇐⇒ ∃ b ∈ B (a1 R b & a2 R b) .
Примеры.
1. Пусть отношение N1 «находиться на расстоянии не более 1» на множестве целых
чисел определено следующим образом: N1 ← {(n, m) | |n − m| 6 1} . Тогда ядром
этого отношения является отношение N2 «находиться на расстоянии не более 2»:
N2 ← {(n, m) | |n − m| 6 2} .
2. Ядром отношения «быть знакомыми» является отношение «быть знакомыми или
иметь общего знакомого». 
3. Ядро отношения ∈ между M и 2M универсально: ∀ a, b ∈ M {a, b} ∈ 2M .
4. Ядро отношения ⊂ на 2M также универсально.
Ядро отношения R между A и B является отношением на A:
R ⊂ A × B =⇒ ker R ⊂ A2 .
353 / 907
4.3.7. Ядро отношения (2/3)
Примеры. (продолжение) 5. Рассмотрим отношение «тесного включения» на 2U :
+1 Def
X ⊂ Y = X ⊂ Y & |X| + 1 = |Y |.
+1
Ядром отношения ⊂ является отношение «отличаться не более чем одним элементом»:
+1 
ker ⊂= X, Y ∈ 2U | |X| = |Y | & |X ∩ Y | > |X| − 1 .
Замечание. Термин «ядро» и обозначение ker используются также и для других объектов.
Их не следует путать — из контекста обычно ясно, в каком смысле используется термин
«ядро».
Теорема. Ядро любого отношения рефлексивно и симметрично на области определения.
Доказательство.
[ Рефлексивность ] Пусть a ∈ Dom R. Тогда ∃ b ∈ B (aRb) =⇒
=⇒ ∃ b ∈ B (aRb & bR−1 a) =⇒ (a, a) ∈ R ◦ R−1 =⇒ a ker R a.
[ Симметричность ] Пусть a, b ∈ Dom R & a ker R b. Тогда ∃ c ∈ B (aRc & cR−1 b) =⇒
=⇒ ∃ c ∈ B (bRc & cR−1 a) =⇒ (b, a) ∈ R ◦ R−1 =⇒ b ker R a.
354 / 907
4.3.7. Ядро отношения (3/3)
Пример. Пусть на множестве M = {1, 2, 3, 4, 5, 6} задано бинарное отношение
R = {(x, y) | xy = 6}. Обратное отношение совпадает с исходным, а ядро рефлексивно
и симметрично, хотя и не линейно.

355 / 907
4.4. Замыкание и сокращение отношений

Замыкание является весьма общим математическим понятием. Неформально говоря, за-


мкнутость означает, что многократное выполнение допустимых шагов не выводит за опре-
делённые границы. Например, предел сходящейся последовательности чисел из замкну-
того интервала [a, b] обязательно принадлежит этому интервалу, а предел сходящейся
последовательности чисел из открытого (то есть не замкнутого) интервала (a, b) может
лежать вне этого интервала. В некоторых случаях можно «расширить» незамкнутый объ-
ект так, чтобы он оказался замкнутым.
Сокращение, или редукция, в некотором смысле противоположно замыканию. Если в за-
мыкание включается всё, что только можно получить из исходного объекта, то в сокра-
щение включается минимум информации из исходного объекта, но так, чтобы можно бы-
ло получить всё то, что несёт в себе исходный объект. Другими словами, замыкание ре-
дукции некоторого объекта совпадает с замыканием исходного объекта.

356 / 907
4.4.1. Транзитивное и рефлексивное замыкание (1/2)
Пусть R и R0 — отношения на множестве M . Отношение R0 называется замыканием от-
ношения R относительно свойства C , если
1) R0 обладает свойством C : C(R0 );
2) R0 является надмножеством R: R ⊂ R0 ;
3) R0 является наименьшим: C(R00 ) & R ⊂ R00 =⇒ R0 ⊂ R00 .
Пусть R+ — объединение положительных степеней R, а R∗ — объединение неотрица-
тельных степеней R:
∞ ∞
+ Def ∗ Def
[ [
i
R = R, R = Ri .
i=1 i=0
+
Теорема. R — транзитивное замыкание R.
Доказательство. Проверим выполнение свойств замыкания при условии, что свойство
C — это транзитивность.
[ C(R+ ) ] Пусть aR+ b & bR+ c. Тогда ∃ n (aRn b) & ∃ m (bRm c). Следовательно,
∃ c1 , . . . , cn−1 (aRc1 R . . . Rcn−1 Rb) и ∃ d1 , . . . , dm−1 (bRd1 R . . . Rdm−1 Rc). Таким обра-
зом, aRc1 R . . . Rcn−1 RbRd1 R . . . Rdm−1 Rc =⇒ aRn+m c =⇒ aR+ c.
357 / 907
4.4.1. Транзитивное и рефлексивное замыкание (2/2)
Доказательство. (Продолжение)

[ R ⊂ R+ ] R = R1 =⇒ R ⊂ Ri =⇒ R ⊂ R+ .
S
i=1 
[ C(R00 ) & R ⊂ R00 =⇒ R+ ⊂ R00 ] aR+ b =⇒ ∃ k aRk b =⇒
=⇒ ∃ c1 , . . . , ck−1 (aRc1 R . . . Rck−1 Rb); R ⊂ R00 =⇒ aR00 c1 R00 . . . R00 ck−1 R00 b =⇒ aR00 b.
Таким образом, R+ ⊂ R00 .
Следствие. R∗ — рефлексивное замыкание R+ .
Таким образом, R∗ — рефлексивное и транзитивное замыкание R.
Вычислить транзитивное замыкание заданного отношения можно следующим образом:
∞ n−1 n−1 n−1
+
[
i
[
i +
_
i
_ i
R = R = R =⇒ R = R = R .
i=1 i=1 i=1 i=1

Такое вычисление имеет сложность O(n4 ).


358 / 907
4.4.2. Алгоритм Уоршалла (1/2)
Следующий алгоритм Уоршалла вычисляет транзитивное замыкание за O(n3 ) шагов.
Вход: матрица отношения R: array[1..n, 1..n] of 0..1.
Выход: матрица замыкания T : array[1..n, 1..n] of 0..1.
T ←R
for i from 1 to n do
for j from 1 to n do
for k from 1 to n do
T [j, k] ← T [j, k] ∨ T [j, i] & T [i, k]
end for
end for
end for
Обоснование. До начала цикла T [j, k] = 1, если элементы j и k непосредственно свя-
заны отношением R без промежуточных элементов. На каждом шаге основного цикла
(по i) в транзитивное замыкание добавляются такие пары элементов с номерами j и k
(то есть T [j, k] ← 1), для которых существует последовательность промежуточных эле-
ментов с номерами в диапазоне 1..i, связанных отношением R (то есть j R . . . R k ).
359 / 907
4.4.2. Алгоритм Уоршалла (2/2)

Обоснование. (Окончание) Последовательность промежуточных элементов с номерами


из диапазона 1..i (эта последовательность отнюдь не обязательно включает все элемен-
ты с номерами из диапазона 1..i), связанных отношением R, для элементов с номерами
j и k существует в одном из двух случаев: либо уже существует последовательность про-
межуточных элементов с номерами из диапазона 1..i для пары элементов с номерами j
и k , либо существуют две последовательности элементов с номерами из диапазона 1..i —
одна для пары элементов с номерами j и i, а вторая для пары элементов с номерами i и
k . Именно это отражено в операторе T [j, k]←T [j, k] ∨ T [j, i] & T [i, k]. После окончания
основного цикла в качестве промежуточных рассмотрены все элементы, и, таким обра-
зом, построено транзитивное замыкание. Заметим, что в начале каждого шага цикла по
i матрица T содержит все пары с промежуточными элементами с номерами из диапазо-
на 1..(i − 1), а в конце этого шага по i — все пары с промежуточными элементами с но-
мерами из диапазона 1..i.

360 / 907
4.4.3. Транзитивное сокращение (1/6)
Транзитивным сокращением (или транзитивной редукцией, или минимальным представ-
лением) отношения R на множестве A называется наименьшее (по количеству элемен-
+
тов) отношение, обозначаемое R− , такое, что R− = R+ . Транзитивное сокращение со-
держит минимально необходимые данные, по которым, используя транзитивность, мож-
но восстановить транзитивное замыкание отношения в полном объёме.
Пример. На рисунке представлены (слева направо) графики отношения, его транзитив-
ного замыкания и транзитивной редукции, определённые на множестве 1..5.

361 / 907
4.4.3. Транзитивное сокращение (2/6)
Задача отыскания транзитивного сокращения заданного отношения R является практи-
чески значимой и не является тривиальной.
Действительно, обозначим R(R) = {S ⊂ A2 | S + = R+ } — семейство отношений, тран-
зитивные замыкания которых совпадают с транзитивным замыканием исходного отно-
шения. Ясно, что R(R) 6= ∅, поскольку R ∈ R(R), и ясно, что семейство отношений
2
R(R) может быть весьма велико, грубая оценка сверху |R(R)| 6 2|A| , поскольку состав
семейства R(R) не очевиден. Таким образом, налицо экстремальная задача: найти гло-
бальный минимум в обширном пространстве поиска. К счастью, некоторые свойства ис-
ходного отношения упрощают нахождение его транзитивного сокращения.
Замечание. Исторически идея транзитивной редукции возникла применительно к ориен-
тированным графам, как средство построить минимальный по числу дуг орграф, имею-
щий заданное отношение достижимости. Отсюда и происходит название «минимальное
представление». В такой постановке задача транзитивной редукции особенно наглядна.
Поэтому алгоритмы отыскания минимального представления удобнее формулировать на
языке графов, хотя они применимы к любым отношениям.
362 / 907
4.4.3. Транзитивное сокращение (3/6)
Лемма. [1] Пусть S, T ⊂ A2 — конечные ациклические отношения на множестве A и
S + = T + . Тогда если ∃ (a, b) ((a, b) ∈ S & (a, b) 6∈ T ), то (S \ {(a, b)})+ = S + .
Доказательство. Пусть (a, b) ∈ S & (a, b) 6∈ T . Поскольку S + = T + , существует после-
довательность промежуточных элементов haT . . . T bi. Обозначим один из этих проме-
жуточных элементов c. Тогда существуют последовательности haT . . . T ci и hcT . . . T bi,
но в силу того, что S + = T + , существуют и последовательности haS . . . Sci и hcS . . . Sbi.
Если предположить, что b ∈ haS . . . Sci, получаем две последовательности hbS . . . Sci и
hcS . . . Sbi, то есть цикл, что противоречит ацикличности S . Аналогично, если предполо-
жить, что a ∈ hcS . . . Sbi, получаем две последовательности haS . . . Sci и hcS . . . Sai, то
есть цикл, что также противоречит ацикличности S . Таким образом, пара (a, b) для по-
строения транзитивного замыкания S избыточна, что и доказывает требуемое равенство
(S \ {(a, b)})+ = S + .
Следствие. Если отношение R ациклично и конечно, то его транзитивное сокращение
единственно.
Доказательство. От противного. Пусть ∃ S, T (S = R− & T = R− & S 6= T ). Тогда по
лемме любое из сокращений можно ещё уменьшить, что противоречит их выбору. 363 / 907
4.4.3. Транзитивное сокращение (4/6)
Лемма. [2] Если отношение R ациклично и конечно, то семейство R(R) замкнуто отно-
сительно пересечения, то есть ∀ S, T ∈ R(R) (S ∩ T ∈ R(R)).
Доказательство. Пусть S, T ∈ R(R). Обозначим
{(a1 , b1 ), (a2 , b2 ), . . . , (ak , bk )} ← S \ T = S \ (S ∩ T ). Последовательно применяя лемму
1 имеем: (S \ {(a1 , b1 )} \ {(a2 , b2 )} \ · · · \ {(ak , bk )})+ = S + = R+ .
Но S \ {(a1 , b1 )} \ {(a2 , b2 )} \ · · · \ {(ak , bk )} = S ∩ T , значит (S ∩ T )+ = S + = R+
и (S ∩ T ) ∈ R(R).
Теорема. Если отношение R ациклично и конечно, то транзитивная редукция R− един-
ственна и определяется по формуле \
R− = S.
S∈R(R)
Доказательство. Отношение R конечно, поэтому и семейство R(R) конечно, следова-
тельно, R− всегда определено и единственно. По лемме 2 имеем R− ∈ R(R). Наконец,
∀ S ∈ R(R) (|R− | 6 |S|).
364 / 907
4.4.3. Транзитивное сокращение (5/6)
Следствие. Если отношение R ациклично и конечно, то транзитивное сокращение R−
обладает следующими свойствами:
1) R− ⊂ R;
2) ∀ (a, b) ∈ R− (¬∃haR− . . . R− bi);
3) R− = R \ (R ◦ R+ ).
Доказательство.
[ 1) ] R− = S∈R(R) S ⊆ R, поскольку R ∈ R(R);
T

[ 2) ] если ∃haR− . . . R− bi, то (R− \ {(a, b)})+ = (R− )+ , и значит, пару (a, b) можно
исключить из транзитивного сокращения, что противоречит его минимальности;
[ 3) ] cледует из того, что (a, b) ∈ R ◦ R+ ⇐⇒ ∃haR . . . Rbi.
Замечание. Транзитивное замыкание определено для любого отношения, единственно и
содержит исходное отношение. Если выполнены условия теоремы, то транзитивное со-
кращение также определено, единственно и содержится в исходном отношении. Однако
если условия теоремы не выполнены, то для транзитивного сокращения все условия мо-
гут нарушаться.
365 / 907
4.4.3. Транзитивное сокращение (6/6)
Пример. На рисунке слева представлен график отношения на множестве {1, 2, 3}, кото-
рое содержит четыре элемента (два цикла длины 2) и имеет в качестве транзитивного за-
мыкания универсальное отношение. При этом ни одну из пар нельзя исключить из отно-
шения так, чтобы транзитивное замыкание сохранилось. Однако справа на этом же ри-
сунке представлены графики двух различных отношений, у которых транзитивное замы-
кание также является универсальным отношением, но при этом в них всего по три эле-
мента. Обратите внимание, что ни одно из транзитивных сокращений не является под-
множеством исходного отношения!

366 / 907
4.4.4. Диаграммы Хассе (1/6)
В самом общем случае диаграммой Хассе для отношения R на множестве A (обозначение
H(R)) называется отношение
Def
H(R) = {(a, b) ∈ R & a 6= b | ¬∃ c ∈ A (a 6= c & c 6= b & aRc & cRb)} .
Другими словами, в диаграмму Хассе заданного отношения включаются только такие па-
ры элементов, которые являются «соседними».
Пример. Рассмотрим отношение «тесного включения» на 2U (см. пример 5 п. 4.3.7):
+1 Def
X ⊂ Y = X ⊂ Y & |X| + 1 = |Y |.
+1
Ядром отношения ⊂ является отношение «отличаться не более чем одним элементом»:
+1
ker ⊂= X, Y ∈ 2U | |X| = |Y | & |X ∩ Y | > |X| − 1 .


При этом отношение «тесного включения» является диаграммой Хассе для отношения
+1
включения на булеане 2U : H(⊂) = ⊂ .
367 / 907
4.4.4. Диаграммы Хассе (2/6)
Диаграмма Хассе, подобно транзитивному сокращению, более экономно представляет
исходное отношение. Однако диаграмма Хассе не тождественна транзитивному сокра-
щению хотя бы потому, что диаграмма Хассе обязательно является подмножеством ис-
ходного отношения, в то время как транзитивное сокращение может даже не пересе-
каться с исходным отношением. Более того, в некоторых случаях диаграммы Хассе мо-
жет быть недостаточно для восстановления самого отношения или его транзитивного
замыкания.
Примеры. На следующем рисунке: 1) все отношения совпадают со своими диаграммами
Хассе; 2) два отношения справа являются транзитивными сокращениями друг для друга;
3) для универсального отношения на трёх элементах диаграмма Хассе пуста.

368 / 907
4.4.4. Диаграммы Хассе (3/6)
Теорема. Если конечное отношение R антисимметрично и транзитивно, то H(R) = R− .
Доказательство. Антисимметричное транзитивное отношение ациклично (п. 4.3.6, лем-
ма 1), значит, действует теорема п. 4.4.3 и следствия к ней. По первому следствию
R− ⊂ R, а по второму следствию ∀ (a, b) ∈ R− (¬∃haR− . . . R− bi), и тем более
∀ (a, b) ∈ R− (¬∃ c ∈ A (a R c R b)). Таким образом, для транзитивного сокращения в
данном случае выполняются условия определения диаграммы Хассе.
Замечание. Антисимметричное и транзитивное отношение — это отношение порядка.
Мы видим, что для отношения порядка на конечном множестве диаграмма Хассе суще-
ствует и единственна. По этой причине обычно диаграммы Хассе рассматривают приме-
нительно только к упорядоченным множествам.
Замечание. Для отношений на бесконечных множествах диаграмма Хассе может не су-
ществовать, даже если эти множества упорядочены.
Примеры. Множество вещественных чисел R и множество рациональных чисел Q с обыч-
ным отношением порядка не имеют диаграмм Хассе: между любыми двумя элементами
всегда можно вставить третий.
369 / 907
4.4.4. Диаграммы Хассе (4/6)
Если отношение не является антисимметричным (и, тем самым, не является отношением
порядка), то диаграмма Хассе может не быть определена разумным образом, даже если
множество конечно.
Пример. Пусть U = A2 — универсальное отношение на конечном множестве A, |A| > 2.
Тогда H(U ) = ∅, поскольку ∀ a, b ∈ A (∃ c ∈ A (aU c & cU b)).
Пустая диаграмма Хассе, разумеется, не может служить средством редукции — инфор-
мация об исходном отношении теряется безвозвратно. Однако в некоторых случаях воз-
можно построить отношение, подобное по своим полезным свойствам диаграмме Хассе,
но не удовлетворяющее формальному определению
Пример. Пусть U = A2 — универсальное отношение на конечном множестве
A = {a1 , . . . , an }, n > 2. Тогда положим W ←{(a1 , a2 ), (a2 , a3 ), . . . , (an−1 , an ), (an , a1 )}.
Имеем W ⊂ U , W + = U + = U и ∀ (a, b) ∈ W (¬∃ c ∈ A (aW c & cW b)).
Замечание. Более подробно этот вопрос обсуждается в следующей теме.
Для любого ациклического отношения на конечном множестве диаграмма Хассе суще-
ствует, что показывает следующий алгоритм, очевидным образом следующий из преды-
дущих формул. 370 / 907
4.4.4. Диаграммы Хассе (5/6)
Вход: отношение R: array [1..n, 1..n] of 0..1.
Выход: диаграмма Хассе H : array[1..n, 1..n] of 0..1.
for i from 1 to n do
for j from 1 to n do
if R[i, j] = 1 then
H[i, j] ← 1 //возможно, это соседи
for k from 1 to n do
if R[i, k] = 1 & R[k, j] = 1 then
H[i, j] ← 0; exit for k //найден промежуточный элемент
end if
end for
else
H[i, j] ← 0 //диаграмма Хассе — подмножество
end if
end for
end for
371 / 907
4.4.4. Диаграммы Хассе (6/6)
Особенно удобным является графическое представление, из-за которого диаграммы Хассе
и получили название диаграмм. При этом элементы множества A изображаются в опре-
делённых фигурах, например, в кругах или овалах, а элементы самой диаграммы, т. е.
упорядоченные пары (a, b), изображаются в виде стрелочки, ведущей от a к b.
Пример. На рисунке приведён
пример диаграммы Хассе для от-
ношения включения на множестве
2{1,2,3} .

372 / 907
4.5. Отношения эквивалентности

Различные встречающиеся на практике отношения могут обладать (или не обладать) те-


ми или иными свойствами. Свойства, введённые в п. 4.3.5, встречаются особенно часто
(потому им и даны специальные названия). Более того, оказывается, что некоторые устой-
чивые комбинации этих свойств встречаются настолько часто, что заслуживают отдельно-
го названия и специального изучения.
Здесь рассматриваются классы отношений, обладающих определённым набором свойств.
Такое «абстрактное» изучение классов отношений обладает тем преимуществом, что,
один раз установив некоторые следствия из наличия у отношения определённого на-
бора свойств, далее эти следствия можно автоматически распространить на все конкрет-
ные отношения, которые обладают данным набором свойств. Рассмотрение начинается
отношениями эквивалентности (в этом разделе) и продолжается отношениями порядка
(в следующем разделе).

373 / 907
4.5.1. Классы эквивалентности (1/4)
Рефлексивное симметричное транзитивное отношение называется отношением эквива-
лентности. Обычно отношение эквивалентности обозначают знаком ≡.
Примеры.
1. Отношения равенства чисел, равенства множеств.
2. Отношение равномощности множеств.
3. Отношение между мультимножествами «иметь одинаковый состав».
4. Отношения между конечными последовательностями: «быть последовательностями
над одним и тем же мультимножеством» и «быть последовательностями над муль-
тимножествами одного состава». При этом первое из этих отношений является соб-
ственным подмножеством второго.
Пусть ≡ — отношение эквивалентности на множестве M , и x ∈ M . Подмножество эле-
ментов множества M , эквивалентных x, называется классом эквивалентности для x:
Def
[x]≡ = {y ∈ M | y ≡ x} .
Если отношение подразумевается, то нижний индекс опускают.
374 / 907
4.5.1. Классы эквивалентности (2/4)
Лемма. [1] ∀ a ∈ M ([a] 6= ∅).
Доказательство. a ≡ a =⇒ a ∈ [a].
Лемма. [2] a ≡ b =⇒ [a] = [b].
Доказательство. Пусть a ≡ b. Тогда x ∈ [a] ⇐⇒ x ≡ a ⇐⇒ x ≡ b ⇐⇒ x ∈ [b].
Лемма. [3] a 6≡ b =⇒ [a] ∩ [b] = ∅.
Доказательство. От противного: [a] ∩ [b] 6= ∅ =⇒ ∃ c ∈ M (c ∈ [a] ∩ [b]) =⇒
=⇒ c ∈ [a] & c ∈ [b] =⇒ c ≡ a & c ≡ b =⇒ a ≡ c & c ≡ b =⇒ a ≡ b, противоречие.

Теорема. Если ≡ — отношение эквивалентности на множестве M , то классы эквива-


лентности по этому отношению образуют разбиение множества M , причём среди эле-
ментов разбиения нет пустых. И обратно, всякое разбиение B = {Bi } множества M , не
содержащее пустых элементов, определяет отношение эквивалентности на множестве
M , классами эквивалентности которого являются элементы разбиения.
375 / 907
4.5.1. Классы эквивалентности (3/4)
Доказательство.
[ =⇒ ] Построение требуемого разбиения обеспечивается следующим алгоритмом.
Вход: множество M , отношение эквивалентности ≡ на M .
Выход: разбиение B множества M на классы эквивалентности.
B ← ∅ //вначале разбиение пусто
for a ∈ M do
for B ∈ B do
select b ∈ B //берём представителя из B
if a ≡ b then
B ← B + a //пополняем класс эквивалентности
next for a //переходим к новому элементу из M
end if
end for
B ← B ∪ {{a}} //вводим новый класс эквивалентности
end for
376 / 907
4.5.1. Классы эквивалентности (4/4)
Доказательство. (Продолжение)
[ ⇐= ] Положим a ≡ b ← ∃ i (a ∈ Bi & b ∈ Bi ). Тогда отношение ≡ рефлексивно, по-
S
скольку M = Bi =⇒ ∀ a ∈ M (∃ i (a ∈ Bi )) и a ∈ Bi =⇒ a ∈ Bi & a ∈ Bi =⇒ a ≡ a.
Отношение ≡ симметрично, поскольку
a ≡ b =⇒ ∃ i (a ∈ Bi & b ∈ Bi ) =⇒ ∃ i (b ∈ Bi & a ∈ Bi ) =⇒ b ≡ a.
Отношение ≡ транзитивно, поскольку
a ≡ b & b ≡ c =⇒ [a] = [b] & [b] = [c] =⇒ [a] = [c] =⇒ a ≡ c.
Если отношение f из множества A в множество B обладает таким свойством, что

(a, b) ∈ f & (a, c) ∈ f =⇒ b = c,

то говорят, что отношение f функционально или однозначно и называют просто функцией.


В следующем параграфе выявляется тесная связь функциональных отношений с отноше-
ниями эквивалентности.
377 / 907
4.5.2. Ядро функционального отношения (1/2)
Всякая функция f , будучи отношением, имеет ядро f ◦f −1 , которое является отношением
на области определения функции.
Замечание. Даже если f — функция, f −1 отнюдь не обязательно функция, поэтому здесь
◦ — знак композиции отношений, а не суперпозиции функций.
Теорема. Ядро функционального отношения является отношением эквивалентности на
множестве определения.
Доказательство. Пусть f : A → B . Можно считать, что Dom f = A и Im f = B .
[ Рефлексивность ] Пусть a ∈ A. Тогда ∃ b ∈ B (b = f (a)) =⇒ a ∈ f −1 (b) =⇒
=⇒ (a, b) ∈ f & (b, a) ∈ f −1 =⇒ (a, a) ∈ f ◦ f −1 .
[ Симметричность ] Пусть (a1 , a2 ) ∈ f ◦ f −1 . Тогда ∃ b (b = f (a1 ) & a2 ∈ f −1 (b)),
a1 ∈ f −1 (b) & b = f (a2 ) и b = f (a2 ) & a1 ∈ f −1 (b), откуда (a2 , a1 ) ∈ f ◦ f −1 .
[ Транзитивность ] Пусть (a1 , a2 ) ∈ f ◦ f −1 и (a2 , a3 ) ∈ f ◦ f −1 . Это означает, что
∃ b1 ∈ B (b1 = f (a1 ) & a2 ∈ f −1 (b1 )) и ∃ b2 ∈ B (b2 = f (a2 ) & a3 ∈ f −1 (b2 )). Тогда
b1 = f (a1 ) & b1 = f (a2 ) & b2 = f (a2 ) & b2 = f (a3 ) =⇒ b1 = b2 . Положим b ← b1 . Тогда
b = f (a1 ) & b = f (a3 ) =⇒ b = f (a1 ) & a3 ∈ f −1 (b) =⇒ (a1 , a3 ) ∈ f ◦ f −1 .
378 / 907
4.5.2. Ядро функционального отношения (2/2)
Замечание. Термин «ядро» применительно к функции f и обозначение ker f обычно ре-
зервируются для других целей, поэтому в формулировке предыдущей теоремы вместо
слова «функция» употреблён несколько тяжеловесный оборот «функциональное отно-
шение».
Пример. Функциональное
отношение R ⊂ 1..3 × 1..3,
y − 1 = (x − 2)2 , обратное
отношение и ядро отноше-
ния.
Следствие. Ядром биекции является тождественное отношение.
Пример. Биективное отно-
шение R ⊂ 1..3 × 1..3,
x + y = 4, обратное отноше-
ние и ядро отношения.

379 / 907
4.5.3. Фактормножество (1/3)
Если R — отношение эквивалентности на множестве M , то множество классов эквива-
лентности называется фактормножеством множества M относительно эквивалентности
Def
R и обозначается M/R: M/R = {[x]R }x∈M . Фактормножество является подмножеством
булеана: M/R ⊂ 2M .
Пример. Рассмотрим множество A = {1, 2, 3, 4} и отношение
эквивалентности R = {(1, 1), (2, 2), (3, 3), (4, 4), (1, 2), (2, 1),
(3, 4), (4, 3)}. Элементы исходного отношения обозначены за-
крашенными кружками, элементы исходного множества обо-
значены квадратиками, а элементы фактормножества обозна-
чены цветом квадратиков. В данном случае в фактормножестве
два элемента, поэтому использованы два цвета.
Теорема. Если f : A → B функция, то | Dom f / (f ◦ f −1 ) | = | Im f |.
Доказательство. Ядро функционального отношения является эквивалентностью на обла-
сти определения, и каждому классу эквивалентности взаимно однозначно соответствует
тот элемент области значений, в который отображаются элементы класса.
380 / 907
4.5.3. Фактормножество (2/3)
Функция nat R : M → M/R называется отождествлением (или натуральным отобра-
жением, или канонической проекцией) и определяется следующим образом:
Def
nat R(x) = [x]R .
Использование фактормножества вместо множества называется факторизацией.
Пусть задана функция f : A → B . Тогда ker f — это эквивалентность, которая определяет
фактормножество A/ ker f с элементами [x]ker f и функцию отождествления
nat : A → A/ ker f .
Определим индуцированную функцию из фактормножества в множество B :
f /ker f ← {(s, b) | s = [x]ker f & b = f (x)} .
Тогда исходная функция может быть факторизована, или разложена, в суперпозицию
f = (nat f ) ◦ (f /ker f ).
Заметим, что при этом сначала применяется отождествление, которое сюръективно, а
потом индуцированная функция, которая инъективна. 381 / 907
4.5.3. Фактормножество (3/3)
Понятие факторизации выглядит на первый взгляд формальным и искусственным, но это
один из самых востребованных приёмов построения полезных прикладных математиче-
ских моделей.
Пример. Пусть A — множество студентов, а B — множество проводимых занятий (в дан-
ный момент времени). Отношение «посещаемости» между студентами и занятиями функ-
ционально: студент может посещать (или прогуливать) только одно занятие. Значит, ядро
этого функционального отношения является эквивалентностью. Классы эквивалентности
по отношению посещаемости называются группами. Студентов одной группы объединяет
общий учебный план. При составлении расписания занятий обычно применяется факто-
ризация по группам (а также по курсам и факультетам). На стене вывешивается таблица
с расписанием, которая представляет индуцированную функцию. Функцию отождествле-
ния студент должен выполнить сам, и таким образом, удаётся компактно представить до-
вольно сложное отношение (количество элементов в исходных множествах исчисляется
тысячами).
382 / 907
4.5.4. Множества уровня
Пусть f : A → B — функция и f ◦f −1 — отношение эквивалентности на Dom f . Рассмотрим
фактормножество Dom f / (f ◦ f −1 ). Класс эквивалентности (элемент фактормножества)
— это подмножество элементов A, которые отображаются в один и тот же элемент b ∈ B .
Такие множества называются множествами уровня функции f .
Пример. Множество уровня 0 для функции sin(x) — это πZ.
Неформально множество уровня функции f , соответствующее значению c, — это множе-
ство решений уравнения f (x) = c.
Отступление. Термин «множество уровня» опирается на очевидные геометрические ассоциации.
Если нарисовать график функции одной переменной в обычной декартовой системе координат
и провести горизонтальную прямую на определённом уровне, то абсциссы точек пересечения с
графиком функции дадут множество уровня функции.
Пример. Пусть задано множество M , |M | = n. Рассмотрим функциональное отношение
(мощность) P между булеаном 2M и множеством неотрицательных целых чисел:
P ⊂ 2M × 0..n, где P ← {(X, k) | X ⊂ M & k ∈ 0..n & |X| = k}. Ядром является отно-
шение равномощности, а множествами уровня — семейства равномощных подмножеств.
383 / 907
4.5.5. Толерантность (1/2)

Рефлексивное симметричное отношение называется толерантностью. Отношение экви-


валентности является частным случаем отношения толерантности. В отличие от отноше-
ния эквивалентности, дающего разбиение множества элементов, на котором оно опре-
делено, отношение толерантности даёт покрытие этого множества. Действительно, пусть
T ⊂ A2 — отношение толерантности. Определим класс толерантности для элемента x
по отношению толерантности T как множество {y ∈ A | x T y}. Тогда семейство классов
толерантности образует покрытие множества A. На содержательном уровне толерант-
ность означает следующее: любой объект толерантен самому себе (рефлексивность), а
толерантность двух объектов не зависит от того, в каком порядке они рассматриваются
(симметричность). Однако, если один объект толерантен с другим, а этот другой — с тре-
тьим, то это вовсе не значит, что все три объекта толерантны между собой.

384 / 907
4.5.5. Толерантность (2/2)

Примеры.
1. Отношение знакомства на множестве людей. Иванов может быть знаком с Петровым,
Петров — с Сидоровым, но при этом Иванов и Сидоров могут не быть знакомы между
собой.
2. Отношение похожести между поисковыми запросами в системах информационного
поиска.
3. Отношение на множестве слов, которое задаётся как наличие хотя бы одной общей
буквы. В этом отношении находятся, например, пересекающиеся слова кроссворда.

385 / 907
4.5.6. Гомоморфизмы и изоморфизмы (1/5)
Пусть R — n-местное отношение на множестве X , причём R ⊂ X n ; а S — n-местное
отношение на множестве Y , причём S ⊂ Y n , n > 1. Тогда функция f : X → Y называется
гомоморфизмом, если
∀ x1 , . . . , xn ∈ X (R(x1 , . . . , xn ) = S(f (x1 ), . . . , f (xn ))) .
Пример. Пусть R — некоторое отношение эквивалентности на множестве A, а S — тож-
дественное отношение на фактор-множестве A/R. Тогда функция отождествления
nat R : A → A/R — это гомоморфизм.
Замечание. Образно говорят, что гомоморфизм из множества в множество «уважает» со-
ответствующие отношения на этих множествах.
Функция может быть гомоморфизмом и уважать одни отношения на множествах, и при
этом не уважать другие отношения на этих же множествах.
Пример. Рассмотрим функцию n div 2 + 1 на множестве натуральных чисел. Эта функция
уважает отношение порядка 6 на множестве натуральных чисел, поскольку n 6 m ⇐⇒
(n div 2 + 1) 6 (m div 2 + 1), но не уважает отношение неравенства 6=, поскольку 4 6= 5,
но 4 div 2 + 1 = 3 = 5 div 2 + 1.
386 / 907
4.5.6. Гомоморфизмы и изоморфизмы (2/5)
Биективный гомоморфизм называется изоморфизмом. Любая биекция f : X → Y уважа-
X Y X Y
ет тождественные отношения = и = на множествах X и Y : x1 = x2 ⇐⇒ f (x1 ) = f (x2 ).
Пример. Взаимно-однозначное соответствие между множествами является изоморфиз-
мом. Равномощные множества изоморфны относительно тождественных отношений.
Пусть X и Y — множества с определёнными на них n-местными отношениями R и S
соответственно, и f : X → Y — изоморфизм.
Теорема. Если f : X → Y — изоморфизм, то f −1 : Y → X — тоже изоморфизм.
Доказательство. Пусть x1 , . . . , xn ∈ X . Обозначим y1 ← f (x1 ), . . . , yn ← f (xn ),
где y1 , . . . , yn ∈ Y . Поскольку f — биекция, имеем x1 = f −1 (y1 ), . . . , xn = f −1 (yn ). Тогда
S(y1 , . . . , yn ) = S(f (x1 ), . . . , f (xn )) = R(x1 , . . . , xn ) = R(f −1 (y1 ), . . . , f −1 (yn )).
Если f : X → Y — изоморфизм, то множества X и Y называют изоморфными и этот факт
f
обозначают так: X ∼ Y . Если f ясно из контекста, то пишут просто X ∼ Y .
Замечание. Не всякая биекция является изоморфизмом.
Пример. Рассмотрим функцию изменения знака f : Z → Z, f (x) ← −x. Это биекция,
которая не уважает, например, отношение порядка <.
387 / 907
4.5.6. Гомоморфизмы и изоморфизмы (3/5)
Даже если множества равномощны, |X| = |Y |, отношения R ⊂ X n и S ⊂ Y n могут быть
таковы, что не существует изоморфизма, уважающего эти отношения.
Y
X
Пример. Пусть |X| = |Y |. Положим R ← =, S ← 6=. Тогда
∀ f : X → Y (x1 = x2 =⇒ ¬ (f (x1 ) 6= f (x2 ))).
В то же время, если задано n-местное отношение R на множестве X и биекция f : X → Y ,
то на множестве Y всегда возможно задать n-местное отношение S так, чтобы X ∼ Y .
Для этого достаточно определить
S ← (y1 , . . . , yn ) ∈ Y n | R(f −1 (y1 ), . . . , f −1 (yn )) .


Таким образом, если задано семейство множеств X = {X1 , . . . , Xn }, и на каждом мно-


жестве Xi ∈ X задано n-местное отношение Ri ⊂ Xin , то некоторые пары множеств мо-
гут оказаться изоморфными: Xi ∼ Xj , а другие — нет. Всё зависит от заданных отно-
шений. Семейство пар изоморфных множеств образует отношение изоморфности на се-
мействе множеств X .
Замечание. Неравномощные множества не могут быть изоморфны.
388 / 907
4.5.6. Гомоморфизмы и изоморфизмы (4/5)
Теорема. Изоморфность является отношением эквивалентности.
Доказательство.
[ Рефлексивность ] Функция x 7→ x — требуемый изоморфизм.
[ Симметричность ] Следует из предыдущей теоремы.
[ Транзитивность ] Пусть X , Y и Z — три множества с заданными на них n-местными
отношениями Rx , Ry и Rz соответственно, f : X → Y и g : Y → Z — изоморфизмы.
Тогда Rx (x1 , . . . , xn ) = Ry (f (x1 ), . . . , f (xn )) = Rz (g(f (x1 )), . . . , g(f (xn ))).
Всякий гомоморфизм индуцирует связанный изоморфизм.
Теорема. [О гомоморфизме] Если f : X → Y — гомоморфизм, то Dom f / ker f ∼ Im f .
Доказательство.
[ Биекция ] Рассмотрим индуцированную функцию g = f / ker f : Dom f / ker f → Y .
Функция g инъективна по построению. Функция h : Dom f / ker f → Im f , полученная из
g сокращением области прибытия, сюръективна, при этом так же как и g инъективна, а
значит, биективна.
389 / 907
4.5.6. Гомоморфизмы и изоморфизмы (5/5)
Доказательство. (Продолжение)
[ Гомоморфизм ] Пусть R — исходное n-местное отношение на множестве X . Оно инду-
цирует новое n-местное отношение Rf на множестве Dom f / ker f :
Rf ([x1 ], . . . , [xn ]) ← R(x1 , . . . , xn ). Представим функцию f в виде
f = (nat f ) ◦ (f / ker f ) = (nat f ) ◦ h.
Имеем
Rf ([x1 ], . . . , [xn ]) = R(x1 , . . . , xn ) = S(f (x1 ), . . . , f (xn )) = S(h([x1 ]), . . . , h([xn ])).
Пример. Рассмотрим множество слов A+ , заданных над алфавитом A, и отношение ра-
венства длин слов на нём. Также рассмотрим множество S конечных мультимножеств
букв из алфавита A и отношение равномощности на нём. Пусть f : A+ → S — функция,
отображающая слово в мультимножество составляющих его букв. Она является гомомор-
физмом относительно описанных отношений. Тогда по теореме о гомоморфизме множе-
ство всех множеств слов, составленных из одних и тех же букв, изоморфно множеству
мультимножеств этих букв.
390 / 907
4.6. Отношения порядка

В этом разделе определяются и описываются различные варианты отношений поряд-


ка. Отношение порядка позволяет сравнивать между собой различные элементы одного
множества. Фактически, интуитивные представления об отношениях порядка можно счи-
тать общеизвестными, и такие представления в этом курсе уже использованы при опи-
сании работы с упорядоченными списками. Однако при построении математических мо-
делей интуитивных представлений может оказаться недостаточно, и необходимо более
детальное описание свойств отношений порядка.

391 / 907
4.6.1. Предпорядок (1/2)

Рефлексивное транзитивное отношение называется отношением предпорядка (иногда ис-


пользуют термин квазипорядок). Отношение предпорядка обычно обозначают знаком v.
Отношение предпорядка, с одной стороны, является обобщением эквивалентности, а с
другой стороны, является обобщением нестрогого частичного порядка (см. следующий
параграф). Предпорядок, будучи транзитивным, совпадает со своим транзитивным за-
мыканием: v+ =v.

Теорема. Если R — отношение предпорядка, то ∀ n > 1 ∀ k > 0 Rn+k ⊂ Rn .
Доказательство. По теореме п. 4.3.5 R2 ⊂ R, и значит, R3 = R2 ◦ R ⊂ R ◦ R = R2 , и
так далее, имеем ∀ n > 0 (Rn+1 n
 ⊂ R ). Откуда по транзитивности отношения v имеем
∀ n > 1 ∀ k > 0 Rn+k ⊂ Rn
Следствие. Если R — отношение предпорядка, то R∗ = R+ = R.
Доказательство. По формулам параграфа 4.4.1.

392 / 907
4.6.1. Предпорядок (2/2)
Антирефлексивное транзитивное отношение называется отношением строгого предпо-
рядка и обозначается знаком <.
Пример. В «Повести временных лет» сказано: «И были три брата: один по имени Кий,
другой — Щек и третий — Хорив, а сестра их была Лыбедь». Отношения на множестве
людей «x брат y » и «x сестра y » являются строгими предпорядками. На рисунке показаны
диаграммы этих отношений.

393 / 907
4.6.2. Частичный и линейный порядок (1/7)
Антисимметричное транзитивное отношение называется отношением порядка. Отношение
порядка может быть рефлексивным, и тогда оно называется отношением нестрогого по-
рядка. Отношение порядка может быть антирефлексивным, и тогда оно называется отно-
шением строгого порядка. Отношение порядка может быть линейным, и тогда оно на-
зывается отношением линейного порядка. Отношение порядка может не обладать свой-
ством линейности, и тогда оно называется отношением частичного порядка. Обычно от-
ношение строгого порядка (линейного или частичного) обозначается знаком ≺, а отно-
шение нестрогого порядка — знаком .
Замечание. Для строгого порядка свойство антисимметричности можно определить так:
∀ a, b (¬(a ≺ b) ∨ ¬(b ≺ a)), что эквивалентно ∀ a, b (¬(a ≺ b & b ≺ a)), а если порядок
ещё и линейный, то антисимметричность задаётся формулой ∀ a, b (a ≺ b ⇐⇒ ¬(b ≺ a)).
Примеры. Отношение < на множестве вещественных чисел является отношением стро-
гого линейного порядка. Отношение 6 на множестве вещественных чисел является от-
ношением нестрогого линейного порядка. Отношение ⊆ на булеане 2M — нестрогий ча-
стичный порядок, а отношение — строгий частичный порядок.
394 / 907
4.6.2. Частичный и линейный порядок (2/7)
Множество, на котором задано отношение частичного порядка, называется частично упо-
рядоченным. Множество, на котором задано отношение линейного порядка, называется
линейно упорядоченным.
Пример. Множество вещественных чисел упорядочено линейно, а булеан упорядочен
частично.
Теорема. Если ≺ — отношение частичного порядка, то обратное отношение  также
является отношением частичного порядка.
Доказательство.
[ Антисимметричность ] ∀ a, b ((a ≺ b) & (b ≺ a) =⇒ a = b) ⇐⇒
⇐⇒ ∀ a, b ((b ≺ a) & (a ≺ b) =⇒ a = b) ⇐⇒ ∀ a, b ((a  b) & (b  a) =⇒ a = b).
[ Транзитивность ] ∀ a, b, c ((a ≺ b) & (b ≺ c) =⇒ a ≺ c) ⇐⇒
∀ a, b, c ((b  a) & (c  b) =⇒ c  a) ⇐⇒ ∀ a, b, c ((c  b) & (b  a) =⇒ c  a).
Следствие. Если ≺ является отношением частичного порядка, то отношения ≺ \I и
 \I являются отношениями строгого частичного порядка, и отношения ≺ ∪I и  ∪I
являются отношениями нестрогого частичного порядка.
Доказательство. По теореме п. 4.3.5. 395 / 907
4.6.2. Частичный и линейный порядок (3/7)

Лемма. Отношение R антисимметрично и линейно тогда и только тогда, когда допол-


нение отношения R совпадает с обратным отношением R−1 везде, за исключением диа-
гонали.
Доказательство. По условиям леммы, исключим диагональ, то есть рассмотрим пары раз-
личных элементов a и b.
[ Необходимость ] В указанных условиях свойство антисимметричности гласит:
∀ a, b (¬ (aRb & bRa)), а свойство линейности гласит: ∀ a, b (aRb ∨ bRa), так что из двух
пар (a, b) и (b, a) в точности одна принадлежит отношению R, а другая пара принадлежит
как дополнению, так и обратному отношению.
[ Достаточность ] Если дополнение отношения R совпадает с обратным отношением, то
это означает, что ∀ a, b (¬(aRb) ⇐⇒ bRa), то есть отношение R антисимметрично. Линей-
ность докажем от противного. Пусть ∃ a, b (¬(aRb ∨ bRa)). Тогда ∃ a, b (¬aRb & ¬bRa),
и по уже доказанному, ∃ a, b (bRa & aRb), что противоречит антисимметричности.

396 / 907
4.6.2. Частичный и линейный порядок (4/7)

Следствие. Если отношение R антисимметрично и линейно, то

∀ a, b (a 6= b =⇒ (aRb ⇐⇒ ¬(bRa))) .

Теорема. Если ≺ является отношением линейного порядка, то его дополнение 6≺ также


является отношением линейного порядка.
Доказательство. По лемме ∀ a, b (aRb ⇐⇒ ¬(bRa)).
[ Линейность ] ∀ a, b (a = b ∨ a ≺ b ∨ b ≺ a) ⇐⇒ ∀ a, b (a = b ∨ b 6≺ a ∨ a 6≺ b) ⇐⇒
⇐⇒ ∀ a, b (a = b ∨ a 6≺ b ∨ b 6≺ a).
[ Антисимметричность ] ∀ a, b (a ≺ b & b ≺ a =⇒ a = b) ⇐⇒
⇐⇒ ∀ a, b (b 6≺ a & a 6≺ b =⇒ a = b) ⇐⇒ ∀ a, b (a 6≺ b & b 6≺ a =⇒ a = b).
[ Транзитивность ] ∀ a, b, c (c ≺ b & b ≺ a =⇒ c ≺ a) ⇐⇒
⇐⇒ ∀ a, b, c (b 6≺ c & a 6≺ b =⇒ a 6≺ c) ⇐⇒ ∀ a, b, c (a 6≺ b & b 6≺ c =⇒ a 6≺ c).

397 / 907
4.6.2. Частичный и линейный порядок (5/7)
Следствие. Если  является отношением нестрогого линейного порядка, то дополни-
тельное отношение  является отношением строгого линейного порядка. Обратно, ес-
ли ≺ является отношением строгого линейного порядка, то дополнительное отношение
 является отношением нестрогого линейного порядка.
Доказательство. Достаточно проверить, в какое отношение входит диагональ.
Пример. Отношение < является отношением строгого линейного порядка, а его дополне-
ние > является отношением нестрогого линейного порядка на любом подмножестве чис-
ловой оси, то есть любом подмножестве (конечном или бесконечном) множества чисел —
целых, рациональных и вещественных.
Замечание. Линейность существенна: дополнение частичного порядка не обязательно
частичный порядок.
Пример. Пусть есть три конфеты: мятная, яблочная и лимонная. Пусть мятная конфе-
та не менее вкусная, чем лимонная, и любая конфета не менее вкусная, чем она сама.
Рассмотрим дополнительное отношение «менее вкусная». Тогда яблочная конфета ме-
нее вкусная, чем лимонная, и в то же время, лимонная менее вкусная, чем яблочная —
стало быть, это совсем не отношение порядка. 398 / 907
4.6.2. Частичный и линейный порядок (6/7)
Пример. Отношение ⊆ на булеане является отношением нестрогого частичного поряд-
ка, но его дополнение не является отношением строгого частичного порядка. Более то-
го, оно вообще не является отношением порядка, поскольку не антисимметрично и не
транзитивно. На рисунке показаны графики отношения ⊆ и его дополнения на булеане
2{1,2,3} .

399 / 907
4.6.2. Частичный и линейный порядок (7/7)
Даже если частично упорядоченное множество не является линейно упорядоченным, в
нем могут найтись линейно упорядоченные подмножества.
Пример. Семейство подмножеств {Ci } множества A называется цепочкой в A, если
∀ i (Ci ⊂ Ci+1 & Ci 6= Ci+1 ). Любая цепочка в A образует линейно упорядоченное под-
множество частично упорядоченного множества 2A .
Линейно упорядоченное подмножество {a1 , . . . , an , . . . } можно рассматривать как по-
следовательность ha1 , . . . , an , . . . i, в которой ∀ i (ai ≺ ai+1 & ai 6= ai+1 ). Такие последо-
вательности называются строго монотонно возрастающими, или просто возрастающи-
ми.
Последовательности могут быть конечными или бесконечными. Если последовательность
конечная, количество элементов в ней называется длиной.
Говорят, что частично упорядоченное множество имеет конечную высоту k , если любая
возрастающая последовательность имеет длину не более k .

400 / 907
4.6.3. Минимальные и наименьшие элементы (1/3)
Элемент x множества M с отношением порядка ≺ называется минимальным, если в мно-
жестве M не существует элементов, меньших, чем элемент x:
¬∃ y ∈ M (y ≺ x & y 6= x) ,
иначе говоря,
∀ y ∈ M (¬(y ≺ x) ∨ y = x) .
Пример. Пустое множество ∅ является минимальным элементом булеана по включению.
Теорема. Во всяком конечном непустом частично упорядоченном множестве существует
минимальный элемент.
Доказательство. От противного. Пусть ¬(∃ x ∈ M (¬∃ y ∈ M (y ≺ x & y 6= x))). Тогда
∀ x ∈ M (∃ y ∈ M (y ≺ x)) =⇒ ∃ (ui )∞ i=1 (∀ i (ui+1 ≺ ui & ui+1 6= ui )) . Поскольку
|M | < ∞, по принципу Дирихле имеем ∃ i, j (i < j & ui = uj ). Но по транзитивности
ui  ui+1  · · ·  uj =⇒ ui+1  uj = ui .
Таким образом, ui+1 ≺ ui & ui+1  ui =⇒ ui+1 = ui — противоречие.
401 / 907
4.6.3. Минимальные и наименьшие элементы (2/3)
Замечание. Линейно упорядоченное конечное множество содержит ровно один мини-
мальный элемент, а в произвольном конечном частично упорядоченном множестве их
может быть несколько.
Теорема. Всякий частичный порядок на конечном множестве может быть дополнен до
линейного.
Доказательство. Алгоритм топологической сортировки (п. 4.6.4).
Замечание. В данном случае слова «может быть дополнен» означают, что существует от-
ношение линейного порядка, которое является надмножеством заданного отношения ча-
стичного порядка.
Пусть M — частично упорядоченное множество с отношением порядка ≺, а X — его
подмножество: X ⊂ M . Элемент a называется наименьшим в множестве X (обозначение
a = min X ), если a ∈ X & ∀ x ∈ X (x 6= a =⇒ a ≺ x).
Очевидно, что наименьший элемент, если он существует, является минимальным. Но эле-
мент может быть минимальным, не будучи наименьшим.
402 / 907
4.6.3. Минимальные и наименьшие элементы (3/3)
Более того, конечное частично упорядоченное множество, имея минимальные элементы,
может не иметь наименьшего элемента.
Пример. Пусть в множестве {a, b, c, d} задано отношение порядка {(a, b), (c, d)}, то есть
a ≺ b и c ≺ d. Тогда элементы a и c минимальные, но наименьшего элемента не суще-
ствует.
Теорема. Наименьший элемент, если он существует, является единственным.
Доказательство. Пусть существуют два наименьших элемента, a и b. Тогда a ≺ b, посколь-
ку a наименьший, и, аналогично, b ≺ a, поскольку b наименьший. По антисимметрично-
сти, a = b.
В частично упорядоченном множестве с отношением порядка ≺ можно определить мак-
симальные и наибольшие элементы, используя обратное отношение .
Замечание. Используя теоремы п. 4.6.2, нетрудно показать, что все утверждения относи-
тельно минимальных и наименьших элементов имеют место и относительно максималь-
ных и наибольших элементов соответственно, то есть имеет место двойственность.
403 / 907
4.6.4. Алгоритм топологической сортировки (1/3)
Алгоритм дополнения частичного порядка до линейного на конечном множестве.
Вход: конечное частично упорядоченное множество U .
Выход: линейно упорядоченное множество W .
while U 6= ∅ do
m ← min(U ) // минимальный элемент
yield m // включаем элемент m в множество W
U ← U − m // элемент m более не рассматривается
end while
Обоснование. Всякая процедура, генерирующая объекты с помощью оператора yield,
определяет линейный порядок на множестве своих результатов. Действительно, последо-
вательность, в которой объекты генерируются во время работы процедуры — это линей-
ный порядок.
Замечание. Используемая в алгоритме функция min возвращает минимальный элемент,
существование которого гарантируется теоремой. При удалении этого элемента из мно-
жества частичный порядок сохраняется. Даже если оставшиеся элементы окажутся несрав-
нимы, алгоритм работает правильно, поскольку все элементы минимальны.
404 / 907
4.6.4. Алгоритм топологической сортировки (2/3)
Вход: конечное частично упорядоченное множество U .
Выход: минимальный элемент m.
select m ∈ U //выбираем кандидата в минимальные
for u ∈ U do
if u ≺ m then
m ← u //меняем кандидата в минимальные
end if
end for
return m //элемент m минимальный
Обоснование. Рассмотрим последовательность элементов, которые присваивались m во
время работы min. Эта последовательность не может быть бесконечной, и она линей-
но упорядочена. Рассмотрим последний элемент этой последовательности. Этот элемент
m — минимальный. Действительно, от противного, пусть существует элемент u такой, что
u ≺ m & u 6= m и u не входит в последовательность. Тогда по транзитивности u меньше
любого члена последовательности, и он был бы включен в последовательность в момент
своего рассмотрения.
405 / 907
4.6.4. Алгоритм топологической сортировки (3/3)
Замечание. Если отношение порядка представлено матрицей, то функцию min можно
реализовать, например, так — найти в матрице отношения первую строку, содержащую
только нули.
Дополнение частичного порядка до линейного в общем случае не единственно.
Пример. На рисунке слева показана диаграмма отношения частичного порядка, а справа
показаны два дополнения из четырёх возможных дополнений этого порядка до линей-
ного.

406 / 907
4.6.5. Верхние и нижние границы (1/2)
Пусть X ⊂ M — подмножество упорядоченного множества M с отношением порядка ≺.
Элемент m ∈ M называется нижней границей для подмножества X , если
∀ x ∈ X (m 6= x =⇒ m ≺ x) .
Элемент m ∈ M называется верхней границей для подмножества X , если
∀ x ∈ X (m 6= x =⇒ x ≺ m) .
Верхние и нижние границы не обязаны существовать для любого множества, и если су-
ществуют, то не всегда единственны.
Если существует наибольшая нижняя граница, то она называется инфимумом и обозна-
чается inf(X). Если существует наименьшая верхняя граница, то она называется супре-
мумом и обозначается sup(X).
Пример. Рассмотрим множество рациональных чисел Q с обычным отношением поряд-
ка < и его подмножество X ← {x ∈ Q | x > 0 & x2 > 2}. Тогда 17
12
17
∈ X , а 13 является од-
ной из нижних границ множества X . Инфимума это множество не имеет. Если в качестве
X мы √возьмем подмножество действительных, а не рациональных чисел, то инфимумом
будет 2. 407 / 907
4.6.5. Верхние и нижние границы (2/2)
Теорема. Пусть M — частично упорядоченное множество, а X — любое его подмноже-
ство. Тогда:
1) Если существует наименьший элемент a = min X , то a = inf X ;
2) если существует инфимум a = inf X и a ∈ X , то a = min X .
Доказательство.
[ 1) ] ∀ x ∈ X (a ≺ x), следовательно, a — нижняя граница X . Пусть b — любая нижняя
граница X , тогда b ≺ a, так как a ∈ X . Следовательно, a — наибольшая нижняя граница;
[ 2) ] ∀ x ∈ X (a ≺ x), поскольку a — нижняя граница X , и значит, это наименьший
элемент, поскольку a ∈ X .
Следствие. Пусть M — частично упорядоченное множество, а X — любое его подмноже-
ство. Тогда:
1) если существует наибольший элемент a = max X , то a = sup X ;
2) если существует супремум a = sup X и a ∈ X , то a = max X .
Говорят, что частично упорядоченное множество линейно полно, если любое его линейно
упорядоченное подмножество имеет супремум.
Пример. Если множество X конечно, то 2X — линейно полно относительно ⊂.
408 / 907
4.6.6. Монотонные функции (1/2)
Пусть A и B — упорядоченные множества, и f : A → B . Тогда функция f называется
монотонно возрастающей, если
a1 ≺ a2 & a1 6= a2 =⇒ f (a1 ) ≺ f (a2 ) ∨ f (a1 ) = f (a2 );
монотонно убывающей, если
a1 ≺ a2 & a1 6= a2 =⇒ f (a2 ) ≺ f (a1 ) ∨ f (a1 ) = f (a2 );
строго монотонно возрастающей, если
a1 ≺ a2 & a1 6= a2 =⇒ f (a1 ) ≺ f (a2 ) & f (a1 ) 6= f (a2 );
строго монотонно убывающей, если
a1 ≺ a2 & a1 6= a2 =⇒ f (a2 ) ≺ f (a1 ) & f (a1 ) 6= f (a2 ).
Монотонно возрастающие и убывающие функции называются монотонными, а строго
монотонно возрастающие и убывающие функции называются строго монотонными.
Очевидно, что строго монотонная функция монотонна, но обратное неверно.
Замечание. Монотонная функция — это гомоморфизм, уважающий порядок.
Пример. Тождественная функция y = x для чисел является строго монотонно возраста-
Def
ющей, а знак числа sign(x) = if x < 0 then −1 elseif x > 0 then 1 else 0 end if является
монотонно возрастающей функцией. 409 / 907
4.6.6. Монотонные функции (2/2)
Примеры.
1. Пусть 2M — булеан над линейно упорядоченным конечным множеством M , а ча-
стичный порядок на булеане — это включение. Тогда функция из алгоритма топо-
логической сортировки, доставляющая минимальный элемент, является монотонно
убывающей, но не строго монотонной.
2. Пусть порядок на булеане 2M — это собственное включение. Тогда функция, кото-
рая сопоставляет подмножеству X ⊂ M его мощность, является строго монотонно
возрастающей.
3. Пусть f : M → M — некоторая функция. Тогда функция перехода к образам
F : 2M → 2M является монотонно возрастающей по включению.
Теорема. Суперпозиция одинаково монотонных функций монотонна в том же смысле.
Доказательство. Пусть a ≺ b и g монотонно возрастает, тогда g(a) ≺ g(b). Но f также
монотонно возрастает, и значит, f (g(a)) ≺ f (g(b)). Для других случаев монотонности
доказательство аналогично.
410 / 907
4.6.7. Вполне упорядоченные множества (1/3)
Частично упорядоченное множество X называется вполне упорядоченным, если любое
его непустое подмножество имеет минимальный элемент. В частности, для любых двух
элементов a, b ∈ X один из них обязан быть минимальным в подмножестве {a, b}, а
значит, вполне упорядоченное множество упорядочено линейно.
Замечание. Не надо путать вполне упорядоченные множества и множества, на которых
определён линейный порядок. Линейно упорядоченное множество может не быть вполне
упорядоченным.
Примеры. 1. Всякое конечное линейно упорядоченное множество вполне упорядочено.
2. Множество натуральных чисел N с обычным отношением порядка вполне упорядочено.
3. Множество рациональных чисел Q с обычным отношением порядка является линейно
упорядоченным, но не является вполне упорядоченным, так как множество
X ← {x ∈ Q | x2 > 2} (равно как и само множество Q) не имеет минимального элемента.
4. Множество вещественных чисел R с обычным отношением порядка не является вполне
упорядоченным, так как множество X ← {x ∈ R | x > 0} (равно как и само множество
R) не имеет минимального элемента.
411 / 907
4.6.7. Вполне упорядоченные множества (2/3)
Говорят, что два линейно упорядоченных множества A и B изоморфны (обозначение
A ∼ B ), если между ними существует взаимно-однозначное соответствие, сохраняю-
щее порядок:
Def
A ∼ B = |A| = |B| & (∀ a1 , a2 ∈ A (a1 ≺ a2 & a1 7→ b1 & a2 7→ b2 =⇒ b1 ≺ b2 )).

Теорема. Линейно упорядоченные множества A и B изоморфны тогда и только тогда,


когда между ними существует строго монотонное взаимно-однозначное соответствие.
Доказательство. Пусть A и B — линейно упорядоченные множества с отношениями по-
рядка <A и <B .
[ =⇒ ] Если A ∼ B , то ∃ f : A → B (a1 <A a2 =⇒ f (a1 ) <B f (a2 )), причём f — биекция,
то есть требуемое строго монотонно возрастающее взаимно-однозначное соответствие.
[ ⇐= ] Если f : A → B — строго монотонно возрастающее взаимно-однозначное соот-
ветствие, то оно является требуемым изоморфизмом, и A ∼ B . Если же f : A → B —
строго монотонно убывающее взаимно-однозначное соответствие, то достаточно вместо
отношения <B рассмотреть обратное отношение >B .
412 / 907
4.6.7. Вполне упорядоченные множества (3/3)

Замечание. Понятие изоморфизма применимо и к вполне упорядоченным множествам,


поскольку они упорядочены линейно.
Пример. Вполне упорядоченные множества натуральных чисел и чётных чисел с обыч-
ным порядком < изоморфны, поскольку соответствие n 7→ 2n является строго монотон-
но возрастающим.

413 / 907
4.6.8. Индукция (1/2)
Важность вполне упорядоченных множеств определяется тем, что для них можно обоб-
щить принцип индукции, применяемый обычно для множества натуральных чисел.
Теорема. [Индукция по вполне упорядоченному множеству] Пусть X — вполне упорядо-
ченное множество, x0 — его минимальный элемент, а P — некоторый предикат, завися-
щий от элементов X . Тогда если

P (x0 ) & ∀ x1 ∈ X ((∀ x ∈ X (x ≺ x1 =⇒ P (x))) =⇒ P (x1 )) ,

то
∀ x ∈ X (P (x)) .
Доказательство. Обозначим P ← {x ∈ X | ¬P (x)}, P ⊂ X . Далее от противного. Пусть
P 6= ∅. Поскольку X вполне упорядочено, P имеет минимальный элемент, обозначим
его x1 . Тогда ∀ x ∈ X (x ≺ x1 =⇒ P (x)) по выбору x1 , и значит, P (x1 ) по условию
теоремы, что противоречит выбору x1 .
414 / 907
4.6.8. Индукция (2/2)
Замечание. Обычная математическая индукция соответствует индукции по вполне упо-
рядоченному множеству N.
Индукция по вполне упорядоченному множеству сильнее обычного принципа математи-
ческой индукции в силу следующей замечательной теоремы.
Теорема. Любое множество может быть вполне упорядочено.
Данное утверждение эквивалентно так называемой аксиоме выбора в теории множеств
и само может быть принято за аксиому.
Пример. Рассмотрим множество положительных рациональных чисел
Def 
Q+ = m

n
| m, n ∈ N , где m и n взаимно просты. Определим отношение ≺ на множе-
Def
стве Q+ следующим образом: m 1
n1
≺ m 2
n2
= m1 < m2 ∨ (m1 = m2 & n1 < n2 ), где < —
обычное отношение порядка на N. Нетрудно видеть, что множество Q+ с отношением ≺
является вполне упорядоченным, в то время как с обычным отношением порядка < оно
таковым не является.
415 / 907
5. Теория графов
Среди дисциплин и методов дискретной математики теория графов, и особенно алгорит-
мы на графах, находят наиболее широкое применение в программировании.
Между понятием графа и понятием бинарного отношения, рассмотренным в предыду-
щей теме, имеется глубокая связь — можно сказать, что это равнообъёмные понятия.
Возникает естественный вопрос: почему же тогда графам оказывается столь заметное
предпочтение при изучении дискретной математики и программирования? Дело в том,
что теория графов предоставляет очень удобный язык для описания программных (да и
многих других) моделей.
Стройная система специальных терминов и обозначений теории графов позволяет про-
сто и доступно описывать сложные и тонкие вещи. Особенно важна возможность нагляд-
ной графической интерпретации понятия графа. Само название «граф» подразумева-
ет наличие графического представления — диаграммы графа. Картинки часто позволя-
ют сразу «усмотреть» суть дела на интуитивном уровне, дополняя и украшая утомитель-
ные текстовые доказательства и сложные формулы.
416 / 907
5.1. Определения графов
Как это ни удивительно, но у понятия «граф» нет общепризнанного единого определе-
ния. Разные авторы, особенно применительно к разным приложениям, называют словом
«граф» очень похожие, но всё-таки различные объекты. Здесь используется терминоло-
гия из книги Харари «Теория графов», которая была выбрана из соображений максималь-
ного упрощения определений и доказательств.
Целью этого раздела является введение специальных названий и обозначений для раз-
личных видов графов и их элементов. Определений оказывается сравнительно много,
поскольку используются разные слова для сходных понятий с целью учёта специфики
различных видов графов.
Введение разветвлённой терминологии позволяет использовать далее лаконичные, но
точные формулировки утверждений, без повторных определений, ссылок и напомина-
ний. Очень важным является явное определение и разграничение понятий: диаграмма
графа, граф и абстрактный граф. Эти понятия тесно связаны, но их не следует смешивать.

417 / 907
5.1.1. История теории графов (1/4)
Теория графов неоднократно переоткрывалась разными авторами при решении различ-
ных прикладных задач.
1. Задача о Кёнигсбергских мостах. На рисунке представлен схематический план цен-
тральной части города Кёнигсберг (ныне Калининград), включающий два берега реки
Преголя, два острова на ней и семь соединяющих их мостов. Задача состоит в том, что-
бы обойти все четыре участка суши (обозначены A, B , C , D), пройдя по каждому мосту
один раз, и вернуться в исходную точку. В 1736 году Эйлером было показано, что реше-
ния этой задачи не существует. Точнее говоря, Эйлер получил необходимое и достаточ-
ное условие существования решения для всех задач типа задачи о Кёнигсбергских мо-
стах.

418 / 907
5.1.1. История теории графов (2/4)
2. Задача о трёх домах и трёх колодцах. Имеется три дома и три колодца, каким-то обра-
зом расположенные на плоскости. Требуется провести от каждого дома к каждому колод-
цу тропинку так, чтобы тропинки не пересекались. Эта задача также не имеет решения.
В 1930 году Куратовским было доказано намного более сильное утверждение, а именно
достаточность условия существования решения для всех задач типа задачи о трёх домах
и трёх колодцах (необходимость этого условия была известна и ранее).

419 / 907
5.1.1. История теории графов (3/4)
3. Задача о четырёх красках. Разделение плоскости на неперекрывающиеся области на-
зывается картой. Области на карте называются соседними, если они имеют общую гра-
ницу. Задача состоит в раскрашивании карты таким образом, чтобы никакие две сосед-
ние области не были закрашены одним цветом.
С конца XIX века известна гипотеза, что для этого достаточно четырёх красок. В 1976 го-
ду Аппель и Хейкен опубликовали решение задачи о четырёх красках, которое базиро-
валось на переборе вариантов с помощью компьютера.

420 / 907
5.1.1. История теории графов (4/4)

Отступление. Решение задачи о четырёх красках Аппелем и Хейкеном «программным путем» яви-
лось прецедентом, породившим бурную дискуссию, которая отнюдь не закончена. Суть опубли-
кованного решения состоит в том, чтобы перебрать большое, но конечное число (около 2000) ти-
пов потенциальных контрпримеров к теореме о четырёх красках и показать, что ни один случай
контрпримером не является. Этот перебор был выполнен программой примерно за тысячу часов
работы суперкомпьютера. Проверить «вручную» полученное решение невозможно — объём пе-
ребора выходит далеко за рамки человеческих возможностей. Многие математики ставят вопрос:
можно ли считать такое «программное доказательство» действительным доказательством? Ведь в
программе могут быть ошибки... Методы доказательства правильности программ не применимы
к программам такой сложноcти, как обсуждаемая. Тестирование не может гарантировать отсут-
ствие ошибок и в данном случае вообще невозможно. Таким образом, остаётся уповать на про-
граммистскую квалификацию авторов.

421 / 907
5.1.2. Основные определения (1/8)
Графом G(V, E) называется совокупность двух множеств — непустого множества V (мно-
жества вершин) и множества E двухэлементных подмножеств множества V (E — множе-
Def
ство рёбер), G(V, E) = hV ; Ei , V 6= ∅, E ⊂ 2V & ∀ e ∈ E (|e| = 2) .
Замечание. Вершины графа считаются различными, им можно давать имена или номера.
Чтобы подчеркнуть это обстоятельство, иногда к слову «граф» добавляют прилагательное
и говорят помеченный.
Два графа равны, если равны множества вершин и рёбер:
Def
G1 (V1 , E1 ) = G2 (V2 , E2 ) = V1 = V2 & E1 = E2 .
Замечание. Легко видеть, что любое множество E двухэлементных подмножеств множе-
ства V определяет симметричное бинарное отношение на множестве V . Поэтому можно
считать, что E ⊂ V × V , E = E −1 , и трактовать ребро не только как множество {v1 , v2 },
но и как пару (v1 , v2 ).
Def Def
Число вершин графа G обозначим p, а число рёбер — q : p(G) = |V |, q(G) = |E|.
Если хотят явно упомянуть числовые характеристики графа, то говорят: (p, q)-граф.
Замечание. Множества вершин и рёбер считаются конечными, если явно не оговорено
противное. 422 / 907
5.1.2. Основные определения (2/8)
Пусть v1 , v2 — вершины, e = (v1 , v2 ) — соединяющее их ребро. Тогда вершина v1 и реб-
ро e инцидентны, ребро e и вершина v2 также инцидентны. Два ребра, инцидентные од-
ной вершине, называются смежными; две вершины, инцидентные одному ребру, также
называются смежными.
Множество вершин, смежных с вершиной v , называется множеством смежности (или
окрестностью) вершины v и обозначается Γ+ (v). По определению
Def Def
Γ+ (v) = {u ∈ V | (u, v) ∈ E} , Γ∗ (v) = Γ+ (v) + v.
Замечание. Если не оговорено противное, то символ Γ подразумевает Γ+ , то есть саму
вершину в окрестность не включают.
Очевидно, что u ∈ Γ(v) ⇐⇒ v ∈ Γ(u). Если A ⊂ V — множество вершин, то Γ(A) —
множество всех вершин, смежных с вершинами из A:
Def
[
Γ(A) = {u ∈ V | ∃ v ∈ A (u ∈ Γ(v))} = Γ(v).
v∈A

Важно отметить, что в данном случае множество вершин A может пересекаться с Γ(A).
423 / 907
5.1.2. Основные определения (3/8)
Множество рёбер, инцидентных вершине v , называется множеством инцидентности вер-
Def
шины v и обозначается Λ(v). По определению Λ(v) = {e ∈ E | v ∈ e}.
Обычно граф представляют диаграммой: вершины — точками (или кружками), рёбра —
линиями. Размеры кружков и форма линий значения не имеют.
Пример. На рисунке приведены две различных диаграммы одного графа, имеющего че-
тыре вершины и пять рёбер. В этом графе вершины v1 и v2 , v2 и v3 , v3 и v4 , v4 и v1 , v2 и v4
смежны, а вершины v1 и v3 не смежны. Смежные рёбра: e1 и e2 , e2 и e3 , e3 и e4 , e4 и e1 , e1
и e5 , e2 и e5 , e3 и e5 , e4 и e5 . Несмежные рёбра: e1 и e3 , e2 и e4 .

424 / 907
5.1.2. Основные определения (4/8)
Рассмотрим граф G(V, E) с некоторым множеством вершин V . Дополнением G(V, E) на-
зывается другой граф, с тем же множеством вершин V , в котором вершины смежны то-
гда и только тогда, когда они не смежны в исходном графе. Другими словами, если реб-
ро e = {u, v} принадлежит графу, то оно не принадлежит дополнению графа, и обратно,
если ребро e = {u, v} принадлежит дополнению графа, то оно не принадлежит графу.
Теорема. Суммарное количество рёбер в графе и в его дополнении определяется числом
вершин p и равно p(p − 1)/2.
Доказательство. Число двухэлементных подмножеств множества вершин — это число со-
p!
четаний C(p, 2) = 2!(p−2)! = p(p − 1)/2.
Следствие. Для любой вершины суммарное количество вершин смежных и не смежных с
ней равно p − 1.
Дополнение можно рассматривать и как операцию на графах, и как отношение между
графами. Как операция, дополнение инволютивно: дополнением к дополнению графа
является сам граф. Как отношение, дополнение симметрично: если G — дополнение G,
то и G — дополнение G.
425 / 907
5.1.2. Основные определения (5/8)

Пример. Пусть G = ({v1 , v2 , v3 , v4 }, {{v1 , v2 }, {v2 , v4 }, {v3 , v4 }}).


Тогда G = ({v1 , v2 , v3 , v4 }, {{v1 , v4 }, {v1 , v3 }, {v2 , v3 }}).

426 / 907
5.1.2. Основные определения (6/8)
Часто рассматриваются следующие родственные графам объекты:
1. Если элементами множества E являются упорядоченные пары (то есть E ⊂ V × V ), то
граф называется ориентированным (или орграфом). В этом случае элементы множества
V называются узлами, а элементы множества E — дугами.
Замечание. На диаграммах дуги орграфов снабжают стрелками.
2. Если элементом множества E может быть пара одинаковых (не различных) элементов
V , то такой элемент множества E называется петлёй, а граф называется графом с пет-
лями (или псевдографом).
3. Если E является не множеством, а мультимножеством, содержащим некоторые эле-
менты по нескольку раз, то эти элементы называются кратными рёбрами, а граф называ-
ется мультиграфом.
Замечание. Если мультимножество E состоит из упорядоченных пар, то эти упорядо-
ченные пары называются мультидугами, а граф называется мультиорграфом. При этом
встречные дуги в оргафе не делают его мультиорграфом, поскольку кратность каждой ду-
ги не превышает 1.
427 / 907
5.1.2. Основные определения (7/8)
4. Если элементами множества E являются не обязательно двухэлементные, а любые
(непустые) подмножества множества V , то есть, если E ⊂ 2V , то такие элементы мно-
жества E называются гиперрёбрами, а граф называется гиперграфом.
Замечание. Количество элементов в гиперрёбрах может быть различным. Если же все
гиперрёбра имеют одинаковое количество элементов, скажем n, то гиперграф является
некоторым n-местным отношением на Vn .
5. Если каждый элемент множества E действует из множества «начал» в множество «кон-
цов», E ⊂ 2V × 2V , то элементы множества E называются гипердугами, а граф называ-
ется гиперорграфом.
Замечание. Для гиперорграфов используют несколько способов визуализации, но ни
один из них не является столь же общепринятым, как диаграммы графов.
6. Если задана функция F : V → M и (или) F : E → M , то множество M называет-
ся множеством пометок, а граф называется помеченным (или нагруженным). В качестве
множества пометок обычно используются буквы или целые числа. Если функция F инъ-
ективна, то есть разные вершины (рёбра) имеют разные пометки, то граф называют ну-
мерованным. 428 / 907
5.1.2. Основные определения (8/8)
Замечание. Отношение смежности является в некотором смысле определяющим для гра-
фов и подобных им объектов. При этом следует учитывать особенности каждого типа
объектов. Отношение смежности в графе симметрично, а в орграфе оно вовсе не обяза-
но быть симметричным. В графе обычно считают отношение смежности рефлексивным,
то есть полагают, что вершина смежна сама с собой. В псевдорграфе, напротив, вершину
не считают смежной с собой, если у неё нет петли. В гиперграфе две вершины считаются
смежными, если они принадлежат одному гиперребру. В гиперорграфе гипердуга обыч-
но проводится из одного узла в множество узлов (возможно, пустое). В таком случае от-
ношение смежности оказывается уже не бинарным отношением на V , а отношением из
V в 2V . Эти и подобные естественные вариации определений обычно считают ясными из
контекста.
Далее выражение «граф G(V, E)» означает неориентированный непомеченный граф без
петель и кратных рёбер, с множеством вершин V и множеством рёбер E .

429 / 907
5.1.3. Изоморфизм графов (1/6)
Говорят, что два графа, G1 (V1 , E1 ) и G2 (V2 , E2 ), (вершинно) изоморфны (обозначается
G1 ∼ G2 ), если существует изоморфизм h : V1 → V2 , уважающий отношение смежности
вершин: e1 = (u, v) ∈ E1 ⇐⇒ e2 = h(u), h(v) ∈ E2 .
Теорема. Изоморфизм графов есть отношение эквивалентности.
Доказательство.
h
[ Рефлексивность ] Имеем G ∼ G, где h — тождественная функция.
h h−1
[ Симметричность ] Если G1 ∼ G2 , то G2 ∼ G1 .
h g g◦h
[ Транзитивность ] Если G1 ∼ G2 и G2 ∼ G3 , то G1 ∼ G3 .
Пример. Три внешне различные диаграммы, приведённые на рисунке, являются диаграм-
мами одного и того же графа K3,3 .

430 / 907
5.1.3. Изоморфизм графов (2/6)
Числовая характеристика, одинаковая для всех изоморфных графов, называется инвари-
антом графа. Так, p(G) и q(G) — инварианты графа G. Неизвестно никакого простого
набора инвариантов, определяющих граф с точностью до изоморфизма.
Пример. Количество вершин, рёбер и количество смежных вершин для каждой вершины
не определяют граф даже в простейших случаях! На рисунке представлены диаграммы
графов, у которых указанные инварианты совпадают, но графы при этом не изоморфны.

Представленные графы не изоморфны, потому что в графе справа есть два треугольника,
а в графе слева треугольников нет.

431 / 907
5.1.3. Изоморфизм графов (3/6)
Изоморфизм графа в себя называется автоморфизмом графа.
Пример. Треугольник автоморфен себе при любой перестановке вершин.
Графы рассматриваются с точностью до изоморфизма, то есть рассматриваются классы
эквивалентности по отношению изоморфизма.
Замечание. Чтобы подчеркнуть это обстоятельство, иногда говорят абстрактный граф,
подразумевая элемент фактормножества графов по отношению изоморфности.
Смежными могут быть не только вершины, но и рёбра. Аналогично понятию вершин-
ного изоморфизма, вводится понятие рёберного изоморфизма. Два графа G1 (V1 , E1 ) и
G2 (V2 , E2 ) рёберно изоморфны, если существует изоморфизм h : E1 → E2 , уважающий
отношение смежности рёбер.
Пример. Рассмотрим графы G1 (V1 , E1 ) и G2 (V2 , E2 ), где V1 = V2 = {v1 , v2 , v3 },
E1 = {{v1 , v2 }, {v1 , v3 }}, E2 = {{v1 , v2 }, {v2 , v3 }}. По определению эти графы являются
различными помеченными графами, так как E1 6= E2 . В тоже время функция h, такая что
h(v1 ) = v2 , h(v2 ) = v1 , h(v3 ) = v3 устанавливает изоморфизм этих графов.
Замечание. Абстрактный граф, который является классом простых цепей на n вершинах,
обозначается Pn . Графы G1 , G2 в примере суть представители абстрактного графа P432 3 . / 907
5.1.3. Изоморфизм графов (4/6)
В этом курсе слово «граф» означает как индивидуальный помеченный граф, так и пред-
ставителя класса изоморфных графов, то есть представителя абстрактного графа. Какая
именно интерпретация подразумевается, надобно определять из контекста.
Лемма. Пусть графы G и H рёберно изоморфны с изоморфизмом h, тогда если для рё-
бер e1 , . . . , en+1 , где n > 2, образы h(e1 ), . . . , h(en ) инцидентны вершине v1 , а образы
h(e2 ), . . . , h(en+1 ) инцидентны вершине v2 , то v1 = v2 .
Доказательство. Поскольку две вершины полностью определяют ребро, то в случае, если
v1 6= v2 , получаем h(e2 ) = . . . = h(en ) = (v1 , v2 ), что противоречит биективности h.
Теорема. Если графы вершинно изоморфны, то они и рёберно изоморфны.
Доказательство. Пусть графы G1 (V1 , E1 ) и G2 (V2 , E2 ) вершинно изоморфны с изомор-
физмом h1 : V1 → V2 . Тогда построим функцию h2 : E1 → E2 следующим образом:
h2 ({u, v}) ←{h1 (u), h1 (v)}. Эта функция биективна и уважает смежность рёбер.
Обратное, вообще говоря, неверно.
Пример. На рисунке представлены диаграм-
мы двух графов, которые изоморфны рёбер-
но, но не изоморфны вершинно. 433 / 907
5.1.3. Изоморфизм графов (5/6)
Отступление. Изоморфизм графов — это очень трудная, и в то же время весьма насущная про-
блема. Даже установить отсутствие или наличие изоморфизма у двух помеченных графов с сов-
падающими инвариантами не всегда просто, как видно из предшествующих примеров.
На практике очень часто проблема изоморфизма возникает в более сложной постановке: даны
два абстрактных графа, требуется определить, имеются ли вхождения одного графа в другой в
качестве подграфа, и если такие вхождения имеются, то найти их (какое-нибудь одно или все).
Обычно эта проблема называется изоморфизм подграфов.
К решению проблемы изоморфизма подграфов сводятся самые разные задачи в области химии и
биоинформатики (например, входят ли в молекулу полимера те или иные характерные составные
части), в области шифрования и кодирования информации (содержит ли некоторая информаци-
онная структура те или иные подструктуры) и в множестве других областей. Фактически, пробле-
ма изоморфизма подграфов встаёт везде, где в качестве языка описания модели предметной об-
ласти применяется теория графов (а язык теории графов — самый распространённый формализм
дискретной математики).

434 / 907
5.1.3. Изоморфизм графов (6/6)
Отступление. (Продолжение) В такой самой общей постановке проблема изоморфизма подгра-
фов оказывается трудоёмкой задачей и решается, фактически, перебором. В практически значи-
мых моделях (в биоинформатике, в криптографии) вершины в графах исчисляются тысячами и
миллионами, поэтому проблема изоморфизма подграфов в общей постановке оказывается прак-
тически неразрешимой даже с применением суперкомпьютеров. Однако в каждой конкретной
предметной области удаётся отыскать такие особенности, которые позволяют ограничить поста-
новку задачи проверки изоморфизма так, что задача становится практически разрешимой. Эти
специфические особенности и приёмы не имеют универсальной силы и неприменимы в общем
случае.
Поэтому в этом курсе нет описания алгоритма проверки изоморфизма графов в общем случае —
такой алгоритм не имеет практического смысла. Зато в курсе имеется несколько замечаний от-
носительно того, как можно эффективно проверить изоморфизм в том или ином сугубо частном
случае. Комбинируя эти идеи, иногда удаётся построить эффективный алгоритм для решения кон-
кретной частной задачи.

435 / 907
5.1.4. Элементы графов (1/7)
Граф G0 (V 0 , E 0 ) называется подграфом (или частью) графа G(V, E) (обозначается
G0 ⊂ G), если V 0 ⊂ V & E 0 ⊂ E . Если V 0 = V , то G0 называется остовным подграфом G.
Если V 0 ⊂ V & E 0 ⊂ E & (V 0 6= V ∨ E 0 6= E), то граф G0 называется собственным под-
графом графа G. Подграф G0 (V 0 , E 0 ) называется правильным подграфом графа G(V, E),
если G0 содержит все возможные рёбра G: ∀ u, v ∈ V 0 ((u, v) ∈ E =⇒ (u, v) ∈ E 0 ).
Правильный подграф G0 (V 0 , E 0 ) графа G(V, E) определяется подмножеством вершин V 0 .
Пример. На рисунке показаны диаграммы графа, правильного подграфа, неправильного
подграфа и остовного подграфа.

Замечание. Иногда подграфами называют только правильные подграфы, а неправильные


подграфы называют изграфами.
436 / 907
5.1.4. Элементы графов (2/7)
Количество рёбер, инцидентных вершине v , называется степенью (или валентностью)
вершины v и обозначается d(v):
∀ v ∈ V (0 6 d(v) 6 p − 1) , d(v) = |Γ+ (v)|.
Таким образом, степень d(v) вершины v совпадает с количеством смежных с ней вершин.
Количество вершин, не смежных с v , обозначают d(v). Ясно, что

∀v ∈ V d(v) + d(v) = p − 1 .
Обозначим минимальную степень вершины графа G через δ(G), а максимальную — через
∆(G):
Def Def
δ (G(V, E)) = min d(v), ∆ (G(V, E)) = max d(v).
v∈V v∈V
Ясно, что δ(G) и ∆(G) являются инвариантами. Если степени всех вершин равны k , то
граф называется регулярным степени k :
δ(G) = ∆(G) = k, ∀ v ∈ V (d(v) = k) .
Степень регулярности обозначается r(G). Для нерегулярных графов r(G) не определено.
437 / 907
5.1.4. Элементы графов (3/7)
Примеры. На рисунке приведены диаграммы трёх примечательных регулярных графов
степени 3.

Если степень вершины равна нулю (то есть d(v) = 0), то вершина называется изолиро-
ванной. Если степень вершины равна единице (то есть d(v) = 1), то вершина называется
концевой, или висячей.

Для орграфа число дуг, исходящих из узла v , называется полустепенью исхода, а чис-
ло входящих — полустепенью захода. Обозначаются эти числа, соответственно, d− (v) и
d+ (v).
438 / 907
5.1.4. Элементы графов (4/7)
Теорема. [Лемма о рукопожатиях] Сумма степеней вершин графа (мультиграфа) равна
удвоенному количеству рёбер: X
d(v) = 2q.
v∈V
Доказательство. При подсчёте суммы степеней вершин каждое ребро учитывается два
раза.
Следствие. Число вершин нечётной степени чётно.
Доказательство. Сумма степеней вершин чётной степени чётна, значит, сумма степеней
вершин нечётной степени также чётна, следовательно, их чётное число.
Следствие. Суммы полустепеней узлов орграфа равны количеству дуг:
X X
d− (v) = q = d+ (v).
v∈V v∈V

Доказательство. Сумма полустепеней узлов орграфа равна сумме степеней вершин графа
(мультиграфа), полученного из орграфа забыванием ориентации дуг.
439 / 907
5.1.4. Элементы графов (5/7)
Маршрутом в графе называется чередующаяся последовательность вершин и рёбер, на-
чинающаяся и кончающаяся вершиной, v0 , e1 , v1 , e2 , v2 , . . . , ek , vk , в которой любые два
соседних элемента инцидентны, причём однородные элементы (вершины, рёбра) через
один смежны или совпадают.
Замечание. Это определение подходит также для псевдо-, мульти- и орграфов. При этом в
графе (орграфе) достаточно указать только последовательность вершин (узлов) или толь-
ко последовательность рёбер (дуг).
Если v0 = vk , то маршрут замкнут, иначе — открыт.
Если все рёбра различны, то маршрут называется цепью. Если все вершины (а значит, и
рёбра!) различны, то маршрут называется простой цепью. В цепи v0 , e1 , . . . , ek , vk вер-
шины v0 и vk называются концами цепи. Цепь с концами u и v соединяет вершины u и
v и обозначается hu, vi. Если нужно указать граф G, которому принадлежит цепь, то до-
бавляют индекс: hu, viG .

440 / 907
5.1.4. Элементы графов (6/7)
Лемма. Если есть какая-либо цепь, соединяющая вершины u и v , то есть и простая цепь.
Доказательство. Если имеющаяся цепь не простая, то будем удалять часть цепи меж-
ду повторяющимися вхождениями одной вершины, получая новую цепь, соединяющую
вершины u и v , с меньшим количеством вершин, пока цепь не станет простой.
Замкнутая цепь называется циклом; замкнутая простая цепь называется простым циклом.
Число циклов в графе G обозначается z(G). Граф без циклов называется ациклическим.
Число рёбер в цикле называется длиной цикла. Число циклов длины k в графе G обозна-
чается z(G, k).
Лемма. Количество простых циклов длины l одинаково для изоморфных графов.
Доказательство. Пусть графы G1 (V1 , E1 ) и G2 (V2 , E2 ) изоморфны с биекцией h : V1 → V2 ,
сохраняющей смежность. Количество простых циклов длины l в G2 не меньше, чем в
G1 : z(G1 , l) 6 z(G2 , l). От противного. Пусть v1 , v2 , . . . , vl — простой цикл графа G1 , а
h(v1 ), h(v2 ), . . . , h(vl ) не является простым циклом графа G2 . Значит, найдётся такая па-
ра смежных вершин vi , vi+1 , для которой (h(vi ), h(vi+1 )) 6∈ E2 , что противоречит тому, что
h сохраняет смежность. Аналогично, количество простых циклов длины l в G2 не боль-
ше, чем в G1 : достаточно рассмотреть h−1 : V2 → V1 . 441 / 907
5.1.4. Элементы графов (7/7)
Замечание. Для псевдографов обычно особо оговаривают, считаются ли петли циклами.
Для орграфов цепь называется путём, а цикл — контуром. Путь в орграфе из узла u в

узел v обозначают hu, vi.
Пример. В графе, диаграмма которого приведена на рисунке:
1) v1 , v3 , v1 , v4 — маршрут, но не цепь;
2) v1 , v3 , v5 , v2 , v3 , v4 — цепь, но не простая цепь;
3) v1 , v4 , v3 , v2 , v5 — простая цепь;
4) v1 , v3 , v5 , v2 , v3 , v4 , v1 — цикл, но не простой цикл;
5) v1 , v3 , v4 , v1 — простой цикл.

442 / 907
5.1.5. Инварианты графов (1/7)

Говорят, что две вершины в графе связаны, если существует соединяющая их цепь. Граф,
в котором все вершины связаны, называется связным.
Замечание. Если две вершины связаны, то по первой лемме предыдущего параграфа
существует соединяющая их простая цепь.
Нетрудно показать, что отношение связанности вершин является эквивалентностью.
Классы эквивалентности по отношению связанности называются компонентами связно-
сти графа. Число компонент связности графа G обозначается k(G). Граф G является связ-
ным тогда и только тогда, когда k(G) = 1. Если k(G) > 1, то G — несвязный граф.
Граф, состоящий только из изолированных вершин в котором k(G) = p(G) и q(G) = 0,
иногда называется вполне несвязным.
Замечание. Вполне несвязный граф G является регулярным нулевой степени, r(G) = 0.

443 / 907
5.1.5. Инварианты графов (2/7)

Теорема. Любой граф или его дополнение являются связным графом.


Доказательство. Если исходный граф связен, то теорема доказана. Пусть исходный граф
несвязен и имеет несколько компонент связности. Рассмотрим любые две вершины. Если
они принадлежат разным компонентам связности исходного графа, то они соединены в
дополнении ребром, а потому связаны. Если они принадлежат одной компоненте связ-
ности, то в дополнении они связаны маршрутом из двух рёбер, проходящим через лю-
бую вершину из другой компоненты связности.
Замечание. Как сам граф, так и его дополнение могут быть связными одновременно, но
граф и его дополнение не могут быть несвязными одновременно!

444 / 907
5.1.5. Инварианты графов (3/7)
Длиной маршрута называется количество рёбер в нём (с учётом повторений). Если марш-
рут M = v0 , e1 , v1 , e2 , v2 , . . . , ek , vk , то длина M равна k (обозначается |M | = k ).
Расстоянием между вершинами u и v (обозначается d(u, v)) называется длина кратчай-
шей цепи hu, vi, а сама кратчайшая цепь называется геодезической,
Def
d(u, v) = min |hu, vi|.
{hu,vi}

Если для любых двух вершин графа существует единственная геодезическая цепь, то
граф называется геодезическим.
Def
Замечание. Если вершины u и v не связаны, то d(u, v) = +∞.
Легко видеть, что расстояние между вершинами является метрикой в пространстве вер-
шин графа. Действительно, ∀ u, v ∈ V (d(u, v) > 0), так как d(u, v) — это количество рё-
бер в кратчайшей цепи.

445 / 907
5.1.5. Инварианты графов (4/7)
Проверим выполнение аксиом метрики.
1. ∀ u, v ∈ V (d(u, v) = 0 ⇐⇒ v = u), поскольку из нуля рёбер можно составить марш-
рут, который состоит только из одной вершины.
2. ∀ u, v ∈ V (d(u, v) = d(v, u)), поскольку пересчёт рёбер цепи в обратном порядке
не меняет их количества.
3. ∀ u, v, w ∈ V (d(u, v) 6 d(u, w) + d(w, v)), поскольку d(u, w) + d(w, v) — это длина
некоторой цепи hu, . . . , w, . . . , vi, а d(u, v) — это длина кратчайшей цепи hu, vi.

Множество вершин, находящихся на заданном расстоянии n от вершины v (обозначение


D(v, n)), называется ярусом:
Def
D(v, n) = {u ∈ V | d(v, u) = n} .
Ясно, что множество вершин V всякого связного графа однозначно разбивается на ярусы
относительно данной вершины.
446 / 907
5.1.5. Инварианты графов (5/7)
Эксцентриситетом e(v) вершины v в связном графе G(V, E) называется максимальное
расстояние от вершины v до других вершин графа G:
Def
e(v) = max d(v, u).
u∈V

Диаметром графа называется длиннейшая геодезическая цепь. Длина диаметра графа


G обозначается D(G):
Def
D(G) = max d(u, v) = max e(v).
u,v∈V v∈V

Заметим, что наиболее эксцентричные вершины — это концы диаметра.


Радиусом графа называется простая цепь, длина которой равна наименьшему из эксцен-
триситетов вершин. Длина радиуса графа G обозначается R(G):
Def
R(G) = min e(v).
v∈V

447 / 907
5.1.5. Инварианты графов (6/7)
Вершина v называется центральной, если её эксцентриситет совпадает с длиной радиуса
графа, e(v) = R(G). Множество центральных вершин C(G) называется центром графа:
Def
C(G) = {v ∈ V | e(v) = R(G)} .

Пример. На диаграммах ниже указаны эксцентриситеты вершин и центры двух графов.


Вершины, составляющие центр, на диаграммах выделены жирными точками.

448 / 907
5.1.5. Инварианты графов (7/7)

Теорема. Если граф G связен, то D(G)/2 6 R(G) 6 D(G).


Доказательство.
[ R(G) 6 D(G) ] Следует из определения.
[ D(G)/2 6 R(G) ] Рассмотрим центральную вершину w ∈ C(G), e(w) = R(G). Имеем
∀ u, v ∈ V (d(u, v) 6 d(u, w) + d(w, v)) по неравенству треугольника для метрики d(u, v).
Но d(u, w) = d(w, u) 6 e(w) = R(G) и d(w, v) 6 e(w) = R(G), значит
∀ u, v ∈ V (d(u, v) 6 2R(G)), откуда D(G) 6 2R(G).
Пример. В левой диаграмме на предыдущем слайде имеем D(G) = 4, R(G) = 2. В
правой диаграмме D(G) = 3, R(G) = 2, неравенства выполняются.

449 / 907
5.1.6. Степенные последовательности (1/9)

Последовательность степеней вершин (d1 , . . . , dp ) некоторого графа называется степен-


ной последовательностью графа или графовой последовательностью. Ясно, что всякая
степенная последовательность является представлением мультимножества, поэтому, не
ограничивая общности, можно считать, что d1 6 d2 6 · · · 6 dp .
Пример. Последовательности (2, 2, 2, 2, 3, 3, 4) и (1, 1, 1, 1, 2, 4) являются степенными по-
следовательностями графов, диаграммы которых представлены на предыдущем рисун-
ке.
Не всякая последовательность неотрицательных целых чисел является степенной после-
довательностью.
Пример. Последовательность (0, 1, 2, . . . , p − 1) не является степенной ни при каком
p > 1. Действительно, первая вершина должна быть изолированной, а последняя должна
быть смежна со всеми остальными, что противоречит изолированности первой вершины.

450 / 907
5.1.6. Степенные последовательности (2/9)
Если последовательность D = (d1 , . . . , dp ) является степенной последовательностью гра-
фа G, то говорят, что граф G реализует последовательность D.
Легко заметить, что если два графа имеют различные степенные последовательности, то
они не изоморфны. Но из рисунка п. 5.1.6. видно, что графы с одинаковыми степенны-
ми последовательностями также могут быть не изоморфными. Таким образом, степенная
последовательность может иметь множество различных реализаций.
Отметим несколько очевидных свойств степенных последовательностей.
Лемма. [1] Сумма степенной последовательности
Pp — чётное число.
Доказательство. По лемме о рукопожатиях i=1 di = 2q .
Лемма. [2] Если последовательность (d1 , . . . , dp ) степенная, то последовательность
(0, . . . , 0, d1 , . . . , dp ) также степенная, и наоборот.
Доказательство. Изолированные вершины можно не учитывать.
Лемма. [3] В степенной последовательности (d1 , . . . , dp ) каждый элемент меньше длины
последовательности: ∀ i ∈ 1..p (di < p).
Доказательство. Степень любой вершины меньше числа вершин.
451 / 907
5.1.6. Степенные последовательности (3/9)
Таким образом, не умаляя общности, достаточно рассматривать только последователь-
ности (d1 , . . . , dp ), такие, что

0 < d1 6 d2 6 · · · 6 dp < p.

Пусть D = (d1 , . . . , dp ) — неубывающая последовательность натуральных чисел, причём


∀ i (di < p). Построим последовательность D0 = (d0 1 , . . . , d0 p−1 ) следующим образом:
d0p−1 ← dp−1 − 1, . . . , d0p−dp +1 ← dp−dp +1 − 1, d0p−dp ← dp−dp − 1, d0p−dp −1 ← dp−dp −1 , . . . ,
d01 ← d1 .
Другими словами, последний (наибольший) элемент последовательности dp удаляется, а
dp предшествующих элементов уменьшаются на единицу. Оставшиеся вершины (они есть,
если dp < p − 1) остаются без изменения.
Такая операция называется откладыванием вершины dp , а D0 называется остаточной
последовательностью.
452 / 907
5.1.6. Степенные последовательности (4/9)
Пример. Отложим последний элемент в последовательности:
(2, 2, 3, 3, 3 | 3) 7→ (2, 2, 2, 2, 2).
При откладывании элемента упорядоченность может нарушиться:
(2, 2, 2, 2 | 2) 7→ (2, 2, 1, 1).
Графически откладывание вершины можно отобразить, соединяя рёбрами вершину, соот-
ветствующую удаляемому элементу, с вершинами, соответствующими уменьшаемым эле-
ментам. Фактически, при откладывании вершин постепенно прорисовывается диаграм-
ма графа, начиная с вершины с максимальной степенью.
Пример. На рисунке показано откладывание вершин для последовательности (2, 3, 3, 3, 3).
Откладываемые вершины выделены.

453 / 907
5.1.6. Степенные последовательности (5/9)

Теорема. Последовательность D = (d1 , . . . , dp ) является степенной последовательно-


стью тогда и только тогда, когда последовательность D0 = (d0 1 , . . . , d0 p−1 ), полученная
откладыванием последнего элемента dp , является степенной.
Доказательство.
[ ⇒ ] Пусть последовательность D = (d1 , . . . , dp ) степенная, а G — реализующий граф.
Рассмотрим в графе G вершину максимальной степени w, d(w) = dp . Пусть S — множе-
ство вершин со степенями dp−dp , . . . , dp−1 . Тогда если Γ(w) = S , то G − w — искомый
граф, реализующий последовательность D0 = (d0 1 , . . . , d0 p−1 ). Пусть теперь Γ(w) 6= S ,
построим тогда такой граф G0 , в котором Γ(w) = S . Поскольку Γ(w) 6= S , существует
вершина z ∈ Γ(w), которая не принадлежит S , и существует вершина x ∈ S , не смежная
с вершиной w. По построению S имеем d(z) 6 d(x), следовательно, существует верши-
на y смежная с x, но не смежная с z . Удалим рёбра (w, z) и (y, x), добавим рёбра (w, x)
и (y, z).

454 / 907
5.1.6. Степенные последовательности (6/9)
Доказательство. (Продолжение) Такими построениями получаем граф G0 такой, что
Γ(w) = S , причём граф G0 − w реализует последовательность D0 = (d0 1 , . . . , d0 p−1 ).

[ ⇐ ] Пусть последовательность D 0 = (d0 1 , . . . , d0 p−1 ) степенная, а G — реализующий


граф, вершины которого перенумерованы в порядке неубывания степеней 1, . . . , p − 1.
Добавим в граф G вершину степени dp и соединим её с вершинами с номерами p−dp ..p−
1. Полученный граф реализует последовательность D = (d1 , . . . , dp ).
Доказанная теорема позволяет проверить, является ли заданная последовательность на-
туральных чисел степенной и построить граф, реализующий эту последовательность, с
помощью алгоритма, приведённого на следующих трёх слайдах.
455 / 907
5.1.6. Степенные последовательности (7/9)
Вход: натуральное число p и двусвязный упорядоченный список пар натуральных чисел
(d, n), представленный двумя указателями: на начало списка s и на конец списка t.
Выход: false, если последовательность D не степенная, иначе
true и граф G : array [1..q] of {b, e : 1..p}
q ← 0 //счётчик рёбер
if t.d > p then return false end if //D не степенная
for i from 1 to p do
d ← t.d; n ← t.n //d — степень, n — номер вершины
if s.d < 0 then return false end if //граф нельзя построить
if d = 0 then return true end if //граф уже построен
u ← t.l; u.r ← nil; ∼ t; t ← u //откладываем вершину t
for j from 1 to d do
u.d ← u.d − 1; q ← q + 1; G[q] ←(u.n, n); u ← u.l //ребро
end for
if u 6= nil then Ordering(s, t, u.r) end if //восстановление
end for 456 / 907
5.1.6. Степенные последовательности (8/9)
Процедура Ordering восстанавливает упорядоченность двусвязного списка после откла-
дывания вершины, используя тот факт, что отрезки слева и справа упорядочены.

Вход: указатель на начало списка s, указатель на конец списка t, указатель на тот элемент
u, где может быть нарушен порядок.
Выход: переупорядоченный список
if u.l.d > u.d then
v ← u.l //v.d > u.d — нарушение порядка
z ← u; while z 6= t & v.d > z.r.d do z ← z.r end while //v.d 6 z.r.d
w ← v; while w 6= s & w.l.d > u.d do w ← w.l end while //w.l.d 6 u.d
if z 6= t then z.r.l ← v end if //справа что-то осталось
if w 6= s then w.l.r ← u end if //слева что-то осталось
v.r ← z.r; u.l ← w.l; z.r ← w; w.l ← z //зашили разрыв
end if 457 / 907
5.1.6. Степенные последовательности (9/9)
Обоснование. Алгоритм следует доказательству теоремы (последовательно откладывает
вершины) с учётом следующих замечаний.
1. Двунаправленный список можно представить одним указателем, но здесь для удобства
используются два: s и t.
2. Если последнее число t.d в последовательности D больше или равно числу вершин p,
то алгоритм нельзя применять.
3. Если в результате успешных откладываний в конце списка t.d появился 0, то граф уже
построен.
4. Если в результате откладывания в начале списка s.d появляются отрицательные числа,
то граф построить невозможно.
5. Деструктор элемента списка t обозначен знаком ∼.
6. Элементу массива G присваивается сразу пара вершин (ребро).
7. Восстанавливать упорядоченность списка необходимо, только если следующая верши-
на существует.
Алгоритм заканчивает работу, поскольку на каждом шаге основного цикла один элемент
из списка удаляется. 458 / 907
5.1.7. Виды графов (1/9)
В данном параграфе рассматриваются различные частные случаи графов.
Граф, состоящий из одной вершины, называется тривиальным.
Граф, состоящий из простого цикла с k вершинами, обозначается Ck .
Пример. C3 — треугольник.
Замечание. В классе графов треугольники — минимальные возможные циклы. В классах
орграфов и псевдографов возможны контуры длиной 1 (петли) и 2 (встречные дуги).
Граф, в котором любые две вершины смежны, называется полным. Полный граф с p вер-
шинами обозначается Kp , он имеет максимально возможное число рёбер:
p(p − 1)
q(Kp ) = .
2
Граф, в котором нет смежных вершин, называется пустым. Пустой граф с p вершинами
обозначается Kp , он имеет минимально возможное число рёбер: q(Kp ) = 0.
Дополнением полного графа является пустой, и обратно: дополнением пустого графа яв-
ляется полный.
459 / 907
5.1.7. Виды графов (2/9)
Максимальный полный подграф (некоторого графа) называется кликой (этого графа). Мак-
симальным подграф является в том смысле, что любой другой подграф графа, включаю-
щий множество вершин клики, не является полным. Граф может иметь несколько клик.
Максимальное число вершин среди клик данного графа называется кликовым числом гра-
фа (или плотностью).
Граф G(V, E) называется двудольным (или биграфом, или чётным графом), если множе-
ство V может быть разбито на два непересекающихся множества V1 и V2 (V1 ∪ V2 = V ,
V1 ∩ V2 = ∅, V1 6= ∅, V2 6= ∅), причём всякое ребро из E инцидентно вершине из V1 и
вершине из V2 (то есть соединяет вершину из V1 с вершиной из V2 ). Множества V1 и V2 на-
зываются долями двудольного графа. Если двудольный граф содержит все рёбра, соеди-
няющие множества V1 и V2 , то он называется полным двудольным графом. Если |V1 | = m
и |V2 | = n, то полный двудольный граф обозначается Km,n .
Замечание. Обсуждая двудольность, достаточно рассматривать только связные графы,
поскольку каждую компоненту связности можно рассматривать отдельно.
460 / 907
5.1.7. Виды графов (3/9)
Теорема. Граф является двудольным тогда и только тогда, когда в нём нет простых
циклов нечётной длины.
Доказательство.
[ ⇐= ] Разобьём множество V на подмножества V1 и V2 следующей процедурой.
Вход: граф G(V, E).
Выход: Множества V1 и V2 — доли графа.
select v ∈ V //произвольная вершина
V1 ←{v}; V2 ← ∅ //вначале первая доля содержит v , а вторая пуста
for u ∈ V − v do
if d(v, u) — чётно then
V1 ← V1 + u //помещаем вершину u в первую долю
else
V2 ← V2 + u //помещаем вершину u во вторую долю
end if
end for
461 / 907
5.1.7. Виды графов (4/9)

Доказательство. (Продолжение) Далее от противного. Пусть есть две вершины в одной


доле, соединённые ребром. Пусть для определённости u, w ∈ V2 и (u, w) ∈ E . Рассмотрим
геодезические hv, ui и hv, wi (здесь v — та произвольная вершина, которая использова-
лась в алгоритме построения долей графа). Тогда длины | hv, ui | и | hv, wi | нечётны. Эти
геодезические имеют общие вершины (по крайней мере, вершину v ). Рассмотрим наи-
более удалённую от v общую вершину геодезических hv, ui и hv, wi и обозначим её v 0
(может оказаться так, что v = v 0 ).
Имеем | hv 0 , ui |+| hv 0 , wi | = | hv, ui |+| hv, wi |−2| hv, v 0 i | — чётно и v 0 , . . . , u, w, . . . , v 0 —
простой цикл нечётной длины, что противоречит условию. Если же u, w ∈ V1 , то длины
| hv, ui | и | hv, wi | чётны, и имеем v 0 , . . . , u, w, . . . , v 0 — простой цикл нечётной длины.
[ =⇒ ] От противного. Пусть G(V1 ,V2 ;E) — двудольный граф и v1 , v2 , . . . , v2k+1 , v1 — про-
стой цикл нечётной длины. Пусть v1 ∈ V1 , тогда v2 ∈ V2 , v3 ∈ V1 , v4 ∈ V2 , . . . , v2k+1 ∈ V1 .
Имеем: v1 , v2k+1 ∈ V1 и (v1 , v2k+1 ) ∈ E , что противоречит двудольности.

462 / 907
5.1.7. Виды графов (5/9)
Следствие. Ациклические графы двудольны.
Пример. На рисунке представлены диаграммы всех ациклических связных двудольных
графов с пятью вершинами.

Замечание. Если двудольный граф связен, то вершины по долям распределяются един-


ственным образом. Если же граф не является связным, то распределение вершин по до-
лям неоднозначно.
Пример. В пустом графе любое разбиение множества вершин на два непустых подмно-
жества определяет доли двудольного графа.
Отступление. Среди вершин, входящих в одну долю графа, нет смежных, то есть доли двудоль-
ного графа образуют независимые множества вершин (см. п. 5.5.1). Исходя из этого наблюдения,
можно определить k -дольный граф, как граф, вершины которого можно разбить на k независи-
мых множеств.
463 / 907
5.1.7. Виды графов (6/9)
Полный двудольный граф вида K1,n , где n > 1 называется звёздным графом (или кратко
звёздой) и обозначается Sn . Единственная вершина, входящая в первую долю V1 называ-
ется центральной вершиной звезды.
Замечание. В определении мы полагаем n > 1, чтобы исключить из рассмотрения вы-
рожденные случаи тривиального графа K1 = S1 и диполя K2 = K1,1 = S1 .
Теорема. Центр звёздного графа и его центральная вершина совпадают.
Доказательство. Эксцентриситет центральной вершины равен 1, а эксцентриситеты всех
остальных вершин равны 2.
Замечание. Доказанная теорема позволяет называть центральную вершину центром.
Звёзды играют особую роль в рёберном изоморфизме.
Лемма. Пусть G1 (V1 , E1 ) и G2 (V2 , E2 ) — связные рёберно изоморфные графы c изомор-
физмом h, причём p(G1 ) > 3, p(G2 ) > 3. Тогда если для некоторого r > 2 ребра e1 , . . . , er
составляют звезду Sr в графе G1 , то их образы h(e1 ), . . . , h(er ) составляют такую же
звезду Sr в графе G2 .
Замечание. То есть рёберный изоморфизм уважает звёзды.
464 / 907
5.1.7. Виды графов (7/9)
Доказательство.
Индукция по r. База r = 3. Возможны
два изоморфизма, показанные на рисунке.
Покажем, что «левый» изоморфизм g невоз-
можен. Действительно, поскольку p(G1 ) > 3,
то в исходном графе должна быть ещё од-
на вершина, которая в силу связности долж-
на иметь инцидентное ей ребро e4 .
Ребро e4 смежно либо только одному ребру из
множества {e1 , e2 , e3 }, либо всем трём, но при
изоморфизме g в графе G2 ребро g(e4 ) мо-
жет быть смежно только ровно двум ребрам
из множества {g(e1 ), g(e2 ), g(e3 )}. Таким об-
разом, изоморфизм g невозможен и база ин-
дукции доказана.
465 / 907
5.1.7. Виды графов (8/9)
Доказательство. (Продолжение) Пусть теперь лемма выполнена для всех звёзд с числом
рёбер r или менее. Тогда если r + 1 рёбер e1 , . . . , er+1 образуют звезду Sr+1 , а за выче-
том ребра e1 или er+1 образуют звезду Sr в графе G1 , то по предположению индукции
рёбра h(e1 ), . . . , h(er ) образуют звезду Sr с центром v1 в графе G2 , аналогично рёбра
h(e2 ), . . . , h(er+1 ) образуют звезду Sr с центром v2 в графе G2 . Значит по лемме v1 = v2
и рёбра h(e1 ), . . . , h(er+1 ) действительно образуют звезду Sr+1 .
Любое подмножество рёбер звезды из трёх или более элементов также образует звезду,
причём с тем же центром. Для вершины v в графе G можно определить максимальную
звезду как звезду, центром которой является v , такую что она не является собственным
подмножеством никакой другой звезды. Обозначим её как SG (v).
Замечание. Фактически, максимальная звезда для вершины — это её окрестность, если
степень больше двух.
Следствие. Пусть G1 (V1 , E1 ) и G2 (V2 , E2 ) — связные рёберно изоморфные графы c изо-
морфизмом h, причём p(G1 ) > 3, p(G2 ) > 3. Тогда максимальной звезде SG1 (v), образо-
ванной рёбрами e1 , . . . , ed(v) , изоморфизм h взаимно однозначно составляет максималь-
ную звезду SG2 (v0), образованную рёбрами h(e1 ), . . . , h(ed(v) ) в графе G2 . 466 / 907
5.1.7. Виды графов (9/9)
Если в графе ориентировать все рёбра, то получится орграф, который называется направ-
ленным, или антисимметричным. Направленный орграф, полученный из полного графа,
называется турниром.
Замечание. В направленном орграфе не может быть «встречных» дуг (u, v) и (v, u), а в
произвольном орграфе это допустимо.
Отступление. Название «турнир» имеет следующее происхождение. Рассмотрим спортивное со-
ревнование для пар участников (или пар команд), где не предусматриваются ничьи. Пометим вер-
шины орграфа участниками и проведем дуги от победителей к побеждённым. В таком случае тур-
нир в смысле теории графов — это как раз результат однокругового турнира в спортивном смыс-
ле.
Если в орграфе полустепень захода некоторого узла равна нулю (то есть d+ (v) = 0),
то такой узел называется источником, если же нулю равна полустепень исхода (то есть
d− (v) = 0), то узел называется стоком. Направленный орграф с одним источником и
одним стоком, в котором есть хотя бы один путь из источника в сток, называется сетью.
467 / 907
5.1.8. Операции над графами (1/9)
Введем следующие операции над графами:
I Объединение (дизъюнктное) графов G1 (V1 , E1 ) и G2 (V2 , E2 ) при условии V1 ∩V2 = ∅
(обозначение — G1 (V1 , E1 ) ∪ G2 (V2 , E2 )) даёт граф G(V, E),
где V = V1 ∪ V2 & E = E1 ∪ E2 .
Пример. K 3,3 = C3 ∪ C3 .
I Соединение графов G1 (V1 , E1 ) и G2 (V2 , E2 ) при условии V1 ∩ V2 = ∅
(обозначение — G1 (V1 , E1 ) + G2 (V2 , E2 )) даёт граф G(V, E),
где V = V1 ∪ V2 & E = E1 ∪ E2 ∪ {e = (v1 , v2 ) | v1 ∈ V1 & v2 ∈ V2 } .
Пример. K3,3 = C 3 + C 3 .
I Удаление вершины v из графа G1 (V1 , E1 ) при условии v ∈ V1
(обозначение — G1 (V1 , E1 ) − v ) даёт граф G2 (V2 , E2 ),
где V2 = V1 − v & E2 = E1 \ {e = (v1 , v2 ) | v1 = v ∨ v2 = v} .
Пример. C3 − v = K2 .
I Удаление ребра e из графа G1 (V1 , E1 ) при условии e ∈ E1
(обозначение — G1 (V1 , E1 ) − e) даёт граф G2 (V2 , E2 ), где V2 = V1 & E2 = E1 − e.
Пример. K2 − e = K 2 . 468 / 907
5.1.8. Операции над графами (2/9)
I Добавление вершины v в граф G1 (V1 , E1 ) при условии v ∈ / V1
(обозначение — G1 (V1 , E1 ) + v ) даёт граф G2 (V2 , E2 ), где V2 = V1 + v & E2 = E1 .
Пример. K2 + v = K2 ∪ K1 .
I Добавление ребра e в граф G1 (V1 , E1 ) при условии e 6∈ E1
(обозначение — G1 (V1 , E1 ) + e, ) даёт граф G2 (V2 , E2 ), где V2 = V1 & E2 = E1 + e.
Пример. P3 + e = C3 .
I Стягивание правильного подграфа с множеством вершин A графа G1 (V1 , E1 ) к вер-
шине v при условии A ⊂ V1 (обозначение — G1 (V1 , E1 )/A) даёт граф G2 (V2 , E2 ),
где V2 = (V1 \ A) + v ,
E2 = E1 \ {e = (u, w) | u ∈ A ∨ w ∈ A} ∪ {e = (u, v) | u ∈ Γ(A) \ A}.
Пример. K4 /C3 = K2 .
Замечание. Если A = {u, v}, причём e = (u, v) ∈ E , то допустима запись G/e.
I Размножение вершины v графа G1 (V1 , E1 ) при условии v ∈ V1 , v 0 6∈ V1
(обозначение — G1 (V1 , E1 ) ↑ v ) даёт граф G2 (V2 , E2 ),
где V2 = V1 + v 0 & E2 = E1 ∪ {(v, v 0 )} ∪ {e = (u, v 0 ) | u ∈ Γ+ (v)} .
Пример. K2 ↑ v = C3 . 469 / 907
5.1.8. Операции над графами (3/9)
Некоторые из примеров, приведённых в определениях операций, нетрудно обобщить. В
частности, легко показать, что имеют место следующие соотношения:
Km,n = K m + K n , Kp−1 = Kp − v,
G + v = G ∪ K1 , Kp−1 = Kp /K2 ,
Kp /Kp−1 = K2 , Kp = Kp−1 ↑ v.
Введённые операции обладают рядом простых свойств, которые легко вывести из опре-
делений. В частности:
G1 ∪ G2 = G2 ∪ G1 , G1 + G2 = G2 + G1 ,
G1 = G2 ⇐⇒ G1 = G2 , G1 ∪ G2 = G1 + G2 .
Замечание. Операции добавления и удаления ребра взаимно обратны:
∀ e ∈ E, e0 ∈
/ E ((G − e) + e = (G + e0 ) − e0 = G) .
В то же время ∀ v 0 ∈
/ V ((G + v 0 ) − v 0 = G), но если вершина v графа G не изолирован-
ная, то (G − v) + v 6= G, потому что в этом случае q((G − v) + v) < q(G).
470 / 907
5.1.8. Операции над графами (4/9)
Результат выполнения нескольких последовательных операций удаления или добавле-
ния вершин или рёбер не зависит от порядка выполнения операций:
(G + v1 ) + v2 = (G + v2 ) + v1 , (G − v1 ) − v2 = (G − v2 ) − v1 ,
(G + e1 ) + e2 = (G + e2 ) + e1 , (G − e1 ) − e2 = (G − e2 ) − e1 .
Поэтому операции удаления и добавления вершин и рёбер можно обобщить, и допускать
в качестве второго аргумента множества вершин и рёбер.
Отступление. Приведённые определения операций над графами и примеры к ним дают повод за-
тронуть один тонкий вопрос, связанный с различиями в традициях математических и программ-
ных обозначений.
Рассмотрим пример к операции дизъюнктного объединения графов
(K 3,3 = C3 ∪ C3 ). Если введённые обозначения понимать буквально, то этот пример кажется
противоречащим определению. Действительно, определение требует, чтобы множества вершин
объединяемых графов не пересекались. Если считать, что C3 обозначает конкретный треугольник,
то придётся признать, что в выражении C3 ∪ C3 множества вершин не только пересекаются, но и
совпадают, а значит, операция объединения неприменима. 471 / 907
5.1.8. Операции над графами (5/9)
Отступление. (Продолжение) На самом деле C3 обозначает как класс треугольников (все треуголь-
ники изоморфны как графы), так и отдельный объект — экземпляр этого класса. Как именно сле-
дует понимать обозначение, считается ясным из контекста. Если стремиться к (излишней в дан-
ном случае) строгости и однозначности обозначений, то приведённый пример можно было бы за-
писать, например, так:

∀ G1 (V1 , E1 ) ∈ C3 , G2 (V2 , E2 ) ∈ C3 V1 ∩ V2 6= ∅ =⇒ ∃ G3 (V3 , E3 ) ∈ K3,3 G1 ∪ G2 ∼ G3 .
Подобная неоднозначность обозначений присуща и программированию, хотя и в меньшей сте-
пени. Например, ключевое слово int в различных контекстах может обозначать встроенный тип
данных (класс объектов), операцию порождения нового объекта этого типа (экземпляра класса),
операцию преобразования другого объекта в объект типа int (явное приведение). Следуя стилю
объектно-ориентированных языков программирования, приведённый пример можно было бы за-
писать так:
newK3,3 = newC3 ∪ newC3 .
Ради краткости и простоты изложения здесь принят значительно менее строгий стиль обозначе-
ний в надежде на то, что программистская интуиция и здравый смысл позволят читателю избе-
жать заблуждений, несмотря на вольности в обозначениях. 472 / 907
5.1.8. Операции над графами (6/9)
Применение операций позволяет устанавливать простые, но очень важные в приложе-
ниях факты.
Теорема. В ациклическом графе рёбер меньше, чем вершин: z(G) = 0 =⇒ q(G) < p(G).
Доказательство. Рассмотрим сначала случай, когда G(V, E) — связный ациклический
граф. Индукция по p. База: при p = 1 имеем q = 0, при p = 2 имеем q = 1. Пусть утвер-
ждение теоремы верно для всех графов с числом вершин меньше p. Рассмотрим связ-
ный ацикличеcкий граф с p вершинами. Если в графе есть висячая вершина v , то удалим
её, G ← G − v . Тогда q − 1 < p − 1 по индукционному предположению, и q < p. Если ви-
сячих вершин нет, то ∀ v ∈ V (d(v) > 2). Возьмём произвольную вершину и пере