union - 您如何构建两个DFA的并集?

标签 union transition finite-automata dfa

有人对构建两个给定DFA的并集的算法有一个简单的描述吗?例如,假设我们在{0,1}上有两个DFA,其中

{w|w has an odd number of characters}
  w has states A and B

delta | 0  | 1
----------------
  A   | B  | B
----------------
  B   | A  | A


{x|x has an even number of 1s}
  x has states a and b

delta | 0  | 1
----------------
  a   | a  | b
----------------
  b   | b  | a

我有一个结果转换表,该联合显示为:
delta | 0  | 1 
----------------
  Aa  | Ba | Bb
----------------
  Ab  | Bb | Ba
----------------
  Ba  | Aa | Ab
----------------
  Bb  | Ab | Aa

我的讲义中有一个图形化的解决方案,但我想看看其他人如何形容它。从中可以看出,我们实质上使用这两个原始表的状态值来“乘”这两个原始表,以生成更大的过渡表。因此可以从结果表中提取DFA。这听起来是否正确,应该适用于所有DFA案例,还是我缺少什么?

最佳答案

要理解的关键是,您必须同时运行两个DFA,或者通常必须在联合DFA中维护两个DFA的状态。

这就是为什么您必须为联合DFA创建新状态作为原始状态的直接乘法。这样,您就可以为原始DFA中的每个状态组合都拥有一个状态。

然后可以直接计算新DFA的转换规则。例如,如果您处于状态Ab,并且输入为0,则第一个DFA将进入状态B,第二个DFA将进入状态b,因此该输入的联合DFA的下一个状态将为Bb。

当您需要合并两个或更多DFA时,此方法适用于每种情况。产生的DFA可能不是最佳的,但是稍后您可以使用任何喜欢的算法将其最小化。

关于union - 您如何构建两个DFA的并集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449950/

相关文章:

sql - Postgresql:如何逐行连接表?

variables - 在 prolog 中设置变量的并集

html - CSS 动画在 HTA 中不起作用

ios - SDK 中是否包含 iPad "page turn"转换?

regex - 实用的非图灵完备语言?

java - 如何在java中绘制自动机

math - 这种语言与自身的串联是什么?

c# - 使用重复处理 C# 中的列表联合

jquery - 将鼠标悬停在他的位置时,子菜单仍然出现

MySql 通过排除另一个表中的所有 id 进行选择