如果在使用Hop-croft算法最小化确定性有限自动机中接受所有状态怎么办?

时间:2018-10-26 14:14:59

标签: compiler-construction automata dfa

这里我们有这样的DFA:

enter image description here

这是否已经是最小化的DFA,还是我们应该使用Hopcroft算法通过将所有接受的状态归为一个类并输出来将其最小化?

enter image description here

1 个答案:

答案 0 :(得分:0)

Hopcroft最小化算法假定 complete DFA,其中每个状态在字母表中的每个符号上都有一个过渡。

使用不完整的DFA是很常见的,其中允许缺少过渡。从技术上讲,这是NFA(尽管它是完全确定性的)。与DFA不同,NFA允许字母符号生成从给定状态可能过渡的 set ,并且该set可以为空,在这种情况下,NFA会暂停。 (仅当达到输入结束时,DFA才会暂停。)

出于最小化的目的,通常在每个输入符号上添加一个非接受的“接收器”状态,该状态会向其自身过渡。然后,可以将所有“缺失”的过渡替换为过渡到接收器状态的过渡,从而使自动机完成。 (当然,实际上,人们宁愿使用自动机,它在无效输入时立即停止,而不是在接收器状态下无用地旋转直到输入结束。在最小化之后,可以删除接收器状态。)

按照该约定,您的DFA不仅具有接受状态;有一个(隐式)不接受状态。如果DFA实际上仅具有接受状态,则它将识别Σ*,并且确实可以将其最小化为单个接受状态。

Hopcroft的算法在时间O(sN log N)内运行,其中s是字母的大小,N是状态数。由于DFA假定是完整的,因此sn也是自动机图中的边数(每个状态都必须具有s过渡),因此我们可以将其写为O(E log N)。但是,如果我们放宽了DFA完整的要求,则其图形的边缘可能会大大减少,尽管只是一个恒定的因素(如果我们将字母大小保持不变)。已经有一些算法的建议试图利用这一事实。例如,参见Marie-Pierre Béal, Maxime Crochemore. Minimizing incomplete automata. Finite-State Methods and Natural Language Processing (FSMNLP’08), 2008, United States. pp.9-16, 2008, Joint Research Centre.