我正在尝试测量算法的时间复杂度。 算法有一段时间,从1开始。好的。但问题是i随产品增加。 我没有使用大O,只计算指令。 我试图找到一种模式。
在这个例子中,我做对了:
i = 1; -> // 1 execution
while(i<=n) { // n+1
j =1; // n
while(j<=n) { // n²
....
j = j + 1; // n² * 2
}
i = i + 1; // 2n
}
确定。我只需要总结。
但问题出现在这种情况下:
i = 1; // 1 execution
while(i<n) { // n execution?
System.out.println("*"); // n execution?
i = i * 2; // n execution????
}
我测试了太多方法:
When n is 2 ---> The println run 1 time.
When n is 3 ---> The println run 2 times.
When n is 4 ---> The println run 2 times.
When n is 5 ---> The println run 3 times.
When n is 6 ---> The println run 3 times.
模式是什么?
我不想要Big O符号。
答案 0 :(得分:1)
复杂度为O(log(n))
因为我们在每次迭代中将i
除以2,所以让我们说,while循环将执行m次,我们有2^m<=n
暗示{ {1}}所以m<=log(n)
。