我将显示上下限。
首先,我们计算的成本g3
。
例如,n = 2^16
。
我们在for循环中进行了多少次迭代?
i=2^0, i=2^1, i=2^2, i=2^3... < 2^16
或多或少,这将是16个步骤。因此,g3的成本为O(log(n))
。
现在让我们尝试计算f3
。由于它g3
在循环内使用,因此将如下所示:
log(n) + log(n^(1/2)) + log(n^(1/4)) + log(n^(1/8)) + ...
这肯定大于log(n)
,因此我们可以将其log(n)
作为下限。
现在,为了计算上限,我们必须考虑,循环执行了多少次迭代?
再举2^16
一个例子:
2^16, 2^16^(1/2), 2^16^(1/4), 2^16^(1/8), 2^16^(1/16),
原来是:
2^16, 2^8, 2^4, 2^2, 2^1
在下一次迭代中,由于sqrt(2)
四舍五入,我们将停止。
因此,通常,如果n=2^2^k
,我们将进行k次迭代。那是log(log(n))
。这意味着我们可以说log(n)*log(log(n))
是上限。
可能有一个更调整的解决方案,但这应该是非常准确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句