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

 

(2c) 
Дискретная математика 0.88 

Корнеева Н. Н. 
Конспект по вопросам экзамена 
 

Авторы: 
Дарья Ковтун 
Никита Карамов 
conspects.karamoff.dev 

Задонатить: 
На сайте вы можете найти реквизиты для перевода денег. В комментарии к 
платежу пишите “За конспект по дискретке” 

   

О найденных неточностях можно сообщать в личку или любой другой удобный для вас канал связи 
1. 

Ориентированные графы. Простые орграфы. Инцидентность и 


смежность. 
Ориентированный граф​ — пара (V , E ) . V — множество вершин, E — множество 
дуг. 

Дуга​ — упорядоченная пара вершин (v i , v j ) ; v i , v j ∈ V . v i — начало дуги, v j — 


конец дуги. 
Петля​ — дуга из вершины в саму себя; дуга (v i , v i )  
Кратные дуги​ — несколько дуг с одинаковыми началами и одинаковыми концами. 

Простой орграф​ — ориентированный граф без петель и кратных дуг. 

Инцидентность​ — отношение между вершиной и дугой, когда вершина 


принадлежит дуге / дуга содержит вершину.  

Смежность​ — отношение между двумя вершинами или двумя дугами. когда 


вершины инцидентны одному ребру или дуги инцидентны одной вершине 
соответственно. 

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

Пути и простые пути, контуры и простые контуры 


Путь ​— последовательность вершин и рёбер v 1 e1 v 2 e2 v 3 e3 ... v k+1 , такая, что два 
соседних элемента инцидентны, при этом каждое ребро ei ориентировано от 
вершины v i к вершине v i+1 . 
v 1 — начало пути. v k+1 — конец пути. 

Простой путь​ — путь, в котором все вершины различны. 

Контур​ — путь, где первая и последняя вершины совпадают. 

Простой контур​ — контур, в котором все вершины различны. 

Теоремы о существовании простых путей/контуров в графе с 


путями/контурами 
Лемма.​ Если существует путь из вершины u в вершину v , то существует и 
простой путь между этими вершинами. 


Доказательство.​ Рассмотрим путь v 0 e1 v 1 e2 ... en v n , v 0 =/ v n . Возьмём некую 
вершину v i на данном пути. Если она встречается на пути больше, чем один раз, 
то значит, она является частью контура v i ei+1 v i+1 ... v j=i . Удалим этот контур. 
Получившийся путь также будет проходить между вершинами v 0 и v n , но 
вершина v i будет в нём встречаться уже однократно. 

Начнём данный процесс удаления контуров с вершины v 0 и будем повторять его 


для каждой вершины, пока не дойдём до v n . Получившийся путь будет содержать 
все вершины лишь один раз, а значит будет простым. ​Лемма доказана. 

 
Лемма.​ Любой контур содержит простой контур, причём каждая вершина и дуга 
этого контура принадлежат некоторому простому контуру. 

Доказательство.​ Рассмотрим путь v 0 e1 v 1 e2 ... en v n , v 0 = v n . Возьмём некую 


вершину v i на данном пути. Если она встречается на пути больше, чем один раз, 
то значит, она является частью контура v i ei+1 v i+1 ... v j=i . Удалим этот контур. 

Получившийся путь также будет проходить между вершинами v 0 и v n , но 


вершина v i будет в нём встречаться уже однократно. 

Вершина v i , которая осталась, является частью простого контура, который мы 


ищем. Рассмотрим контур, который мы удалили. Если он простой, то все вершины, 
которые в нём были, являлись частями простого контура. Если он не простой, то 
алгоритм применяется рекурсивно — мы ищем в этом под-контуре простой контур. 

Начнём данный процесс удаления контуров с вершины v 1 и будем повторять его 


для каждой вершины, пока не дойдём до v n = v 0 . Получившийся контур будет 
содержать все вершины лишь один раз, а значит будет простым. ​Лемма доказана. 

Взаимодостижимость вершин и сильно связные орграфы 


Вершина v называется ​достижимой​ из вершины u , если существует (u, v ) -путь. 

Если существует и (u, v ) -путь, и (v, u) -путь, то вершины u и v называются 


взаимодостижимыми.​  

Если любые две вершины графа называются взаимодостижимыми, то такой граф 


называется ​сильно связным.​  

Критерий сильно связной ориентируемости графа 


Критерий сильно связной ориентируемости.​ Связный граф ориентируем только 
если каждое его ребро содержится минимум в одном цикле. 


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

Докажем теперь в обратную сторону. Выберем любой цикл C и ориентируем его 


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

Теорема Роббинса 
Теорема Роббинса.​ Связный неориентированный граф обладает сильно связной 
ориентацией только тогда, когда он не содержит мостов. 

Доказательство.​ Если граф содержит мост, то это ребро можно ориентировать 


лишь в одну сторону: u → v или v → u , а значит, между двумя компонентами 
связности есть путь только в одну сторону. 

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


2. 
Способы задания орграфов 
1. Матрица инцидентности 
Размерность: p × q ​( p — количество вершин, q — количество рёбер) 
Элемент aij равен: 
○ 1​, если вершина под номером i — начало дуги под номером j  
○ 0​, если вершина под номером i не инцидентна дуге под номером j  
○ -1​, если вершина под номером i — конец дуги под номером j  
2. Матрица смежности 
Размерность: p × p  
Элемент aij равен: 
○ 1​, если вершина под номером i смежна вершине под номером j  
○ 0​, если вершина под номером i не смежна вершине под номером j  

Полустепени исхода и захода 


Полустепень исхода​ — количество дуг, выходящих из вершины 

Полустепень захода​ — количество дуг, входящих в вершину 

Теорема о суммах полустепеней исхода и захода 


Сумма полустепеней исхода и захода равна удвоенному количеству дуг в графе. 

Доказательство.​ Так как каждая дуга инцидентна двум вершинам, она добавляет 
2​ в сумму степеней графа — ​1​ для исхода и ​1​ для захода. ​Теорема доказана. 

Путь в орграфе 
Путь длины k — путь, содержащий в себе k ​. 

Матрица смежности и свойства ее степеней 


Если матрица смежности возведена в степень l , то её элементы под номером ij  
будут равны количеству путей длины l из вершины с номером i в вершину с 
номером j . 

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


Теорема.​ Пусть A = aij — матрица смежности без петель. Декартова степень этой 
матрицы: Al = y ij , l ∈ ℕ . Тогда y ij — количество путей длины l из вершины i в 
вершину j . 

Доказательство ​(по индукции)​. 


1. Для l = 1 утверждение верно. Действительно, первоначальная матрица и 
содержит пути длины ​1​. 
2. Положим, утверждение верно для l − 1 . Тогда имеем матрицу Al−1 = eij , 
содержащую пути длины l − 1 . 
n−1
3. Проверим для l . Согласно правилу умножения матриц, y ij = ∑ eis asj . Тогда 
s=0
каждый элемент матрицы будет содержать количество путей длины l — 
такие пути будут состоять из путей длины l − 1 и ещё одного ребра между 
последними двумя вершинами. 

Теорема доказана. 

   


3. 
Взвешенный орграф. Длина пути во взвешенном орграфе. 
Расстояние между вершинами. 
Взвешенный орграф​ — простой орграф, для дуг которого задана функция w . 
Значение w(u, v ) — ​вес​ дуги между вершинами u и v . 
n
Длиной пути​ v 0 v 1 v 2 ... v n называется сумма ∑ w(v i−1 , v i ) — сумма весов дуг пути. 
i=1

Расстоянием​ из v в w называется число d(u, v ) — длина кратчайшего пути из 


вершины v в вершину w . Если между вершинами нет пути, d(v, w) = ∞ . 

Алгоритм Дейкстры нахождения минимального пути в 


орграфе от фиксированной вершины 

Алгоритм 
Будем искать кратчайшие пути из вершины u . 

