【发布时间】:2010-11-10 09:59:46
【问题描述】:
我在一本关于非确定性映射的书中读到,对于 M=(Q,∑,trans,q0, 有从 Q*∑ 到 2Q 的映射, F) 其中 Q 是一组状态。 但我无法理解它是如何 2Q; 如果有3个状态a、b、c,怎么映射到8个状态?
【问题讨论】:
标签: finite-automata
我在一本关于非确定性映射的书中读到,对于 M=(Q,∑,trans,q0, 有从 Q*∑ 到 2Q 的映射, F) 其中 Q 是一组状态。 但我无法理解它是如何 2Q; 如果有3个状态a、b、c,怎么映射到8个状态?
【问题讨论】:
标签: finite-automata
我总是发现考虑这些的最简单方法(因为状态集是有限的)是让每个子集都是一个以 2 为基数的编码,范围从 0(所有位为零)到 2 |Q|-1(所有位为一),其中数字中的位与状态集 Q 中的成员数一样多。然后,您可以取其中一个数字并映射通过使用是否设置了数字中的特定位将其放入子集。简单!
这是一个有效的示例,其中 Q = {a,b,c}。在这种情况下,|Q|是 3(有三个元素),所以 23 是 8。这意味着如果我们说前导位是元素 a,那么下一位是b 和 c 的尾随位:
看到了吗?最初的三个状态已转换为 8 个,并且我们有一个自然编号,如果我们选择,我们可以使用它来创建这些状态的标签。
现在,在非确定性上下文中对此进行解释。基本上,非确定性意味着我们不确定自己处于什么状态。我们通过使用伪状态来表示这一点,该伪状态是我们可能处于的“真实”状态的集合;如果我们有完全的非确定性,那么我们处于所有真实状态都可能的伪状态(即 {a,b,c}),而没有真实状态的伪状态are possible (i.e., {}) 是相反的(并且在转换系统中确实应该是不可能达到的)。在实际系统中,您通常不会处理这些极端情况中的任何一个。
如何将确定性转换系统转换为非确定性系统的逻辑比我想在这里介绍的要复杂得多。 (我必须阅读大量的博士论文才能学习它,所以它绝对比一个 SO 答案更有价值!)
【讨论】:
2Q 表示 Q 的所有子集的集合。对于每个状态 q 和 sigma 中的每个字母 x,都有一个 Q 状态的子集,您可以从带有字母 x 的 q 进入。所以是的,如果存在三个状态 abc,那么集合 2Q 由 8 个元素 {{}、{a}、{b}、{c}、{a,b}、{a,c }, {b,c}, {a,b,c}}。它不映射到 8 个状态,它映射到这 8 个集合之一。高温
【讨论】: