【发布时间】:2015-03-06 19:07:46
【问题描述】:
所以我正在研究一种将 dfa 转换为补码的方法。补码拒绝 dfa 接受的所有字符串,并接受 dfa 拒绝的所有字符串。为此,我应该遵循以下算法: “首先添加一个显式的死状态并显式地对其进行所有转换。其次将所有最终状态更改为非最终状态,并将所有非最终状态更改为最终状态。”
我对此进行了尝试,但没有成功。我不认为我理解正确。
首先,我将所有最终状态更改为非最终状态,将非最终状态更改为最终状态。
然后对于每个状态,如果它没有带有字母的转换,我会使用这些字母添加从该状态到显式死状态的转换
这对吗?
【问题讨论】:
-
您似乎在算法中颠倒了“第一”和“第二”这两个词的含义。我建议你再试一次,使用这些词的更传统的定义。
-
@rici 如果我先添加死状态,然后我必须遍历所有状态并将最终状态更改为非最终状态,反之亦然。既然死亡状态不会是最终的,它会被改为最终的吗?还是死了?
-
没错。创建时的“死亡”状态是非最终状态,second 步骤会将其更改为最终状态。它仍然会将自己作为每次转换的目标,因此一旦进入,它就不能离开。更像是一个黑洞而不是僵尸:)
标签: algorithm dfa nfa complement