一个demo告诉你优化算法的强大

这里的demo是一个累加算法,如1,2,3,4.....n

即:sum = 1+2+3+4......+n;

我们可以这样做:

 1 /**
 2      * 循环实现累加方法
 3      * @param value
 4      * @return
 5      */
 6     private static long cycle(long value) {
 7         long sum = 0;
 8 
 9         for (long i = 1,v = value; i <= v; i++) {
10             sum += i;
11         }
12         return sum;
13     }

另一种方法(高斯方法):

 1 /**
 2      * 高斯方法:<code>(n+1)*n/2</code><br>
 3      * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a>
 4      * @param value 
 5      * @return
 6      */
 7     private static long gaosi(long value) {
 8         long sum = 0;
 9         sum = (value + 1) * value / 2;
10         return sum;
11     }

我们可以写一个demo来测试他们的差别:

 1 /**
 2  * 
 3  */
 4 package com.b510.arithmetic;
 5 
 6 /**
 7  * 累加算法实现<br>
 8  * 
 9  * @date 2013-4-16
10  * @author hongten
11  * 
12  */
13 public class AddArithmetic {
14 
15     /**
16      * 循环实现累加方法
17      * @param value
18      * @return
19      */
20     private static long cycle(long value) {
21         long sum = 0;
22 
23         for (long i = 1,v = value; i <= v; i++) {
24             sum += i;
25         }
26         return sum;
27     }
28 
29     /**
30      * 高斯方法:<code>(n+1)*n/2</code><br>
31      * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a>
32      * @param value 
33      * @return
34      */
35     private static long gaosi(long value) {
36         long sum = 0;
37         sum = (value + 1) * value / 2;
38         return sum;
39     }
40     
41     public static void main(String[] args) {
42         //清理一下内存,但不一定会执行
43         System.gc();
44         // you should change value,then get the different results
45         long value = 10000000;
46         long sum = 0;
47         long start = System.currentTimeMillis();
48         sum = cycle(value);
49         long end = System.currentTimeMillis();
50         System.out.println("使用循环累加方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);
51         //清理一下内存,但不一定会执行
52         System.gc();
53         start = System.currentTimeMillis();
54         sum = gaosi(value);
55         end = System.currentTimeMillis();
56         System.out.println("使用高斯方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);
57         
58     }
59     
60 }

你可以改变main方法中的value的值,来测试他们所消耗的系统时间....

当然不同配置的机器运行结果是不一样的...

我机器运行情况:

使用循环累加方法从[1]累加到[10000000]用时 : [24]ms,结果:50000005000000
使用高斯方法从[1]累加到[10000000]用时 : [0]ms,结果:50000005000000
原文地址:https://www.cnblogs.com/hongten/p/hongten_addarithmetic.html