从 DFA 中删除或添加空词

Removing or adding the empty word from a DFA

标题是我对这个问题的解读。以下是我到目前为止所做的尝试:

情况一:Ɛ∈L(M)

L(M1) = L(M)

L(M2) = {Q2, Σ2, q20, F2, 2}

Q={q0, ..., qi}

Q2={q20, ... , q2i+1}

Σ2 = Σ

q2i+1 ∈ F2 当且仅当 q i ∈ F

2(q2i+1, a) = (qi, a)

情况2:Ɛ∉L(M)

L(M2) = L(M)

L(M1) = {Q11,q10, F1, 1}

...

到目前为止,您的内容看起来不错但不完整。这是对剩下的内容的描述;用符号写出来留作练习。

在第一种情况下,如果语言已经包含空字符串,我们就完成了,可以直接使用该语言的自动机,无需修改。如果它不包含空字符串,我们可以添加一个新的初始状态并让它像原始初始状态一样转换。如果我们不理会所有其他转换并让这个新的初始状态接受,我们将接受空字符串以及原始自动机接受的任何内容。

在第二种情况下,如果该语言还没有包含空字符串,我们就完成了,可以直接使用该语言的自动机,无需修改。如果它确实已经包含空字符串,我们可以添加一个新的初始状态并让它像原始初始状态一样转换。如果我们不理会所有其他转换并且不接受这个新的初始状态,我们将不会接受空字符串但会继续接受其他所有内容。

一般来说,这是可以做到的最好的。但是,特定语言的自动机可能比添加或删除空字符串后构造的自动机更小。例如,仅由空字符串组成的语言有一个具有两种状态的 DFA,但是删除了空字符串的该语言的最小 DFA 有一个状态。类似地,所有非空字符串的语言都有一个具有两种状态的 DFA,但是将空字符串添加到该语言意味着该语言有一个单状态 DFA。所以这个构造并不总是给出尽可能小的 DFA,但它保证适用于所有情况,包括那些没有针对该语言的更小 DFA 的情况(例如,将空字符串添加到空语言强制添加一个新的州)。