算法设计与分析:(二)动态规划

本文深入探讨动态规划算法的设计思想和应用条件,解释了动态规划求解问题时的优化原则和子问题间的最优子结构。通过背包问题的案例,详细阐述了动态规划的一般步骤,包括明确状态、定义dp数组、找出子问题依赖关系及自底向上计算子问题的优化函数值,以此帮助读者理解动态规划的核心概念。


动态规划本质上为带备忘录的穷举算法。对动态规划问题,直接套框架即可:问题有什么「状态」,有什么「选择」,然后穷举。

设计思想

动态规划算法适用于组合优化问题,通过划分子问题的边界,从子问题开始逐层向上求解,通过子问题之间的依赖关系进行推导计算,最大限度减少重复工作,提高算法效率。但需要较大的存储空间来存储子问题计算的中间结果。

使用动态规划的必要条件

使用动态规划的问题,必须满足优化原则

  • 适用动态规划算法解决的问题的特征:

    (1) 求解的问题是多阶段决策(优化)问题
    (2)求解的过程是多步判断,从小到大依次求解每个子问题,最后求解的子问题即为原始问题
    (3)子问题目标函数最优值之间存在依赖关系
    (4)子问题符合「最优子结构」,即:子问题间必须互相独立。

  • 优化原则:

    一个最有决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最有决策序列

    可以通俗理解为子问题间必须互相独立。

    啥叫相互独立?你肯定不想看数学证明,我用一个直观的例子来讲解。
    比如说,假设你考试,每门科目的成绩都是互相独立的。你的原问题是考出最高的总成绩,那么你的子问题就是要把语文考到最高,数学考到最高…… 为了每门课考到最高,你要把每门课相应的选择题分数拿到最高,填空题分数拿到最高…… 当然,最终就是你每门课都是满分,这就是最高的总成绩。
    得到了正确的结果:最高的总成绩就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值