JR 精品文章 - 从算法开始提高效率
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java语言深入 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
从算法开始提高效率
challengehope 原创   更新:2008-05-03 19:24:28  版本: 1.0   

package com.free.source;

/**
 * 前几天看了一个文章 
 * 说明了怎样提高程序的效率 
 * 我看到的一个观点就是从算法分析开始 
 * 对我有比较深的感触,
 * 特写下了下面的程序 
 * 和大家共同进步
 * @challengehope
 */
public final class SampleArithmeticAnalyse {
    /**
     * 私有的构造方法
     */
    private SampleArithmeticAnalyse(){
        //防止外部建立实例
    }
    
    /**
     * 计算给定开始和结束以及步长的和。<br>
     * <pre>
     * 算法:
     *  简单的累加
     * </pre>
     * @param start 开始
     * @param end 结束
     * @param step 步长
     */
    public static long sumNormal(final long start ,final long end , final long step){
        long sum = start ;
        long begin = start;
        while(begin < end){
            begin += step;
            sum += begin;
        }
        return sum;
    }
    
    /**
     * 计算给定开始和结束以及步长的和。<br>
     *     <pre>
     *  算法:
     *  根据 sum =(begin + end)/2 * ((end -begin)/step + 1)推导。
     *  </pre>
     * @param begin 开始
     * @param end 结束
     * @param step 步长
     */
    public static long sumEspecially(final long begin ,final long end , final long step){
        return (begin + end) * (end - begin + step) / (2 * step);
    }
}

// 测试代码
package com.free.test;

import com.free.source.SampleArithmeticAnalyse;

import junit.framework.TestCase;

public class TestSampleArithmeticAnalyse extends TestCase {

    /*
     * Test method for 'com.free.source.SampleArithmeticAnalyse.sumNormal(int, int, int)'
     */
    public void testSumNormal() {
        long  begin = System.currentTimeMillis();
        assertEquals(SampleArithmeticAnalyse.sumNormal(1,1000000001,2),250000001000000001l);
        long  end  = System.currentTimeMillis(); 
        System.out.println("SampleArithmeticAnalyse.sumNormal Cost: " + (end - begin)+" Mills!" );
    }

    /*
     * Test method for 'com.free.source.SampleArithmeticAnalyse.sumEspecially(int, int, int)'
     */
    public void testSumEspecially() {
        long  begin = System.currentTimeMillis();
        assertEquals(SampleArithmeticAnalyse.sumEspecially(1,1000000001,2),250000001000000001l);
        long  end  = System.currentTimeMillis(); 
        System.out.println("SampleArithmeticAnalyse.sumEspecially Cost: " + (end - begin)+" Mills!" );
    }
 
}


通过上面的测试代码可以很明显的看出效率的提升可以从算法开始。
大家有什么好的想法欢迎共享。





版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     13       0
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: Java堆和栈 & StringBuilder效率探究 上一篇文章
返回文章列表 返回〔Java语言深入〕
下一篇文章 主题: 全面解析JDBC <二>


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号