前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个demo告诉你优化算法的强大

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

作者头像
Hongten
发布2018-09-13 14:28:00
3520
发布2018-09-13 14:28:00
举报
文章被收录于专栏:Hongten

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

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

我们可以这样做:

代码语言:javascript
复制
 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     }

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

代码语言:javascript
复制
 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来测试他们的差别:

代码语言:javascript
复制
 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的值,来测试他们所消耗的系统时间....

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

我机器运行情况:

代码语言:javascript
复制
使用循环累加方法从[1]累加到[10000000]用时 : [24]ms,结果:50000005000000
使用高斯方法从[1]累加到[10000000]用时 : [0]ms,结果:50000005000000
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档