在确定性算法中,对于给定的特定输入,计算机将始终通过相同的状态产生相同的输出,但是在非确定性算法的情况下,对于相同的输入,编译器可能会在不同的运行中产生不同的输出。实际上,非确定性算法无法在多项式时间内解决问题,也无法确定下一步是什么。非确定性算法可以针对不同执行情况下的相同输入显示不同的行为,并且具有一定程度的随机性。
为了实现非确定性算法,我们有几种语言,例如Prolog,但是它们没有标准的编程语言运算符,并且这些运算符也不是任何标准编程语言的一部分。
与非确定性算法有关的一些术语定义如下:
- choice(X):从集合X中随机选择任何值。
- failure():表示不成功的解决方案。
- success():解决方案成功,当前线程终止。
例子 :
Problem Statement : Search an element x on A[1:n] where n>=1, on successful search return j if a[j] is equals to x otherwise return 0.
Non-deterministic Algorithm for this problem :
1.j= choice(a, n)
2.if(A[j]==x) then
{
write(j);
success();
}
3.write(0); failure();
Deterministic Algorithm | Non-deterministic Algorithm |
---|---|
For a particular input the computer will give always same output. | For a particular input the computer will give different output on different execution. |
Can solve the problem in polynomial time. | Can’t solve the problem in polynomial time. |
Can determine the next step of execution. | Cannot determine the next step of execution due to more than one path the algorithm can take. |