下面程序段的时间复杂度为( )
i=1;
while(i<=n)
i=i*3;
A. O(n) B. O(3n) C. O(log3n) D. O(n^3)
在给定的代码段中,`i`的初始值为1,而循环条件是`i<=n`,每次循环`i`都会乘以3。即每次循环,`i`的值会呈指数增长。
如果我们假设最后一次循环时`i`的值为`m`,则满足以下关系:1 * 3 * 3 * ... * 3 = m,其中乘号(*)重复的次数为循环的次数。
根据上述关系,我们可以得出`m`和`n`之间的关系:3的幂次方(乘号重复的次数)等于`n`,即3^k = n,其中k为循环的次数。
通过求解上述方程,可以得到: k = log3(n)
因此,循环的次数取决于`n`的对数。由于代码段中只包含一重循环,因此时间复杂度为O(log3(n))。
所以,答案是C. O(log3n)。
懵的haha
答案错了,应该是√n
admin 回复 cixihjj: 同学,再好好想想.....
月溅星河 回复 cixihjj: 怎么可能是根号的复杂度,答案没问题的
qq 回复 cixihjj: 我咋没看到i++
i=i*3; 时间t 3t=n t=long3n
一次迭代乘以3,x次迭代就是x个3相乘
C
用户登录可进行刷题及查看答案
登录后提交答案