当前位置: 首页 > 知识库问答 >
问题:

如何找到下面函数的时间复杂度?[副本]

陶高峯
2023-03-14

有人能指导我找到时间复杂性吗?时间复杂度是否随操作系统而变化?

int fn(int n){
   if(n==1){
     return 1;
    }
    else{
     return(fn(n-1)+ fn(n-1));
    } 
}

共有1个答案

宰父夕
2023-03-14

您可以建立一个递归关系T,它表示计算和输入大小为N的时间,然后使用伸缩的方法来帮助找到Big-O,如下所示:

T(N) = T(N-1) + T(N-1) + c = 2*T(N-1) + c

在这里,我们可以看到,计算t(N)所需的时间将是2*t(N-1)加上一个恒定的时间量c。通过您的函数我们还可以看出:

T(1) = b

在这里,我们可以通过您的基本案例看到,当n=1时没有递归调用,因此,计算t(1)将需要一个恒定的时间b

如果我们看一下t(N),我们需要找出t(N-1)是什么,因此计算得到:

T(N-1) = 2*T(N-2) + c

计算t(N-2)我们得到:

T(N-2) = 2*T(N-3) + c

因此,我们可以把这些再分给对方...

T(N-1) = 2*(2*T(N-3) + c) + c = 4*T(N-3) + 3c

T(N) = 2*(4*T(N-3) + 3c) + c = 8*T(N-3) + 7c
T(N) = 2^k * T(N-k) + ((2^k)-1 * c)
T(N) = (2^N) * T(1) + (2^N)-1 * c
= (2^N) * b + (2^N)-1*c
= O(2^N)     (-1, b & c are constants, so they can be removed, giving 2*(2^N), where 2* is a constant, giving 2^N)

时间复杂度是衡量一个算法在输入大小方面的扩展程度,而不一定是衡量它运行的速度。因此,时间复杂性并不依赖于您的操作系统

 类似资料:
  • 我已经阅读了这么多的资源,但仍然无法理解什么是时间复杂性。我阅读的参考资料基于各种公式,我理解用于表示时间复杂性,但我不知道如何表示。谁能请解释这个原则,以一个可以理解的明确的方式请给我。

  • 这里是一个递归函数。它遍历字符串映射()。检查()如果等于所需的字符串(),则打印它(),并再次为该执行函数。 停下来没有规则,似乎完全是随机的。这个函数的时间复杂度是如何计算出来的?

  • 我已经浏览了Google和Stack Overflow搜索,但是我没有找到一个关于如何计算时间复杂度的清晰而直接的解释 对于下面这样简单的代码: 比如下面这样的循环: 这将只执行一次。时间实际上计算为而不是声明。

  • 所以,基本上,我想找到第二个数组中的所有元素,它们小于或等于第一个数组的元素。这两个数组都是排序的。我知道解决办法。我不想那样。我只想知道这个程序的时间复杂度,以及我们将如何计算。提前谢谢你。

  • 如何计算以下函数的时间复杂度? 现在,我知道循环具有O(n)时间复杂度,但在这种情况下,I以更快的速度增长。一次又一次地迭代,我发现,对于每一个第m次迭代,I=m^2。但我仍然不知道如何计算大O。

  • 好的,第一个for循环显然是。第一个迭代是,第二个迭代是。我想是不是就像那个次数?这意味着。我说对了吗? 编辑:(不是复制品)我知道大O是什么。我在一个具体的案例中询问了正确的评估。