先说对数
2^4=16,这里的4就是以2为底16的对数。
回到标题
for(int i=1; i<100; i=i*2){
System.out.println(i);
}
本例要求时间复杂度的话,只要计算for循环实际执行次数即可。
假设当i值为N时,不满足条件(i<100)推出循环。
观察题目,可以看到i的值每次都变为原来的2倍,那么就可以列出求N的式子 N = 2 ^ x
可见,求出2实际进行了多少次幂运算,就等同于求出了实际执行次数,而幂的逆运算就是对数,就是求x,x为以2为底N的对数。
所以本例的时间复杂度为O(logn)。
文章目的
本篇文章的叙述可能存在不严谨的地方,写作目的是为了给那些绕不过来弯的朋友(比如我自己)提供一个思路。