分享
 
 
 

从高斯数列谈代码效率

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

很多有关编程的书上说过,算法的高速与代码的短小往往是不可兼得的;特别是在当前的硬件环境(高速的CPU与大容量的硬盘)下,不必计较算法是否既是最快的又是最短的,一般来说,能达到二者之一就行了。然而我认为,在某些情况下,鱼与熊掌是可以兼得的——只需在算法中做一点人为的“手脚”。以下我将用一个简单的例子来谈这个问题,但我的前提是我决不使用那种spaghetti式的算法,即使能够获得高效的代码。

例:求1+2+3+……+100。

解1:用for循环来求(用C++来实现算法,下同)。

#include<iostream.h>

void main()

{

int i,sum=0;

for(i=1;i<=100;i++)sum+=i;

cout<<"sum="<<sum<<endl;

return;

}

解2:用递归来求。

#include<iostream.h>

int getsum(int);

void main()

{

int sum=getsum(100);

cout<<"sum="<<sum<<endl;

return;

}

int getsum(int x);

{

if(x==1)return(1);

else return(x+getsum(x-1));

}

很明显,以上两种算法中解2的效率较低,因为在递归中消耗了太多的系统资源。解1的效率确实很高,然而我要告诉你,它并不是效率最高的算法!现在请看我的代码,是我从一本入门级的教材上得到的灵感:

#include<iostream.h>

void main()

{

int sum=(1+100)*100/2;

cout<<"sum="<<sum<<endl;

return;

}

是的,这是高斯求和公式。但你看了这样的“算法”,也许会很不舒服,并告诉我:这不能算做一个好的算法,因为它没有体现出计算机的优越性。没错,你说得很对,那本教材举的这个例子也正是反例,并且不提倡这样编程,理由正如你所说的一样。

但是,不管你乐意不乐意,你都必须承认:这段代码是合法的,并且它不是spaghetti,可读性也很强;最重要的一点是它的效率非常高——它没有做100次循环,只做了三步运算,而且还节省出了一个变量(i)的存储单元。

教材是教材,编程是编程。教材的目的是让你设计出如何让计算机做更多工作的算法,而你甚至可以连高斯求和公式都不必知道,只让计算机不厌其烦地循环100次;编程的目的是以尽可能高效的算法得到正确答案,而不必计较应该采用循环还是高斯求和公式。然而两者又不能完全分离:如果一个程序员只注重前者,那么他的代码难免冗长或低速;如果他一味追求后者,那么他难免写出没几人看懂的高效spaghetti。

我想谈的东西到此为止。总之在程序的设计中,在特定的情况下,完全可以采用类似的方法来提高效率,这没有什么不好——毕竟,程序是用来求解的,而不是用来体现计算机的优越性的。从这里说开去,如果让你设计一个程序,打印1~100的素数,你如何处理“2”呢?

当然,如果针对本例(高斯数列)而言,最高效的代码应该如下:

#include<iostream.h>

void main()

{

cout<<"sum="<<5050<<endl;

return;

}

本文纯属个人意见,仅供参考。:)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有