有人能指导我找到时间复杂性吗?时间复杂度是否随操作系统而变化?
int fn(int n){
if(n==1){
return 1;
}
else{
return(fn(n-1)+ fn(n-1));
}
}
您可以建立一个递归关系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是什么。我在一个具体的案例中询问了正确的评估。