【发布时间】: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 个状态。如果我们从这个无关紧要中拒绝所有单词,则自动机只有一个状态,拒绝所有字符串。
标签: algorithm language-agnostic dfa