2013-10-23 23 views
-2

http://i.stack.imgur.com/QoXru.png设M是与状态图中的DFA

a)构造中号 B的转换表),该弦巴巴,BAAB,ABAB的,abaaab c)就升的正则表达式(M)

我实际上错过了因疾病而被覆盖的一天,我很困惑这一点。我检查过维基百科的DFA信息,但这让我更加困惑。任何有关这个问题的见解,因为它涉及到这个问题将不胜感激!

+0

你有没有试过要求你的处理器,TA或同级班? – smcg

+1

可能更适合http://cstheory.stackexchange.com/ – Calpis

回答

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) 终端[ '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 
相关问题