动态规划基本思想以及应用

简介: 动态规划基本思想以及应用

前言


有些问题迟早要去面对。


一、动态规划的定义


动态规划:把一个待求解的问题划分成若干个子问题,先把各个子问题求解得出,再得出原问题的答案。对于多次出现的子问题,只求解一次,把答案保存起来,方便后续直接调用。(对于一些需要重复求解子问题的题目有很好的效果)


二、动态规划的适用情况(即被求解问题具有的性质)


2-1、最优子结构


最优子结构:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质。


2-2、子问题重叠


子问题重叠:即被求解问题在采用递归算法自顶向下求解时,每次产生的子问题并不总是新问题,有许多重复的子问题。这样采用动态规划就可以把多次出现的子问题只求解一次,把答案保存起来,方便后续调用。


2-3、无后效性


无后效性:即被求解问题的子问题的解是确定的,不会受到其他子问题的影响。


三、动态规划应用(斐波那契数列


斐波那契数列:1,1,2,3,5,8……

求解斐波那契数列的第n项?


3-1、采用传统递归方法

# 使用传统方法,递归调用。
def fb(n):
    if n < 3: return 1
    else: return fb(n-1)+fb(n-2)
# n的值越大,则求解速度越慢,这是因为递归要求解大量的重复子问题。
# 自顶向下解决问题


3-2、使用动态规划思想

# 使用列表生成式生成全为1的列表。
x= [1 for i in range(50)]
# 使用动态规划方法。
def dp(n):
    i=2
    while i<n:
        x[i]=x[i-1]+x[i-2]
        i+=1
    # 列表下标从0开始,所以要减1.
    return x[i-1]
# 自底向上解决问题,每个子问题都会记录在列表中,



四、动态规划解决问题的步骤


参考链接:

动态规划的思想.

动态规划基本思想.


总结


提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关文章
|
1月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
55 2
|
2月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)
|
7月前
动态规划基础
动态规划基础
64 0
|
7月前
|
算法
回溯算法思想
回溯算法思想
45 0
|
7月前
|
存储 缓存 算法
【算法训练-动态规划 零】动态规划解题框架
【算法训练-动态规划 零】动态规划解题框架
106 0
|
存储 人工智能 分布式计算
动态规划从理论到实践-深入理解贪心/分治/回溯/动态规划的算法思想
动态规划从理论到实践-深入理解贪心/分治/回溯/动态规划的算法思想
255 0
|
存储 人工智能 算法
【算法分析与设计】动态规划(上)
【算法分析与设计】动态规划(上)
|
人工智能 算法
贪心算法思想与练习
贪心算法思想与练习
133 2
|
算法
算法设计初步之动态规划
算法设计初步之动态规划