你如何规范有限状态机?

时间:2009-07-09 18:44:50

标签: computer-science finite-automata

  1. 您如何找到最小的确定性FSM?
  2. 有没有办法规范化非确定性FSM?
  3. 是否有线性时间限制算法来查找给定计算机的最小FSM?
  4. 有没有办法看两个FSM是否相同?
  5. 这不是一个家庭作业问题。我正在看this lecture series并且好奇。

4 个答案:

答案 0 :(得分:8)

由于所有非确定性FSM都具有相应的确定性FSM,因此对1和2的答案应该相同。

如果您想了解更多信息,请获取Michael Sipser撰写的“计算理论简介”,这是一本非常好的书,可以学习这些东西。 Sipser知道他谈论的是什么如何很好地沟通。

答案 1 :(得分:6)

一些非正式的答案可以提供您的想法,详细的证据可以阅读一本关于Automata的好书,例如this one或其他答案中提到的那些。而且我很确定您可以找到回答所有问题的在线资料。

  • 您如何找到最小的确定性FSM?

该过程是消除重复状态(或合并等效状态)。您知道状态和转换是生成字符串的关键。基本上,重复的状态无助于使语言生成更大或更少。该算法从始终具有生成lamda(空字符串)的能力的最终状态开始,并递归地更新指示状态的生成能力的表,并最终合并那些没有区别的状态。

  • 有没有办法规范化非确定性FSM?

NFA的规范化DFA使用NFA状态的不同集合作为DFA的状态,例如,{state0} - (1) - > {state1,state2}删除非确定性部分,没有办法避免状态爆炸,因为DFA必须这样做来表示语言。

  • 是否有线性时间限制算法来查找给定计算机的最小FSM?

我记得最好的一个是O(NLogN)在西安大略大学教授的一些论文中重复使用信息的一些技巧,并怀疑存在更好的信息。我相信经典的是O(N ^ 2)。

  • 有没有办法看两个FSM是否相同?

是。获取最小的一个,通过访问字符串来编码状态(一个字符串可以从开始状态到达状态,这几乎就是状态的真实“名称”),并验证转换映射。可能有更好的方法,但bigO上没有太大的区别。

答案 2 :(得分:5)

  • 如果给你一些确定性的FSM,那么你可以在O(n 2 )中使用一个非常简单的算法找到一个等价的,最小的FSM; Hopcroft的算法在O(n log n)中完成。 Here你会找到两者的描述。您可以通过最小化它们并检查它们是否相同来检查A和B是否相同。
  • 如果给你一些不确定的FSM,那么找到一个等价的,最小的FSM是PSPACE-complete。换句话说,没有好的算法是已知的,并且推测它不存在。检查两个非确定性自动机的等价性也是PSPACE完成的。因此,除非有一个非常不可能的突破,否则你应该将自动机转换为确定性的(这需要很长时间),然后执行检查。
  • 您可以将非确定性FSM转换为具有指数状态的确定性FSM。这是不可避免的。练习(不难!):使用具有n个状态的非确定性FSM识别由末尾的第n个字母为“a”的单词组成的语言,并且不能使用识别具有少于2个 n 状态的确定性FSM。在一般情况下,指数界限不能被打破。

答案 3 :(得分:2)

从2.5节开始检查“编译器设计基础”。可在线免费使用。 http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/basics_lulu.pdf

它涵盖了将NFA转换为DFA并最小化DFA。当转换为DFA时,NFA可以指数级扩展。

“......任何常规语言(一种语言 可以用正则表达式表示,NFA或DFA)具有唯一性 最小DFA。因此,我们可以决定正则表达式的等价性(或 通过将两者转换为最小的DFA并比较结果来进行NFA或NFA)。“