两段同样目的的代码的比较...

bigtea 2003-04-13 10:45:46
以下两段代码都是求三个∑公式(分别为K,K^2,1/K)的和的程序.WIN2K/TC2.0下测试通过,请从可读性,执行效率等方面加以评述.
(1)#include <stdio.h>

main()
{
int n1=100,n2=50,n3=10;
float k;
float s1=0,s2=0,s3=0;

for (k=1;k<=n1;k++) s1=s1+k;
for (k=1;k<=n2;k++) s2=s2+k*k;
for (k=1;k<=n3;k++) s3=s3+1/k;

printf("The sum is:%8.2f",s1+s2+s3);
}
(2)#include <stdio.h>
main()
{

float k,s=0.0;

for (k=1;k<=100;k++)
{
if (k>50) {s=s+k;continue;}
if (k>10) {s=s+(k*k+k); continue;}
s=s+(1/k+k*k+k);
}

printf("\nThe sum is:%.2f",s);
}
...全文
60 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈硕 2003-04-17
  • 打赏
  • 举报
回复
Kernighan & Pike 著,裘宗燕译,《程序设计实践》p.135

请不要问我哪儿可以下载这本书。
bigtea 2003-04-17
  • 打赏
  • 举报
回复
呵呵,谢谢大佛.
messagebox 2003-04-17
  • 打赏
  • 举报
回复
肯定后一种效率高啦,傻瓜都知道的事
bigtea 2003-04-16
  • 打赏
  • 举报
回复
再加20分,回答我上面的问题。
bigtea 2003-04-16
  • 打赏
  • 举报
回复
请问楼上怎样测啊,是在程序中添加记录时间段的语句吧,请详细回答.
cdxiaogan 2003-04-14
  • 打赏
  • 举报
回复
时间复杂度:(1)3*O(n), (2)O(n);空间复杂度就不分析了。
说明(2)的效率高点,但都是线性的,只是比(1)高点;而可读性就没有(1)强了,这两者本来就存在矛盾的,所以编程需要取二者的最优组合;就目前来说,在不对效率产生重大影响的情况下,程序设计更趋向于有较强的可读性,为了增强代码的重用性,有时甚至牺牲一点效率来大幅度地提高可读性。在做复杂的大型软件时更是注重这一点。
陈硕 2003-04-14
  • 打赏
  • 举报
回复
前两个求和有精确的公式,后一个求和有相当不错的近似公式,可以O(1)解决。

如果非要用循环,我会选第一种。楼主可以测试一下到底哪种更快。
bm1408 2003-04-14
  • 打赏
  • 举报
回复
第二种了!
坐着等天亮 2003-04-14
  • 打赏
  • 举报
回复
X86结构的寄存器比较少,例如循环可以被优化成一个LOOP
然后里面的变量用寄存器来实现,那么运算就会快一些
但是如果变量一多,就没有那么多的寄存器来存放,只好放在内存里。
访问内存就慢了
bigtea 2003-04-14
  • 打赏
  • 举报
回复
又加了20分
bigtea 2003-04-14
  • 打赏
  • 举报
回复
1的循环里面变量较少,可以被优化成寄存器变量
请cliff详细解释
cdxiaogan 2003-04-14
  • 打赏
  • 举报
回复
sorry,我写法确实有误,我要表达的意思是,1用三次独立的循环,2用一次,时间都是O(n)。2中的循环变量也可以被优化成寄存器变量吧,只是它的判断会降低效率。编译还没学完,不知道这两种的执行代码分别是什么样子的。
坐着等天亮 2003-04-14
  • 打赏
  • 举报
回复
应该是1的效率高,因为
1的循环里面变量较少,可以被优化成寄存器变量
2的循环变量多,不一定可以优化,而且判断语句必须执行的。
坐着等天亮 2003-04-14
  • 打赏
  • 举报
回复
cdxiaogan(小干) :
时间复杂度没有什么3*O(n)的,要么O(n)要么O(n*logn)之类的,不会有常数的。
这个就像高数里的同级无穷大或者同价无穷小一样的。
mr_oydy 2003-04-13
  • 打赏
  • 举报
回复
我比较喜欢后者. :)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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