Построение по НКА эквивалентного ДКА, алгоритм Томпсона — различия между версиями
(→Доказательство эквивалентности) |
(→Алгоритм) |
||
| Строка 5: | Строка 5: | ||
'''Задание состояний:''' | '''Задание состояний:''' | ||
| − | Состояние нашего ДКА будет соответствовать подмножеству состояний НКА - то есть их будет ровно <tex>2^n</tex>. | + | Состояние нашего ДКА будет соответствовать подмножеству состояний НКА - то есть их будет ровно <tex>2^n</tex>. |
'''Задание переходов:''' | '''Задание переходов:''' | ||
| − | Возьмём состояние нашего ДКА <tex>q</tex>, соответствующее подмножеству состояний НКА {{---}} <tex>(a_1, a_2, ..., a_m)</tex>, и символ <tex>c</tex>. Тогда <tex>\delta_D(q, c) = p</tex>, где p - состояние ДКА, соответствующее подмножеству состояний НКА - <tex>\cup_{i=1}^{m} \delta(a_i, c)</tex>, где <tex>\delta_D</tex> {{---}} функция перехода в ДКА, а <tex>\delta</tex> {{---}} функция перехода в НКА. | + | Возьмём состояние нашего ДКА <tex>q</tex>, соответствующее подмножеству состояний НКА {{---}} <tex>(a_1, a_2, ..., a_m)</tex>, и символ <tex>c</tex>. Тогда <tex>\delta_D(q, c) = p</tex>, где p - состояние ДКА, соответствующее подмножеству состояний НКА - <tex>\cup_{i=1}^{m} \delta(a_i, c)</tex>, где <tex>\delta_D</tex> {{---}} функция перехода в ДКА, а <tex>\delta</tex> {{---}} функция перехода в НКА. |
'''Задание стартового состояния:''' | '''Задание стартового состояния:''' | ||
| − | Стартовое состояние - состояние ДКА, соответствующее множеству из одного стартового состояния НКА. | + | Стартовое состояние - состояние ДКА, соответствующее множеству из одного стартового состояния НКА. |
'''Задание терминальных вершин:''' | '''Задание терминальных вершин:''' | ||
| − | Если в подмножестве состояний НКА есть хотя бы одна терминальная вершина, то вершина ДКА, соответствующая этому подмножеству, будет терминальной. | + | Если в подмножестве состояний НКА есть хотя бы одна терминальная вершина, то вершина ДКА, соответствующая этому подмножеству, будет терминальной. |
'''Терминология:''' | '''Терминология:''' | ||
| − | <tex>q</tex> - состояние НКА. | + | <tex>q</tex> - состояние НКА. |
| − | <tex>q_d</tex> - состояние ДКА. | + | <tex>q_d</tex> - состояние ДКА. |
| − | <tex>\delta</tex> - функция перехода в НКА. | + | <tex>\delta</tex> - функция перехода в НКА. |
| − | <tex>\delta_D</tex> - функция перехода в ДКА. | + | <tex>\delta_D</tex> - функция перехода в ДКА. |
| − | <tex>q \in q_d</tex> - <tex>q</tex> принадлежит <tex>q_d</tex>, если множество состояний НКА, соответствующее состоянию <tex>q_d</tex>, содержит состояние <tex>q</tex>. | + | <tex>q \in q_d</tex> - <tex>q</tex> принадлежит <tex>q_d</tex>, если множество состояний НКА, соответствующее состоянию <tex>q_d</tex>, содержит состояние <tex>q</tex>. |
===Доказательство эквивалентности=== | ===Доказательство эквивалентности=== | ||
Версия 22:02, 20 октября 2011
Содержание
Алгоритм систем подмножеств
Данный алгоритм заменяет НКА из состояний на эквивалентный ДКА из состояний.
Алгоритм
Задание состояний:
Состояние нашего ДКА будет соответствовать подмножеству состояний НКА - то есть их будет ровно .
Задание переходов:
Возьмём состояние нашего ДКА , соответствующее подмножеству состояний НКА — , и символ . Тогда , где p - состояние ДКА, соответствующее подмножеству состояний НКА - , где — функция перехода в ДКА, а — функция перехода в НКА.
Задание стартового состояния:
Стартовое состояние - состояние ДКА, соответствующее множеству из одного стартового состояния НКА.
Задание терминальных вершин:
Если в подмножестве состояний НКА есть хотя бы одна терминальная вершина, то вершина ДКА, соответствующая этому подмножеству, будет терминальной.
Терминология:
- состояние НКА.
- состояние ДКА.
- функция перехода в НКА.
- функция перехода в ДКА.
- принадлежит , если множество состояний НКА, соответствующее состоянию , содержит состояние .
Доказательство эквивалентности
| Теорема: |
Построенный ДКА эквивалентен данному НКА. |
| Доказательство: |
|
Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. Сделаем наблюдение, что если и символ перехода - , то : . Рассмотрим последовательность состояний НКА, когда принимали слово - - и последовательность состояний ДКА, когда принимали слово - . Мы знаем, что - терминальная, так как НКА принимает слово. Надо доказать, что - терминальная. Заметим, что - так как это стартовые состояния, а, значит, по нашему наблюдению и так далее. Получается, что . Мы знаем, что - терминальная вершина, а, значит, по определению терминальной вершины в нашем ДКА, что - тоже терминальная. Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. Рассмотрим последовательность состояний ДКА, когда принимали слово - . Сделаем наблюдение, что если , соответствует множеству из одного элемента - , и мы из него достигли по строке какого-то состояния , то : существует путь из в в НКА по строке . А так как - стартовое состояние, соответствует множеству из одного элемента - - стартовое состояние. Мы из достигли , возьмём любое терминальное состояние - по нашему наблюдению, в НКА есть путь из в по нужной строке, а, значит, что НКА принимает это слово. Получается, что мы доказали, что если НКА принимает слово, равносильно тому, что ДКА его тоже принимает. А это означает, что автоматы эквивалентны. |
Алгоритм Томпсона
Данный алгоритм используется для преобразования НКА в ДКА. Смысл этого алгоритма, как и предыдущего, состоит в замене множества из состояний НКА, множеством из подмножеств его состояний. Но не все из состояний будут присутствовать в ДКА, ввиду недостижимости многих из них, поэтому в алгоритме используется обход в ширину.
Алгоритм
Вначале в очередь помещается множество, состоящее только из стартового состояния НКА .
Затем из очереди изымается очередное множество — новое состояние ДКА. Если в есть допускающие состояния, то оно допускающее. Функция перехода строится по следующему правилу: .
В результате задаст новое состояние автомата. Если еще нет в ДКА, тогда мы помещаем в очередь.
Так как - конечна, а , то алгоритм завершится за конечное число шагов. Отсюда же получается верхняя оценка на время работы алгоритма — в худшем случае это .
Корректность
| Утверждение: |
Построенный автомат принимает тот же язык |
|
Применим индукцию по длине слова .
|