下面程序段的时间复杂度为_____。(n>1)

s=0;
for(j=1;j<=n;j*=2)
for(k=1;k<=n;++k).
最好说的详细点,谢谢。

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个回答  2012-04-19
O(N^2)
因为子层k循环次数为N,时间复杂度为N
父层j循环次数为N,故时间复杂度为N
总体时间复杂度为AN*N+B*N+C=O(N*N)=O(N^2)追问

但是答案是O(nlog2n)呃?就是不会过程..

追答

额 吃夜宵。。。没看清楚哦。。抱歉
一样分析
因为子层k循环次数为N,时间复杂度为N
父层是j*=2;设 循环了T次即 2^T = n T=log2n
父*子= N*log2n
不懂继续追问。。哥吃扁肉。有空

追问

噢噢,懂了
哈哈,谢谢,能加你Q吗.有不懂得可以问问你吗?

追答

妹子在这边透露QQ不好吧。。。加百度空间好友就好了

追问

好的

本回答被提问者采纳
第2个回答  2012-04-20
O(n*log(n))
外循环由于j是以2倍为速度指数级增长的,所以在O(log(n))的时间结束(没有内循环时)。
而每次外循环执行一次,都完整的执行了内循环。
内循环完整执行一次需要时间O(n)
所以综合起来便是每次外循环中内循环执行的时间乘以外循环所用的时间,即O(n*log(n))追问

我还有一道题的问题http://zhidao.baidu.com/question/413202906.html?oldq=1