是否可以计算两个未完全指定的DFA的交集?

问题描述

如果未完全指定要为其计算交集的两个DFA,则可能会出现可能仅包含两个DFA中的一个状态的状态。在进行相交的计算之前,是否需要正确或其他步骤?

解决方法

鉴于缺少某些状态转换的DFA,您始终可以通过添加新状态q dead 来将其转换为“完整” DFA,该状态不接受并且仅转换为本身,然后为每个丢失的过渡添加过渡到q dead 中。因此,从这个意义上讲,如果您未指定完整的DFA,则始终可以将DFA转换为“完整的” DFA,然后照常运行跨产品构造。

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

  • 一种算法仅从两个输入DFA计算所有可能的状态对,然后通过查看状态对转换到的位置来填充转换。如果您使用的是这种方法,则只需在输入DFA之一中缺少转换的每个状态的叉积中都没有转换,就可以模拟“其中一个自动机将在此处死亡”。
  • 另一种算法使用DFS或BFS在叉积中仅构造 reachable 状态。在这种情况下,无需进行任何修改-如果您发现一对缺少过渡的状态,只需不添加任何后继状态即可。

另一方面,如果您正在做类似工会建设的工作,而您只需要接受两个状态之一,那么这些方法将行不通,因为您需要能够模拟“一个自动机死亡,另一个自动机仍在快乐地运行。”为此,添加显式死态是一种简单有效的方法。