Шаг 1.​ Пометим l(u) = 0 , l(v i ) = ∞ , где v i — каждая из вершин, кроме u . На данном 
этапе все вершины не посещены. 
Шаг 2. ​Выберем непосещённую вершину с наименьшей меткой. Если таких 
несколько, выбираем любую. Пусть выбранная нами вершина — z . 
Для каждой непосещенной вершины x , в которую есть путь из z , в случае, если 
l(z) + w(z, x) < l(x) , меняем метку: l(x) = l(z) + w(z, x) . Вершина z посещена. 
Шаг 3 и т. д. ​Выполняем операцию до тех пор, пока не останется непосещённых 
вершин, достижимых из u . 

В конце работы алгоритма значение l(v) для каждой вершины v будет равно 
длине кратчайшего пути из вершины u в вершину v . 

Доказательство работы 
Теорема.​ Пусть G — ориентированный взвешенный граф с неотрицательными 
весами рёбер. s — стартовая вершина. Тогда после выполнения алгоритма 
Дейкстры l(u) будет равна кратчайшему расстоянию из s в u для любого u . 

Доказательство​ (по индукции)​.  

1. На первом шаге выбирается s с меткой l(s) = 0 . Действительно, кратчайшее 


расстояние из вершины в саму себя равно ​0​. 
2. Положим, это верно для n шагов. 
3. n + 1 -й шаг. Выбираем вершину u . Докажем, что l(u) = d(s, u) — кратчайшему 
расстоянию из s в u . 

Очевидно, что для любой вершины v всегда выполняется l(v) ≥ d(s, v ) , ведь 
алгоритм не может найти путь короче кратчайшего. 
Пусть P — кратчайший путь из s в u , v — первая непосещённая вершина 
на этом пути, z — последняя перед v посещённая вершина. Раз P — 
кратчайший путь, то часть этого пути — путь из s в z — тоже кратчайшая. 
Тогда очевидно, что d(s, v ) = d(s, z ) + (z, v ) . 
По предположению индукции, в момент выбора вершины z выполнялось 
l(z) = d(s, z ) . Значит, согласно алгоритму, вершина v получила метку 
l(v) ≤ l(z) + (z, v ) = d(s, z ) + (z, v ) = d(s, v ) . Учитывая l(v) ≥ d(s, v ) , получаем 
l(v) = d(s, v ) .  
На этом шаге мы выбрали вершину u , а значит она имеет наименьшую метку 
среди непосещённых вершин: l(u) ≤ l(v) ​⇒​ l(u) ≤ d(s, v ) ≤ d(s, u) . Учитывая, 
что l(u) ≥ d(s, u) , имеем l(u) = d(s, u) . 
Когда все вершины посещены, алгоритм заканчивает работу. В этот момент 
l(v) = d(s, v ) для любой v . ​Теорема доказана. 

Пример 
Найдём кратчайшие пути из вершины под номером ​1​ для данного графа: 

Шаг 1.​ Пометим вершины: l(1) = 0, l(v i ) = ∞  

Шаг 2.​ Посещаем (отмечаем цветом) вершину с наименьшей меткой — ​(1)​. 


Помечаем (пишем длину пути) непосещённые (серые) вершины, в которые входит 


дуга из ​(1)​ по свойству l(x) = min( l(1) + w(1, x), l(x) ) — это вершины ​(2)​, ​(3)​, ​(6)​. 

Шаг 3.​ Посещаем следующую вершину с наименьшей меткой — ​(2)​. Помечаем по 
свойству непосещённые вершины, куда есть дуга из ​(2)​: ​(4)​. 

Шаг 4.​ Посещаем вершину с наименьшей меткой — ​(3)​. Помечаем по свойству 


непосещённые вершины, куда есть дуга из ​(3)​: ​(4)​, ​(6)​. 


Шаг 5.​ Посещаем вершину с наименьшей меткой — ​(6)​. Помечаем непосещённые 
вершины, куда есть дуга из ​(6)​: ​(5)​. 

Шаг 6.​ Посещаем вершину с наименьшей меткой — ​(4)​. Помечаем непосещённые 


вершины, куда есть дуга из ​(4)​. 

Шаг 7.​ Посещаем последнюю вершину с наименьшей меткой ​(5)​. Непосещённых 


вершин с дугой из ​(5)​ нет. 

10 
Финал. 

 
Метки вершин равны длинам кратчайших путей из вершины под номером ​1​. 

Алгоритм Флойда нахождения минимального пути в орграфе 


между всеми вершинами 

Алгоритм (и его доказательство) 


Пусть вершины графа пронумерованы от 1 до n и введено значение dkij — длина 
пути из вершины под номером i в вершину под номером j , содержащего в себе 
только вершины под номерами от 1 до k . 

Очевидно, что d0ij = w(i, j ) , если такое ребро существует, в противном случае 
длина обозначается ∞ . 

Алгоритм работает итерационно, находя значения dkij для k ∈ [1, n] .  


Существует два варианта значения для некого dkij на основе dk−1
ij : 

1. Кратчайший путь из i в j не содержит в себе вершину k .  


Тогда dkij = dk−1
ij . 
2. Существует более короткий путь из i в j , который содержит в себе вершину 
k . Длина этого пути — длина кратчайшего пути из i в k плюс длина 
кратчайшего пути из k в j .  
Тогда dkij = dk−1 k−1
ik + dkj . 

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


двух. 

Алгоритм последовательно вычисляет все значения dkij для всех k ∈ [1, n] . В 


конце работы алгоритма значение dnij будет равно длине кратчайшего пути из 
вершины под номером i в вершину под номером j . 

11 
Пример 
Найдём кратчайшие пути между всеми вершинами в данном графе: 

Шаг 1. ​Составим таблицу значений для d0 (она же матрица смежности). Выделим 


строку и столбец, которые будем рассматривать в этой итерации: 

i​\​j  1  2  3  4  5  6 

1  0  7  9  ∞  ∞  14 
2  ∞  0  10  15  ∞  ∞ 
3  ∞  ∞  0  11  ∞  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 
 
Заменим значения в невыделенных ячейках, если сумма значений в выделенных 
ячейках в соответствующих строке и столбце меньше. На данном шаге таких 
ячеек нет, так как через вершину ​1​ не может быть хода — у неё нет входящих дуг. 
Итоговой таблицей будет таблица для d1 . 

Шаг 2. ​Выделим строку и столбец, которые будем рассматривать в этой итерации: 

i​\​j  1  2  3  4  5  6 

1  0  7  9  ∞  ∞  14 
2  ∞  0  10  15  ∞  ∞ 
3  ∞  ∞  0  11  ∞  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 

12 
 

Заменим значения в невыделенных ячейках, если сумма значений в выделенных 


ячейках в соответствующих строке и столбце меньше. Например, мы заменим 
значение в ячейке на 1 строке в 4 столбце — ​15 + 7 = 22 < ∞​. Итоговой таблицей 
будет таблица для d2 . 

Шаг 3. ​Выделим строку и столбец, которые будем рассматривать в этой итерации: 

i​\​j  1  2  3  4  5  6 

1  0  7  9  22  ∞  14 
2  ∞  0  10  15  ∞  ∞ 
3  ∞  ∞  0  11  ∞  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 
 

Заменим значения в невыделенных ячейках, если сумма значений в выделенных 


ячейках в соответствующих строке и столбце меньше. Например, мы заменим 
значение в ячейке на 2 строке в 6 столбце — ​10 + 2 = 12 < ∞​. Итоговой таблицей 
будет таблица для d3 . 

Шаг 4. ​Выделим строку и столбец, которые будем рассматривать в этой итерации: 

i​\​j  1  2  3  4  5  6 

1  0  7  9  20  ∞  11 
2  ∞  0  10  15  ∞  12 
3  ∞  ∞  0  11  ∞  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 
 

Заменим значения в невыделенных ячейках, если сумма значений в выделенных 


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

13 
значение в ячейке на третьей строке в пятом столбце — ​11 + 6 = 17 < ∞​. Итоговой 
таблицей будет таблица для d4 . 

Шаг 5. ​Выделим строку и столбец, которые будем рассматривать в этой итерации: 

