- •Содержание
- •1 Элементы теории множеств. Комбинаторика. 5
- •Математическая логика: Булева аллгебра 88
- •Теория алгоритмов 129
- •Теория графов 162
- •Математическая логика: Исчисления высказываний и предикатов 207
- •Элементы теории множеств. Комбинаторика.
- •Введение
- •Примеры задач.
- •Задача о расположении конвертов
- •Задача о Ханойской башне
- •Базовые обозначения
- •Правило суммы и правило произведения
- •Основы теории множеств
- •Понятие множества
- •Парадокс Рассела
- •Подмножества
- •Операции над множествами
- •Диаграммы Эйлера-Венна
- •Прямое произведение множеств
- •Бинарные отношения и функции
- •Бинарные отношения
- •Функции
- •Специальные бинарные отношения: Отношение эквивалентности
- •Специальные бинарные отношения: Отношение порядка
- •Лексикографический порядок
- •Выборки с повторениями и без повторений
- •Размещения и сочетания
- •Треугольник Паскаля
- •Связь сочетаний и (0,1)-векторов
- •Перебор сочетаний
- •Бином Ньютона
- •Мультимножества
- •Связь мультимножеств и (0,1)-векторов
- •Полином Ньютона
- •Разбиения множеств.
- •Приложение: программа перебора сочетаний
- •Перестановки
- •Понятие перестановки
- •Группа перестановок
- •Циклы перестановки
- •Тип перестановки
- •Разложения и разбиения натуральных чисел
- •Разложения натуральных чисел
- •Разбиения натуральных чисел
- •Принцип включения-исключения
- •Принцип включения-исключения
- •Задача о беспорядках
- •Мощность объединения множеств
- •Число целочисленных решений системы неравенств
- •Математическая логика: Булева аллгебра
- •Булева алгебра. Функции алгебры логики.
- •Булевы функции
- •Формулы
- •Основные тождества
- •Разложение функции по переменным
- •Дизъюнктивная и конъюнктивная нормальные формы
- •Полином Жегалкина
- •1 ⊕ X1 ⊕ x2x3 - полином Жегалкина.
- •Полнота системы функций
- •Функции, сохраняющие ноль
- •Функции, сохраняющие единицу
- •Двойственность
- •Монотонность
- •Линейность
- •Критерий полноты системы функций
- •Теория алгоритмов
- •Машины Тьюринга
- •Понятие алгоритма
- •Машина Тьюринга
- •Способы записи машины Тьюринга
- •Стандартные конфигурации
- •Вычислимые функции
- •Алгоритмически неразрешимые задачи
- •Сложность алгоритма
- •Полиномиальная сводимость
- •Классы задач в форме распознавания свойств
- •4 Теория графов
- •4.1 Определения графа
- •Общее определение
- •Виды графов
- •Обыкновенный граф
- •Примеры графов
- •Графы Бержа
- •4.2 Изоморфизм графов
- •4.2.1 Инварианты графа
- •Операции
- •Основные операции над графами
- •Подграфы
- •Дополнение графа
- •Маршруты и связность
- •Деревья
- •Матрицы, связанные с графом
- •Матрица смежности
- •Матрица инцидентности
- •Список ребер
- •Обходы графов
- •Эйлеров цикл
- •Гамильтонов цикл
- •Задачи и алгоритмы
- •Остов минимального веса
- •Алгоритм 4.8.1 (Алгоритм Краскала).
- •Задача коммивояжера
- •Задача о клике
- •Задача о вершинном покрытии
- •Задача о гамильтоновом цикле
- •Снова задача коммивояжера
- •Алгоритм дерева
- •Математическая логика: Исчисления высказываний и предикатов
- •Исчисление высказываний
- •Пример задачи логики высказываний
- •Формальные теории
- •Формальная теория исчисление высказываний
- •Теоремы исчисления высказываний
- •Теорема о полноте исчисления высказываний
- •Независимость аксиом исчисления высказываний
- •Исчисление предикатов
- •Пример задачи логики предикатов
- •Формальная теория исчисление предикатов
- •Алфавит.
- •Формулы.
- •Аксиомы.
- •Правила вывода.
- •Интерпретация
- •Литература
Перебор сочетаний
В практических задачах может возникнуть необходимость рассмотреть все возможные сочетания из некоторого множества заданной мощности, чтобы сравнить их свойства, или проделать некоторую операцию для каждого сочетания. Рассмотрим алгоритм перебора сочетаний.
Пусть x1, x2, ..., xk - числа из множества {1, 2, ..., n}, вошедшие в
сочетание, причем x1 < x2 < ... < xk. Пусть в начальный момент времени
сочетание состоит из первых k чисел: xi = i, i = 1, k.
Далее на каждом шаге будем просматривать вектор (x1, x2, ..., xk)
начиная с xk и искать первую такую компоненту xi, которую можно увеличить (нельзя увеличить xk, если он равен n; xk−1, если он равен n−1
и так далее). Если такой компоненты не найдется, алгоритм завершает свою работу. В противном случае, пусть i наибольшее число, такое что
xi < n − k + i. Увеличим xi на единицу, а для всех xt, t = i + 1, k,
присваимаем значения xt = xi + (t − i). Повторяем процесс нужное число
раз.
Пример 1.5.5 . Рассмотрим, как работает алгоритм для n = 5 и
k = 3.
1) Сначала x = (x1, x2, x3) = (1, 2, 3).
Увеличиваем x3: x = (1, 2, 4).
Увеличиваем x3: x = (1, 2, 5).
x3 больше увеличить нельзя. Увеличиваем x2 и переназначаем значение x3: x = (1, 3, 4).
Далее аналогично 5) x = (1, 3, 5)
6) x = (1, 4, 5)
7) x = (2, 3, 4)
8) x = (2, 3, 5)
9) x = (2, 4, 5)
10) x = (3, 4, 5)
Таким обраом, мы перебрали все сочетания из 5 по 3.
Бином Ньютона
Утверждение 1.5.4 . Пусть x1, x2, ..., xn - независимые переменные. Обозначим X = {x1, x2, ..., xn}. Тогда
(1 + x1)(1 + x2)...(1 + xn) = \
x. (7)
Y ⊆X x∈Y
Доказательство. Проведем индукцию по n. Пусть n = 1. Тогда X =
{x1}.
\ x = x +
x = 1 + x1.
Y ⊆X x∈Y
x∈∅
x∈{x1}
0
Заметим, что здесь мы использовали nx∈∅ x = 1, поскольку xиндукции доказана.
= 1. База
≤
Пусть утверждение верно для всех n n.
n + 1. X = {x1, x2, ..., x , xn+1}. Тогда
Положим n = n
\ x = \
x + xn+1 \
n
x =
Y ⊆X x∈Y
Y ⊆X\{x--+1} x∈Y
Y ⊆X\{xn+1} x∈Y
--
= (1 + x1)(1 + x2)...(1 + xn) + xn+1(1 + x)(1 + x
)...(1 + xn) =
1 2
·
1
= (1 + xn+1) (1 + x
)(1 + x2
)...(1 + xn).
D
Следствие 1.5.5 (формула бинома Ньютона).
(1 + x)n = \ n
nxk (8)
k
k=0
Доказательство. Если в формулу (7) подставить x1 = x2 = ... = xn = x, то получим
(1 + x)n = \
x = \ x|Y | =
Y ⊆X x∈Y
Y ⊆X
n
= \ \
n
xk = \ xk \
n
1 = \
n
xk
k
k=0 Y ⊆X,
|Y |=k
D
k=0
Y ⊆X,
|Y |=k
k=0
k
Значения (n) получили благодоря этой формуле названиебиномиальных коэффициентов.
Более часто используемой формой формулы бинома Ньютона является следующее уравнение:
n
(a + b)n = \
k=0
n
akbn−k (8t)
k
Действительно, если b = 0, формула очевидна. Пусть b /= 0. Тогда
b
обозначим за x значение a . Тогда
n
(a + b)n = (b(a + 1))n = bn(x + 1)n = bn \ n xk =b k
k=0
n
= \
k=0
n
k
n
bn · xk = \
k=0
n
k
n
b
bn · (a )k = \k=0
n
k
akbn−k.
Таким образом, формула (8t) эквивалентна формуле (8).
Следствие 1.5.6 .
n
\
k=0
n
k
= (1 + 1)n = 2n
Что словесно можно сформулировать как "число всех подмножеств n- элементного множества равно 2n". Этот факт нам уже знаком.
Следствие 1.5.7 . Пусть n > 0. Тогда
n
\(−1)k
k=0
n
k
= (1 − 1)n = 0.
Это равенство можно прочитать, например, как "суммарная мощность множества всех нечетных подмножеств множества равна суммарной мощности всех его четных подмножеств". Другими словами, число подмножеств четной и нечетной мощности совпадает.
Замечание 1.5.1 (Дельта-функция). Отметим, что по следствию
k=0
, если рассматривать выражение ):n
(−1)k(n) как функцию от n
k
на множестве целых чисел, мы получим дельта-функцию - функцию,которая принимает значение 1 только в одной точке и 0 во всех остальных:
n
δo(n) = \(−1)k
k=0
n
=
k
( 1, n = 0,
0, n /= 0.
(9)
Пользуясь δo(n) можно получить и другие δ-функции. Для любого целого числа a можно определить δa(n) на множестве целых чисел следующим образом:
n−a
δa(n) = δo(n − a) = \(−1)k
k=0
n − a
k
( 1, n = a,
=
0, n /= a.
(10)
Утверждение 1.5.8 (формула обращения). Пусть даны две числовых последовательности a0, a1, a2, ... и b0, b1, b2, ... . Тогда следующие два утверждения эквивалентны
n
bn = \
k=0
n
k
ak, n = 0, 1, 2... (11)
n
2) an = \(−1)n−k
k=0
n
k
bk, n = 0, 1, 2... (12)
Доказательство. 1) Для начала докажем, что из формулы (11) следует
k=0
k
(12). Пусть верно bn = ):n(n)ak, n = 0, 1, 2.... Тогда
n
\(−1)n−k
k=0
n
k
n
bk = \(−1)n−k
k=0
n k
\
kj=0
k
j
aj =
n k n k
−
= \ \( 1)n−kk
j aj =
k=0
j=0
Прервем последовательность равенств, чтобы разъяснить следующее
k=0
действие. Рассмотрим сумму ):n):k
j=0
A(j, k). Сложение членов A(j, k)
идет по всем таким индексам j и k, что 0 ≤ k ≤ n и 0 ≤ j ≤ k. Иначе это
условие можно записать, как 0 ≤ j ≤ k ≤ n.
Теперь рассмотрим условие 0 ≤ j ≤ n и j ≤ k ≤ n, которое описывает
j=0
ограничение на индексы j и k для суммы ):n):n
k=j
A(j, k). Можно
видеть, что это условие тоже эквивалентно записи 0 ≤ j ≤ k ≤ n. Таким
k=0
образом, мы показали, что суммы ):n):k
j=0
A(j, k) и ):n
):n
k=j
A(j, k)
j=0
отличаются только порядком суммирования и значит
n k n n
\ \ A(j, k) = \ \ A(j, k).
k=0
j=0
j=0
k=j
Теперь продолжим наши выкладки.
j
k
j
n n n k n nn k
−
= \ \( 1)n−kk
aj = \ aj \(−1)n−k =
j=0
k=j
j=0
k=j
j
n n n n − jn n n
n − j
j
= \ aj \(−1)n−k
k − j
= \ aj \(−1)n−k
=
k − j
j=0
k=j
j=0
k=j
Для следующего перехода сделаем замену переменной индексирования во второй сумме. Положим l = n − k. Тогда k = n − l, k − j = n − j − l. В то время как индекс k пробегал все значения от j до
n, индекс l будет пробегать значения от n − j до нуля. Поскольку
операция сложения на множестве вещественных чисел комутативна
(неважен порядок суммирования), будем считать, что переменная l
проходит значения от нуля до n − j. Тогда получим:
n n
n−j
n − j
n n
n−j
n − j
= \
j=0
aj \(−1)l
j
l=0
n − j − l
= \
j=0
aj \(−1)l .
j
l
l=0
Из формулы (10) следует, что ):n−j (−1)l(n−j) = δj (n) и значит
n
n−j
l=0
n − j
l
( (j)a = a
, n = j,
aj \(−1)l
= j j j
j
l=0
l 0, n /= j.
Таким образом, из всей последней суммы останется только одно слагаемое
n n
n−j
n − j
n n
\
j=0
aj \(−1)l
j
l
l=0= \
j=0
j aj δj (n) = an,
что и требовалось доказать.
2) Доказательство, что из формулы (12) следует (11), проводится аналогично. Читатель может сделать это самостоятельно.
D
Пример 1.5.6 . Пусть даны значения b0 = 2, b1 = 1, b2 = 5, b3 =
−2, b4 = 3 и верна формула (11). Воспользуемся формулой (12) для
вычисления значений an:
n
an = \(−1)n−k
k=0
n
k
bk, n = 0, 1, 2, 3, 4.
Для подстановки правильных биномиальных коэффициентов в эту формулу будет удобно воспользоваться треугольником Паскаля, как он представлен на рисунке 8. В каждой строке для данного n там выписаны все необходимые нам коэффициенты.
a0 =
0
0
b0 = 2,
a1 = −
1
0
b0 +
1
1
b1 = −2 + 1 = −1,
2
2
2
3 |
3 |
3 |
3 |
b0 0 |
+ b1 1 |
− 2 b2 |
+ 3 |
a2 = 0
b0 −
1 b1 +
2 b2 = 2 − 2 · 1 + 5 = 5,
a3 = −
4 |
4 |
4 |
4 |
4 |
= b0 − b1 + b2 − b3 + 0 1 2 3 4 |
= − 2 + 3 · 1 − 3 · 5 + (−2) = −16,
a4
=2 − 4 · 1 + 6 · 5 − 4 · (−2) + 3 = 39.
b3 =
b4 =
Теперь проверим правильность нахождения значений an с помощью формулы (11)
0
b0 =
0 a0 = 2,
1
1
b1 =
0 a0 +
1 a1 = 2 + (−1) = 1,
2
2
2
b2 =
0 a0 +
1 a1 +
2 a2 = 2 + 2 · (−1) + 5 = 5,
3
3
3
3
b3 =
0 a0 +
a1 +
a2 +
a3 =
4 |
4 |
4 |
4 |
4 |
= a0 + a1 + a2 + a3 + 0 1 2 3 4 |
=2 + 3 · (−1) + 3 · 5 + (−16) = −2,
b4
=2 + 4 · (−1) + 6 · 5 + 4 · (−16) + 39 = 3.
a4 =
Как видно, значения bn получены правильно.