1、斐波那契数列

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

(1)、递归算法 (三点: 终止条件(边界),最优子结构 F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2) 状态转移公式 F(n)=F(n-1)+F(n-2))

def fab(n):# 终止条件 边界if n <= 2:return 1else:# 最优子结构 状态转移公式return fab(n - 1) + fab(n - 2)

(2)、优化 递归算法 会重复计算多次同一个式子 如图 相同的颜色代表了方法被传入相同的参数。所以需要记录下已经计算过得数,防止重复计算

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 记录已经计算过得 值
dict_fab = {}def fab_2(n):# 终止条件 边界if n <= 2:return 1elif dict_fab.get(n):print('*')return dict_fab.get(n)else:# 最优子结构 状态转移公式dict_fab[n] = fab_2(n - 1) + fab_2(n - 2)return dict_fab[n]

(3)、动态规划

# 最终优化 动态规划  (大问题化成若干相同类型的子问题 然后一个个解决子问题)
def fab_3(n):# 由前往后推a = 1b = 1if n <= 2:print('fab({})={}'.format(n, b))return 1for i in range(n - 2):print(a, b)a, b = b, a + bprint('fab({})={}'.format(n, b))return b

2、盛水问题 Python解法

(1)、暴力解法

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def trap(height):sum_water = 0size = len(height)for i in range(size):max_left = 0max_right = 0for j in range(0, i + 1):max_left = max(max_left, height[j])for j in range(i, size):max_right = max(max_right, height[j])sum_water += min(max_left, max_right) - height[i]return sum_water

(2)、动态规划(记忆算法,记录i 位置的左右 最大数,减少for循环层级 时间复杂度 有o(n²)变为 o(n))

def trap_water_dy():height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]sum_water = 0size = len(height)max_left_lsit = [None]*sizemax_left_lsit[0] = height[0]max_right_list = [None]*sizemax_right_list[-1] = height[-1]for i in range(1, size):max_left_lsit[i] = max(height[i], max_left_lsit[i - 1])for i in range(size-1):max_right_list[size - 2 - i] = max(height[size - 2 - i], max_right_list[size - i - 1])for i in range(size):sum_water += min(max_left_lsit[i], max_right_list[i]) - height[i]return sum_water

(3)、双指针

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def trap_two_point():height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]left = 0right = len(height) - 1ans = 0left_max = 0right_max = 0while left < right:  # 循环数组一遍if height[left] < height[right]:  # 当左边的小于右边的 能装多少水 由左边的最高高度决定if height[left] >= left_max:left_max = height[left]ans += (left_max - height[left])left += 1else:  # 当右边小于左边时 装的水量由右边的最高高度决定if height[right] >= right_max:right_max = height[right]ans += (right_max - height[right])right -= 1return ans

Python 实现 动态规划 /斐波那契数列相关推荐

  1. python函数递归 斐波那契数列

    4.7 python函数递归 斐波那契数列 代码:(利用递归.format输出等) def fibonacci(n):if n==1 or n==2:f=1else:f=fibonacci(n-1)+ ...

  2. 用python语言编斐波那契数列_用python函数写斐波那契数列

    斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上, ...

  3. RUNOOB python练习题24 斐波那契数列的衍生问题

    用来练手的python练习题,原题链接 : python练习实例24 题干: 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13-求出这个数列的前20项之和. 拿到题目观察数列,我们不 ...

  4. RUNOOB python练习题6 斐波那契数列

    用来练手的python 练习题其六,原链接 : python练习实例6 题干 : 斐波那契数列 斐波那契数列可以说是很好的递归理解工具了,这里就用递归实现一下斐波那契数列. 源代码如下: # 返回fi ...

  5. python列表输出斐波那契数列_Python|运用列表求斐波那契数列

    问题描述 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--.前两项相加等于第三项.求任意一项,通常可以用函数来解题.但我们今天用列表来解题. 解决 ...

  6. python列表求斐波那契数列_python3 求斐波那契数列(Fibonacci sequence)

    输出斐波那契数列的前多少个数. 利用函数 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan # ----斐波那契数列( ...

  7. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...

    python斐波那契数列,本文是关于Python编程练习题和答案实例六,斐波那契数列应用的示例.引用百度关于斐波那契数列的介绍,大家先简单来的了解下,什么是斐波那契数列? 斐波那契数列(Fibonac ...

  8. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)

    递归和动态规划都是将原问题拆分成多个子问题然后求解,但是动态规划存储了子问题的解,不需要重复计算. 动态规划(Dynamic Programming,DP)需要转移方程和边界条件. 目录 一.70. ...

  9. python基础学习-斐波那契数列实现

    介绍 首先介绍一下斐波那契数列,斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称 ...

最新文章

  1. linux统计分析命令datamash
  2. oracle存储过程dbms_output.put_line()显示打印结果
  3. 算法---Lru缓存(Java)
  4. 空的宏定义作用及常见用法
  5. Python获取当前目录下所有文件的绝对路径并存储在文件中
  6. 设置python路径
  7. [导入]Spring Web Flow
  8. (day 09 - 递归)剑指 Offer 28. 对称的二叉树
  9. C语言中的函数(详解)
  10. Github上被疯传的Redis实战文档也太香了
  11. 学校计算机考试系统故障,解决在线考试系统设计的常见问题
  12. 高德地图----经纬度转地理位置,地理位置获取经纬度
  13. 傅里叶变换概念及公式推导
  14. 模拟人生 java 安卓版,超级模拟人生官方下载_超级模拟人生安卓版预约下载v1.0_3DM手游...
  15. 小兔子从小就想做一只很酷的兔子。
  16. 厚基础Linux——第七周作业
  17. 不来了解下JVM支持的语言有哪些?
  18. 如果删掉微信中一个功能,你的选择是什么
  19. androidP 对反射的限制之黑名单机制
  20. 为什么mac会卡顿,mac电脑卡顿怎么解决

热门文章

  1. hdu1978(递推dp)
  2. Windows查看网络端口被占用情况netstat命令
  3. loadrunner脚本练习
  4. bseg---faglflexta
  5. 日常工作部门及体系相关单词
  6. SAP各种凭证的取消小结
  7. 掌握5个核心要点,做一个高质量的数据分析报告
  8. 完美打工人罗永浩,到底错在哪?
  9. 元气森林难撕“网红”标签
  10. 内外受阻,金融壹账通还能走多远?