以下代码片段的时间复杂度?

时间:2015-12-17 08:19:04

标签: algorithm time-complexity

enter image description here

我计算它是O(N ^ 2),但我的导师在考试中将其标记为错误。正确答案是O(1)。任何人都可以帮助我,时间复杂度如何变成O(1)?

2 个答案:

答案 0 :(得分:3)

外部loop将运行2N次。 (int j = 2 * N),然后每次按1)递减

由于N没有变化,i的值N总是(int i = N),内部loop将始终运行logN base 2次。{ (请注意i更改i = i div 2

的方式

因此,复杂性为O(NlogN)

答案 1 :(得分:1)

问题:当你反复输入一半(或搜索空间)时会发生什么?(就像在二进制搜索中一样)。

答案:嗯,你得到 log(N)的复杂性。 (参考: Steven S. Skiena的算法设计手册

查看算法中的内部循环,i = i div 2使其成为 log(N)复杂性循环。因此,总体复杂性将是 N log(N)

带上一点盐:每当你将输入(搜索空间)除以2,3,4或任何大于1的常数时,你的复杂度就会log(N)

P.S。 :算法的复杂性远不及 O(1)