答案 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.