下面程序段的时间复杂度是 ? i=1; while(i<=n) i=i*2

如题所述

i=1; while(i<=n) i=i*2的时间复杂度O(log2n)。

整段代码语句,中循环体只有一个while(i<=n),执行的次数是:

i = 1,i = 1*2=2,判断2是否小于等于n,是则继续循环,否则跳出循环

i =2,i = 2*2=4,判断4是否小于等于n,是则继续循环,否则跳出循环。

i =4  ,i = 4*2=8,判断8是否小于等于n,是则继续循环,否则跳出循环。

根据规律发现,循环次数由log2n决定,所以复杂度是O(log2n)。

扩展资料:

一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。

但不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-16
假设循环次数是x。
i = 1, 2, 4, 8, 16 ,i = 2^x
条件是i <= n
2^x <= n
所以x <= log2n 一共执行循环体log2n次,所以复杂度是O(log2n)
第2个回答  2015-05-24
循环退出的条件为i > n
设第k次循环后退出循环
于是2^k > n
因此k > log2n 以2为底的对数,k的实际值为log2n上取整
因此时间复杂度为O(log2n)本回答被网友采纳