zoukankan      html  css  js  c++  java
  • 算法——动态规划篇——斐波那契数列

    斐波那契数列,又称黄金切割数列。指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以例如以下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。为此。美国数学会从1960年代起出版了《斐波纳契数列》季刊。专门刊载这方面的研究成果。

    以上内容来自百度百科。。

    今天主要是想用动态规划的思想求解斐波那契数列。用来观察动态规划带来的优势。空间换时间。不反复求解

    方法一採用的是常规的递归方式求解。会发现。在递归的过程中会有太多的反复性操作,比方说f5=f4+f3=(f3+f2)+(f2+f1)=((f2+f1)+(f1+f0))+((f1+f0+f1)),越到后面,基本上求解的都是反复性的解。採用动态规划,能够避免这一不足,同一时候还将已往的解保留了下来,提高了程序的效率。

    代码:

    package hello.ant;
    //斐波那契数列应该是:0,1,1,2,3,5,8,13,21,34,55,89,144,233,...
    //规律是:f[0]=0,f[1]=1,f[i]=f[i-1]+f[i-2],i>1
    
    public class AlogFibonacci2 {
    	public static void main(String[] args) {
    		int n=40;
    		long startTime=System.currentTimeMillis();
    		System.out.println(fibonacci(n));
    		System.out.println("
    time:"+(System.currentTimeMillis()-startTime));
    	}
    	static int fibonacci(int i){
    		if(i==0){
    			return 0;
    		}else if(i==1){
    			return 1;
    		}else {
    			return fibonacci(i-1)+fibonacci(i-2);
    		}
    	}
    }
    

    结果例如以下:

    102334155


    time:1199

    时间花的也比較多。

    动态规划方式:

    代码:

    package hello.ant;
    //斐波那契数列应该是:0,1,1,2,3,5,8,13,21,34,55,89,144,233,...
    //规律是:f[0]=0,f[1]=1,f[i]=f[i-1]+f[i-2],i>1
    
    public class AlogFibonacci {
    	public static void main(String[] args) {
    		int n=40;
    		long array[]=new long [n+1];
    		array[0]=0;
    		array[1]=1;
    		long startTime=System.currentTimeMillis();
    		for(int i=2;i<n+1;i++){
    			array[i]=array[i-1]+array[i-2];
    		}
    		for(int i=1;i<n+1;i++){
    			System.out.print(array[i]+"  ");
    		}
    		System.out.println("
    time:"+(System.currentTimeMillis()-startTime));
    	}
    }
    

    结果例如以下:

    1  1  2  3  5  8  13  21  34  55  89  144  233  377  610  987  1597  2584  4181  6765  10946  17711  28657  46368  75025  121393  196418  317811  514229  832040  1346269  2178309  3524578  5702887  9227465  14930352  24157817  39088169  63245986  102334155  
    time:1

    两者相比較,差距还是非常大的啊。

    动态规划空间换时间。不反复求解,这一特性表现的非常突出。。。

  • 相关阅读:
    [C++]猜词游戏简版
    [C++]异常处理实例-基础版
    C++Primer Plus习题记录-Chapter12
    C++Primer Plus习题记录-Chapter11
    [C++]MI(多继承)实例-基础版
    Windows下编译libevent及使用
    jquery点击回到顶部
    简体繁体转换
    检测ip和地区
    点击复制到剪切板
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5076378.html
Copyright © 2011-2022 走看看