数据结构频度问题

menghuan4869 2009-10-24 11:31:52


第一题:i=1;

while(i<=n)

i=i*2; (1)

设语句(1)的频度为f(n),则有:

2^f(n)<=n, 即f(n)<=log n,
2
取最大值f(n)=log n.
2
请问2^f(n)<=n是怎样得到的?


第二题:
a=0;b=1; (1)

for(i=2;i<=n;i++) (2)

{ (3)

s=a+b; (4)

b=a; (5)

a=s; (6)

}
其中语句(1)的频度是2;语句(2)的频度是n;语句(3)的频度是n-1;语句(4)的频度是n-1;语句(5)的频度是n-1.则该程序段的时间复杂度是T(n)=2+n+3*(n-1)=4n-1
请问语句(1)的频度是2是不是因为a=0执行了一次,b=1执行了一次?加起来就是2次?至于语句(2)的频度不应该是n-1吗?语句(3)的频度不应该是n-3吗?

请详细说明,谢谢!
...全文
312 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
menghuan4869 2009-11-04
  • 打赏
  • 举报
回复
至于i++和++i,其结果和执行效率应该一样吧?为什么说效率更高呢?反正一开始都是先执行i=2,然后执行内部循环的!然后下次循环执行i+1,此时i=2。
menghuan4869 2009-11-04
  • 打赏
  • 举报
回复
很感谢两位的回答,第一题我已经懂了,但是第二题的解释“i=n+1虽然为0 不进行内部循环”我就不太理解了,为什么当i=n+1为0?为什么此时不执行内部循环呢?请详细解释下,谢谢!
perfecttt 2009-11-01
  • 打赏
  • 举报
回复
第一题 i=i*2可以看出i是以2的指数方式增加的,即i=2*2*2···*2*(1) <=n;所以是有2^f(n) <=n
第二题 a=0;b=1;是两条语句,
另外对于for(i=2;i <=n;i++) (2) i++是先执行后自增,当i=n时循环内部执行完后还得执行i=n+1虽然为0 不进行内部循环

i++,建议改成++i,效率更高。
sxq310 2009-11-01
  • 打赏
  • 举报
回复
第一题 i=i*2可以看出i是以2的指数方式增加的,即i=2*2*2···*2*(1)<=n;所以是有2^f(n) <=n
第二题 a=0;b=1;是两条语句,
另外对于for(i=2;i <=n;i++) (2) i++是先执行后自增,当i=n时循环内部执行完后还得执行i=n+1虽然为0 不进行内部循环


33,009

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