使用无关转换最小化 DFA

Posted

技术标签:

【中文标题】使用无关转换最小化 DFA【英文标题】:Minimize a DFA with don't care transitions 【发布时间】:2019-11-14 04:03:38 【问题描述】:

我有一个 DFA (Q, Σ, δ, q0, F) 带有一些“无关转换”。这些转换对已知在某些情况下不会出现在输入中的符号进行建模。如果进行任何此类转换,则结果字符串是否被接受都没有关系。

是否有一种算法可以计算具有最少状态的等效 DFA?不能使用普通 DFA 最小化算法,因为它们不知道“无关”转换,并且似乎没有明显的方法来扩展算法。

【问题讨论】:

如果你不关心“不关心”的过渡,那你为什么不直接删除它们呢? @MattTimmermans 因为 DFA 对状态和符号的每个组合都有一个转换。你不能有“无过渡”,最小化算法期望是这种情况。 (对不起,如果这个评论很天真,我在 40 年前学习了 DFA)我看不出你所说的“不关心某些转换的 DFA”和不完整的 DFA 的区别。完成 DFA 的常用方法是添加对应于缺失转换的接收器状态。您可以最小化这样一个已完成的 DFA。然后,您可以从生成的最小化 DFA 中删除接收器状态。在您之前的评论中,您提到它不是您的 DFA 的最佳选择。我很惊讶。您能否提供一个 DFA 示例,说明这种简单的方法会失败吗? @Damien 这等于拒绝所有“不关心”字符串。如果这在所有可能的选择中是最好的,我会感到惊讶。举个例子:考虑一个 DFA 匹配一个长度为 n 的单词并且不关心所有其他单词。 “接收器状态”方法生成具有 n + 2 个状态的 DFA,同时接受所有无关字符串会导致 DFA 具有仅接受所有内容的单一状态。 @Damien 请注意,简单地接受所有无关字符串也不起作用:假设您有一个 DFA 拒绝除一个包含 n 个字符的单词之外的所有字符串。如果单词匹配,就会发生“不关心”转换。如果我们向自动机添加一个接受接收器并将其最小化,则结果具有 n + 1 个状态。如果我们从这个无关紧要中拒绝所有单词,则自动机只有一个状态,拒绝所有字符串。 【参考方案1】:

我认为这个问题是 NP 难的(稍后会详细介绍)。这是我会尝试的。

    (可选)通过通常的最小化算法对输入进行预处理,将接受/拒绝/不关心作为单独的结果。 (由于不关心不等同于接受或拒绝,我们得到了 Myhill-Nerode 等价关系,允许使用通常算法的变体。)

    如下生成冲突图。从接受和拒绝状态之间的所有边缘开始。以我们迭代添加边 q1-q2 的闭包为例,使得存在符号 s 存在边 σ(q1, s)—σ(q2, s)。

    用尽可能少的颜色为该图着色。 (或近似值。)有很多很多的着色算法。 PartialCol 是一个很好的起点。

    将每个颜色类合并到一个节点中。这可能使新的转换函数具有多值性,但我们可以任意选择。

通过访问任意大小的字母表,似乎很容易将这种减少到着色的过程反过来进行,证明 NP 硬度。对我来说,悬而未决的问题是,固定大小的字母表是否会以某种方式限制冲突图,从而以某种方式使生成的着色实例更容易。唉,我没时间研究这个。

【讨论】:

可能有许多 DC(或接收器)状态,每个 dont care 情况都有一个。您能否详细说明在步骤 2 中如何处理这些 DC 状态?此外,如果你能用一个小例子来说明你的答案会很好 @Damien DC 状态最初作为孤立的顶点存在,但只要存在可以区分两者的字符串,它们就会以彼此顶点的边结束。 感谢您指出这一点。这与我在文献中找到的NP-completeness proof 非常相似。【参考方案2】:

我相信正常摩尔算法的轻微变化是有效的。这是算法的说明。

Let S be the set of states.
Let P be the set of all unordered pairs drawn from S.
Let M be a subset of P of "marked" pairs.
Initially set M to all pairs where one state is accepting and the other isn't. 
Let T(x, c) be the transition function from state x on character c.
Do
  For each pair z = <a, b> in P - M
    For each character c in the alphabet
      If <T(a, c), T(b, c)> is in M
        Add z to M and continue with the next z
Until no new additions to M

最终的集合 P - M 是状态等价关系的成对描述。您可以从中通过合并原始状态和转换来创建最小 DFA。

我相信不关心转换可以通过从不基于它们标记(添加到 M)对来处理。也就是我们改一行:

      If T(a, c) != DC and T(b, c) != DC and <T(a, c), T(b, c)> is in M   

(实际上在实现中,如果 DC 是 state 类型的保留值而不是原始 FA 中的状态,则不需要真正的算法更改。)

我现在没有时间考虑正式的证明,但这对我来说很直观。我们跳过基于我们知道永远不会发生的转换来拆分状态的等价类。

我仍然需要向自己证明的是,集合 P - M 是否仍然是等价关系的成对描述。即,我们能否以&lt;a,b&gt;&lt;b,c&gt; 而不是&lt;a,c&gt; 结束?如果有,是否有修复?

【讨论】:

不再是等价关系:考虑匹配xab的语言,不关心yab而拒绝zab。从 xa 到 xab 和从 za 到 zab 的转换都与 ya 到 yab 相关,但它们并不相互关联。当我说 Myhill-Nerode 关系不再是等价关系时,这就是我的意思,如果你将它扩展到不关心明显的方式(即你选择的方式)。 @fuz 哈哈。谢谢。所以“修复”似乎是找到一个划分为最大集团的划分,这是 NP 困难的,不是吗?哎呀。 是的。同时,我通过简化为图形着色找到了NP-completeness proof。

以上是关于使用无关转换最小化 DFA的主要内容,如果未能解决你的问题,请参考以下文章

DFA确定化和最小化

DFA最小化,语法分析初步

自己动手写编译器:DFA状态机最小化算法

从正则表达式(RE)到最小确定性有限状态自动机(DFA)

形式语言与自动机六 DFA的最小化

DFA最小化