让我们重视程序运行效率
起初,程序运行效率一直是学习计算机的人们关心的话题。但是随着硬件的飞速发展,“运行效率”这个概念已经在校园和初学者之中淡化,只有在设计商业软件开发和程序设计竞赛时才能看见它的身影。这是我们目前的状况,也是值得大家思考的问题。
有必要改进程序的运行效率吗?
随着计算机硬件的发展,微机的速度越来越快(奔腾4处理器的主频已经上了3G,同步缓存等技术已经得到应用),运行软件的能力也越来越强,似乎程序的运行效率已经不在成为我们关注的焦点。的确,在学校的课堂上,老师几乎没讲过这方面的内容,同学对此也是一知半解;很多编程书籍也对此不闻不问。难道效率真的不重要了?其实,效率是很重要的,要不然就没有工作效率之说了。初学者认为不重要,那是因为写不出更高效的程序;即使能写出来,也会因为程序太小,而感觉不出执行上的差别。而在一些嵌入式系统中,程序的运行效率显得格外重要;小段代码的效率,直接影响到了大型软件的运行速度。所以说,我们很有必要去改进自己的程序,让它能够更快更好的运行。
日常的速算法完全有效吗?
人们日常用的速算法,对计算机来说并不是完全有效的。举个例子:大家都知道从1加到100怎么算:可以1+2+3+…….+100算出5050;也可以用简便的算法:(0+100)+(1+99)+(2+98)+……得到结果也是5050。显然第二种方法更适合人们计算,它的效率比顺序相加快得多,甚至口算就能迅速得到答案。但对于计算机来说,第二种方法并不比第一种快,如果程序编制不当,反而会降低计算速度。所以建议大家,对于一般的数值计算不必考虑用什么速算法,请相信CPU中运算器的能力。
程序算法是关键
(1)选择适当算法
要想提高程序运行效率,改进算法是最关键的。算法是影响程序运行效率的主要因素,在编写不同程序时要选择适当的算法。比如同样是查找算法,在处理不同数据时,效率是不同的,这是就要从中选择一个最好的。还比如,同一问题中可以用栈也可以用队列,这时就要考虑用哪个更好,还要考虑用顺序结构还是链式结构。总之,选择适当的算法是提高运行效率的关键。
(2)善于改进算法
大家一定都学过“冒泡排序”算法,也都会用。不知道有多少人改进过这种“古老”的算法。其实想法很简单,设一个标志位用来表示已经排过序的序列,当下一次比较时跳过这段,就能大大提高排序效率。这只是一个很简单的例子,目的是鼓励大家多多改进已有的算法,多些一些好的算法出来,这是很必要的,因为有时系统提供的语句是用不成的。就拿查询数据库来说,最简单的就是用select语句。其实这个语句是很有必要改进的,如果在大型数据库中直接这样写:Select xxx FROM xxx WHILE xxx ,可想而知它的效率有多么低下。所以说,我们要善于改进已有的算法。
(3)一个想法
这是我在改进程序运行效率的一个想法――多运算,少存储器操作。因为运算是由CPU中的运算器完成的,操作则是要到内存中,甚至外存中进行。两者相差几个数量级,执行速率当然不一样(虽然看不出来,实际是有区别的)。所以在编程过程中,能直接计算的就直接算,不要把数据移来移去的。
(4)小小的建议
要写出高效的算法,对基本的数据结构一定要理解,对基本的算法一定要熟练掌握。所以建议大家一定要学好数据结构,在不断的实践中提高算法的编制能力,这样你的程序才能更好的高效运行。这里还建议大家看看每期《程序员》的“编程擂台”,那里的程序都是讲效率的。
我写这篇文章的目的不是为了说明什么样的算法效率高,该用什么算法编制程序。而是发动大家一起来关心这个快被时代冷落的话题,让我们重视程序运行效率,把编程进行到底。