我不理解非确定性图灵机的概念。我想我理解术语非确定性算法 :(非确定性算法是一种可以在不同的行为上表现出不同行为的算法 运行,而不是确定性算法。)所以算法可能是:
a = fromSomeAlgo();
if(a > foo)
stateA();
else
stateB();
但是对于非确定性图灵机 I read,它在给定时间可以处于多个状态。另外一个wikipedia article暗示“非确定性图灵机(NTM),可能有一套规则更多的规则 对于给定情况而言,不是一个动作“。
这是什么意思? ..针对特定情况的不止一个行动......多个州...... 我根本就不明白这一点。
答案 0 :(得分:47)
在非确定性图灵机中,在每个分支中 - 您都有两种可能性 - 只有在您完成后,您才“选择”哪一个是解决方案所需的那个(如果存在)。
例如,让我们看看subset sum problem,S = {a,b,c... }
。非确定性图灵机具有线性解决方案:
for each element:
"guess" if it is in the subset
check if the subset has the specified sum
生成的树将是这样的:
start
with a without a
/ \ / \
/ \ / \
/ \ / \
with b without b with b without b
/ \ / \ / \ / \
with c without c with c without c with c without c with c without c
一个计算(树中的路径)是正确的,以便算法产生“真”。只有在没有这样的计算时才会产生“假”。
非确定性图灵机的概念纯粹是理论上的 - 没有非确定性的图灵机。
<强>加成:强>
请注意,使用非确定性图灵机可以完成的所有操作 - 可以使用确定性图灵机完成(反之亦然) - 例如,Halting Problem中的任何一个都无法确定。但是,NPC问题可以在非确定性图灵机中以多项式进行,我们不知道(我们假设我们不能)如何在确定性图灵机上进行多项式处理。