Построение по НКА эквивалентного ДКА, алгоритм Томпсона — различия между версиями
(→Доказательство эквивалентности) |
(→Доказательство эквивалентности) |
||
| Строка 17: | Строка 17: | ||
<tex>1.</tex> Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. | <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>. |
| + | |||
| + | Рассмотрим слово w, которое принимает автомат НКА: <tex>\langle s, w_1w_2...w_m \rangle \vdash \langle u_1, w_2...w_m \rangle \vdash \langle u_n, \varepsilon \rangle</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>. | ||
| Строка 26: | Строка 32: | ||
<tex>2.</tex> Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. | <tex>2.</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, ..., {q_d}_m)</tex>. | Рассмотрим последовательность состояний ДКА, когда принимали слово - <tex>({q_d}_1, ..., {q_d}_m)</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> по нужной строке, а, значит, что НКА принимает это слово. | А так как <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:08, 21 октября 2011
Содержание
Построение эквивалентного ДКА по НКА
НКА: .
ДКА, описанный в следующих строках является эквивалентным НКА.
ДКА: , где:
- .
- .
- при условии, что .
Доказательство эквивалентности
| Теорема: |
Построенный ДКА эквивалентен данному НКА. |
| Доказательство: |
|
Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. Сначала сделаем наблюдение, что если , и является символом перехода, то : . Рассмотрим слово w, которое принимает автомат НКА: . Проверим, что построенный ДКА тоже принимает это слово.
Рассмотрим последовательность состояний НКА, когда принимали слово - - и последовательность состояний ДКА, когда принимали слово - . Мы знаем, что - терминальная, так как НКА принимает слово. Надо доказать, что - терминальная. Заметим, что - так как это стартовые состояния, а, значит, по нашему наблюдению и так далее. Получается, что . Мы знаем, что - терминальная вершина, а, значит, по определению терминальной вершины в нашем ДКА, что - тоже терминальная. Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. Сначала сделаем наблюдение, что если , соответствует множеству из одного элемента - , и мы из него достигли по строке какого-то состояния , то : существует путь из в в НКА по строке . Рассмотрим последовательность состояний ДКА, когда принимали слово - . А так как - стартовое состояние, соответствует множеству из одного элемента - - стартовое состояние. Мы из достигли , возьмём любое терминальное состояние - по нашему наблюдению, в НКА есть путь из в по нужной строке, а, значит, что НКА принимает это слово. Получается, что мы доказали, что если НКА принимает слово, равносильно тому, что ДКА его тоже принимает. А это означает, что автоматы эквивалентны. |
Алгоритм Томпсона
Данный алгоритм преобразовывает НКА в эквивалентный ДКА. Мы будем использовать предыдущий алгоритм построения с одним дополнением - нам не нужны состояния недостижимые из стартового.
Поэтому в алгоритме используется обход в ширину.
Алгоритм
- очередь состояний, соответствующих множествам, состоящих из состояний НКА. - стартовое состояние НКА.
1: 2: 3: 4: 5: 6: 7: 8: ) 9: 10: 11:
Верхняя оценка на работу алгоритмы - - так как количество подмножеств множества состояний НКА не более, чем , а каждое подмножество мы обрабатываем за и ровно один раз.