Построение по НКА эквивалентного ДКА, алгоритм Томпсона — различия между версиями
(Отмена правки 11726 участника 192.168.0.2 (обсуждение)) |
(→Доказательство эквивалентности) |
||
Строка 20: | Строка 20: | ||
Сначала сделаем наблюдение, что если <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>. | ||
− | Рассмотрим слово w, которое принимает автомат НКА: <tex>\langle s, w_1w_2...w_m \rangle \vdash \langle u_1, w_2...w_m \rangle \vdash \langle u_m, \varepsilon \rangle</tex>, и <tex>u_m \in T</tex> | + | Рассмотрим слово w, которое принимает автомат НКА: <tex>\langle s, w_1w_2...w_m \rangle \vdash \langle u_1, w_2...w_m \rangle \vdash \langle u_m, \varepsilon \rangle</tex>, и <tex>u_m \in T</tex> |
− | Проверим, что построенный ДКА тоже принимает это слово. | + | Проверим, что построенный ДКА тоже принимает это слово. |
− | Заметим, что <tex>s \in s_d</tex>, а, значит, исходя из нашего наблюдения мы получаем, что <tex>u_1 \in {u_d}_1</tex>, где <tex>{u_d}_1 = \delta_d(s, w_1)</tex>. | + | Заметим, что <tex>s \in s_d</tex>, а, значит, исходя из нашего наблюдения мы получаем, что <tex>u_1 \in {u_d}_1</tex>, где <tex>{u_d}_1 = \delta_d(s, w_1)</tex>. |
− | Далее несложно заметить, что <tex>\forall i \leq m : u_i \in {u_d}_i</tex>, где <tex>\langle s_d, w_1w_2...w_m \rangle \vdash \langle {u_d}_1, w_2...w_m \rangle \vdash \langle {u_d}_i, w_{i + 1}...w_m \rangle</tex>. | + | Далее несложно заметить, что <tex>\forall i \leq m : u_i \in {u_d}_i</tex>, где <tex>\langle s_d, w_1w_2...w_m \rangle \vdash \langle {u_d}_1, w_2...w_m \rangle \vdash \langle {u_d}_i, w_{i + 1}...w_m \rangle</tex>. |
− | Таким образом, <tex>u_m \in {u_d}_m</tex>, а из определения терминальных состояний в построенном ДКА мы получаем, что <tex>{u_d}_m \in T_d</tex>, а, значит, наш ДКА, тоже принимает cлово w | + | Таким образом, <tex>u_m \in {u_d}_m</tex>, а из определения терминальных состояний в построенном ДКА мы получаем, что <tex>{u_d}_m \in T_d</tex>, а, значит, наш ДКА, тоже принимает cлово w. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<tex>2.</tex> Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. | <tex>2.</tex> Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. |
Версия 22:19, 21 октября 2011
Содержание
Построение эквивалентного ДКА по НКА
НКА:
.ДКА, описанный в следующих строках является эквивалентным НКА.
ДКА:
, где:- .
- .
- .
- при условии, что .
Доказательство эквивалентности
Теорема: |
Построенный ДКА эквивалентен данному НКА. |
Доказательство: |
Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. Сначала сделаем наблюдение, что если , и является символом перехода, то : .Рассмотрим слово w, которое принимает автомат НКА: , иПроверим, что построенный ДКА тоже принимает это слово. Заметим, что , а, значит, исходя из нашего наблюдения мы получаем, что , где .Далее несложно заметить, что , где .Таким образом, , а из определения терминальных состояний в построенном ДКА мы получаем, что , а, значит, наш ДКА, тоже принимает cлово w.Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. Сначала сделаем наблюдение, что если , соответствует множеству из одного элемента - , и мы из него достигли по строке какого-то состояния , то : существует путь из в в НКА по строке .Рассмотрим последовательность состояний ДКА, когда принимали слово - .А так как - стартовое состояние, соответствует множеству из одного элемента - - стартовое состояние. Мы из достигли , возьмём любое терминальное состояние - по нашему наблюдению, в НКА есть путь из в по нужной строке, а, значит, что НКА принимает это слово.Получается, что мы доказали, что если НКА принимает слово, равносильно тому, что ДКА его тоже принимает. А это означает, что автоматы эквивалентны. |
Алгоритм Томпсона
Данный алгоритм преобразовывает НКА в эквивалентный ДКА. Мы будем использовать предыдущий алгоритм построения с одним дополнением - нам не нужны состояния недостижимые из стартового.
Поэтому в алгоритме используется обход в ширину.
Алгоритм
- очередь состояний, соответствующих множествам, состоящих из состояний НКА. - стартовое состояние НКА.
1:2: 3: 4: 5: 6: 7: 8: ) 9: 10: 11:
Верхняя оценка на работу алгоритмы -
- так как количество подмножеств множества состояний НКА не более, чем , а каждое подмножество мы обрабатываем за и ровно один раз.