为什么回溯使算法不确定?

时间:2009-02-01 05:28:44

标签: algorithm performance language-agnostic non-deterministic

所以我至少有两位教授提到回溯使得算法不确定,而没有给出太多解释原因。我我明白这是怎么发生的,但我很难把它写成文字。有人可以给我一个简明的解释原因吗?

9 个答案:

答案 0 :(得分:13)

回溯使得算法不确定的情况并非如此。

相反,您通常需要回溯来处理非确定性算法,因为(通过非确定性的定义)您不知道在处理的特定时间采取哪条路径,而是您必须尝试几个

答案 1 :(得分:9)

我只想引用维基百科:

  

非确定性编程语言是一种语言,它可以在程序的某些点(称为“选择点”)指定程序流的各种替代方案。与if-then语句不同,这些替代方法之间的选择方法不是由程序员直接指定的;程序必须在运行时间通过应用于所有选择点的一般方法在备选方案之间进行决定。程序员指定了有限数量的备选方案,但程序必须稍后在它们之间进行选择。 (事实上​​,“选择”是非确定性运算符的典型名称。)可以形成选择点的层次结构,更高级别的选择会导致包含更低级别选择的分支。

     

一种选择方法体现在回溯系统中,其中一些替代方案可能“失败”,导致程序回溯并尝试其他替代方案。如果所有备选方案在特定选择点失败,则整个分支失败,程序将进一步回溯到较旧的选择点。一个复杂因素是,因为任何选择都是暂定的并且可以重新制作,所以系统必须能够通过撤消部分执行最终失败的分支引起的副作用来恢复旧的程序状态。

Nondeterministic Programming文章之外。

答案 2 :(得分:5)

考虑一种用于着色世界地图的算法。相邻国家/地区不得使用任何颜色。该算法任意地在一个国家开始并将其着色为任意颜色。所以它一直在着色国家,改变每一步的颜色,直到“呃哦”,两个相邻的国家都有相同的颜色。那么,现在我们必须回溯,并做出新的颜色选择。现在我们没有做出不确定性算法的选择,这对我们的确定性计算机来说是不可能的。相反,我们使用回溯模拟非确定性算法。一个不确定的算法将为每个国家做出正确的选择。

答案 3 :(得分:4)

在确定性计算机上回溯的运行时间是阶乘的,即它在O(n!)中。

如果非确定性计算机可以在每个步骤中立即正确猜测,那么确定性计算机必须尝试所有可能的选择组合。

由于不可能建立一个非确定性的计算机,你的教授可能意味着以下几点:

复杂性类NP中的provenly hard问题(非确定性计算机通过总是正确猜测可以有效解决的所有问题)在真实计算机上的解决方式不能比回溯更有效。

如果复杂性类P(确定性计算机可以有效解决的所有问题)和NP不一样,则上述说法是正确的。这是着名的P vs. NP问题。克莱数学研究所为其解决方案提供了100万美元的奖金,但这个问题多年来一直存在。然而,大多数研究人员认为P不等于NP。

一个简单的总结方法是:非确定性计算机可以通过总是正确猜测来有效解决的大多数有趣问题是如此困难以至于确定性计算机可能必须尝试所有可能的选择组合,即使用回溯

答案 4 :(得分:1)

思想实验:

1)从视野中隐藏有一些电荷分布,你感受到来自它的力量,你可以测量它们产生的潜在场。准确地告诉我所有指控的位置。

2)收取一些费用并安排好。准确地告诉我他们创造的潜在领域。

只有第二个问题有一个独特的答案。这是vector fields的非唯一性。这种情况可能与您正在考虑的一些非确定性算法类似。在math limits中进一步考虑哪些不存在,因为它们有不同的答案取决于你接近不连续的方向。

答案 5 :(得分:1)

我写了一个使用回溯的迷宫跑步者(当然),我将以此为例。

你走过迷宫。当您到达交叉路口时,您可以掷硬币来决定要遵循的路线。如果您选择了死胡同,请追溯到交叉点并采取另一条路线。如果您全部尝试过,请返回上一个交叉点。 这种算法是非确定性的,不是因为回溯,而是因为硬币翻转。

现在更改算法:当您到达交叉点时,请始终尝试您尚未尝试过的最左侧路线。如果这导致死胡同,返回交叉点并再次尝试您尚未尝试的最左侧路线。 该算法是确定性的。没有机会参与,这是可以预测的:你将始终在同一个迷宫中遵循相同的路线。

答案 6 :(得分:0)

如果允许回溯,则允许在程序中进行无限循环,这使得它不确定,因为实际路径可能总是包含一个循环。

答案 7 :(得分:0)

非确定性图灵机(NDTM)可以一步完成多个分支。另一方面,DTM遵循试错过程。

您可以将DTM视为常规计算机。相比之下,量子计算机与NDTM类似,可以更容易地解决非确定性问题(例如,参见破解密码学的应用)。所以回溯实际上对他们来说是一个线性过程。

答案 8 :(得分:0)

我喜欢迷宫类比。让我们把迷宫想象成一个简单的迷宫,作为一个二叉树,其中只有一条路径。

现在您想尝试深度优先搜索以找到迷宫中的正确方法。

非确定性计算机将在每个分支点复制/克隆自身并并行运行每个进一步的计算。就好像迷宫中的人会在每个分支点复制/克隆自己(如电影Prestige)并将自己的一份副本发送到树的左支行中,将另一份自己复制到右侧分支中。树。

最终死路的计算机/人员死亡(终止无人接听)。

只有一台计算机能够存活(以答案结束),即走出迷宫的人。

回溯和非决定论之间的区别如下。

在回溯的情况下,在任何特定时刻只有一台计算机存活,他做传统的迷宫解决技巧,只需用粉笔标记他的路径,当他走到死路时他只是简单地回溯到分支点他的子分支他还没有完全探索,就像在深度搜索中一样。

对比度:

非确定性计算机可以在每个分支点克隆自己,并通过在子分支中运行并行搜索来检查出路。

因此,回溯算法在顺序/非并行/确定性计算机上模拟/模拟非确定性计算机的克隆能力。