Построение по НКА эквивалентного ДКА, алгоритм Томпсона — различия между версиями
(→Доказательство эквивалентности) |
|||
Строка 36: | Строка 36: | ||
Построенный ДКА эквивалентен данному НКА. | Построенный ДКА эквивалентен данному НКА. | ||
|proof= | |proof= | ||
− | + | <tex>1.</tex> Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. | |
− | Сделаем наблюдение, что если <tex>q \in q_d</tex> и символ перехода - <tex>c</tex>, то <tex>\forall p \in \delta(q, c)</tex>: <tex>p \in \delta_D(q_d, c)</tex>. | + | Сделаем наблюдение, что если <tex>q \in q_d</tex> и символ перехода - <tex>c</tex>, то <tex>\forall p \in \delta(q, c)</tex>: <tex>p \in \delta_D(q_d, c)</tex>. |
− | Рассмотрим последовательность состояний НКА, когда принимали слово - <tex>(q_1, ..., q_m)</tex> - и последовательность состояний ДКА, когда принимали слово - <tex>({q_d}_1, ..., {q_d}_m)</tex>. | + | Рассмотрим последовательность состояний НКА, когда принимали слово - <tex>(q_1, ..., q_m)</tex> - и последовательность состояний ДКА, когда принимали слово - <tex>({q_d}_1, ..., {q_d}_m)</tex>. |
− | Мы знаем, что <tex>q_m</tex> - терминальная, так как НКА принимает слово. Надо доказать, что <tex>{q_d}_m</tex> - терминальная. | + | Мы знаем, что <tex>q_m</tex> - терминальная, так как НКА принимает слово. Надо доказать, что <tex>{q_d}_m</tex> - терминальная. |
− | Заметим, что <tex>q_1 \in {q_d}_1</tex> - так как это стартовые состояния, а, значит, по нашему наблюдению <tex>q_2 \in {q_d}_2</tex> и так далее. Получается, что <tex>q_m \in {q_d}_m</tex>. Мы знаем, что <tex>q_m</tex> - терминальная вершина, а, значит, по определению терминальной вершины в нашем ДКА, что <tex>{q_d}_m</tex> - тоже терминальная. | + | Заметим, что <tex>q_1 \in {q_d}_1</tex> - так как это стартовые состояния, а, значит, по нашему наблюдению <tex>q_2 \in {q_d}_2</tex> и так далее. Получается, что <tex>q_m \in {q_d}_m</tex>. Мы знаем, что <tex>q_m</tex> - терминальная вершина, а, значит, по определению терминальной вершины в нашем ДКА, что <tex>{q_d}_m</tex> - тоже терминальная. |
− | + | <tex>2.</tex> Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. | |
− | Рассмотрим | + | Рассмотрим последовательность состояний ДКА, когда принимали слово - <tex>({q_d}_1, ..., {q_d}_m)</tex>. |
− | + | Сделаем наблюдение, что если <tex>q_d</tex>, соответствует множеству из одного элемента - <tex>q</tex>, и мы из него достигли по строке <tex>S</tex> какого-то состояния <tex>p_d</tex>, то <tex>\forall p \in p_d</tex>: существует путь из <tex>q</tex> в <tex>p</tex> в НКА по строке <tex>S</tex>. | |
+ | А так как <tex>{q_d}_1</tex> - стартовое состояние, соответствует множеству из одного элемента - <tex>q_1</tex> - стартовое состояние. Мы из <tex>{q_d}_1</tex> достигли <tex>{q_d}_m</tex>, возьмём любое терминальное состояние <tex>q_m \in {q_d}_m</tex> - по нашему наблюдению, в НКА есть путь из <tex>q_1</tex> в <tex>q_m</tex> по нужной строке, а, значит, что НКА принимает это слово. | ||
+ | Получается, что мы доказали, что если НКА принимает слово, равносильно тому, что ДКА его тоже принимает. | ||
+ | |||
+ | А это означает, что автоматы эквивалентны. | ||
}} | }} | ||
Версия 22:01, 20 октября 2011
Содержание
Алгоритм систем подмножеств
Данный алгоритм заменяет НКА из
состояний на эквивалентный ДКА из состояний.Алгоритм
Задание состояний:
Состояние нашего ДКА будет соответствовать подмножеству состояний НКА - то есть их будет ровно
.Задание переходов:
Возьмём состояние нашего ДКА
, соответствующее подмножеству состояний НКА — , и символ . Тогда , где p - состояние ДКА, соответствующее подмножеству состояний НКА - , где — функция перехода в ДКА, а — функция перехода в НКА.Задание стартового состояния:
Стартовое состояние - состояние ДКА, соответствующее множеству из одного стартового состояния НКА.
Задание терминальных вершин:
Если в подмножестве состояний НКА есть хотя бы одна терминальная вершина, то вершина ДКА, соответствующая этому подмножеству, будет терминальной.
Терминология:
- состояние НКА.
- состояние ДКА.
- функция перехода в НКА.
- функция перехода в ДКА.
- принадлежит , если множество состояний НКА, соответствующее состоянию , содержит состояние .
Доказательство эквивалентности
Теорема: |
Построенный ДКА эквивалентен данному НКА. |
Доказательство: |
Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. Сделаем наблюдение, что если и символ перехода - , то : .Рассмотрим последовательность состояний НКА, когда принимали слово - - и последовательность состояний ДКА, когда принимали слово - .Мы знаем, что - терминальная, так как НКА принимает слово. Надо доказать, что - терминальная.Заметим, что - так как это стартовые состояния, а, значит, по нашему наблюдению и так далее. Получается, что . Мы знаем, что - терминальная вершина, а, значит, по определению терминальной вершины в нашем ДКА, что - тоже терминальная.Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. Рассмотрим последовательность состояний ДКА, когда принимали слово - .Сделаем наблюдение, что если , соответствует множеству из одного элемента - , и мы из него достигли по строке какого-то состояния , то : существует путь из в в НКА по строке .А так как - стартовое состояние, соответствует множеству из одного элемента - - стартовое состояние. Мы из достигли , возьмём любое терминальное состояние - по нашему наблюдению, в НКА есть путь из в по нужной строке, а, значит, что НКА принимает это слово.Получается, что мы доказали, что если НКА принимает слово, равносильно тому, что ДКА его тоже принимает. А это означает, что автоматы эквивалентны. |
Алгоритм Томпсона
Данный алгоритм используется для преобразования НКА в ДКА. Смысл этого алгоритма, как и предыдущего, состоит в замене множества из
состояний НКА, множеством из подмножеств его состояний. Но не все из состояний будут присутствовать в ДКА, ввиду недостижимости многих из них, поэтому в алгоритме используется обход в ширину.Алгоритм
Вначале в очередь помещается множество, состоящее только из стартового состояния НКА
В результате задаст новое состояние автомата. Если еще нет в ДКА, тогда мы помещаем в очередь.
Так как - конечна, а , то алгоритм завершится за конечное число шагов. Отсюда же получается верхняя оценка на время работы алгоритма — в худшем случае это .
Корректность
Утверждение: |
Построенный автомат принимает тот же язык |
Применим индукцию по длине слова .
|