广

Java编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    java 使用简单的demo实例告诉你优化算法的强大

    2018-11-09 09:48:39 次阅读 稿源:互联网
    零七广告

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

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

    我们可以这样做:
    代码如下:

    /**
          * 循环实现累加方法
          * @param value
          * @return
          */
         private static long cycle(long value) {
             long sum = 0;

             for (long i = 1,v = value; i <= v; i++) {
                 sum += i;
             }
             return sum;
         }

    另一种方法(高斯方法):
    代码如下:

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

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

    /**
      *
      */
     package com.b510.arithmetic;

     /**
      * 累加算法实现<br>
      *
      * @date 2013-4-16
      * @author hongten
      *
      */
     public class AddArithmetic {

         /**
          * 循环实现累加方法
          * @param value
          * @return
          */
         private static long cycle(long value) {
             long sum = 0;

             for (long i = 1,v = value; i <= v; i++) {
                 sum += i;
             }
             return sum;
         }

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

         public static void main(String[] args) {
             //清理一下内存,但不一定会执行
             System.gc();
             // you should change value,then get the different results
             long value = 10000000;
             long sum = 0;
             long start = System.currentTimeMillis();
             sum = cycle(value);
             long end = System.currentTimeMillis();
             System.out.println("使用循环累加方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);
             //清理一下内存,但不一定会执行
             System.gc();
             start = System.currentTimeMillis();
             sum = gaosi(value);
             end = System.currentTimeMillis();
             System.out.println("使用高斯方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);

         }

     }

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

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

    我机器运行情况:
    代码如下:

    使用循环累加方法从[1]累加到[10000000]用时 : [24]ms,结果:50000005000000
    使用高斯方法从[1]累加到[10000000]用时 : [0]ms,结果:50000005000000

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告