Удаление или добавление пустого слова из DFA - PullRequest
1 голос
/ 13 февраля 2020

enter image description here

Название - моя интерпретация этого вопроса. Ниже я попытался сделать следующее:

Случай 1: Ɛ ∈ L (M)

L (M 1 ) = L (M)

L (M 2 ) = {Q 2 , Σ 2 , q 2 0 , F 2 , ? 2 }

Q = {q 0 , ..., q i }

Q 2 = {q 2 0 , ..., q 2 i + 1 }

Σ 2 = Σ

q 2 i + 1 ∈ F 2 если бы q i ∈ F

? 2 (q 2 i + 1 , a) = ? (q i , a)

Случай 2: ∉ ∉ L (M)

L (M 2 ) = L (M)

L (M 1 ) = {Q 1 , Σ 1 , q 1 0 , F 1 , ? 1 }

...

1 Ответ

1 голос
/ 17 февраля 2020

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

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

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

В общем, это лучшее, что можно сделать. , Однако в определенных c языках могут быть автоматы меньшего размера, чем созданные после добавления или удаления пустой строки. Например, язык, состоящий только из пустой строки, имеет DFA с двумя состояниями, но минимальный DFA для этого языка с удаленной пустой строкой имеет одно состояние. Точно так же язык всех непустых строк имеет DFA с двумя состояниями, но добавление пустой строки к этому языку означает, что для этого языка есть DFA с одним состоянием. Таким образом, эта конструкция не всегда дает наименьшее возможное DFA, но она гарантированно работает для всех случаев, включая те, где для языка нет меньшего DFA (например, добавление пустой строки к пустому языку вызывает добавление нового состояние).

...