• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2024-06-29 19:40 Aet 隐藏边栏 |   抢沙发  4 
文章评分 1 次,平均分 5.0

概述

  1. 动态规划(Dynamic Programming,简称 DP)是一种通过分解问题来解决复杂问题的算法技术,特别适用于具有最优子结构性质的问题,即问题的最优解可以由其子问题的最优解构建而成
  2. 动态规划的核心思想是将问题分解成更小的子问题,并保存这些子问题的解,避免重复计算,从而提高效率

概念

  1. 分治思想
    1. 将问题分解为相互重叠的子问题,通过解决子问题来构建原问题的解
  2. 适用问题
    1. 通常用于解决具有最优子结构和重叠子问题性质的问题
  3. 方法
    1. 通过递归和记忆化搜索(自顶向下)或迭代(自底向上)的方法来求解问题

步骤

  1. 定义子问题
    1. 将原问题分解成若干子问题,找到子问题与原问题之间的关系
  2. 确定状态
    1. 确定每个子问题的状态,并找到状态转移方程
  3. 建立递归关系
    1. 根据子问题的解,建立状态转移方程,即递归关系
  4. 初始化
    1. 确定边界条件或初始状态
  5. 填表计算
    1. 使用自底向上或自顶向下的方法,依次计算子问题的解并存储,直至求解原问题

动态规划优缺点

优点

  1. 避免重复计算:
    1. 通过存储子问题的解,避免了重复计算,提高了效率
  2. 最优解:
    1. 在满足最优子结构性质的问题上,可以保证找到全局最优解

缺点

  1. 空间复杂度高:
    1. 需要额外的存储空间来保存子问题的解
  2. 适用范围有限:
    1. 仅适用于具有最优子结构性质和重叠子问题性质的问题

常见动态规划问题

  1. 斐波那契数列:
    1. 计算斐波那契数列的第 n 项
  2. 背包问题:
    1. 在给定的重量限制下,选择物品使得总价值最大
  3. 最长公共子序列:
    1. 找到两个序列的最长公共子序列
  4. 编辑距离:
    1. 计算将一个字符串转换成另一个字符串所需的最少操作次数
  5. 最短路径问题:
    1. 在加权图中找到从一个节点到另一个节点的最短路径
  6. 矩阵链乘法:
    1. 确定矩阵相乘的最优顺序,以使乘法次数最少

斐波那契数列

递归方法(存在重叠子问题)

动态规划方法(避免重复计算)

0/1 背包问题

概述

  1. 给定一组物品,每个物品有重量和价值,在总重量不超过背包容量的前提下,选择物品使得总价值最大

动态规划解法

最长公共子序列

概述

  1. 给定两个序列,找到它们的最长公共子序列

动态规划解法

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2024-06-30
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享