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

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

    动态规划空间换时间,解决不重复。此功能是非常突出的表现。。。

  • 相关阅读:
    575. Distribute Candies
    242. Valid Anagram
    349. Intersection of Two Arrays
    290. Word Pattern
    389. Find the Difference
    httpModules 与 httpHandlers
    JS获取浏览器信息及屏幕分辨率
    asp.net 页面编码 设置的几种方法
    IIS是如何处理ASP.NET请求的
    VS2010常用插件介绍之Javascript插件(一)
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4582484.html
Copyright © 2011-2022 走看看