`
hisdonkey
  • 浏览: 11878 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

抄来一个例子:关于代码优化,斐波那契数列为例

    博客分类:
  • J2SE
 
阅读更多
public class TestFib {
	
	public static void main(String[] args) {
		
		long n = 100l;
		
		long t1 = System.currentTimeMillis();
		long r1 = fib(n);
		long t2 = System.currentTimeMillis();
		//n到达一定大小之后,等待时间漫长到无法忍受,可能万物终点?
		System.out.println("结果是: " + r1 + ", 耗时: " + (t2 - t1) + "MS");
		
		//无论n多大,几乎都是0MS
		long t3 = System.currentTimeMillis();
		long r2 = fib2(n);
		long t4 = System.currentTimeMillis();
		System.out.println("结果是: " + r2 + ", 耗时: " + (t4 - t3) + "MS");		
		
	}
	
	/**
	 * 普通方法:冗余计算次数过多,使其运算效率极低
	 * @param n
	 * @return
	 */
	public static long fib(long n) {
		if(n==0l) {
			return 0l;
		} else if(n==1l) {
			return 1l;
		} else {
			return fib(n-1) + fib(n-2);
		}
	}
	
	/**
	 * 优化后的方法:基本无冗余计算,速度极快
	 * copy from Elminster in the forum of Java in Javaeye
	 * @param n
	 * @return
	 */
	public static long fib2(long n) {
		long[] results = new long[(int)(n+1)];
		for (long i = 0; i < results.length; i++) {
			if(i==0l) {
				results[(int)i] = 0l;
			} else if(i==1l) {
				results[(int)i] = 1l;
			} else {
				results[(int)i] = results[(int)(i-1l)] + results[(int)(i-2l)];
			}
		}
		return results[(int)n];
	}
	
}
分享到:
评论

相关推荐

    100例C语言经典算法[汇编].pdf

    首先,让我们以斐波那契数列为例。这个数列在自然界中有着广泛的应用,例如植物的叶序、果实的排列等。在编程中实现斐波那契数列,通常需要用到循环结构。通过初始化两个变量`f1`和`f2`,分别表示数列中的前两个数,...

    递归.zip

    以计算斐波那契数列为例,其递归实现如下: ```python def fibonacci(n): if n &lt;= 1: return n else: return fibonacci(n-1) + fibonacci(n-2) ``` 这个例子展示了递归的典型结构:基础条件(n )和递归调用...

    算法与数据结构:6-栈和队列3.pdf

    《算法与数据结构:6-栈和队列3》主要讲解了栈和队列在实现递归中的应用,特别以斐波那契数列为例子进行了深入的阐述。斐波那契数列是一个典型的递归问题,其特点是每一项等于前两项之和。在讲解过程中,通过两种...

    动态规划快速入门手册V0.10

    以斐波那契数列为例,改进后的代码如下: ```c int d[100]; // 用于存储斐波那契数列的数组 void init() { // 初始化数组 for (int i = 0; i ; i++) { d[i] = -1; // -1 表示该位置的值未被计算 } } int f(int ...

    c语言课程设计 迪杰斯特拉算法的应用 (源程序+报告)

    1. 初始化:设定源节点的距离为0,其他所有节点的距离为无穷大(通常用一个较大的整数表示),并创建一个优先队列(如二叉堆或斐波那契堆)用于存储节点和它们当前的距离。 2. 将源节点放入优先队列,并进行标记,...

    leveled queue

    这个例子展示了如何用Python实现一个简单的Level Queue,其中`queues`列表存储了10个子队列,每个子队列对应一个优先级。 总结来说,Level Queue是一种高效处理多优先级任务的数据结构,它结合了优先级队列和分层...

    C++基本算法思想之递推算法思想

    以斐波那契数列为例子,递推关系是:Fn = Fn-1 + Fn-2,其中Fn表示第n个月的兔子总数。基础情况是F1 = F2 = 1,因为兔子在第一个月和第二个月都只有一对。通过递推关系,我们可以计算出任何月份的兔子总数。 在C++...

    Chapter-2 数学基础与数据结构1

    以斐波那契数列为例子,其递归公式为 \(Fib(n) = Fib(n-1) + Fib(n-2)\)。通过解特征方程,我们可以得到斐波那契数列的时间复杂度分析。 非同质递归方程的求解更复杂,可能涉及多种方法,包括待定系数法或特征根法...

Global site tag (gtag.js) - Google Analytics