i​\​j  1  2  3  4  5  6 

1  0  7  9  20  26  11 


2  ∞  0  10  15  21  12 
3  ∞  ∞  0  11  17  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 
 

Заменим значения в невыделенных ячейках, если сумма значений в выделенных 


ячейках в соответствующих строке и столбце меньше. На данном шаге таких 
ячеек нет. Итоговой таблицей будет таблица для d5 . 

Шаг 6. ​Выделим строку и столбец, которые будем рассматривать в этой итерации: 

i​\​j  1  2  3  4  5  6 

1  0  7  9  20  26  11 


2  ∞  0  10  15  21  12 
3  ∞  ∞  0  11  17  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 
 

Заменим значения в невыделенных ячейках, если сумма значений в выделенных 


ячейках в соответствующих строке и столбце меньше. Например, мы заменим 
значение в ячейке на первой строке в пятом столбце — ​11 + 9 = 20 < 26​. Итоговой 
таблицей будет таблица для d6 = dn . 

Финал.​ Мы получили таблицу кратчайших расстояний между всеми вершинами 


графа 

14 
i​\​j  1  2  3  4  5  6 

1  0  7  9  20  20  11 


2  ∞  0  10  15  21  12 
3  ∞  ∞  0  11  11  2 
4  ∞  ∞  ∞  0  6  ∞ 
5  ∞  ∞  ∞  ∞  0  ∞ 
6  ∞  ∞  ∞  ∞  9  0 
   

15 
4. 
Транспортная сеть и поток 
Транспортная сеть​ — ориентированный граф, в котором выделены две вершины 
— источник s ​(source)​ и сток t ​(target)​. При этом источник имеет нулевую степень 
захода, сток — нулевую степень исхода, и каждая дуга имеет положительную 
пропускную способность. 

Пропускная способность​ дуги = вес дуги. Обозначается как c(u, v ) или как c(e)  

Поток​ — функция f : V × V → ℝ , обладающая следующими свойствами для 


вершин u и v : 

1. f (u, v ) ≤ c(u, v ) — поток через дугу не может превысить пропускную 


способность 
2. f (u, v ) =− f (v, u) — антисимметричность потока 
3. ∑ f (u, v ) = 0 — поток не остаётся в дуге 
u,v∈V , u=s,
/ v=t
/

Величина потока​ — сумма потоков из источника: |f | = ∑ f (s, w) . Она же равна и 


w∈V

сумме потоков в сток: |f | = ∑ f (w, t) . 


w∈V

Разрез, пропускная способность разреза, величина потока 


через разрез 
Разрез​ — пара множеств вершин ( A и B ) такая, что 

1. A ⋃ B = V (каждая вершина сети содержится в разрезе) 


2. A ⋂ B = 0 (каждая вершина содержится только в одной части разреза) 
3. s ∈ A, t ∈ B (источник и сток лежат в разных частях разреза) 

Пропускная способность разреза​ — сумма пропускных способностей дуг разреза 


из A в B : ∑ c(u, v ) . 
u∈A, v∈B

Поток через разрез​ — сумма потоков дуг разреза из A в B минус сумма потоков 
дуг разреза из B в A : ∑ f (u, v ) − ∑ f (v, u) . 
u∈A, v∈B u∈A, v∈B

16 
Примеры 

— сеть 

Один из возможных разрезов: {s, 1, 2}{3, 4, t} : 

Пропускная способность этого разреза равна c(s, 3) + c(1, t) + c(2, 3) + c(2, 4) = 43  


