迭代O(2^n)算法示例



正如标题所说,迭代O(2^n(算法的例子是什么?通常什么时候发生?

河内塔就是一个很好的例子。

河内塔由三根杆子或钉子组成,n个圆盘一个放在另一个上面。

谜题的目的是按照这3条规则将整个堆栈移动到另一个棒上。

1.一次只能移动一个磁盘。2.每次移动都包括从其中一个堆叠中取出上圆盘,并将其放置在另一个堆叠的顶部或空棒上。3.较大的磁盘不能放在较小的磁盘上。

解决河内塔谜题所需的最小移动次数为2^n-1,其中n是圆盘的数量。

https://en.wikipedia.org/wiki/Tower_of_Hanoi#Iterative_solution

这个链接更好地解释了它,但阶为O(2^n(的算法通常是贪婪算法。我所知道的最贪婪的是O(n^n(。不使用值记忆技术的斐波那契恢复算法是O(2^n(算法的一个例子。

示例(python(

def fib(n):
if n == 0: return 1
if n == 1: return 1
return fib(n-1) + fib(n-2)

在第4行中,我们看到函数被调用了两次。这意味着迭代方法将发生,每次调用将被调用2次。


对于严格迭代的东西,您可以考虑以下示例(python中的代码(:

def O2n(n):
a = 0
while True:
if a < 2**n:
a = a + 1
else:
break
return a

在代码中,我通过一个条件强制算法为O(2^n(。这不是一个实际的例子,但使用一个条件可以获得不同阶数的算法。

最新更新