【问题标题】:Is it possible to compute the intersection of two non completely specified DFA?是否可以计算两个不完全指定的 DFA 的交集?
【发布时间】:2020-09-16 16:11:13
【问题描述】:

如果必须计算交集的两个 DFA 未完全指定,则可能会到达仅包含两个 DFA 的一个状态的状态。在继续计算交叉点之前是否需要正确或额外的步骤?

【问题讨论】:

  • 您能否详细说明“未完全指定”的含义?自动机是怎么给你的?
  • 某些状态没有针对所有输入符号的转换。因此,如果“Q0”没有完全指定,这意味着,给定 0 和 1 作为输入符号,“Q0”只有 0 的转换,从“Q0”到另一个状态。

标签: intersection finite-automata dfa nfa


【解决方案1】:

如果 DFA 在某些状态下缺少转换,您始终可以通过添加不接受且仅转换到的新状态 qdead 将其转换为“完整”DFA本身,然后为每个丢失的转换添加转换到 qdead 中。因此,从这个意义上说,如果您没有指定完整的 DFA,则始终可以将 DFA 转换为“完整的”DFA,然后照常运行叉积构造。

如果您专门为两个输入 DFA 的交集构建 DFA,则不需要这样做,因为以这种方式生成的所有状态都将彼此等价(它们都无法达到原始机器中的接受状态)。有几种形成交叉点的方法,根据您采取的方法,您可以进行从小到大的任何调整:

  • 一种算法简单地计算来自两个输入 DFA 的所有可能的状态对,然后通过查看状态对转换到的位置来填充转换。如果您使用这种方法,您可以让输入 DFA 中缺少转换的每个状态在叉积中没有转换,模拟“其中一个自动机会死在这里”。
  • 另一种算法使用 DFS 或 BFS 仅在叉积中构造 可达 状态。在这种情况下,无需修改 - 如果您发现一对状态缺少转换,则不要添加任何后续状态。

另一方面,如果你在做类似联合构造的事情,你只需要接受两个状态中的一个,这些方法就行不通,因为你需要能够模拟“一个机器人死了,另一个还在快乐地奔跑。”为此,添加显式死亡状态是一种简单而有效的方法。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 2021-09-25
    • 2022-06-13
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2011-12-18
    相关资源
    最近更新 更多