五大常用算法之二:动态规划算法(最详细全面的讲解)
发布日期:2021-05-08 01:40:30 浏览次数:22 分类:精选文章

本文共 687 字,大约阅读时间需要 2 分钟。

动态规划基础知识

一、基本概念

动态规划是一种解决多阶段最优化决策问题的方法。每次决策都依赖于当前的状态,并随即引发状态的转移。这种基于阶段的最优化决策过程被称为动态规划。

二、基本思想与策略

动态规划的基本思想与分治法类似,通过将问题分解为若干子问题按顺序求解。每个子问题的解为下一个子问题提供有用信息。在求解每个子问题时,列出所有可能的局部解,保留那些可能达到最优的局部解,丢弃其他解。通过逐步解决各子问题,最终得到初始问题的最优解。

由于动态规划问题通常具有重叠子问题特性,为了减少重复计算,每个子问题的不同阶段的不同状态会被存储在一个二维数组中。

动态规划与分治法的主要区别在于:分解后的子问题往往不是独立的,而是有序的或可排序的,下一个子阶段的求解通常建立在上一个子阶段的解基础上。

三、适用的情况

动态规划适用于以下三个性质的问题:

  • 最优化原理:最优解包含最优子结构,即最优解的子问题也达到最优。
  • 无后效性:某阶段状态一旦确定,不受该状态以后决策的影响。
  • 有重叠子问题:子问题之间存在重叠,一个子问题在下一阶段可能被多次使用。
  • 四、求解的基本步骤

    动态规划的设计通常包括以下几个步骤:

  • 划分阶段:根据问题的时间或空间特征将问题分解为若干阶段,注意阶段必须是有序或可排序的。
  • 确定状态和状态变量:用不同的状态表示问题发展到各个阶段的各种客观情况,满足无后效性。
  • 确定决策并写出状态转移方程:通过相邻两个阶段的状态关系确定决策和转移方程。
  • 寻找边界条件:为状态转移方程提供递推终止条件。
  • 实际应用中,可以通过以下步骤设计动态规划:

  • 分析最优解的性质并刻画其结构特征。
  • 上一篇:BitMap的巧用(简单示例)Python
    下一篇:五大常用算法之一:分治算法(最详细全面的讲解)

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年04月01日 19时09分50秒