​ ыделены цветом​) 
(дуги между разрезами в

Свойства потока 

Равенство величин потока через любой разрез 


Лемма.​ Величина потока через любой разрез одинакова и равна потоку из 
источника. 

Доказательство.​ Пусть (A, B ) — произвольный разрез. Вершина j — любая 


вершина из A (кроме источника). Докажем, что при перемещении вершины j из 
A в B размер потока между половинами разреза не изменится 

Имеем новый разрез: (A∖{j}, B ⋃ {j}) . Его поток изменится в соответствии с 


изменёнными дугами, а именно:  
f (A∖{j}, B ⋃ {j}) = поток через новый разрез 

f (A, B ) + ∑ f (i, j ) − ∑ f (j, i) −  


i∈A i∈A

− ( ∑ f (j, k ) − ∑ f (k, j )
k∈B k∈B
) = стали учитываться дуги A → j , но перестали учитываться дуги j → B  

17 
f (A, B ) + 2 ∑ f (i, j ) + 2 ∑ f (k, j ) = свойство антисимметричности потока  
i∈A k∈B

f (A, B ) + ∑ f (i, j ) = объединяем суммы  


∀i∈V

f (A, B ) + 0 =  
так как поток не остаётся на дугах сети

f (A, B ) . 

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


Перенося по одной вершине из A в B в конечном итоге получаем разрез 
({s}, {s}) . Соответственно, f ({s}, {s}) = f (A, B ) . ​Лемма доказана. 

Перенося тем же образом вершины из B в A , мы можем доказать и равенство 


потока из источника и потока в сток. 

Связь величины потока через разрез с пропускной способностью 


разреза 
Лемма.​ Пусть (A, B ) — разрез сети. Тогда f (A, B ) ≤ c(A, B )  

Доказательство. 
c(A, B ) − f (A, B ) = ∑ c(i, j ) − ∑ f (i, j ) = ∑ (c(i, j ) − f (i, j )) ≥ 0 ​(каждый поток 
i∈A, j∈B i∈A, j∈B i∈A, j∈B
ограничен пропускной способностью) 
Лемма доказана. 

Случай равенства величины потока и пропускной способности разреза 


Лемма.​ Если f (A, B ) = c(A, B ) , то поток f максимален, а разрез (A, B ) минимален. 

Доказательство.​ Для любых двух разрезов одной сети выполняется 


f (A1 , B 1 ) = f (A2 , B 2 ) ≤ c(A2 , B 2 ) . Значит, если разложить пропускные способности 
всех разрезов и размеры потоков на оси Ox , то у них может быть максимум одна 
точка пересечения. Она и будет определять минимальный разрез и 
максимальный поток. ​Лемма доказана.   

18 
5. 
Максимальный поток и минимальный разрез.​ ​Задача о 
нахождении максимального потока 
Максимальный поток​ — поток максимальной величины. 

Минимальный разрез​ — разрез с минимальной пропускной способностью. 

Задача о нахождении максимального потока заключается в нахождении потока 


максимальной величины в заданной сети. 

Алгоритм Форда-Фалкерсона и его обоснование 


Увеличивающий путь​ — неориентированный путь, у которого начало — s , конец — 
t , и выполняются условия: 
○ на всех “прямых” дугах: f < c  
(поток можно увеличить) 
○ на всех “обратных” дугах: f > 0  
(поток можно уменьшить) 

Если в сети существует увеличивающий путь, то поток в этой сети можно 


увеличить на наименьшее среди значений c − f на прямых дугах и f на обратных 
дугах. После нахождения этого значения поток на прямых дугах увеличивается на 
него, а поток на обратных дугах — уменьшается. После этого путь перестаёт быть 
увеличивающим, и мы ищем другой путь. 

После увеличения потока сохранились его свойства: 


○ он не превышает пропускную способность 
○ он не стал отрицателен на некоторых дугах 
○ в вершины по прежнему входит столько же, сколько и выходит 
- → → — входит больше, но и выходит больше 
- → ← — входит одновременно больше и меньше 

Когда не осталось увеличивающих путей из источника в сток, то максимальный 


поток найден. Осталось найти соответствующий разрез. 

В A войдёт источник и все вершины, до которых из источника есть 


увеличивающий путь. В B войдёт сток и все остальные вершины. 

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

19 
Рассмотрим прямую дугу i → j , i ∈ A, j ∈ B . На ней поток равен пропускной 
способности, иначе путь был бы увеличивающим, и вершина i входила бы в A . 
Таким образом, поток на прямых дугах равен пропускной способности разреза. 

Рассмотрим обратную дугу l ← k , l ∈ A, k ∈ B . На ней поток равен нулю, иначе 


путь был бы увеличивающим, и вершина k входила бы в A . Таким образом, поток 
на обратных дугах равен нулю. 

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

Теорема о существовании максимального потока в любой 


сети 
 

   

20 
6. 
Алфавит, слова, язык 
Алфавит​ — любое конечное непустое множество символов — букв.  
Обозначается за X . 

Слово​ над X — любая конечная последовательность “букв” из алфавита X . 

X * — множество всех слов над алфавитом X . 

Язык​ над X — множество слов над алфавитом X ; любое подмножество X * . 


Обозначается за L . 

Конечный детерминированный автомат (ДКА). Настроенный 


автомат. Способы задания. 
Автомат​ — совокупность следующих пяти параметров: 

○ X — алфавит автомата 
○ S — множество состояний автомата 
○ δ — функция перехода 
○ s1 — начальное состояние 
○ F — множество допускающих состояний 

Автомат ​конечен​, если он имеет конечное множество состояний. 

Автомат ​детерминирован​, если в нём нет переходов по пустым символам, и из 


любого символа по каждому символу алфавита есть переход только в одно 
состояние. 

Автомат ​настроен,​ если у него заданы s1 ∈ S — начальное состояние, и F ⊆ S — 


множество допускающих состояний. 

Конечный детерминированный автомат можно задать: 

1. С помощью таблицы 
Строки в таблице — состояния автоматов. 
Первый столбец — название состояния, следующие ​n​ столбцов — состояния, 
в которые должен перейти автомат по соответствующему символу языка. 
Заголовки столбцов — символы алфавита языка автомата. 
2. С помощью графа 
Автомат — орграф. 
Состояния — вершины, переходы по символам — дуги. 
Допускающие состояния выделяются двойным кружком или квадратом. 

21 
Языки, распознаваемые ДКА 
Язык L распознаётся автоматом A в том случае, когда автомат, начиная работать 
в начальном состоянии, под действием любых слов, принадлежащих языку L , 
приходит в допускающее состояние, а под действием слов, не принадлежащих 
языку L , приходит в недопускающее состояние. 

Примеры языков, распознаваемых и нераспознаваемых ДКА 


L = {a, ba, abbb, bbab} распознаётся ДКА 
L = {aabn | n > 0} распознаётся ДКА 

L = {an bn | n = 0, 1, 2, ...} не распознаётся ДКА ​(об этом далее) 

Любой конечный язык распознается конечным автоматом 


Теорема.​ Любой конечный язык распознается конечным автоматом 

Доказательство.​ Пусть L — некий конечный язык.  

Определим состояния автомата: S = {α | α — начало слова из L} ⋃ S ′ . 


S ′ — завершающее состояние (“мусорка”) 

s0 = λ — пустое слово.  
F = L — допускающие состояния совпадают со словами языка. 

Определим функцию перехода: αδ(x) = { αx, если αx∈S


S ′, если αx∈S
/ } ; S ′δ(x) = S ′  
Таким образом, s1 δ(α) ∈ F ​⇒​ α ∈ L ; s1 δ(α) ∈
/ F ​⇒​ α ∈
/ L  

Теорема доказана. 

Объяснение.​ Если язык конечен, то мы можем создать автомат с состояниями, 


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

{a​n​b​n​|n=0, 1, 2, ...} не распознается конечным автоматом 


Теорема.​ Язык L = {an bn | n = 0, 1, 2, ...} не распознается конечным автоматом. 

Доказательство​ (от противного)​.​ Пусть язык L распознаётся автоматом с 


конечным числом состояний, равным n . 

Рассмотрим разные состояния, в которые придёт автомат при подаче разного 


количества букв a : s1 δ(a), s1 δ(aa), s1 δ(aaa), ..., s1 δ(an ), s1 δ(an+1 ) . Как видим, имеем 

22 
минимум n + 1 случай. Так как количество состояний равно n , делаем вывод, что 
два состояния совпадают. Пусть это состояния s1 δ(ai ) = s1 δ(aj ) . 

Подадим автомату в этих позициях на вход комбинацию bi . С одной стороны 


имеем s1 δ(ai )δ(bi ) = s1 δ(ai bi ) ∈ F . С другой стороны имеем 
s1 δ(aj )δ(bi ) = s1 δ(aj bi ) ∈
/ F . 

Но состояния s1 δ(ai ) и s1 δ(aj ) равны, а значит δ (bi ) должна была привести либо 
однозначно в допускающее состояние, либо однозначно в недопускающее. 
Противоречие; теорема доказана.   

23 
7. 
Различимость и неразличимость слов относительно языка 
Слова α и β называются ​различимыми словом γ относительно языка L , если 
одно из слов αγ и β γ принадлежит языку L , а другое — нет. 
Обозначается α≁β . 

Слова α и β называются не​различимыми​ относительно языка L , если слова αγ и 


β γ либо одновременно принадлежат языку L , либо одновременно не 
принадлежат ему. 
Обозначается α ~ β . 

Класс эквивалентности элемента x (обозначается [x] ) — множество {y | y ~ x} . 

Фактормножество​ — множество классов эквивалентности элементов заданного 


множества. Обозначается X / ~  

Примеры 
L = {a, ab, bba, abbb}  

Слова a и b различимы словом b — ab ∈ L , но bb ∈


/ L  
Слова bbb и aaaa неразличимы — они всегда не принадлежат языку. 

Свойства отношения неразличимости 

Отношение эквивалентности 
Утверждение.​ Отношения неразличимости являются отношениями 
эквивалентности 

Доказательство.  

1. Слово неразличимо с самим собой: α ~ α 


2. Отношение симметрично: α ~ β как и β ~ α  
3. Отношение транзитивно: α~β, β ~γ, α~γ 

Выполняются все свойства отношения эквивалентности, ​что и требовалось 


доказать. 

Устойчивость справа относительно конкатенации 


Утверждение.​ Если α ~ β , то для любого γ : αγ ~ β γ  

Доказательство. ​Пусть α ~ β , θ — приписываемая часть. 

24 
Если (αγ)θ ∈ L , то (α)γθ ∈ L . Тогда имеем (β)γθ ∈ L , то есть (βγ)θ ∈ L . Это 
выполняется для любого θ , а значит αγ ~ β γ , ​что и требовалось доказать. 

Ранг языка 
Ранг языка​ — максимальное количество пар неразличимых слов. Обозначается 
как rk L . 

Критерий распознаваемости языка конечным автоматом 


(теорема Майхилла-Нероуда) 
Теорема.​ Язык L распознаётся конечным автоматом с n состояниями только 
тогда, когда rk L ≤ n . 

Доказательство​ (необходимость)​. ​Пусть L распознаётся конечным автоматом A c 


n состояниями.  

Выберем n + 1 произвольных слов α1 , α2 , ..., αn+1 . Среди них есть неразличимые 


слова, так как среди состояний s1 δ(α1 ), s1 δ(α2 ), ..., s1 δ(αn+1 ) есть равные. Допустим, 
s1 δ(αi ) = s1 δ(αj ) , тогда αi ~ αj . 

Для произвольного γ :  

αi γ ∈ L ⇒​ ​ s1 δ(αi γ) ∈ F , 
αj γ ∈ L ​⇒​ s1 δ(αj γ) ∈ F .  

Значит, количество неразличимых слов не превышает количество состояний 


автомата. ​Необходимость доказана.  

Доказательство​ (достаточность)​. ​Пусть rk L ≤ n . Построим автомат с n  


состояниями, распознающий этот язык.  

S = {[α] | α ∈ X * } — состояния автомата есть классы эквивалентности всех 


возможных слов алфавита. 
s1 = [λ] — начальное состояние есть класс эквивалентности пустого слова 
F = {[α] | α ∈ L} — допускающие состояния есть классы эквивалентности всех 
слов языка. 
[α]δ(x) = [αx] — функция перехода 

Для слова α = x1 x2 ...xk ∈ L : 


[λ]δ(x1 )δ(x2 )...δ(xk ) = [λx1 ]δ(x2 )...δ(xk ) = ... = [λx1 x2 ...xk ] ∈ F , то есть язык 
распознаётся автоматом. ​Достаточность доказана.   

25 
8. 
Базис отношения неразличимости 
Базис​ — множество W ⊆ X * такое, что 
○ любые два слова из W попарно различимы 
○ любое слово из X * , но не W , неразличимо с каким-нибудь словом из W  

Теорема о достаточных условиях для базиса 


W — базис только тогда, когда 
1) все α ∈ W попарно различимы 
2) λ ∈ W  
3) ∀α ∈ W , ∀x ∈ X * ∃β ∈ W : αx ~ β  

