下面程序段的时间复杂度为_____。(n>1)
s=0;for(j=1;j<=n;j*=2)for(k=1;k<=n;++k).最好说的详细点,谢谢。...
s=0;
for(j=1;j<=n;j*=2)
for(k=1;k<=n;++k).
最好说的详细点,谢谢。 展开
for(j=1;j<=n;j*=2)
for(k=1;k<=n;++k).
最好说的详细点,谢谢。 展开
3个回答
展开全部
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)。
扩展资料:
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。
但不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。
展开全部
更多追问追答
追问
但是答案是O(nlog2n)呃?就是不会过程..
追答
额 吃夜宵。。。没看清楚哦。。抱歉
一样分析
因为子层k循环次数为N,时间复杂度为N
父层是j*=2;设 循环了T次即 2^T = n T=log2n
父*子= N*log2n
不懂继续追问。。哥吃扁肉。有空
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
O(n*log(n))
外循环由于j是以2倍为速度指数级增长的,所以在O(log(n))的时间结束(没有内循环时)。
而每次外循环执行一次,都完整的执行了内循环。
内循环完整执行一次需要时间O(n)
所以综合起来便是每次外循环中内循环执行的时间乘以外循环所用的时间,即O(n*log(n))
外循环由于j是以2倍为速度指数级增长的,所以在O(log(n))的时间结束(没有内循环时)。
而每次外循环执行一次,都完整的执行了内循环。
内循环完整执行一次需要时间O(n)
所以综合起来便是每次外循环中内循环执行的时间乘以外循环所用的时间,即O(n*log(n))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询