设计NFA,接受特定长度的字符串

时间:2014-05-13 16:08:11

标签: regular-language finite-automata nfa

我期待设计一个接受某种接受A和B的字符串的FA。

首先是一个字符串,其中A的数量是B的五倍。

我的意思是L={w∈{A,B}* and (nA(W)-nB(W) mod 5=0)

还有一个FA,它接受一个字符串中不同数量的字符:

L={A^n B^m C^k | n,k>0 and m>3}

我设计了一些功能但是它们在这个复杂的字符串上并不完美。

有关我应该如何设计的任何帮助?

1 个答案:

答案 0 :(得分:1)

不幸的是,您的问题令人困惑,因为英文文本与数学公式不一致。我将尝试回答这四个问题:

  • 一种由{a,b}上的字符串组成的语言,即a(= #a(w))的数字 是b的数量的五倍(#b(w)), L = { w in {a,b}* : #a(w)>#b(w) and #a(w)=#b(w)mod5 }

    NFA无法做到这一点。通过使用带有字符串a ^ pb ^ 5p的泵浦引理(P.L)证明是简单的,其中p是P.L的常数。

  • 对于您编写的语言:L={w∈{A,B}* : (nA(W)-nB(W)) mod 5=0}, 您可以使用包含5个状态循环的DFA来完成此操作。

    过渡是,如果你顺时针读了一下,如果你读了b,那就是逆向。随机选择一个状态为初始状态,同一状态为最终状态。

  • 对于语言L = {A ^ n B ^ m C ^ k | n,k> 0且m> 3},应该很容易找到 如果您将L视为L=A(A)* B(B)* c^4(C)*

  • 对于在字符串中接受不同数量字符的语言(让我们说a,b)。语言应为R={ w in {a,b}* : #a(w) not equal #b(w)}

    这种语言再次无法被NFA识别。如果这种语言是常规的(由NFA认可),那么就是这种语言:

    L=a*b* intersection (R complement)。语言L是{a^n b^n/ n non-negative integer}

    当他们谈论非常规的语言时,语言L是大多数书籍的第一个例子。

希望你会发现这个答案很有帮助。