Доказательство​ (по индукции)​.  

Построим базис, удовлетворяющий этим свойствам. Достаточно доказать, что в 


таком случае любое слово неразличимо с каким-то словом из базиса. 

1. Пусть длина слова — 0. |α| = 0 ​⇒​ α = λ — пустое слово 


λ ∈ W ​⇒​ αλ ~ λλ  
2. Положим, для |α| ≤ k доказано 
3. |α| = k + 1 . 
Пусть α = β x . |β| = k ; по индукции β ~ γ , где γ — некое слово из базиса 
Очевидно, что β x ~ γ x ​⇔​ α ~ γ x  
По свойству 3) имеем: ∃δ ∈ W : γ x ~ δ  
α ~ γ x ~ δ ∈ W , ​что и требовалось доказать. 

Алгоритм построения базиса и функции перехода 


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

Изначально в автомате одно состояние — λ . Оно является начальным. Алгоритм 


заполнения таблицы таков: 

1. Находим самую верхнюю левую незаполненную ячейку. Пусть она 


находится на строке под словом α в столбце под буквой x . 
2. Проверяем на эквивалентность слово αx и все слова, имеющиеся в базисе. 
Если имеется слово, эквивалентное αx , записываем его в ячейку. 
Если эквивалентного слова нет, записываем в ячейку αx и добавляем это 
слово в базис и в таблицу новой строкой 

26 
3. Повторяем операцию, пока в таблице не останется незаполненных ячеек. 
Строки, названия которых совпадают со словами из языка, объявляем 
допускающими состояниями.   

27 
9. 
Минимальный автомат. Задача минимизации автомата 
Автомат ​связный,​ если каждое его состояние достижимо из начального. 

Автомат ​приведённый​, если все состояния попарно не эквивалентны друг другу. 

Автомат ​минимальный,​ если он одновременно и связный, и приведённый. 

Задача о минимизации автомата сводится к поиску минимального автомата, 


распознающего язык. 

Эквивалентность состояний автомата 


Состояния s и s′ называются ​эквивалентными,​ если 
∀α ∈ X * : sδ(α) ∈ F ⇔ s′δ(α) ∈ F , то есть, под действием одного и того же слова 
они одинаково переходят либо в допускающее, либо в недопускающее 
состояние. 

Алгоритм минимизации автомата и его обоснование 


1. Удаление всех недостижимых состояний. 
2. Выполним разбиение автомата по эквивалентности словами длины 0, то 
есть, разделим состояния на два множества — допускающие и 
недопускающие. 
3. Каждое из этих множеств пробуем так же разбить словами длины 0; 
получившееся разбиение разбиений будет общим разбиением словам 
длины 1. 
4. Продолжаем выполнять разбиения, пока два разбиения не будут совпадать 
(то есть, пока у нас есть возможность выполнять подразбиения). Имеем 
множества эквивалентных состояний автомата. 
5. Из каждого множества выбираем одно состояние и строим автомат из них, 
сохраняя предыдущие связи. 
6. В итоге имеем автомат с достижимыми состояниями, которые между собой 
не эквивалентны.   

28 
10. 
Свойства языков распознаваемых ДКА 

Распознаваемость объединения и пересечения 


Декартово произведение автоматов​ A1 (X, S 1 , δ 1 , s11 , F 1 ) и A2 (X, S 2 , δ 2 , s21 , F 2 ) — 
автомат A3 (X, S 3 , δ 3 , s31 , F 3 ) , где  
○ S3 = S1 × S2  
○ (u, v )δ 3 (x) = (uδ 1 (x), v δ 2 (x)) . 

С помощью декартова произведения автоматов можно построить автомат, 


распознающий: 
○ пересечение языков. Для этого F 3 = F 1 ⋂ F 2  
○ объединение языков. Для этого F 3 = F 1 ⋃ F 2  

Теорема.​ Если языки L и M распознаются конечными автоматами, то их 


объединение и перечесение тоже распознаются конечными автоматами. 

Доказательство.​ Пусть автомат A1 (S 1 , s11 , F 1 ) распознаёт язык L , а A2 (S 2 , s12 , F 2 )  


— язык M . Докажем, что A3 = A1 × A2 распознаёт L ⋃ M и L ⋂ M при 
определённых настройках. 

Положим S 3 = S 1 × S 2 , s13 = (s11 , s12 ) . 

Определим множество допускающих состояний: F 3 = {(u, v ) | u ∈ F 1 ⋁ v ∈ F 2 }  

Тогда имеем: (s1 , s2 )δ(α) = (s1 δ 1 (α), s2 δ 2 (α)) . Это состояние является допускающим в 
случае, если допускающим является s1 δ 1 (α) или s2 δ 2 (α) . То есть, автомат 
распознаёт слово, если оно распознаётся первым или вторым автоматом, что и 
есть ​объединение автоматов​. 

При конфигурации допускающих состояний F 3 = {(u, v ) | u ∈ F 1 ⋀ v ∈ F 2 } мы 


можем получить ​пересечение автоматов.​ ​Теорема доказана. 

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

Доказательство.​ Если язык L распознаётся автоматом (X, S , δ , s1 , F ) , то очевидно, 


что язык L будет распознаваться автоматом (X, S , δ , s1 , F ) . То есть, чтобы 
распознать дополнение языка, следует заменить допускающие состояния на 
недопускающие и наоборот. ​Теорема доказана.   

29 
11. 
Лемма о накачке для языков, распознаваемых ДКА 
Если L распознаётся конечным автоматом, то ∃n ∈ ℕ : ∀α{|α| > n}, α = α1 α2 α3  
выполняется: 
○ α2 =/ λ  
○ α ∈ L ⇒ α1 α2 i α3 ∈ L , i ≥ 1  
○ |α1 α2 | ≤ n  

Простыми словами.​ Если язык распознаётся конечным автоматом, то любое 


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

Доказательство.​ Пусть L распознаётся конечным автоматом с n состояниями. 


α = x1 x2 ...xk — произвольное слово длины k ≥ n . 

Рассмотрим n + 1 различных состояний: s1 , s1 δ(x1 ), s1 δ(x1 x2 ), ..., s1 δ(x1 x2 ...xn ) . Так как 
в автомате n состояний, у нас найдётся минимум два одинаковых. Пусть это будут 
s1 δ(x1 ...xm ) и s1 δ(x1 ...xm+l ) , где m + l ≤ n . 

Делим слово на три части: α1 = x1 ...xm , α2 = xm+1 ...xm+l , α3 = xm+l+1 ...xk .  
Тогда понятно, что s1 δ(α1 ) = s1 δ(α1 α2 ) = s1 δ(α1 α2 i ) . Отсюда получаем 
s1 δ(α1 α3 ) = s1 δ(α1 α2 α3 ) = s1 δ(α1 α2 i α3 ) . 

Слова α1 α2 i α3 приводят автомат в одно и то же состояние. Таким образом, 


выполняются все три требуемых свойства. ​Лемма доказана. 

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


Если для сколь угодно большого числа n найдётся слово α , по длине большее, 
чем n , такое, что при любом делении его на три части α = α1 α2 α3 найдётся i  
такое, что α1 α2 i α3 не будет принадлежать языку, то язык не распознаётся никаким 
конечным автоматом. 

Пример использования следствия для доказательства 


