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

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

Коченюк Анатолий

20 декабря 2020 г.
0.1 Введение
Связаться:
• stankev@gmail.com Собирать культуру общения: указывать Фамилию,
Имя
• Телеграм @andrewzta (для немедленного ответа. Если нет, оно утонет).
• +79219034426 (для катастрофических ситуаций, ожидается, что зво-
нить никто не будет) (ни в коем случае не писать смс)
Обращаться можно по методическим вопросам. Если проблема группы –
пишет староста.
Не писать по учебно-методическим проблемам (общежитие, медосмотр, ар-
мия ..) для этого есть зам. декана Харченко (легко найти контакты в ису)
Про отчётность будет на первой практике.
Лекции есть в ютубе andrewzta

2
Глава 1

1 курс

1.1 Фундамент
Множество – неопределяемое понятие. Множество состоит из элементов.
a ∈ A а-маленькое принадлежит множеству А-большое

A = {2, 3, 9}

A = {n | n чётно, n ∈ N} – фильтр

A, B :

• A ∪ B = {a | a ∈ A или a ∈ B}

• A ∩ B = {a | a ∈ A и a ∈ B}

• A \ B = {a|a ∈ A и a 6∈ B}

• A = {a|a 6∈ A}??? U – универсум

A=U \A

A\B =A∩B

• A4B = A ⊕ B = (A ∪ B) \ (A ∩ B)

Замечание. Если множество – любой набор чего-угодно возникает пара-


докс Рассела

A = {a|a – множество, a 6∈ a}

Вопрос лежит ли в себе A?

3
Определение 1 (Пара). A, B – множества. Мы можем рассмотреть
множество пар, где первый элемент из A, а второй из B
A × B = {(a, b)|a ∈ A, b ∈ B}
A × A = A2

(A × B) × C = {(x, y)|x ∈ A × B, y ∈ C} = {((a, b), y)|a ∈ A, b ∈ B, y ∈ C}


A × (B × C) = {(a, (y, z))|a ∈ A, y ∈ B, z ∈ C}
A × B × C = {(a, b, c)|a ∈ A, b ∈ B, c ∈ C}
Для простоты, здесь и далее эта операция будет считаться ассоциативной
и первые две строчки будут давать то же, что третья – множество троек.
(
3 n A ,n = 1
A×A×A=A A =
A × An−1 , n > 1

A0 = {[]} = {ε} – пустая последовательность.

Пример. A = 2, 3, 9 -> A × A = {(2, 2), (2, 3), (2, 9), (3, 2), (3, 3), . . .}

Замечание. У множества есть элемента и для любого элемента из универ-


сума, он либо входит (1 раз) либо не входит.

Определение 2. Функция – отображение, которое каждому элементу


из одного множества ставит в соответветвие единственный элемент из
другого множества
f :A→B
График {(x, f (x))}.
Формально будем отождествлять функцию и её график.
f ⊂A×B ∀a ∈ A∃!b ∈ B (a, b) ∈ f

Замечание. Не путайте принадлежность и включение


a∈A
A, B, ∀a (если a ∈ A, то a ∈ B) A ⊂ B
D4 = {n|n кратно 4}
E = {n|n чётно}
D4 ⊂ E
{2, 3, 9} ⊂ {2, 3, 4, . . . , 9}
A⊂A

4 ГЛАВА 1. 1 КУРС
∅⊂A
A⊂U

Замечание. Необязательно все b попадают в график.


sqr : N → N – только квадраты чисел

Определение 3. ∀b ∈ B∃a ∈ A : b = f (a) – сюръекция

Определение 4. ∀a ∈ A∀b ∈ B a 6= b =⇒ f (a) 6= f (b)

Замечание. Принцип Дирихле – нет инъекции из большего в меньшее


множества. Если кроликов больше, чем клеток, то какому-то кролику не
хватит клетки

Определение 5. Если f – инъекция и сюръекция, то f – называется


биекцией
Если между двумя конечными множествами есть биекция, то у низ
равное количество элементов.

Определение 6. Два множества называется равномощными, если меж-


ду ними есть дикция

B A – множество функций из A в B
|A| = a, |B| = b |A × B| = a · b |B A | = ba
|A∅ | = 1 эфемерная функция, которой ничего не передать
∅A = ∅, A 6= ∅
∅∅ = 1

Определение 7. R ⊂ A × B – отношение (бинарное)

Пример. A = B = N R = {(a, b)|a < b} R =<


. . .
a..b 6..2 6 6 ..5
A = люди, B = собаки, R = {(a, b)|a – хозяинb}
Рассмотрим 5 классов отношение на квадрате множества:
1. рефлексивные ∀a aRa

ГЛАВА 1. 1 КУРС 5
RC(R) – рефлексивное замыкание, включаем все пары (a, a)

2. антирефлексивные ∀a ¬aRa

3. симметричные aRb =⇒ bRa

4. антисимметричные aRb, a 6= b =⇒ ¬bRa

или aRb и bRa =⇒ a = b

5. транзитивность aRb, bRc =⇒ aRc

Определение 8. 1+3+5 – рефлексивные, симметричные и тразитив-


ные – называются отношениями эквивалентности.

Теорема 1. R – отношение эквивалентности на X, то элементы X


можно разбить на классы эквивалентности так, что:
a и b в одном классе =⇒ aRb a и b в разных классах =⇒ ¬aRb
множество таких классов обозначается X/R
N/ ≡3 =

{{1, 4, 7, 10, . . .)
{2, 5, 8, 11, . . .)}
{3, 6, 9, 12, . . .)}}
.

Замечание. Отношение равномощности – отношение эквивалентности.

Классы эквивалентности – порядки. Для конечного случая обозначаются


числами

Определение 9. 1+4+5 – рефлексивные, антисимметричные и тран-


зитивные – частичные порядки
Множество, на котором введён частичный порядок, то оно называется
частично упорядоченным. (ч.у.м – частично упорядоченное множество,
poset – partially organised set)

R⊂X ×X

X, Y, Z R:X ×Y S :Y ×Z

6 ГЛАВА 1. 1 КУРС
Определение 10. Композиция отношений:
T =R◦S xT y ⇐⇒ ∃z : xRz и zSy
т.е. есть z, через который можно пройти, чтобы попасть в y из x

Замечание. R ⊆ X × X S ⊆X ×X
R◦S ⊆X ×X
R ◦ R ⊆ X × X – пройти два раза по стрелкам
R3 = R ◦ R2 = R2 ◦ R – пути длины ровно 3
S ◦ T ◦ U – идём по стрлке из S в T , а потом в U

Определение 11. Транзитивное замыкание.



R+ = Rk
S
k=1

R = {(x, x)|x ∈ X} – они не включаются по дефолту в R+


0


R∗ = Rk = R+ ∪ R0 – если между двумя вершинами существует
S
k=0
какой-либо путь

Замечание. Транзитивное замыкание – транзитивно


Пусть xR+ y =⇒ xRi y
Пусть yR+ z =⇒ yRj z
=⇒ x(Ri ◦ Rj )z =⇒ xRk z

Замечание. ∀T : T – транзитивно. T ⊂ R =⇒ T + ⊂ R

Доказательство. По индукции:
База: R1 ⊂ T – дано
Переход: Ri ⊂ T =⇒ Ri+1 ⊂ T
xRi+1 y =⇒ x(R ◦ Ri )y =⇒ ∃z : xRz&zRi y =⇒ xT z&zT y =⇒ xT y (по
транзитивности T ) 

1.2 Булевы функции


∅ – пустое множество. С функциями из/в него всё достаточно грустно.
{unit}

ГЛАВА 1. 1 КУРС 7
void – ничего, константная функция
B = {0, 1}
f : A1 × A2 × . . . × An → B – функция от нескольких аргументов. Из одного,
но декартового произведения
Булева функция: f : Bn → B
n = 0 – ноль аргументов B0 = {[]}
0, 1
n=1

Таблица 1.1: n=1

x 0 id ¬ 1
0 0 0 1 1
1 0 1 0 1

Замечание. Подобные таблицы называются таблицами истинности функ-


ций
n=2

Таблица 1.2: n=2

x y 0 ∧ 6→ P1 6← P2 ⊕ ∨ ↓ = ¬P2 ← ¬P1 → ↑ 1
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

С помощью стрелки Пирса (↓) и штриха Шеффера (↑) можно выразить


любую другую: ¬x = x ↓ x

1.3 Задания булевых функций


