动态规划(Dynamic Programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域解决复杂问题的方法。它通过将问题分解为相对简单的子问题,并存储这些子问题的解(即重叠子问题的解),来避免计算重复的子问题,从而减少计算量。
动态规划通常用于解决优化问题,它可以分为两大类:
1. **线性动态规划**:这类问题的状态只和相邻的子问题有关,如最长公共子序列(LCS)、最长递增子序列(LIS)等。
2. **多维动态规划**:这类问题的状态和多个子问题有关,通常需要用表格或矩阵来存储状态,如0-1背包问题、编辑距离问题等。
动态规划的核心思想是:
- **最优子结构**:一个问题的最优解包含其子问题的最优解。
- **边界条件**:问题的边界情况,也是递归算法的终止条件。
- **状态转移方程**:问题规模由n变为n+1时的转化规律。
动态规划的步骤通常包括:
1. **刻画一个最优解的结构特征**。
2. **递归地定义最优解的值**。
3. **计算最优解的值,通常采用自底向上的方法**。
4. **利用计算出的信息构造一个最优解**。
动态规划是解决特定类型问题的一种非常有效的工具,尤其是当问题可以分解为若干个重叠的子问题时。在算法设计中,动态规划经常用来优化那些暴力解法会导致时间复杂度过高的算法。
作者个人简介:
💐大厂多年AI算法经验,创业中,兼任算法/产品/工程
🍎持续分享aigc干货
❤️提供人工智能相关岗位简历优化和技能辅导服务,欢迎骚扰。
🌺提供aigc产品推广服务
微信公众号:
Ai自然说
个人微信:
这是我的个人微信,欢迎添加,找我讨论AI相关的内容。
微信群:
攒了一个微信群,大家可以在里面讨论AI相关的技术、产品、运营、商业知识和资讯,欢迎扫码加入。
知识星球:
运营了一个知识星球,我在里面会定期分享一些关于ai的高质量干货,欢迎扫码加入。