正如标题所说,迭代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(。这不是一个实际的例子,但使用一个条件可以获得不同阶数的算法。