算法:1、动态规划算法DP(Dynamic Programming)

算法介绍

  • 动态规划(Dynamic Programming,DP)‌,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。它的关键思想是对于最终结果依赖前序步骤的问题,将结果定义为状态值dp,然后推导出后续步骤由前序步骤表达的状态转移方程,进而逐步计算求得最终结果。

经典问题:打家劫舍

  • LEETCODE第198题,打家劫舍,问题如下:
    在这里插入图片描述

    在这里插入图片描述

  • 该问题与普通问题不一样的地方在于,偷了房间1就会导致不能偷房间2,而房间2中金额可能更多,导致不是最优结果。也有可能房间1金额不多但是房间3金额多,因此偷了房间2就不能偷房间3导致也不是最优结果。

  • 这样思考的话,问题就会比较混乱,无法解。

  • 因此,我们使用动态规划的思想,思考问题如下:
    在这里插入图片描述

算法总结

  • 通过以上例子,我们可以发现动态规划的核心在于建立用于评判好坏的dp指标和其随自变量的状态转移方程。
  • 算法的基本原理如下:
    • 最优子结构:一个问题的最优解包含了其子问题的最优解。
    • 重叠子问题:在解决问题的过程中,子问题的解会被重复计算多次。
    • 状态转移方程:描述了状态之间的关系,是动态规划的核心,用于从子问题的解推导出原问题的解。
    • 边界条件:通常是最小子问题的解,是递推的基础。
  • 算法的具体步骤为:
    • 定义状态:确定动态规划的状态,即问题的变量表示。
    • 状态转移:建立状态转移方程,描述如何从一个状态转移到另一个状态。
    • 初始化:确定初始条件,通常是基础情况的解。
    • 计算顺序:确定计算状态的顺序,通常是从底向上或从左到右。
    • 求解:根据状态转移方程和初始条件,计算出所有状态的值,最终得到问题的解。

算法的应用:

各种优化问题:

  • 最短路径问题:如Dijkstra算法和Floyd-Warshall算法。
  • 背包问题:给定一组物品,每个物品有重量和价值,确定在不超过背包容量的情况下能够装入的最大价值。
  • 编辑距离:计算将一个字符串转换为另一个字符串所需的最少操作次数(插入、删除、替换)。
  • 旅行商问题(TSP)‌:寻找访问每个城市一次并返回原点的最短可能路线。

决策问题:

在决策过程中,动态规划可以帮助做出最优决策,如:

  • 资源分配:在有限的资源下,如何分配资源以获得最大收益。
  • 库存控制:决定何时以及多少库存以最小化成本。
  • 序列决策:在多阶段决策过程中,每一步都以前一步的结果为基础,如马尔可夫决策过程(MDP)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天城寺电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值