Самый простой способ – таблица истинности
⊕n – 2n значений. глупо их все отдельно описывать
1. Задание функции формулой.
Определим базисные функции, систему связок
например: ∧, ∨, ¬, ⊕
x1 ⊕ x2 ⊕ x3 . . .

8 ГЛАВА 1. 1 КУРС
{f1 , f2 , .., fn } – базисные.
строка – формула. fi (x1 , . . . , xk ) – формула

Определение 12. Дерево разбора формулы. Если у функции


арность – k, то у ноды будет ровно k сыновей

F – функции, которые записываются формулами, используя F (замыкание


F)

Теорема 2 (Теорема о стандартном базисе). {∧, ∨, ¬} = B

Доказательство. Рассмотрим таблицу истинности функции f Она прини-


мает n аргументов и в ней 2n строк
Пусть f 6= 0. Рассмотрим строчки, в которых единицы.
По аргументам запишем с не – аргументы, которые 0, и без не – те, которые
1
¬x1 ∧ ¬x2 ∧ x3 ∧ ¬x4 ∧ x5 – 1 на ровно одном наборе элементов. А теперь
возьмём "или"по всем строкам, в которых 1
Одна такая строка называется термом.
Такая форма называется совершенной дизъюнктивной нормальная формой


Лемма 1. Любая функция, кроме тождественного 0 – есть СДНФ


x ∨ ¬x – тождественный ноль

Напоминание о способах задания функций:


F x1 , x2 , . . . , xn f ∈ F
or(and(x, not(y)), or(0, z)). Такие формы называются формулами. По фор-
муле можно построить дерево разбора.
∧, ∨, ¬
СДНФ – дизюнкция термов, где каждый терм – коньюнкция литералов.
Совершенная – в каждом терме есть все переменные по одному разу

Лемма 2. A F – некоторое множество. F = BF


A G – некоторое множество функций ∀f ∈ F f ∈G
Тогда с помощью G можно выразить любую функцию G = BF

ГЛАВА 1. 1 КУРС 9
Доказательство. G → F → ∀ =⇒ G → ∀ – то, что нужно доказать
фиксируем функцию h ∈ BF . Она каким-то деревом разбора выражается
через функции f ∈ F . Каждая функция f выражается через g ∈ G, то-
гда подставим выражения функций f через g в узлах дерева и получим
выражение функции h через G, значит люая функция выражается через
G =⇒ G = BF 

Пример. {⊕, ∧, 1}
x∧y = x∧y ¬x = x⊕1 – такая запись называется полиномом жегалкина
x ∨ y = (x ∧ y) ⊕ x ⊕ y
x ∧ y = xy ⊕ y ⊕ x – ∧ опускают
(x ⊕ y)(y ⊕ z) = xy ⊕ y ⊕ xz ⊕ yz
(x ⊕ 1)(y ⊕ 1) = xy ⊕ x ⊕ y ⊕ 1
a ∧ a = a – идемпотентность

Теорема 3. Любая булева функция (кроме 0) имеет каноничный по-


лином, причём единственный (с точностью до коммутативности и ас-
социативности)

n
Доказательство. булевых функций от n аргументов – 22
Мономов – 2n . Каждый из них мы можем взять или не взять =⇒ всего
n
22 − 1, -1 из случая, где мы рассматриваем пустую сумму.
Есть инъекция из булевых функций в полиному Жегалкина. Это инъеция
между равномощными множествами =⇒ это биекция. 

1.4 Линейный функции


Полиному Жкгалкина, в которых нету ∧
x⊕y x⊕y⊕1

Определение 13. Функция называется линейной, если её канониче-


ский полином Жегалкина не сожержит ∧

Утверждение 1. Если F содержит только линейный функции, то и


F содержит только линейный функции

10 ГЛАВА 1. 1 КУРС
Доказательство. x1 ⊕ x2 ⊕ x3
x7 ⊕ x8 = (x1 ⊕ x2 ⊕ x3 ) . . . Заменяем и получаем всё ещё сумму переменных
или 1
Если формально, строим дерево, заменяем узлы на линейные фукнции, за-
меняем повторы, раскрываем скобки (пользуемся ассоциативностью ⊕) и
получаем линейную функцию. 

Утверждение 2. Если F содержит только функции, сохраняющие 0,


то и F тоже
аналогично для 1

Определение 14. Функция f называется монотонной ⇐⇒ для двух


наборов x1 , x2 , . . . , xn y1 , y2 , . . . , yn , что xi 6 yi 0<1

f (x1 , x2 , . . . , xn ) 6 f (y1 , y2 , . . . , yn ).

Утверждение 3. Из монотонных функций не выразить немонотон-


ную

Доказательство. Доказывается индукцией по дереву разбора. Увеличили


аргумента, увеличился уровень выше, выше и корень тоже 

Определение 15. Функция f называется самодвойственная, если


f (x1 , . . . , xn ) = ¬f (¬x1 , . . . , ¬xn )

Утверждение 4. Из самодвойственных функций тоже не выйти. Тоже


деревом разборп

Классы Поста:
1. F0 – сохраняющие 0
2. F1 – сохраняющее 1
3. Fl – линейные
4. Fm – монотонные
5. Fs – самодвойственные

ГЛАВА 1. 1 КУРС 11
Лемма 3. F ⊆ Fi , i ∈ {0, 1, l, m, s} =⇒ F ⊆ Fi

Следствие 1. F – не полно

Теорема 4 (критерий Поста). F – полное ⇐⇒ F 6⊆ Fi для всех


i ∈ {0, 1, l, m, s}

Доказательство. =⇒ Если нет, то все функции лежат внутри этого клас-


са. Не будет включена ↑ например, не лежащая ни в одном классе Поста
⇐= f0 6∈ F0 , f1 6∈ F1 , fl 6∈ Fl , fm 6∈ Fm , fs 6∈ Fs
a(x)f0 (x, x, . . . , x)
a (0) = 1
a a(1) = 1 =⇒ a(x) = 1
b a(1) = 0 =⇒ a(x) = ¬x
b(x) = f1 (x, x, . . . , x) b(1) = 0
1. b(1) = 0 =⇒ b(x) = 0
2. b(1) = 1 =⇒ b(x) = ¬x
1a 1 0
1b 0, ¬
2a 1, ¬
2b ¬, x
1a 1, 0 fm (x1 , . . . , xn ) > fm (y1 , . . . , yn ) xi 6 yi Значит первое – 1, а
второе – 9
fm (x1 , . . . , xn )
fm (y1 , . . . , xn )
fm (y1 , . . . , xn )
..
.
fm (y1 , . . . , yn )
В какой-то момент единица сменилась нулём на соседних строках
f (y1 , . . . , yi−1 , xi , . . . , xn ) = 1
f (y1 , . . . , yi−1 , yi , . . . , xn ) = 0
xi 6 yi xi 6= yi =⇒ xi = 0, yi = 1

