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!" ); } }
通过上面的测试代码可以很明显的看出效率的提升可以从算法开始。 大家有什么好的想法欢迎共享。
|
|