нераспознаваемости языка 
Докажем, что язык {an bn | n = 0, 1, 2, ...} не распознаётся конечным автоматом. 

Выберем большое число n . Увидим, что есть три возможных сценария 


размещения подслова α2 в слове an bn : 

30 
1. α2 находится в “зоне букв ​a”​ : 
aaaaaa​aaaaaaaa​aabbbbbbbbbbbbbbbb 
В таком случае при “накачке”, то есть, при повторении α2 мы увеличиваем 
количество букв ​a,​ но не ​b,​ то есть, слово перестаёт входить в язык. 
2. α2 находится в “зоне букв ​b”​ : 
aaaaaaaaaaaaaaaabbbb​bbbbbbb​bbbbb 
Аналогично первому случаю, при “накачке” мы увеличиваем количество 
букв ​b​, но не ​a,​ то есть, слово перестаёт входить в язык. 
3. α2 находится на стыке “зон”: 
aaaaaaaaaaaa​aaaabbbb​bbbbbbbbbbbb 
В данном случае при “накачке” у нас образуется подслово ​ba​, что 
противоречит языку, то есть, слово вновь не будет входить в язык. 

Таким образом, язык {an bn | n = 0, 1, 2, ...} не распознаётся конечным автоматом. 

31 
12. 
Недетерминированные автоматы (НКА) и распознаваемые 
ими языки 
Отличия ​недетерминированного​ конечного автомата от ​детерминированного​: 
○ возможны переходы по пустым символам ( λ ) 
○ возможно несколько переходов из состояния по одной букве 
○ возможно отсутствие переходов из состояния по некоторой букве 

НКА распознаёт язык, если существует ​хотя бы один​ путь по слову из начального 
состояния в допускающее, то есть, если s1 δ(α) ⋂ F =⊘
/  

Для НКА функция перехода будет иметь вид: δ : S × X → 2S . 

Понятно, что любой ДКА является и НКА. 

Связь между языками, распознаваемыми НКА, и языками, 


распознаваемыми ДКА 
Утверждение.​ Если язык распознаётся НКА, то он распознаётся и ДКА. 

Доказательство.​ Пусть у нас есть НКА A(X, S , δ , s1 , F ) и ДКА A′(X, S ′, δ ′, s1 ′, F ′) . 


Докажем, что они могут быть эквивалентны при определённой настройке. 

Понятно, что мы можем сделать одинаковое начальное состояние: s1 ′ = s1  

Так как в НКА переходы могут идти в несколько состояний, то набор состояний 
ДКА можно представить как множество подмножеств множества состояний НКА: 
S ′ = 2S . 

Допускающими будут те множества состояний, которые содержат допускающие 


состояния НКА: F ′ = {M | M ∈ 2S , M ⋂ F =⊘
/  

Функция перехода реализована обычно: M δ(x) = {sδ ′(x) | s ∈ M }  

Таким образом, мы имеем ДКА с б​о​льшим количеством состояний, однако так же 
распознающий язык, как и обычный НКА. ​Утверждение доказано. 

Алгоритм детерминизации автомата 

Для НКА с пустыми переходами 


Детерминизация НКА с пустыми переходами состоит из двух шагов: 1) удаление 
пустых переходов; и 2) детерминизация НКА без пустых переходов. 

32 
Удаление пустых переходов происходит следующим образом: 

Удаляются состояния, в которые входят только переходы по пустым символам, 


Выходные дуги этих состояний становятся выходными дугами “предыдущих” 
состояний. Если удалённые состояния были допускающими, то их “предыдущие” 
состояния тоже должны стать допускающими. 

⇒​
​  

Состояния, в которые входят не только пустые переходы, остаются. Пустые 


переходы удаляются, вместо этого выходными состояниями “предыдущих” 
состояний становятся выходные состояния рассматриваемого состояния. Если 
рассматриваемое состояние допускающее, то их “предыдущие” состояния тоже 
должны стать допускающими 

⇒​
​  

Для НКА без пустых переходов 


Пусть A(X, S , δ , s1 , F ) — НКА без пустых переходов. Построим эквивалентный ему 
ДКА A′ . 

Для этого построим автомат, множеством состояний которого будет множество 


подмножеств состояний НКА. Начальным состоянием будет подмножество с 
одним элементом — начальным состоянием НКА. 

Далее мы строим ДКА следующим образом: если в НКА из вершины под 


действием одной буквы автомат переходит в несколько состояний, то в ДКА 
автомат перейдёт в состояние, являющееся подмножеством, содержащим эти 
состояния. 

Для переходов из состояний, являющихся подмножествами нескольких 


состояний, переход производится в подмножество всех состояний, в которые 
производились бы переходы в НКА из каждой вершины подмножества. 

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


состояний НКА, поэтому обычно ДКА строят постепенно, добавляя вершины по 
мере надобности. 

33 
«Плохой» случай для конструкции подмножеств при 
детерминизации 
Бывают и такие НКА, что при их детерминизации все или почти все из 
состояний-подмножеств оказываются достижимыми, и приходится строить ДКА из 
|2S | состояний.  

Например, такой автомат 

после детерминизации будет иметь 2n состояний, так как должен обрабатывать 


2n различных цепочек из букв a и b .   

34 
13. 
Алгоритм Бржозовского минимизации 
недетерминированного автомата 
Левый язык​ для q — язык, который из начального состояния приводит в q  
Правый язык​ для q — язык, который из состояния q приводит в допускающее 
состояние 

Автомат детерминированный только тогда, когда его левые языки не 


пересекаются ​(то есть, любое одно слово приводит только в одно состояние).​  
Автомат минимальный только тогда, когда правые языки попарно различны 
(то есть, из любых двух состояний одно слово приводит в разные по допуску 
состояния)​. 

Обратное слово​ — слово с развёрнутым порядком символов 


Обратный язык​ — язык, состоящий из обратных слов исходного языка 

Обратный автомат​ — автомат, у которого допускающие состояния становятся 


начальными, а начальное — допускающим, и изменены направления стрелок. 
Если автомат распознаёт язык, то соответствующий обратный автомат распознаёт 
обратный язык. 

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


наоборот. 

Операция разворота обозначается как r() . Операция детерминизации 


обозначается как d() .  

Минимальный ДКА получается по формуле Amin = drdr(A) = d(r(d(r(A))))  

Доказательство.​ После разворота языка и детерминизации (операция dr(A) ) мы 


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

   

35 
14. 
Конкатенация языков 
Конкатенация языков​ — язык, словами которого являются соединённые слово из 
первого языка и слово из второго языка. 

LM = {αβ | α ∈ L, β ∈ M }  

Автомат 
Для распознавания конкатенации языков с помощью НКА нужно: 

1. Построить автоматы для каждого из языков 


2. Из допускающих состояний первого автомата добавить пустые переходы в 
начальное состояние второго автомата 
3. Сделать допускающие состояния первого автомата недопускающими 

Итерация языка (звёздочка Клини) 


Итерация языка​ — язык, содержащий в себе все возможные конкатенации слов 
из языка. 

L* = {α1 α2 ...αn | αi ∈ L, n ≥ 0}  

Автомат 
Для распознавания итерации языка с помощью НКА нужно: 

1. Построить автомат, распознающий язык 


2. Добавить новое начальное состояние, из которого есть пустой переход в 
предыдущее начальное состояние 
3. Из допускающих состояний автомата добавить пустые переходы в новое 
начальное состояние автомата 
4. Сделать новое начальное состояние допускающим 

Распознаваемость ДКА конкатенации языков и итерации 


языка. 
Строим НКА (как описано выше) и детерминизируем его (​см. 12​)   

36 
15. 
Регулярные выражения 
Регулярное выражение​ — способ определения языка с помощью 
● констант (их ещё называют ​элементарными языками​) 
○ пустого символа ( {λ} ) 
○ пустого множества ( ⊘ ) 
○ символа, принадлежащего алфавиту ( {a} ) 
● операций 
○ объединения символов/множеств ( + ) 
○ конкатенации символов/множеств ( · ) 
○ звёздочки Клини над символом/множеством ( * ) 

