• 动态规划的楼层算法


    这是一种常用的算法,本人摸索出一个规律:
    就是 n层阶梯,每次最多m个台阶,一共有F(n) = F(n-1) + F(n-2)+ F(n-m)种走法,或者把上楼层想象为下楼!!!
    理论在这:http://www.cnblogs.com/CCBB/archive/2009/04/25/1443441.html


    #
    -*- coding:utf8 -*- class Algorithm: stairs = 10 maxSteps = 2 def calNStep(self, stairs, append=''): if len(append) == Algorithm.stairs: print(append) if stairs < 2: return stairs steps=0 for i in range(self.maxSteps): j=i+1 steps += self.calNStep(stairs - j, append+str(j)*j ) return steps algo = Algorithm() total=algo.calNStep(Algorithm.stairs) print("%d层阶梯,每次最多%d个台阶,一共有%d种走法" %(Algorithm.stairs,Algorithm.maxSteps,total)) # Algorithm.maxSteps=3 # total=algo.calNStep(Algorithm.stairs) # print("%d层阶梯,每次最多%d个台阶,一共有%d种走法" %(Algorithm.stairs,Algorithm.maxSteps,total))
    /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/wuqj/PycharmProjects/testPy/step.py
    1111111122
    1111112222
    1111122122
    1111221122
    1111222222
    1112211122
    1112212222
    1112222122
    1122111122
    1122112222
    1122122122
    1122221122
    1122222222
    1221111122
    1221112222
    1221122122
    1221221122
    1221222222
    1222211122
    1222212222
    1222222122
    2211111122
    2211112222
    2211122122
    2211221122
    2211222222
    2212211122
    2212212222
    2212222122
    2222111122
    2222112222
    2222122122
    2222221122
    2222222222
    10层阶梯,每次最多2个台阶,一共有55种走法
    
    Process finished with exit code 0
    

    我总结了斐波那契数列算法分析的规律, 用python写了一个,希望对大家有帮助。

    图:

           简单说,就是斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

    递推公式

    斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
    如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2)
    显然这是一个线性递推数列
     

    另外斐波那契数列在实际工作中应该用的很少,尤其是当数据n很大的时候(例如:1000000000),所以综合考虑基本普通的非递归O(n)方法就很好了,没有必要用矩阵乘法。

        

     
  • 相关阅读:
    sql中的Bulk 导入txt文本
    通过SQL自动添加流水号
    JAVA XML格式化输出
    nginx 服务端口权限13的问题
    使用hangfire在xunit中
    自动提交代码
    系统性能测试
    前端性能——速度之书
    node fs相对路径
    yum 初始化国内
  • 原文地址:https://www.cnblogs.com/sunsky303/p/6475900.html
Copyright © 2020-2023  润新知