该代码的时间复杂度是多少? log3n

问题描述

我有这段代码,我必须知道它的时间复杂度,我是这个主题的初学者,它让我有些困惑。

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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...