12 ГЛАВА 1. 1 КУРС
c(z) = fm (y1 , . . . yi−1 , z, xi+1 , . . . , xn ) здесь вместо x и y подставлены
константы
c(z) = ¬z
2b fs x1 , x2 , . . . , xn : fs (x1 , x2 , . . . , xn ) = ¬f (¬x1 , . . . , ¬xn ) = t
(
x1 x2 xn y x ,y = 1
d(z) = fs (z , z , . . . , z ) x =
¬x , y = 0

d(0) = t, d(1) = t
(
t = 1 =⇒ d(t) = 1
t = 0 =⇒ d(t) = 0

Итак мы получили 1, 0, ¬
Воспользуемся нелинейной функцией: fl среди нелинейных членов в по-
линоме Жегалкина выберем тот, в котором меньше всего переменных. Не
умаляя общности скажем, что он выглядит как xyu1 . . . uk k + 2 > 2
h(x, y) = fl (x, y, 1, 1, . . . , 1i, 0, 0, . . . 0) Вместо uk подставляем 1, а вместо
остальных 0
h(x, y) = xy[⊕x][⊕y][⊕1] – восемь вариантов.
Если есть ⊕1, напишем ¬
xy[⊕x][⊕y]
xy = x ∧ y
xy ⊕ x ⊕ y = x ∨ y
xy ⊕ x h(x, ¬y) = x(y ⊕ 1) ⊕ x = xy
xy ⊕ y h(¬x, y) = (x ⊕ 1)y ⊕ y = xy 

1.5 Преобразование Мёбиуса


f (x1 , x2 , . . . , xn ) = x ∨ y/x/y/1
axy xy ⊕ ax x ⊕ ay y ⊕ a1
L Q L
f (x1 , x2 , . . . , xn ) = as xi = a~s
s∈Bn
~ i:s(i)=1 ~
s6~
x

s(i) = 1 =⇒ x(i) = 1 ⇐⇒ s&x = s ⇐⇒ s 6 x (покомпонентно)

Определение 16 (Доминирование). ~a 6 ~b ⇐⇒ ∀i ai 6 bi

ГЛАВА 1. 1 КУРС 13
0 0 0 ... f00...0
0 0 ... 1 f00...1
Таблица истинности:

1 1 ... 1 f11...1
n
f ∈ B2
~a = M f~ f~ = M~a
Mxs = [s 6 x]
 
1 0 0 0
1 1 0 0
Преобразование Мёбиуса – матрица M = 
1

0 1 0
1 1 1 1

Теорема 5. Преобразование матрицы – инволюция (M = M −1 )


L
~at = fx
x6t

L L L L L
Доказательство. fx = as = as = [(#x : s 6 x 6
x6t x6t s6x s,x:s6x6t S
t)%2]as = at
1. s 66 t =⇒ #x = 0
2. s = t =⇒ #x = 1, s = x = t
3. s 6 t1 s 6= ts – нечётное число раз ксориться. z различных разрядов,
z 6 1 2z

 
1
1
Пример. 
1 a11 = 1, a01 = 0, a10 = 0, a00 = 1

0
xy ⊕ 1 – штрих Шефера

1.6 Схемы из функциональных элементов (Boolean


Circuts)
Определение 17. Топологической сортировкой называется отображе-
ние ϕ : V → {1, . . . , n} u 6= v =⇒ ϕ(u) 6= ϕ(v) uv ∈ E =⇒ ϕ(u) <
ϕ(v)

14 ГЛАВА 1. 1 КУРС
Теорема 6. Ациклический ориентированный граф имеет топологиче-
скую сортировку.

Лемма 4. Если G ациклический граф, то существует вершина, из ко-


торой не выходит рёбер

Доказательство леммы. Возьмём вершину: если




Доказательство теоремы. n = 1 дадим единственной вершине номер 1


n > 1 возьмём вершину из которой нет рёбер , дадим ей номер n и удалим
её из графа. Граф от этого не стал иметь циклов, поэтому по индукционно-
му предположению мы можем занумеровать оставшиеся n−1 элементов 

Вершины, в которых нет рёбер называются x1 , x2 , . . . , xn . Дальше идут


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

x1
∧ ¬
x2
x3 h. . .i
out
1 ∨
=⇒
xn
2

Рис. 1.1: sceme

x ⊕ y = (x ∧ ¬y) ∨ (¬x ∧ y)
Дерево разбора легко превращается в схему.

ГЛАВА 1. 1 КУРС 15

Теорема 7. Не существует формулы len(φ) = O(n) для ⊕n в {∧, ∨, ¬}

В схеме мы можем пересипользовать то, что в формуле пришлось бы по-


вторять.
B – базис

Теорема 8. Функцию f можно задать формулой в базе B ⇐⇒ f


можно представить схемой

Определение 18. Сложностью функции f в базисе B sizeB (f ) =


min число функциональных элементов в схеме.

Определение 19. Глубина схемы определяется рекурсивно: глубина


входов – 0, глубина вершины – максимум из глубины входящих + 1
depthB (f ) – минимальная глубина схемы для функции.

Теорема 9. B1 , B2 – базисы.
∃c ∀f sizeB1 (f ) 6 c · sizeB2 (f )

Доказательство. B2 = {b1 , b2 , . . . , bn }
bi выразим через B1
C 6 max sizeB1 (bi )
bi ∈B2

(оптимальная схема может быть лучше, поэтому 6) 

Теорема 10. То же самое про глубину

Следствие 2. size(f ) без базиса – асимптотическое поведение не за-


висящее от базиса (по теоремам при переходе к другому базису всё
отличается в константу)

Следствие 3. c1 sizeB2 (f ) 6 sizeB1 (f ) 6 c2 sizeB2 (f )


Размер функции с точностью до константы не зависит от базиса

16 ГЛАВА 1. 1 КУРС
1.7 Конкретные схемы для логических опера-
ций
Числа храниться в виде двоичного кода. Занумеруем в двух числах биты:
x0 , . . . , xn , y0 , . . . , yn

Побитовое И – n элементов ∧ принимающие соответствующие разряды.

z0 = x0 ∧ y0 . . . zn = xn ∧ yn

Размер схемы: n глубина: 1 size = n depth = 1

Побитовое ИЛИ – так же. Любая побитовая операция – так же.

Арифметические операции – не так же. Биты начинают зависеть друг от


друга.

Сложение двух битов: заведём два выходных бита: low = a⊕b high = a∧b.
Такая схема называется неполным сумматором. Неполным, потому что из
него не собрать сумматор для целых чисел. Для второго бита понадобиться
сложить биты чисел и ещё бит переноса. Но сумма трёх битов, к счастью,
все ещё помещается в два бита 1 + 1 + 1 = 3 = 112

a, b, c low = ⊕3 (a, b, c) high = med3 (a, b, c) – полный сумматор. Первому


биту на перенос подаётся 0, а для остальных будут складываться соответ-
ствующие биты и перенос с предыдущих битов. Другое название – линейный
сумматор.

size = n depth = n

x y 0
x0 y0 ⊕
x1 y1 c1

Рис. 1.2: sum

ГЛАВА 1. 1 КУРС 17
0 0 0 k (kill)
0 1 x p (propogate)
1 0 x p
1 1 1 g (generate)

1\ 2 k g p
k k g k
a(bc) = (ab)c = abc – композиция ассоциативна!
g k g g
p k g p

Схема композиции: принимает четыре значения, выдаёт два. Имеет кон-


стантную глубину.

(Дальше жесть, которую я не могу нарисовать, но суть в том, что раз оно
ассоциативное, то мы можем запилить двоичное дерево и делать всё за
радостный логарифм.)

size = O(n) depth = O(log n) – Двоичный каскадный сумматор. Лучше


сделать нельзя.

−y = (∼ y) + 1 отрицательные числа храняться как дополнение +1

x − y = x + ( y) + 1. Отрицание y сделать легко, но как добавить ещё 1? Но


у нас есть нулевой перенос в нулевой разряд. Давайте сделаем его c0 = 1

1 0 1 1
1 1 0 1
1 0 1 1
0 0 0 0
1 0 1 1
1 0 1 1

Умножать двоичные числа в стлбик просто. Схема даже имеет название


Матричный умножитель

Дерево Уоллиса: Во-первых превратим сумму трёх чисел в сумму двух.


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

1.8 Линейные программы


18 ГЛАВА 1. 1 КУРС
Определение 20. x1 , x2 , . . . , xn – переменные
xn+1 , xn+2 , . . . , xn+t – дополнительные t переменных.
Для базиса (например ∨, ∧, 6):

xn+1 = x2 ∨ x7
xn+2 = ¬x4
xn+3 = xn+1 ∧ xn+2
..
.
.

В дополнительных переменных разрешается одна функция из базиса


применённая к предыдущим переменным.

Пример. Сделаем ⊕
x1 , x2

x3 = ¬x1
x4 = ¬x2
x5 = x1 ∧ x4
x6 = x2 ∧ x3
x7 = x5 ∨ x6
.

Теорема 11. ∃ схема из функциональных элементов длины t ⇐⇒ ∃


линейная программа длины t

Доказательство. Если на схеме задать топологическую сортировку (про-


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

Замечание. Линейных программ больше, чем схем из функциональных


переменных:

ГЛАВА 1. 1 КУРС 19
( (
x3 = ¬x1 x3 = ¬x2
и приводят к одному результату и одной схеме,
x4 = ¬x2 x4 = ¬x1
но это различные линейные программы
{↓} – базис.
n2 · (n + 1)2 · . . . · (n + t − 1)2 6 (n + t)2t

Лемма 5. Схем из t функциональных переменных 6 (n + t)2t


n
2n 2n
 2·2
3n Схем c 6 n + 3n
3n

n 2·2n
(n+ 23n ) 3n
2n
α6 22n
– для функций, которые можно реализовать за 3n элементов
2n
2 2n 2 2n 2
   
log2 α 6 3n log2 n + 3n − 2n = 2n 3n log2 n + 3n − 1 6 2n 3n · n − 1 6
− 31 2n
1 n
 2n
α 6 2− 3 2 6 1

3
2
→ 0, n → ∞
2n
∃n0 : n > n0 =⇒ n + 3n 6 2n

n
2
Теорема 12. ∀c > 0 g(n) 6 3n ∃n0 : n > n0 , то (доля функций от
n аргументов, которые можно реализовать с помощью g(n)) 6 c
Или (доля функций . . .) → 0, n → ∞

Доказательство. f (x1 x2 . . . xk yk+1 . . . yn )


Рассмотрим таблица, где по горизонтали указывается набор x-ов, а по вер-
тикали – y
x1 ⊕ y2 ⊕ y3
0 0 1 1
0 1 0 1
0 0 1 1 0
1 1 0 0 1
Разобьём таблицы на горизонтальные полосы длины s
Столбцы a ∼j b – равны в j полосе – отношение эквивалентности
2k
Число полос p = s

∃ не более чем 2s классов эквивалентности.


Для полосы j и маски m gjm – значения маски в полосе, за её пределами
–0

20 ГЛАВА 1. 1 КУРС
Теперь возьмём мультиплексор ( n входов, 2n выходов, 1 на выходе с числом
(x1 . . . xn )2 ). Выделим в нём полосу j, в неё проorим те значения, которые
могут быть 1
p
W
f (x1 . . . xk , yk+1 . . . yn ) = gjmcj
j=1

2k 2n
Суммарно: 2k + 2k+s + 2n−k + 2n−k ·

s + 2n−k + 2n−k = O 2k+s + s

Теперь возьмём k = log2 s, а s = n − 2 log2 n


n n n
2k+s + 2s = 2n−log n + n·2 2log n = O 2n
2

Определение 21. Алфавит Σ – любое непустое конечное множество.


Последовательность символов: Σ2 Σ3 . . . Σk =: Σ∗ – множество всех
S
k=0
слов (или подстрочек) над алфавитом Σ

Σ0 = {ε}

α, β – два слова.

Определение 22. αβ – конкатенация Σ∗ × Σ∗ → Σ∗


α ∈ Σk β ∈ Σl γ = αβ ∈ Σk+l
(
α[i] ,i 6 k
γ[i] =
β[i − k] , i > k

Свойства конкатенации:

1. (αβ)γ = α(βγ)

2. αε = α = α

Структуру с ассоциативностью и нейстральным элементом называют моноидом

Определение 23. Σ, Π – алфавиты


Обобщённым кодом φ называется функция

ϕ : Σ∗ → Π∗ .

ГЛАВА 1. 1 КУРС 21
Определение 24. Код называется декодируемым (или однозначным),
если α 6= β =⇒ ϕ(α) 6= ϕ(β)
Или, что то же самое, ϕ – инъективная функция.

Замечание. zip : Σ∗ → Σ∗ – однозначное декодируемый. Не требует, что-


бы любая последовательность символов была валидным кодом, в который
могло что-то зашифроваться.
jpeg : Σ∗ → Σ∗ – сжатие с потерями. Когда декодируем, получаем другой
файл. Несколько файлов могут сжаться в один код.
png – сжатие без потерь
Транслитерация фамилий в паспорте A → A C→S Ч → CH

Определение 25. Разделяемый код: каждый символ кодирует отдель-


но ϕ : Σ → Π∗
ϕ(c1 c2 c3 . . . cn ) = ϕ(c1 )ϕ(c2 ) . . . ϕ(cn )

На время будем считать Σ = Π

Утверждение 5. Не существует кода Σ∗ → Σ∗ , который не увеличи-


вает любой текст, а некоторые уменьшает

Доказательство. Длины 0 меньше точно незакодировать


Длины 1 не можем опять.
Длины 2, опять та же проблемы, все тексты меньше уже заняты. 

Замечание. Но zip то всё сжимает..


( zip архив точно не сожмёт дальше)
S – строка. Хотим построить для неё оптимальный код. Какой?
Σ = {c1 , c2 , . . . , cn } pi – количество вхождений ci в S
k
ϕ : Σ → B∗ – двоичный код. li = len(ϕ(ci )) len(ϕ(s)) =
P
li pi
i=1

• Префиксный код
• код Хаффмана
• неравенство Крафта-МакМиллана

22 ГЛАВА 1. 1 КУРС
Определение 26. ϕ – префиксный код, если

∀a, b ∈ Σ ϕ(a) не префикс ϕ(b).

a 0
Пример. b 00 Это не префиксный код, потому что a префикс b
c 11

a 0
b 00
c 11
Это уже префиксный код
0 0 10 10 11 11 11 10 0
a a b b c c c b a

Лемма 6. Префиксный код однозначно декодируемый

Можно строить дерево двоичного кода.

0 1

a
0 1

b c

Рис. 1.3: tree

Сиволам, которые встречаются чаще, хотелось бы выдать меньший код

Задача 1. Префиксный код, Σli pi → min

ГЛАВА 1. 1 КУРС 23
Лемма 7 (1). ∃ дерево оптимального, когда два символа с минималь-
ным pi являются братьями на максимальной глубине.

Доказательство. Рассмотрим дерево, расммотрим две минимальные вер-


шины. Не может быть, чтобы брата не было (иначе у минимальной вершины
можно было бы отрезать последний символ, оставив код префиксным.
Если два брата соотвествуют минимальным pi – всё.
Если нет, pi , pj – минимальные pk , pl – самые глубокие
pi , pj – два самых минимальных =⇒ pj 6 pk , pj 6 pl
pk , pl – два самых глубоких =⇒ li 6 lk ]quadlj 6 ll
P P
lt p t = lt pt + pi li + pj lj + pk lk + pl ll
t t6=i,j,k,l

lt0 pt =
P P
lt pi + pj lk + pj ll + pk li + pl lj
t t6=i,j,k,l

Их разность = pi (li − lk ) + pj (lj − ll ) − pk (li − lk ) − pl (lj − ll ) 

a b c
Пример.
2 2 3
a = x0 b = x1
Пусть мы объединили a и b в один символ x
aabbcccc = xxxxccc
P P P P
pi li = pi li + px lx = pi li + pa (la − 1) + pb (lb − 1) = pi li −
a,b→x i6=x i6=x i(a,b)отдельно
pa − pb

Пример. Код Хаффмана

Теорема 13 (Неравенство Крафта-МакМиллана). S c1 . . . ck


Можно построить однозначно декодируемый двоичный код слов li то-
гда и только тогда, когда
k
X
s−li 6 1.
i=1

Доказательство.
⇐= l1 6 l2 6 . . . lk
2−l1 > 2−l2 > . . . > 2−lk

24 ГЛАВА 1. 1 КУРС
a b c d e
1 2 2 3 7
0 1 0 1
3 5
1
0
1
8
0
13

Рис. 1.4: haff

2−l1 + . . . + 2−li −1 < 1


2 × 2li

=⇒ Пусть есть префиксный код. Запишем в листья его дерева 2−d , d –


глубина. После этого запишем в узлах сумму детей. Тогда в корне
будет число 6 20 = 1

Теперь пусть его однозначно декодируемый код. 0 и 1 заменим на a и


b, чтобы они не интерпретировались как числа.

1 → aba
c2 → ab
..
. → aa
cn → bbb

Сложим их (aba + ab + aa + bbb)k = abaaba . . . aba + abab . . . ab + . . . +


bbbbbb . . . bbb nk слагаемых.

L = max li максимальная длина слова в сумме – kL

Подставим a = 12 b = 21 в равенство

( 2−li )k = длины от 1 до kL и все слова различны


P

(слова длины 1) + (слова длины 2) + . . . + (слова длины kL)

Для i каждое слово вычислится в ( 12 )i и они все различны, т.е. их


максимум 2i , значит скобка не превышает 1
P −li k
Значит 2 6 kL∀k

ГЛАВА 1. 1 КУРС 25
Если сумма слева > 1, то там растущае экспонента и она обгонит
линейно растущую, значит сумма 6 1, что и требовалось.

2−l1 2−l1 2−li

0 1
1
2

Рис. 1.5: отрезки




Замечание. Код Хаффмана – оптимальный префиксный =⇒


Пусть есть код с буквами a, b и букв a очень много
0 aaaaaaaaaa
10 a
11 b

1.9 Арифметическое кодирование


c1 , c2 , . . . , cn – символы, которые встречаются f1 , f2 , . . . , fn раз
fi = L – длина текста, который мы хотим закодировать
P

fi
pi = L
4 2 1
abacaba pa = 7 pb = 7 pc = 7

Алгоритм: l = 0, r = 1 Делим в пропорциях pi -ых (порядок не важен, но


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

26 ГЛАВА 1. 1 КУРС
1. 2−q 6 r − l
⇐= −q 6 log2 (l − r)
⇐= q > − log2 (l − r)
Но также q 6 d− log2 (l − r)e
QL Q L
L pi
l − r = i=1 pci = p
i=1 i
Q  n
L
ppi i = −L
P
− log2 (l − r) = −L log2 i=1 pi log2 pi
i=1
n
pi log2 pi – энтропия
P
q 6 ΘL, Θ =
i=1

1.9.1 RLE-кодирование
Running length encoding. abbbbaaaaabbbbbb 1a4b5a5b

1.9.2 MTF-кодирование
Move to front
abbbbaaaaabbbbbccccccccaa
a b c
0 1 2
a → 0, b → 1 но мы перемещаем b в начало
b a c
b → 0, b → 0, . . . , b → 0, a → 1, a → 0 . . . , b → 1, b → 0 . . . , c → 2, c → 0
0100010000100002000000020 – резкий переход по частотам в сторону 0
→ bzip2 – BWT Barrows Wheeler Transform :
abacaba$ $
$avacaba
a$abacab
aba$abac
acaba$ab
abacaba$
ba$abaca
bacaba$a
caba$aba
последний столбец – результат abcb$aaa
Text → BWT → MTF → AE/Haff

ГЛАВА 1. 1 КУРС 27
1.9.3 LZ77-78
abacaba
abac(4, 3) – отступи на 4 назад и повтори 3.
ababababc ab(2, 2)(4, 4)c ab(2, 6)c
a 0
b 1
c 2

ab 3
ba 4
ac 5
ca 6
aba 7
a$ 8
010230

1.10 Избыточное кодирование


1.10.1 бит чётности
Например перед каждыми 8 битами будет стоять бит чётности и если его
значение не совпадает с чётностью 8-ю битов, то будет понятно, что память
повредилась.. После этого

Определение 27 (расстояние Хэмминга). Пусть мы пользуемся ко-


дирование постоянной длины.
H(x, y) – количество позиций i : x[i] 6= y[i]
H(001101, 101000) = 3

Замечание. А расстояние ли оно? Вспомним матан


1. d(x, y) > 0
2. d(x, y) = 0 ⇐⇒ x == y
3. d(x, y) = d(y, x)
4. d(x, y) + d(y, z) > d(x, z)
количество > 0
ноль, только если нет различий
Определение не учитывает порядок x, y

28 ГЛАВА 1. 1 КУРС
Если вхоидит в d(x, z), то входит в d(x, y) + d(y, z)
Всё выполняется, и правда расстояние

→ Bn
P
Пример. ex :
^ minP H(c(x), c(y)) – эта величина характеризует насколько далеко нахо-
x,y∈
дятся кодовые слова, т.е. насколько много нужно повредить, чтобы полу-
чить другой символ

Определение 28. Код обнаруживает d ошибок, если min H(c(x), c(y)) =


x,y∈Σ
d(c) > k
Если повредить 6 k битов в c мы получим c0 , но оно не может быть
корректным, значит мы точно поймём, что слово повредилось.

Пример. c : B8 → B9
d(c) = 2 Хотя бы два бита будут различаться. А значит такой код обнару-
живает одну ошибку, согласно определения

Определение 29. Код c исправляет k ошибок, если d(c) > 2k


Внесём в слово a 6 k ошибок. Получим a0 . Кодировщик может вос-
становить символ, найдя код, отличающийся от a0 не более, чем в k
битах
H(a, a0 ) 6 k H(a, b) 6 k H(a, b) 6 2k?!!

Утверждение 6. Если код c исправляет k ошибок, тогда он обнару-


живает 2k ошибок

  7. Если код c обнаруживает k ошибок, тогда он ис-


Утверждение
правляет k2 ошибок

Утверждение 8. ∀k∃ код, который обнаруживает k ошибок


Σ |Σ| 6 2n
Сделаем код ci = i2 (в двоичной записи)
Повторим k + 1 раз каждый бит
c : Σ → B (k+1)n – он может обнаружить k ошибок

ГЛАВА 1. 1 КУРС 29
Определение 30. Bn , x ∈ Bn , r ∈ Z+
Шаром S(x, r) = {y|H(x, y) 6 r}
S(0000, 1) = {0000, 0001, 0010, 0100, 1000}

Определение 31. V (n, r) – объём шара с радиусом r


объём не зависит от центра – n

Замечание. V (n, r) = |S(x, r)|∀x ∈ Bn


S(x, r) = {z|z = t ⊕ x ⊕ y, t ∈ S(y, r)}
H(x, z) = |{i|x[i] 6= z[i]}|
y = x ⊕ (x ⊕ y)
t = z ⊕ (x ⊕ y)
H(y, t) = |{i|y[i] 6= t[i]}| = |x[i] ⊕ (x[i] ⊕ y[i] 6= z[i] ⊕ (x[i] ⊕ y[i])| = . . .

Лемма 8. x 6= y ∈ Σ c – код, исправляющий k ошибок


То S(c(x), k) ∩ S(c(y), k) 6= 0
z ∈ S (c(x), k) ∩ S (c(y), k)
H(c(x), z) 6 k H(c(y), z) 6 k =⇒ H(c(x), c(y)) 6 2k

Теорема 14 (граница Хемминга). c – код для m -символьного алфа-


вита, исправляющий k ошибок
c : Σ → Bn , то m · V (n, k) 6 2n

Пример. 3 символа. испр. 1 ошибку. m = 3?


3 · V (3, 1) 6 23
3 · 4 66 23
log2 n + log2 V (n, k) 6 n
log2 m log2 V (n,k)
n 61− n
log2 V (n,k)
первое – скорость передачи, которая уменьшилась на n

Доказательство. Bn x1 = c(1) испр. k ошибок


S(x1 , 2k) запрещены, т.к. слишком близко к x1

30 ГЛАВА 1. 1 КУРС
x2 ∈ Bn \ S(x1 , 2k) x2 = c(2)
 2 
x3 ∈ B n \
S
S(xi , 2k) 
i=1

Теорема 15 (граница Гильберта). Если m · V (n, 2k) 6 2n , то ∃ код


c : Σ → Bn , исправляющий 2k ошибок |Σ| = m

n(n−1)
V (n, r) = 1 + n + 2 + . . . + Cnr
r = 1 V (n, 1) = 1 + n
m(n + 2) 6 2n
2n
m6 n+1

1.10.2 Код Хемминга


Занумеруем биты от 1 до n
Биты в коде Хемминга делятся на информационные и контрольные. Кон-
трольные – те, у которых номер позиции это степень двойки.
Пусть |Σ| 6 128
Код постоянной длинны → B7
Контрольному биту соответствуют позиции Pi = {j|j&2i = 2i }. контроль-
ный бит равен ксору всех битов его множества.

Теорема 16. Код Хемминга исправляет одну ошибку

Доказательство. ∀x, y H(x, y) > 3


Различается > 3 инф бита – ОК
различается 1 инф бит =⇒ > 2 Различных контрольных бит. Суммарно
расстояние хотя бы 3.
Различаются 2 инф бита. Пусть у них номера j1 , j2 У них есть хотя бы
одна позиция, в которой они различаются (j1 ⊕ j2 6= 0), значит есть кон-
трольный бит, учитывающий одно и не учитывающий другой. Хотя бы s-ый
контрольный бит различаются =⇒ 

Замечание. В коде 12 . . .s−1


2 . . . |2//s

2s − 1 − s – инф. бит s контрольных


2s − 1 − s + s 6 2s − 1 – здесь неравенство выполняется как равенство.

ГЛАВА 1. 1 КУРС 31
log(m) + log(n + 1) 6 n

32 ГЛАВА 1. 1 КУРС
Глава 2

Комбинаторика

Раздел математики, изучающий комбинаторные объекты. Объекты, кото-


рые наделены какой-то внутренней структурой.
Основные задачи:
1. подсчёт и перечисление комбинаторных объектов
2. эффективная нумерация комбинаторных объектов. (мы можем хотеть
эффективно их закодировать)

2.1 Вектора фиксированной длины


Последовательность из элементов какого-то алфавита Σ фиксированной
длины n
Σn Bn
Выполним задачу подсчёта. Сколько у нас двоичных векторов? 2n
Для произвольного алфавита k n
Задача перечисления: лексикографический порядок

2.2 Лексикографический порядок


Пусть есть множество A

X∗ = X k – все последовательности
S
k=0

пусть X линейно упорядочено, т.е. есть 6 и любые два элемента можно


сравнить

33
A ⊆ X∗
Перенесём порядок с X на A. Этот перенос называется лексикографическим
порядком на A
a = x1 x2 . . . xl
b = y1 y2 . . . yt
xi , yi ∈ X
Будем говорить a 6lex b, если ∃i 6 min(l, t), что:
1. i 6 j =⇒ xi = yj
(
i=l
2.
i < t, xi+1 < yi+1

000 - 0
001 - 1
010 - 2
011 - 3
Для n = 3
100 - 4
101 - 5
110 - 6
111 - 7

aa
ab
ac
ba
Σ = {a, b, c} n = 2 bb
bc
ca
cb
cc

000 - 0
001 - 1
Пример. Двоичные вектора без двух единиц подряд. 010 - 2
100 - 4
101 - 5
Посчитаем их.
n fn
0 ε 1
1 0,1 2
>1 0.. или 10... Fn = 0Fn−1 + 10Fn−2 – Фибоначчи

34 ГЛАВА 2. КОМБИНАТОРИКА
2.3 Перестановки
(permutations)
ai ∈ {1, 2, ..., n} i 6= j =⇒ ai 6= aj

123
132
213
231
312
321

Σ = {4, ◦, ?}
4◦?
4?◦
◦4?
◦?4
?4◦
?◦4
Подсчёт: на первую позицию можно поставить n элементов, на вторую n−1
и так далее получается n(n − 1)(n − 2) . . . 2 · 1 = n!
Пусть те же условия, но позиций не n, а k

n < k
 ∅
n=k перестановки

n>k ...

12
13
14
n = 4, k = 2 21
23
24
...

Это так называемые размещения (arrangements)


n!
Akn = n(n − 1)(n − 2) . . . (n − k + 1) = nk = (n − k + 1)k = (n−k)!

n! = nn

2.4 Сочетания
{1, 2, . . . , n}

ГЛАВА 2. КОМБИНАТОРИКА 35
Выбираем из этих элементов k и составляем из них множество {a1 , a2 , . . . , ak } ai 6=
aj
n = 3, k = 2 {1, 2} {1, 3} {2, 3}
12 И 21 это разные размещения, но одно сочетание {1, 2}
Чтобы подсчитать воспользуемся канонизацией:
из 7 по 4 {2, 3, 5, 6} {3, 6, 2, 5} . . . 24 способа записать одно и то же сочета-
ние
Один из этих способов будем использовать как канонический. Путь это
будет ествественное возрастающее представление {2, 3, 5, 6}
123
124
125
134
135
n=5, k=3
145
234
235
245
345
Перечислили. Теперь займёмся подсчётом
An,k – множество. a ∼ b, если они задают одно и то же сочетания (sort(a) =
sort(b) set(a) = set(b))
Cn,k = An,k |∼
У каждого класса эквивалентности получается одинаковый размер
 
|An,k | n
|Cn,k | = k! n!
= k!(n−k)! = Cnk = = биномиальный коэффициент =
k
= n choose k
     
n n−1 n−1
Cn,k = Cn−1,k−1 ∪ Cn−1,k = + – треугольник Пас-
k k−1 k
каля
1
1 1
1 2 1
1 4 41
1 4 641
1 5 10 10 5 1

2.5 Код Грея

36 ГЛАВА 2. КОМБИНАТОРИКА
Определение 32. Код Грея на двоичных веторах:
перечисление g1 g2 . . . gn H(hi , gi+1 ) = 1

000
001
011
010
Пример. n = 3
110
111
101
100
концы тоже на расстоянии 1. Такой код называется циклическим

Теорема 17. Для любого n существует циклический код Грея B n


n=1: 01
n→n+1
Запишем два раза n один сверху вниз, другой наоборот. Затем припием
к первому 0, а к другому 1

Пример. Целые числа от 1 до n кратные 3 или 5


C = C3 ∪ C5
C3 = n3 C5 = n5
   

Некоторые считаются два раза

2.6 Формула включений-исключений


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

C = C3 + C5 − C15

|A∪B∪C| = |A∪B|+|C|−|(A ∪ B) ∩ C| = |A|+|B|+|C|−|A∩B|−|(A∩C)∪(B∩C)| = |A|+|B|+|C|−|A∩B|−|A∩C|−|B

Теорема 18 (Формула включений-исключений). A1 , A2 , . . . , An


n
(−1)|I|+1
S P T
Ai = Ai
i=1 ∅6=I⊆{1,2,...,n} i∈I

ГЛАВА 2. КОМБИНАТОРИКА 37
n
S n−1
S n−1
S n−1
S
Доказательство. Ai = Ai ∪ An = Ai +|An |− (Ai ∩ An ) =
i=1 i=1 i=1 i=1

(−1)|I|+1 (−1)|I|+1
P T P T
Ai + |An | + Ai ∩ An =
I⊆{1,2,...,n−1} i∈I J⊆{1,2,...,n−1} i∈J
(∗) 

2.7 Алгоритмы ..
Двоичные вектора фиксированной длины B n
Как нам сгенерировать все эти вектора?
gen:
gen all, starting with 0
gen all, starting with 1
Это рекурсия, мы каждый раз делим на два.
Другой взгляд: обход в глубину двоичного дерева.
gen(p) # p - prefix
if len(p) == n:
print(p)
return
gen(p+[0])
gen(p+[1])

main:
gen([])
Отметим, что эта программа печатает (перечисляет) вектора в лексигогра-
фическом порядке.
Перестановкаи
n = 3123, 132, 213, 231, 312, 321
Когда мы выбираем первый элемент, остаётся выбор только из двух, а на
следующей итерации нет выбора – один возможный вариант.
gen(p):
if len(p) = n:
print(p)
return
for i = 1 .. n:
if i not in p:
gen(p+[i])
Строчки из 0 и 1 длинны 6 n

38 ГЛАВА 2. КОМБИНАТОРИКА
n
Bn
S
k=0

ε
0
00
000
001
01
010
011
Печатаем теперь не только в листе, а везде
gen(p) # p - prefix
print(p)
if len(p) = n:
return
gen(p+[0])
gen(p+[1])

main:
gen([])
В общем случает. Мы хотим сгенерировать объект
gen(p) # p - префикс комбинаторного обекта
if (p - к.о.):
print(p)
for (c in Sigma) # перебор в возрастающем порядке
if (p+[c] -- префикс к.о.)
gen(p+[c])
Сочетания Σ = {1, 2, . . . , n}. Характеризуются двумя числами: n, k
if len(p) = n:
print(p)
return
for (c = 1 или (p[-1]+1) .. n-k+len(p)+1)
if p != [] and c <= p[-1]
continue
if n-c < k-len(p)-1
continue # break
gen(p+[c])
Правильные скобочные последовательности.
Есть последовательность открывающихся и закрывающихся скобочек. И
выполнены условия:
1. На любом префиксе #(−#) > 0

ГЛАВА 2. КОМБИНАТОРИКА 39
2. В конце баланс – 0
() (())
((())) (()()) (()) () ()(()) () () ()
Σ = {(, )} (<)
gen(p, bal):
if len(p) = 2n:
print(p)
return
if bal+1<= 2n-len(p)-1:
gen(p+[(], bal+1)
if bal>0:
gen(p+[)], bal-1)

main:
gen([], 0)
Оптимизация: храним префикс в общем массиве a и будет брать его срезы
нужной длины. Кроме того создадим массив used – маска какие мы элемен-
ты взяли. а какие ещё нет
gen(p) # p -- длина префикса
if len(p) == n:
print(a)
return
for i = 1 .. n:
if !used[i]:
used[i] = true
a[p]=i
gen(p+1)
used(p[i]) = false

Задача 2. Хотим получить k-ый (в лексикографическом порядке) объ-


ект (нумерация с 0)

gen(p)
if p == n
if k = 0
print(a)
k--
return
for i = 1 .. n:
if !used[i]
if k >= (n-p-1)!:
k-=(n-p-1)!

40 ГЛАВА 2. КОМБИНАТОРИКА
else:
used[i] = true
a[p] = i
gen(p+1)
used[i]=false
return
gen(p) # p - префикс комбинаторного обекта
if (p - к.о.):
if (k=0):
print(p)
return
k--
for (c in Sigma) # перебор в возрастающем порядке
if (p+[c] -- префикс к.о.)
t = количество к.о. с префиксом p+[c]
if k >= t:
k-=t
else:
gen(p+[c])
return
gen(p+[c])
j k
В перестановках мы можем оптимизировать ещё дальше и делать c = k
(n−p−1)! +
1 k = k%(n − p − 1)!
Из n берём m
k

gen(p):
if p == m:
print(a)
return
for c = 1(a[p-1] ... n-m+p+1:
t = Из n-c выбираем m-p-1
if k >= t:
k-=t
else:
gen(p+1)
Теперь будем выполнять обратную задачу: искать номер по объекту.
gen(p):
if p -- к.о.:
if p == z:
res = k
else:
k++

ГЛАВА 2. КОМБИНАТОРИКА 41
for (c in Sigma):
if (p+[c] -- префикс к.о):
gen(p+[c])
Применим “изоморфный” алгоритм предыдущему:
gen(p) # p - префикс комбинаторного обекта
if (p - к.о.):
if p = z:
res = k
return
k++
for (c in Sigma)
if (p+[c] -- префикс к.о.)
t = количество к.о. с префиксом p+[c]
if (p+[c] -- префикс z):
gen(p+[c])
return
else:
k += t
Следующий к.о.
к.о. лежит в упорядоченном множестве к.о. Следующий имеет с этим какой-
то общий префикс
1. максимальный общий префикс, который можно сохранить, увеличив
след. p
2. Увеличить следующий элемент минимальным образом, заменив a на
b
3. Дальше к этому элементу p + b нужно приписать минимальную воз-
растающую последовательность
3576421

2.8 Лекция
Перестановки n(n − 1)(n − 2) . . .
n(n−1)...(n−k+1)
Сочетания k! = n!
k!(n−k)!

Скобочные последовательности
((())) (()()) (())() ()(()) ()()()

2.8.1 Рекуррентные соотношения


Сочетания

42 ГЛАВА 2. КОМБИНАТОРИКА
     
n n−1 n−1
= + – Делим на две группы
k k−1 k

Перестановки Pn = Pn−1 · n

Правильная скобочная последовательность:

1. У любого префикса неотрицательный баланс.

2. В конце баланс 0

Скобочная последовательность из n открывающихся скобок: длина 2n

Если мы на месте k, у нас есть какой-то неотрицательный баланс b > 0

Ak,b – количество префиксов правильных скобочных последовательностей,


длины k, баланс в конце b

Тогда нужное нам количество Cn = A2n,0

Так можно изобразить последовательность (())(). Такие графики называ-


ются путями Дика (Dyck Path)

Ak,b = Ak−1,b+1 + Ak−1,b−1

A0,0 = 1

ГЛАВА 2. КОМБИНАТОРИКА 43
Сочетания тоже можно представить сеткой (рисунок выше)
Ak,b = Ak−1,b+1 + Ak−1,b+1
| {z }
b>0

A0,0 = 1
Если убрать внешние скобки, то у оставшейся последовательности пони-
зиться график Дика по балансу. Найдём индекс (первый), в котором баланс
стал −1 – i. Тогда можно представить последовательность в виде (псп)псп,
где псп – правильная скобочная последовательность. Эти две последова-
тельности никак не связаны друг другом, значит их можно отдельно по-
считать и перемножить Ci−1 Cn−i
n
P n−1
P
Cn = Ci−1 Cn−1 = Ci Cn−i−1
i=1 i=0

Cn – число Каталана: 1, 1, 2, 5, 14, 42, . . .


Деревья:
1. Двоичные деревья. . . . Числа Каталан
2. Разбиения
5=1+1+1+1+1
5=5
5=4+1 (=1+4)
5=3+2
5=3+1+1
5=2+2+1

44 ГЛАВА 2. КОМБИНАТОРИКА
5=2+1+1+1

Pn,k – количество разбиения числа n на слагаемые 6 k


Pn = P n, n
P0,k = 1
Pn,k = Pn−k,k + Pn,k−1
Можно лучше: Пентагональная теорема Эйлера
3. Разбиения с различными элементами. Числа Белла Bn
 
n
S2 (n, k) = – количество разбиений n-элементного множества на
k
k непустых множеств, Числа Стирлинга 2 рода
     
n n−1 n−1
= +k· – один в отдельном множестве + один в
k k−1 k
множестве с друзьями.
4. Разбиение на циклы. Для перестановки можно
  нарисовать граф цик-
n
лов. Число Стирлинга 1 рода S1 (n, k) =
k
     
n n−1 n−1
= + (n − 1)
k k−1 k

2.9 Группы действий


Размещение – список из k элементов из первых n чисел (в списке различные)
nk
Сочетание – облачко из k разных элементов от 1 до n
n n!

k = k!(n−k)!

Введём отношение: равенство с точностью до порядка. 4317 ∼ 3714, потому


что можно переставить – поменять порядок.
An,k /∼ = Cn,k
{1, 2, . . . , n}k
[1, 2, 3, 4] – 4! = k! в классе эквивалентности
[1, 1, 1, 1] – 1! 6= k!

Определение 33. Группоид – Множество X с бинарной операцией


· : X × X → a · b → ab

ГЛАВА 2. КОМБИНАТОРИКА 45
Определение 34. Полугруппа – группоид с ассоциативностью. (a · b) ·
c = a · (b · c)

Определение 35. Моноид – полугруппа с единицей: ∃e : ∀a·e = e·a =


a
e – нейтральный элемент, нейтральное действие.

Пример. a → 3a Можем ли мы “отменить” это действие? Иногда можем


3a → a (умножаем на 1
3 )
a · 0 = 0 Узнать что было до этого мы не можем. Нет обратного действия.

Определение 36. К Моноиду добавляется существование обратного


элемента к любому элементу. ∀a∃a−1 a · a−1 = a−1 · a = e

Пример. (Z, +)
(R, +)
(R, ·) – НЕ группа
(R \ {0}) – группа
(Z, ·) – НЕ группа
({1, −1}, ·) – группа

Определение 37. G – группа.


1. g(hk) = (h)k
2. ∃e eg = ge = g
3. ∃g −1
: gg −1 = g −1 g = e
X – объекты.
gx = y ∈ X G×X →X
1. h(gx) = (hg)x
2. ex = x
В таком случае говорят G действует на X

Пример. X = R2 G = R \ {0}, · g(x, y) 7→ (gx, gy)

46 ГЛАВА 2. КОМБИНАТОРИКА
Пример. X = R2 G = [0, 2π), +mod2π – действие группы поворотов на
множество точек

Пример. X = B n G = Sn – группа перестановок n элементов.


x = 11001 и применим к нему перестановку p = 31245
Получим y = px = 10101 (первый идёт на позицию 3, второй на позицию 1,
третий на позицию 2, 4 и5 остаются на месте)

Определение 38. Группа перестановок:


ab
Хотим (ab)x = a(bx)
x[i] → b[i] → a[b[i]
c = ab c[i] = a[b[i] – это перестановка. Все b[i] различны, а значит и
все a[b[i] различны
Даёт ли это нам группу
a[(b[c[i]])] a(bc)
a[b[(c[i])]] (ab)c
Ассоциативность есть.
ei = i (ae)i = aei = ai
ea = ae = a
b = a−1
ba = e b[a[i] = if ori = 1 . . . n

Замечание. Умножение перестановок – действие Sn на Sn

Пример. X = T n
G = {0, . . . , n − 1}, +mod n }
[1, 2, 3, 4] свинутая 3 раза [2, 3, 4, 1
X G – группа, которая действует на X
∼G – эквивалентны с точностью до G
x ∼G y ∃g ∈ G y = gx
1. x ∼G x x = ex
2. x ∼G y y = gx x = g −1 y y ∼G x
3. x ∼G y y ∼G z y = gx z = hy = hgx

ГЛАВА 2. КОМБИНАТОРИКА 47
X/G – классы эквивалентности, орбиты

Пример. 1. g(x, y) = (gx, gy). Коллинеарные вектора – орбиты


2. Повороты: Круги – орбиты

Определение 39. Неподвижные точки:


g Ig = {x|gx = x} – элементы, на которые g действует никак.
g 6= 1 Ig = {0, 0} g = 1 Ig = R2
T n , Sn Iπ = все элементы внутри цикла равны.

n = 6 сдвиг на 3. – три цикла.


n = 7 сдвиг на 3 – один большой цикл.
В общем случае для сдвигов число циклов это НОД(n, k)

P
|Ig |
Теорема 19 (Лемма Бернсайда). |X/G| =
g∈G
|G|

Доказательство. Построим таблицу G × X и выкинем все столбцы, кроме


одного для каждой орбиты.
z = g1 x x = g1−1 z
z=z z = g2 g1−1 z
...
z = gk g1−1 z
{h|hz = z} = St z – действия, которые не меняют объект. Именно столько
раз будет повторятся объект в столбце.
P P P P P P
|G| · |X/G| = |St x| = [gx = x] = [gx = x] = |Ig |
x∈X x∈X h∈G g∈G x∈X g∈G
(
1 , hx = x
[hx = x] =
0 , иначе


Пример. X – размещения, Sk – перестановки


X/Sk – сочетания
|Ik | |X|
|X/Sk | = k! = k!

48 ГЛАВА 2. КОМБИНАТОРИКА
Пример. n = 3 B 3
123 8
132 4
213 4
231 2
312 2
321 4
8+4+4+2+2+4
6 =4 000 001 011 111

Для ожерелий 2НОД(n,k)


G – группа, G ⊆ Sn – группа всех перестановок n элементов / симметриче-
ская группа
X = An |A| = k
g∈G g·x x = [x1 , x2 , . . . , xn ], x ∈ A
x1 → xg(i)

kc(g)
P P
|Ig |
Теорема 20 (Теорема Пойя). |X/G| =
g g
|G| = |G| =∗

n
si ki
P

∗= i=1
si – число перестановок с i циклами в G
|G|
 
n
Если G = Sn si =
i
 
P n i
 k
i i
|X/G| = n!

Пример. G = сдвиги k c(g) g = сдвиги на i c(g) = gcd(n, i)


kgcd(n,i)
P
i
n

2.10 Конструируемые комбинаторные объекты


A – множество комбинаторных объектов. Пусть комбинаторные объекты a
имеют веса w(a)
an = | {a ∈ A|w(a) = n} |
f (A1 , A2 , . . . , an ) 7→ B
bn зависит только от ai,j

ГЛАВА 2. КОМБИНАТОРИКА 49
Пример (Дизъюнктное объединение). A, B – два множества комбинатор-
ных объектов, без общих объектов. A ∩ B = ∅
f (A, B) = A ∪ B = C – функция конструирования an , bn |C| = cn = an + bn
t A = {1, 2, 3, . . .} B = {1, 2, 3, . . .} A ∪ B = A = B
A t B – объединение с учётом возможного повторения элементов. Вообще,
получается мультимножество.
Рассмотрим множество пометок M = {a, b}
A t B = A × {a} ∪ B × {b}

Пример (Декартово произведение, конструкция пары). A, B A×B =


C z ∈ C z = (x, y) x ∈ A, y ∈ B
z = (x, y) w(z) = n = w(x) + w(y) =⇒ w(y) = n − w(x)
n
P
cn = ai · bn−i
i=0

В предыдущем примере w(a) = w(b) = 0 – “краска шарика не добавляет


ему веса”

Пример (Последовательность). A a0 = 0
∞ ∞ ∞
Ai = A0 ∪ A × Ai−1 = A0 ∪ A × Ai = A0 ∪ A × C
S S S
C = SeqA =
i=0 i=1 i=1

C = A0 ∪ A × C A0 = E = {[]} w([]) = 0 A×C =B


c0 = e0 + b0 = 1
n
P n
P
n < 0 cn = en + bn = 0 + ai cn−i = ai cn−i
i=0 i=1

Пример. ak вагонов веса k


Сколько способов составить поезд суммарного веса n
n = 0 c0 = 1
Pn
n > 0 cn = ai cn−i
i=1

Пример. U = { } u0 = 0 u1 = 1 u2 = u3 = . . . = 0
V = U × U = {( , )} v0 = 0, v1 = 0, v2 = 1, v3 = v4 = . . . = 0
Z = Seq U = {[], [ ], [ , ], [ , , ], . . .}
z0 = 1, z1 = 1, z2 = 1, . . .
n
ui zn−i = 1 · zn−1 = zn−1 . По индукции zn = 1
P
z0 = 1 zn =
i=1

50 ГЛАВА 2. КОМБИНАТОРИКА
Z + = Sqe+ U Seq Z + 2
{[], [[ ]] , [[ ] , [ ]] , [[ , ]] , . . .}
{[], [1], [1, 1], [2], [1, 1, 1], [1, 2], [2, 1], [3], }

Пример. Set MSet


A Set A – множества X ⊆ A 2A
B = Set A bn
Кононизация X = {x1 , x2 , . . . , xl }
bn,k – количество множеств веса n, содержащие объекты A веса 6 k
bn = bn,n
bP
kc
n  
ak
bn,k = bn−kt,k−1
t=0 t
Set Z + = {{}, {1}, {2}, {1, 2}, {3}, {1, 3}, {4}, . . .} – множество разбиений чи-
сел на различные слагаемые
M Set Z + = {{}, {1}, {1, 1}, {2}, {1, 1, 1}, {1, 2}, {3}, {1, 1, 1, 1}, . . .} – множе-
| {z } | {z }
2 3
ство разбиений чисел на слагаемые
bnkc
 
P ak + t − 1
bn,k = bn−kt,k−1
t=0 t

Пример (Сочетания с повторениями). { , }


TODO дописать
Напоминание операций конструирования:
1. Дизъюнктное объединение cn = an + bn
n
2. Прямое произведение cn =
P
ak bn−k
k=0
n
3. Seq, * cn =
P
ak cn−k
k=1

bP
kc
n

4. Set, MSet cn = cn,n ak ak+t−1


 
cn,k = t Cn−kt,k−1 t Cn−kt,k−1
t=0

2.11 Деревья с n вершинами


1. Помеченные/Непомеченные (непомеченное: 1-2 помеченные 1-2, 2-1
(разные корни))

ГЛАВА 2. КОМБИНАТОРИКА 51
2. С порядком на детях: Есть понятие первого, второго, .. сына

Без порядка, двоичный, троичный

Дерево T = U × SeqT – с порядком на детях.

F = SeqT (Forest)
n
P
tn = uk fn−k = fn−1
k=0

u1 = 1 u0 = u2 = u3 = . . . = 0
n
P
fn = tk fn−k
k=1

t − n = fn−1 fn−k = tn−k+1


n
P
fn = tk tn−k+1
k=1

n−1
P
tn = tk tn−k
k=1

Нет порядка: T = U × M SetT F = M SetT

tn = fn−1 всё ещё

kc
bP
n

tk +s−1

fn,k = s fn−ks,k−1
k=0

B = { , } – бусинки: чёрные и белые

C = CycB C4 = 6

A CycA – множество циклов из множества A


l−1
P
n
P Ik,l
k=0
Cn = n
l=1

Количество циклов в перестановке gcd(l, k)

Длина цикла l
gcd(l,k)

A Ak = A × Ak−1

Sn,k – число последовательностей длины k веса n


n
P
Sn,k = ai sn−i,k−1
i=1

S n·gcd(l,k) ,g
l

52 ГЛАВА 2. КОМБИНАТОРИКА
n l−1
Итого: Cn = 1
P P
l · S ng
l ,g
l=1 k=0
.
g=gcd(l,k)
ng ..l

2.12 Помеченные объекты


Объекты-атомы. Атомы с пометками составляют новые объекты. У атом
всегда разные пометки.
Пусть есть два помеченных к.о., состояющие из атомов. Составим из них
новый к.о.
Новое “переразмечивание” называется согласованным с изначальными дву-
мя, если порядок атомов внутри частей по возрастанию остаётся таким же.
Разберём операторы конструирования на помеченных объектов:
1. A × B = C [ ∈ A, ∈ B]
n
n
P 
cn = k ak bn−k
k=0
n
2. Seq U = S n n
P  
sn = k uk sn−k = 1 usn−1 = n · sn−1
k=1

SeqU – перестановки
3. Set = MSet (не может быть двух одинаковых.
Последовательности длины k Ak
sn,k – количество последовательностей длины k веса n
n
n
P 
sn,k = i ai sn−i,k−1 sn,1=an
i=1

C = Set A
n
P sn,k
cn = k!
k=1
k
Set U U s 
0

6 n
k=
n,k=
n!

k=n
sn,k = n · sn−1,k−1
n!
Cn = n! =1
n
sn,k
Циклы для помеченных объектов: CycA = C
P
cn = k
k=1
(k)
Размещения по k: An = U k × Set U
Akn = k! nk × 1 = nk k! = (n−k)!
n!
 

ГЛАВА 2. КОМБИНАТОРИКА 53
(k) sn,k
Cn = Set=k U × Set U Set=k Cn,k = k! – множества равно k
Разбиения на множества:
 
n
Set =k
Set U – разбиения на k множеств
+
k
Разбиение на циклы:
 
n
Set =k
Cyc U – разбиение на k циклов
+
k
Set Set+ U – число Белла Bn
Set Cyc+ U – перестановки n!

54 ГЛАВА 2. КОМБИНАТОРИКА

Вам также может понравиться