一个例子试着说明算法
2015-01-05 11:45
211 查看
看过一书《大话数据结构》,此乃风清扬前辈所著,此书为我们阐述了数据结构及算法的知识。程序的编写常谈到算法的重要性,曾经我也不以为然,如大部分人所想:硬件性能越来越高,算法所带来的优化也无关紧要了。其实不然,有时间算法的优化对程序性能的提高远远超出硬件的优化。
此段代码是我们从小就知道的一个问题---1到n求和的问题,当n为100时,我们可以得到如下结果
我们能看出使用sum2()所提出的方案在n=100的情况下已经优于常规算法,我们将n设为更大的数量级更能发现sum1()及sum2()的运行时间差异。当数量级到一定程度,人脑使用sum2()的算法就会比sum1()的算法快。
算法在计算机执行程序中加入人的思维,进而提高运算效率。当我们在编写性能要求的软件时,将一些关键代码使用优化算法是有必要的。当然,我们也要避免草木皆兵,写任何代码都陷入算法的优化,进而让项目进度缓慢前行。
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()的算法快。
算法在计算机执行程序中加入人的思维,进而提高运算效率。当我们在编写性能要求的软件时,将一些关键代码使用优化算法是有必要的。当然,我们也要避免草木皆兵,写任何代码都陷入算法的优化,进而让项目进度缓慢前行。
相关文章推荐
- 一个例子试着说明算法
- 数据结构和算法到底有什么用?一个例子说明。
- 用一个最简单的例子把OO的JavaScript说明白
- 以一个最简单的例子把OO的JavaScript说明白
- 一个最简单的例子,清楚说明回调函数的作用和强大功能
- [Weka]在自己的算法中调用Weka实现文本分类的一个例子
- 转载:用一个小例子来说明手工测试,自动化测试,系统命令,编程语言,API的关系
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来
- spring中实现rmi的一个例子及说明
- 一个关于逆运动学的 CCD 和 PIK 算法的说明
- 以一个最简单的例子把OO的JavaScript说明白
- 以一个最简单的例子把OO的JavaScript说明白
- [编程难题]编写一个求解时间满足约束的的算法.说明内详
- open party上和大家交流的一个例子,通过这里例子说明了大规模数据处理的深远意义
- 举一个简单例子来说明:如何在JSP中使用JavaBean
- [编程难题]编写一个求解时间满足约束的的算法.说明内详
- 用一个例子说明VBS语法
- Flex中的Timer类的一个例子和一些说明
- 以一个最简单的例子把OO的JavaScript说明白