问题描述
我有这段代码,我必须知道它的时间复杂度,我是这个主题的初学者,它让我有些困惑。
void func(int n){
while(n > 0 && n % 3 ==0){
do_computation(n);
n = n/3;
}
}
函数 do_computatation 的时间复杂度为1,则func最坏的情况是O(log 3 n) 是吗?
解决方法
是的,它是O(log 3 n),但与O(log n)相同。该基数无关紧要,因为log a n =(log a b)(log b n),常数因子无关问题。
编辑:
log(a b )= b log(a)(任意基数)
n = b log b n
取双方的日志 a :
log a n = log a (b log b n )
=(log b n)(log a b)