确定性有限自动机

时间:2013-11-15 20:59:20

标签: automata dfa

我是自动机理论的新手。以下问题适用于练习:

让一种语言由以不同符号开头和结尾的单词组成,并且字母为{0,1}。例如,001,10110101010100,10和01都被接受。但101,1,0和1010001101被拒绝。

我如何:

  • 构建确定性有限自动机(DFA)图?
  • 查找DFA的正则表达式?

    我试图发布我画的DFA图片,但遗憾的是我需要10个声明来发布图片,我还没有。

  • 2 个答案:

    答案 0 :(得分:2)

    要回答这个问题,我认为首先识别正则表达式会更容易。

    正则表达式

    1(1|0)*0 | 0(1|0)*1 
    

    (*表示Kleene的明星行动)

    现在我们将这个正则表达式转换为等效的有限自动机。

    构建DFA

    对于给定语言(正则表达式),您可以使用Thompson构造函数[1]轻松设计NFA-∧(或某些文本中的NFA-ε),然后将其转换为不带lambda过渡的NFA。 然后可以使用子集构造方法将此NFA映射到等效的DFA。 [2]

    如果需要,您可以进一步减少此DFA以获得对于给定常规语言而言唯一的最小DFA。 (Myhill-Nerode定理)[3]

    Regex→NFA-∧→NFA→DFA→DFA(最小), 这是标准程序。

    [1] http://en.wikipedia.org/wiki/Thompson%27s_construction_algorithm

    [2] http://www.cs.nuim.ie/~jpower/Courses/Previous/parsing/node9.html

    [3] http://en.wikipedia.org/wiki/Myhill%E2%80%93Nerode_theorem

    答案 1 :(得分:0)

    我们可以在这里获得两种可能性 - 1)字符串以0开头,以1 =>结尾; [0(0 | 1)* 1] 2)以1开头并以0 =>结束的字符串; [1(0 | 1)* 0] 同样来自被拒绝的字符串,我们知道最小长度为2。

    因此最终表达式为[0(0 | 1)* 1] | [1(0 | 1)* 0]  NFA会是这样的

    NFA for given language