一个例子说明算法

原创
2014/12/30 13:37
阅读数 27

        看过一书《大话数据结构》,此乃风清扬前辈所著,此书为我们阐述了数据结构及算法的知识。程序的编写常谈到算法的重要性,曾经我也不以为然,如大部分人所想:硬件性能越来越高,算法所带来的优化也无关紧要了。其实不然,有时间算法的优化对程序性能的提高远远超出硬件的优化。

        如以下例子:

package cn.windy;


/**
 * 通过求1~n的和,阐述何为算法
 * @author JIL
 *
 */
public class SumDemo {
	public static int N=100;
	public static void main(String[] args){
		SumDemo sumDemo=new SumDemo();
		long sum1Begin=System.currentTimeMillis();
		sumDemo.sum1(N);
		System.out.println("sum1() time:"+String.valueOf(System.currentTimeMillis()-sum1Begin));
		long sum2Begin=System.currentTimeMillis();
		sumDemo.sum2(N);
		System.out.println("sum2() time:"+String.valueOf(System.currentTimeMillis()-sum2Begin));
	}
	
	public void sum1(int n){
		System.out.println(">>n:"+n);
		int sum=0;
		for(int i=1;i<=n;i++){
			sum+=i;
		}
		System.out.println("sum1():"+sum);
	}
	
	public void sum2(int n){
		System.out.println(">>n:"+n);
		int sum=0;
		sum=(1+n)*n/2;
		System.out.println("sum2():"+sum);
	}
}

此段代码是我们从小就知道的一个问题---1到n求和的问题,当n为100时,我们可以得到如下结果

我们能看出使用sum2()所提出的方案在n=100的情况下已经优于常规算法,我们将n设为更大的数量级更能发现sum1()及sum2()的运行时间差异。当数量级到一定程度,人脑使用sum2()的算法就会比sum1()的算法快。

        算法在计算机执行程序中加入人的思维,进而提高运算效率。当我们在编写性能要求的软件时,将一些关键代码使用优化算法是有必要的。当然,我们也要避免草木皆兵,写任何代码都陷入算法的优化,进而让项目进度缓慢前行。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部