设M是具有状态图的DFA

时间:2013-10-23 22:00:45

标签: computer-science

http://i.stack.imgur.com/QoXru.png

a)构建M的过渡表 b)baba,baab,abab,abaaab中的哪一个字符串 c)给出L(M)

的正则表达式

由于生病,我实际上错过了上课的那一天,我对此很困惑。我已经查看了维基百科有关DFA的信息,但它让我更加困惑。关于这个主题的任何见解都会非常感谢!!

1 个答案:

答案 0 :(得分:0)

DFA =确定性有限状态自动机(搜索),

  • 有一个开始状态(请参阅q0,旁边有>),
  • (零个或多个)由圆圈指定的非终端状态(参见里面的名称),
  • 终端(结束)状态由双同心圆指定,
  • 由行(箭头)指定的状态转换,由事件
  • 标记

DFA(DFSA)可用于“识别”输入模式。您将输入模式(字符串)提供给DFA,并且当DFA在状态之间转换时,它会识别下一个条目,或者生成错误/无法识别的结果。输入完成后,检查结束状态是否为终端/已识别状态。

实施如下:

states[] = { 'q0', 'q1', 'q2' }
events[] = { 'a', 'b' }
transition[]
transition['q0'] = []
transition['q1'] = []
transition['q2'] = []
transition['q0']['a'] = 'q1'
transition['q0']['b'] = 'q0'
transition['q1']['a'] = 'q1
transition['q1']['b'] = 'q2'
transition['q2']['a'] = 'q0'
transition['q2']['b'] = 'q1'
state = 'q0' #start state
terminal[]
terminal['q2'] = true # you can have more than one terminal/recognized state
terminal['q0'] = false # you can have more than one terminal/recognized state
terminal['q1'] = false # you can have more than one terminal/recognized state

你可以实现上述状态机,(rubylike)     terminal ['q2'] = 1#您可以拥有多个终端/已识别状态

def DFArun( initstate, input )
    state = initstate
    each input.each do |inp|
        if !transition[ state, inp ].exists then
            return :notrecognized
        end
        state = transition [ state, inp ]
    end
    if terminal[ state ].exists then return :recognized
    else return :notrecognized end
end

您可以使用在进行某些转换时发生的语义操作进一步注释DFSA或DFSM(确定性有限状态机)。这可以是在某些转换('识别')上'发出'输出,或者导致某些动作发生。 DFA(DFSA,DFSM)可用于识别语言分析器中的标记,或控制工厂自动化或业务工作流。

您可以轻松地在可以加载到DFSM中进行操作的文件中表达DFSM的识别,从而构建一个程序,其动作由可编辑文件控制。例如,一个简单的CSV文件,

#state,input,newstate,actions(optional)
q0,a,q1,none
q0,b,q0,none
q1,a,q1,none
q1,b,q2,none
q2,a,q0,none
q2,b,q1,none
init,q0
terminal,q2