Приоритет операций 
1. выражение в скобках 
2. звёздочка Клини 
3. конкатенация 
4. объединение 

Алгебраические законы для регулярных выражений 


Алгебраические законы для операций в РВ практически совпадают с 
соответствующими законами для сложения ​(объединения)​, умножения 
(конкатенации)​ и возведения в степень ​(звёздочки Клини)​. Однако, есть 
исключения: 

○ LM =/ M L  
- соответственно, L(M + N ) = LM + LN =/ M L + N L = (M + N )L  
- однако Lλ = λL = λ и L ⊘=⊘ L =⊘  
○ L +⊘= L , но L + λ =/ L  
○ L + L = L 
○ ⊘* = λ* = λ  
○ (λ + L)* = L*  

Регулярные языки 
Язык называется ​регулярным​, если его можно представить в виде регулярного 
выражения, то есть, его можно задать с помощью элементарных языков и 
конечного количества операций над ними. 

С другой стороны, язык называется ​регулярным,​ если он распознаётся конечным 


автоматом. 

37 
Теорема Клини 
Язык распознаётся конечным автоматом только тогда, когда его можно 
представить в виде регулярного выражения. 

Доказательство​ (необходимость)​.​ Пусть язык L распознаётся конечным 


автоматом A . Докажем, что его можно представить в виде регулярного 
выражения. 

Первым делом добавим в автомат новое начало с пустым переходом в прежнее 


начальное состяние и новый конец, куда ведут пустые переходы от всех 
допускающих состояний. Новый конец делаем допускающим, предыдущие 
допускающие — обычными. 

Определим операции редукции ребра и вершины: 

1. Редукция ребра 

 
2. Редукция вершины 

 
3. Редукция цикла 

Эти операции уменьшают количество рёбер и вершин в автомате, сохраняя 


распознавание языка.  

В любой момент времени в автомате будет хотя бы одна такая конструкция. 


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

Доказательство​ (достаточность)​. ​Пусть язык L задаётся регулярным выражением 


R . Докажем, что он распознаётся и конечным автоматом. 

Для каждой константы и операции регулярного выражения можно построить 


состояния и переходы автомата следующим образом: 

38 
1. Символ 

 
2. Объединение 

 
3. Конкатенация 

 
4. Звёздочка Клини 

Можно начать построение с автомата с одним начальным и одним допускающим 


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

Таким образом, любое регулярное выражение можно представить в виде 


конечного автомата. ​Достаточность доказана.   

39 
16. 
Автомат с магазинной памятью (МП-автомат) 
Автомат с магазинной памятью​ — совокупность следующих семи параметров: 

○ X — алфавит автомата 
○ Γ — алфавит магазина 
○ S — множество состояний автомата 
○ δ — функция перехода 
○ s1 — начальное состояние 
○ z 0 — маркер дна магазина (его начальное значение) 
○ F — множество допускающих состояний 

МП-автомат работает схоже с НКА за исключением того, помимо входного 


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

При каждом переходе МП-автомат считывает из магазина верхний символ y и 


заменяет его на цепочку символов γ . Если γ = λ , то автомат просто снимает 
верхний символ. Если γ = y , то автомат не меняет магазин. 

Функция перехода из состояния принимает два параметра (входной символ и 


верхушку магазина) и выдаёт два параметра — состояние и новая верхушка. 
Таким образом, переход описывается: si (x, y ) = (sj , γ ) — при считывании в 
состоянии si символа x и при наличии сверху магазина символа y , автомат 
переходит в состояние sj и заменяет верхний символ на цепочку символов γ . 

Переходы отмечаются на рисунке следующим образом: a, y /γ , где a — 


считываемый символ, y — верхушка магазина, γ — на что меняется верхушка. На 
каждом переходе для каждого возможного входного символа и возможного 
значения верхушки требуется описывать переход. Если какой-то случай не будет 
описан, то автомат перестанет работать, если такое состояние встретится. 

Конфигурация 
Конфигурация автомата представляет собой тройку (q, w, η ) , где q — текущее 
состояние, w — остаток считываемого слова, η — содержимое магазина 

Язык МП-автомата по допускающему состоянию и по пустому 


магазину. Эквивалентность этих определений (без 
доказательства) 
У МП-автомата может быть один из двух критериев завершения работы: 

○ достижение автоматом допускающего состояния 


40 
○ достижение автоматом дна магазина 

Эти два критерия эквивалентны: для языка найдётся автомат, распознающий его 
по допускающему состоянию, только тогда, когда для языка найдётся автомат, 
распознающий его по пустому магазину. 

Примеры языков, распознаваемых МП-автоматами 

Любой язык, распознаваемый ДКА, распознается МП-автоматом 


Доказательство.​ Имеем ДКА, распознающий некий язык. К каждому переходу 
добавляем действие с магазином ​z0​​ /z​0​. Наш автомат теперь проверяет магазин 
на пустоту и оставляет его пустым на каждом переходе. Он по-прежнему 
распознаёт язык, но теперь является МП-автоматом (по допускающему значению), 
что и требовалось доказать. 

Пример языка, распознаваемого МП-автоматом, но не 


распознаваемого ДКА 
Как мы уже доказывали ранее, язык {an bn | n = 0, 1, 2, ...} не распознаётся ДКА. 
Однако, он распознаётся МП-автоматом: 

   

41 
17. 
Контекстно-свободные грамматики (КСГ) и 
контекстно-свободные языки (КСЯ) 
[​Контекстно-свободная​]​ грамматика​ — совокупность следующих четырёх 
параметров: 

○ X — алфавит. Его символы называют ​терминалами​ и обычно обозначают 


строчными латинскими буквами 
○ V — множество переменных. Их ещё называют ​нетерминалами​ и обычно 
обозначают заглавными латинскими буквами 
○ S — начальный символ грамматики 
○ P — ​продукции​ или ​правила вывода​ грамматики. Продукции состоят из трёх 
элементов: 
- голова продукции. В случае КС-грамматики это одна переменная 
- символ продукции →  
- тело продукции — цепочка из терминалов и переменных, возможно 
пустая 

Язык, распознаваемый КС-грамматикой, называется ​контекстно свободным 


языком​. 

Конфигурации 

Дерево разбора 
Деревья разбора​ для контекстной грамматики G = (X, V , S , P ) это деревья, 
обладающие свойствами: 

○ вершина отмечена начальным символом S  


○ каждый узел отмечен переменной из V   
○ каждый лист отмечен переменной, терминалом или пустым символом 
- если лист отмечен пустым символом, то он должен быть единственным 
ребёнком у своего родителя 
○ если узел отмечен A и его сыновьями слева направо являются x1 , x2 , ..., xm , 
то существует продукция A → x1 x2 ...xm  

Пример контекстно-свободного нерегулярного языка 


Язык {an bn | n = 0, 1, 2, ...} имеет грамматику: 

S → A 
A → aAb  
A → λ 

42 
Например, слово aaabbb получается так: 
S → A → aAb → a(aAb)b → a(a(aAb)b)b → a(a(aλb)b)b = aaabbb  

На каждом шаге мы используем какую-то продукцию, пока не избавимся от 


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

Этот язык можно задать и более простой контекстной грамматикой: 


S → aSb  
S → λ 

Любой регулярный язык является контекстно-свободным 


 

Алгоритм построения КС-грамматики по регулярному языку 


 

Пример   

43 
18. 
Связь КС-языков и языков, распознаваемых МП-автоматом 
(без доказательства) 
Язык является контекстно-свободным только тогда, когда он распознаётся 
автоматом с магазинной памятью.   

44 
19. 
Пример не контекстно-свободного языка (объяснить, без 
строгого доказательства) 
 

Свойства замкнутости/незамкнутости КС-языков 


относительно теоретико-множественных операций 

Объединение 

Пересечение 

Дополнение 
   

45 
20. 
Машины Тьюринга 
Машина Тьюринга​ — абстрактная модель вычислительного устройства.  

