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

Algorithm 迭代O(2^n)算法示例,algorithm,time-complexity,Algorithm,Time Complexity,正如标题所述,迭代O2^n算法的示例是什么?它通常在什么时候发生?这更好地解释了这一点,但具有O2^n阶的算法通常是贪婪算法。我所知道的最贪婪的是O n。 斐波那契恢复算法不使用值记忆技术,是O2^n算法的一个例子 例如Python def fib(n): if n == 0: return 1 if n == 1: return 1 return fib(n-1) + fib(n-2) 在第4行中,我们看到函数被调用了两次。这意味着每次调用将调用2次迭代方法 对于严格

正如标题所述,迭代O2^n算法的示例是什么?它通常在什么时候发生?

这更好地解释了这一点,但具有O2^n阶的算法通常是贪婪算法。我所知道的最贪婪的是O n。 斐波那契恢复算法不使用值记忆技术,是O2^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
在代码中,我通过一个条件强制算法为O2^n。 这不是一个实际的例子,但使用一个条件可以得到不同的顺序算法。

这更好地解释了这一点,但具有O2^n顺序的算法通常是贪婪算法。我所知道的最贪婪的是O n。 斐波那契恢复算法不使用值记忆技术,是O2^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
在代码中,我通过一个条件强制算法为O2^n。
这不是一个实际的例子,但使用一个条件可以得到不同阶的算法。

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

河内塔由三根杆子或木桩组成,其中n个圆盘一个置于另一个之上

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

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

解决河内塔难题所需的最少移动次数为2^n− 1,其中n是磁盘数


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

河内塔由三根杆子或木桩组成,其中n个圆盘一个置于另一个之上

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

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

解决河内塔难题所需的最少移动次数为2^n− 1,其中n是磁盘数


基本上是任何一种算法,您可以对输入元素的每个组合进行强制检查。背包可能就是一个例子。然而,通常有更好的方法。你这是什么意思?例如,如果I\u n是所有输入的集合,如果算法在整个I\u n中运行,则为O2^n?您可以在中查看每个元素的问题,如果该元素是解决方案的一部分,则可以指定1;如果不是,则可以指定0。这将为输入分配一个二进制数,其位数与输入元素n的位数相同,从而产生2^n个可能的解决方案。如果检查每个可能的解决方案需要O1,则总体上得到O2^n,如果检查所有解决方案,则使用蛮力。只需输出由0和1组成的长度为n的所有不同字符串,且不带缓存…基本上是任何算法,在该算法中,您可以对输入元素的每个组合进行蛮力检查。背包可能就是一个例子。然而,通常有更好的方法。你这是什么意思?例如,如果I\u n是所有输入的集合,如果算法在整个I\u n中运行,则为O2^n?您可以在中查看每个元素的问题,如果该元素是解决方案的一部分,则可以指定1;如果不是,则可以指定0。这将为输入分配一个二进制数,其位数与输入元素n的位数相同,从而产生2^n个可能的解决方案。如果检查每个可能的解决方案需要O1,那么总体上得到O2^n,如果检查所有的解决方案需要蛮力。只需输出由0和1组成的长度为n的所有不同字符串,并且没有缓存…但是严格的迭代算法呢,也就是说,没有递归调用?没有记忆的斐波那契不是Ophi^n吗,其中phi大约为1.618?虽然我同意一个在O1.618^n时间内运行的算法也在O2^n时间内运行,但我觉得这符合问题的精神,因为在这个问题中,2^n是最小的函数,实际上工作的θ非常大。否则,我们就可以提供任何线性算法,并声称它满足OP的O2^n要求,从形式上讲,它满足了,但我认为这不是他们想要的。也就是说,我认为你的迭代算法是一个很好的例子。但是一个严格的迭代算法呢,也就是说,没有递归调用?斐波那契不就是没有记忆的Ophi^n吗,其中phi大约是1.618?虽然我同意在O1.618^n时间内运行的算法也在O2^n时间内运行,但我觉得它是 根据问题的精神,我们要得到一个答案,其中2^n是最小的函数,它的作用实际上是很大的θ。否则,我们就可以提供任何线性算法,并声称它满足OP的O2^n要求,从形式上讲,它满足了,但我认为这不是他们想要的。也就是说,我认为你的迭代算法是一个很好的例子。