Машина Тьюринга состоит из бесконечной ленты, разделённой на ячейки, в 


каждой из которых записан символ, и управляющего устройства. Управляющее 
устройство может находиться в одном из многих состояний. Управляющее 
устройство считывает символ на ленте, после чего может изменить символ на 
другой (в т. ч. стереть), сдвинуть ленту (или оставить на месте) и перейти в другой 
состояние. 

Список состояний и действий, которые машина должна выполнять при считывании 


того или иного символа, называется ​программой​ или ​алгоритмом​ машины 
Тьюринга.  

Конфигурации 
Машина Тьюринга задаётся множеством команд, которые описывают поведение 
машины при считывании того или иного символа в том или ином состоянии. 
Команда выглядит следующим образом: 

q​i​a​k​ ​→ ​q​j​a​m​D​n 
q​i​ — состояние, в котором находится машина 
a​k​ — символ, считываемый машиной 
→​ — необязательный символ, но с ним удобнее читать 
q​j​ — состояние, в которое переходит машина 
a​m​ — символ, который машина запишет на месте считанного 
D​n​ — направление, куда машина сдвинет ленту (R — вправо, L — влево, S — оставит 
на месте) 

Например, команда ​q​1​1 → q​2​1R​ означает “находясь в состоянии q​1​ и считав 


единицу, машина перейдёт в состояние q​2​, не перезапишет символ и сдвинет 
ленту вправо. 

Вычислимые языки и вычислимые функции 

Тезис Черча-Тьюринга 
Любая функция, которая может быть вычислена физическим устройством, может 
быть вычислена машиной Тьюринга. 

Этот тезис невозможно доказать математически, так как невозможно строго 


определить понятие вычислимости. Но если этот тезис ложен, существует 

46 
возможность его опровержения. Однако, опровергнуть этот тезис пока так 
никому и не удалось. 

Вычислимость регулярных языков 


Как мы знаем, любой регулярный язык можно представить в виде ДКА. Однако, 
любой ДКА можно привести к машине Тьюринга. 

Для этого возьмём табличное задание ДКА. Каждая ячейка описывает, в какое 
состояние должен переходить автомат при чтении того или иного символа. 
Припишем к каждой ячейке команду ​☐R​. Для допускающих состояний добавим 
команду при считывании пустого символа ​q0​​ aS​, где ​a​ — любой символ алфавита 
языка. Для остальных состяний добавим команду при считывании пустого 
символа ​q0​​ ☐S 

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


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

Таким образом, любой ДКА можно представить в виде МТ, а значит любой 
регулярный язык вычислим с помощью МТ. 

Нумерация машин Тьюринга 


Любую машину Тьюринга можно представить в виде некоторого числа. 

Доказательство.​ Очевидно, мы можем закодировать каждое состояние 


натуральным числом — ​q​0​ → ​1​, ​q1​​ → ​2​, … Так же мы можем закодировать и буквы 
алфавита машины —  ​a​ → ​1​, ​b​ → ​2​, … Направление движения ленты кодируется так 
же просто — ​R​ → ​1​, ​L​ → ​2​, ​S​ → ​3​. 

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


q​i​a​k​ → q​j​a​m​D​n​ кодируется неким числом. Пусть это (по порядку) числа ​p​, ​q​, ​r​, ​s​, ​t​. 
Запишем эти числа в виде степеней простых множителей: 2p · 3q · 5r · 7s · 11t .  

Получается, каждая команда может быть закодирована в некоторое конечное 


натуральное число. Машина Тьюринга состоит из конечного количества команд. 
Пусть эти команды представими числами ​A​, ​B​, ​C​, … Запишем и эти числа в виде 
степеней простых множителей: 2A · 3B · 5C · ... . Получаем ещё одно натуральное 
число. 

В итоге, каждая машина Тьюринга может быть представлена неким числом. 


Раскладывая эти числа на простые множители, а потом раскладывая степени этих 

47 
множителей на простые множители, мы можем однозначно декодировать машину 
Тьюринга. 

Универсальная машина Тьюринга 


По тезису Чёрча-Тьюринга любая вычислимая функция может быть вычислена 
машиной Тьюринга. Соответственно, машина Тьюринга может складывать, 
вычитать, умножать и делить числа. Следовательно, существует машина Тьюринга, 
способная раскладывать числа на простые множители. 

Получается, что теоретически возможно построить машину Тьюринга A, которая 


может принимать на вход номер машины Тьюринга B, раскладывать этот номер на 
простые множители, раскладывать степени множителей на простые множители, в 
итоге получая состояния машины B.  

Тогда машине A можно так же подать на вход некоторое значение ленты, и она, 
имея на ленте состояния машины B, сможет обработать это значение так, как это 
сделала бы машина B. Таким образом машина A может эмулировать работу любых 
других машин Тьюринга. 

Машина Тьюринга, способная заменить собой любую другую машину Тьюринга, 


называется ​универсальной машиной Тьюринга​.  

Пример невычислимых языков 

Неразрешимость проблемы остановки 


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

Проблема заключается в том, что при обработке некого слова, машина Тьюринга 
может не остановиться, однако это невозможно предсказать заранее. 

Вычислимо перечислимые языки 


Вычислимо перечислимый язык — такой язык, что для любого слова α ∈ X *  
выполняется одно из двух: 
○ α ∈ L , тогда обрабатывающая его МТ остановится и примет слово 
○ α∈/ L , тогда обрабатывающая его МТ либо не примет слово, либо никогда 
не остановится 

Пример не вычислимо перечислимого языка 


   

48 
Бонус 
Построить КС-грамматику и МП-автомат, распознающий язык 
над алфавитом {а,b} 

1. 
{an bn | n = 0, 1, 2, ...}  

грамматика — ​здесь 
автомат — ​здесь 

2. 
Количество букв a и b одинаково 

Грамматика 
Если в языке есть буква a, то есть и буква b. Она может быть перед a, а может 
быть после a. Мы можем рекурсивно добавлять буквы между ними или после них. 
Следовательно, имеем 
S → aSbS  
S → bSaS  
S → λ 

Автомат 
 

3. 
Слова-палиндромы 

Грамматика 
Если в языке появляется буква, то она должна появиться и с другой стороны. При 
этом в центре может появиться одна любая буква. Следовательно, имеем 
S → aSa  
S → bSb  
S → a 
S → b 
S → λ 

Автомат 
Цикл; считываются буквы и кладутся соответствующие буквы в магазин. Пустой 
переход в другое состояние (при этом снимается верхушка), там цикл снимает 
буквы, если они соответствуют считанным. Из этого состяния пустой переход по 
дну в допускающее. 
 

49 
4. 
Слова-палиндромы чётной длины 

Грамматика 
Если в языке появляется буква, то она должна появиться и с другой стороны. 
Следовательно, имеем 
S → aSa  
S → bSb  
S → λ 

Автомат 
Цикл; считываются буквы и кладутся соответствующие буквы в магазин. Пустой 
переход в другое состояние (магазин не меняется), там цикл снимает буквы, если 
они соответствуют считанным. Из этого состяния пустой переход по дну в 
допускающее. 

5. 
Сбалансированные скобки одного вида 

Грамматика 
Задача схожа с п. 2, только слово не может начинаться с закрывающейся скобки, 
и сама она не может появиться перед открывающейся. Следовательно, имеем 
S → (S)S  
S → λ 

Автомат 
Цикл; символ ( кладёт сверху в магазин некий символ, символ ) снимает этот некий 
символ. Есть пустой переход по дну стека в допускающее состояние. 

6. 
Сбалансированные скобки двух видов 

Грамматика 
Задача схожа со скобками одного вида. Скобки вида () могут быть только внутри 
скобок вида []. Имеем: 
S → [S]S  
S → [B]S  
B → (B)B  
B → λ 

Автомат 
Цикл; символ [ кладёт сверху в магазин один символ, символ ] снимает этот 
символ. Символ ( кладёт другой символ, символ ) снимает этот другой символ. Есть 
пустой переход по дну стека в допускающее состояние. 

50