前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >动态规划算法秘籍

动态规划算法秘籍

作者头像
rainchxy
发布于 2018-09-13 08:11:16
发布于 2018-09-13 08:11:16
1.1K0
举报
文章被收录于专栏:趣学算法趣学算法

本文来自通俗易懂算法入门书《趣学算法》。

动态规划是1957年理查德·贝尔曼在《Dynamic Programming》一书中提出来的,八卦一下,这个人可能有同学不知道,但他的一个算法你可能听说过,他和莱斯特·福特一起提出了求解最短路径的Bellman-Ford 算法,该算法解决了Dijkstra算法不能处理负权值边的问题。

Dynamic Programming,这里的Programming不是编程的意思,而是指一种表格处理法。我们把每一步得到的子问题结果存储在表格里,每次遇到该子问题时不需要再求解一遍,只需要查询表格即可。

4.1.1 算法思想

动态规划也是一种分治思想,但与分治算法不同的是,分治算法是把原问题分解为若干子问题,自顶向下,求解各子问题,合并子问题的解从而得到原问题的解。动态规划也是把原问题分解为若干子问题,然后自底向上,先求解最小的子问题,把结果存储在表格中,在求解大的子问题时,直接从表格中查询小的子问题的解,避免重复计算,从而提高算法效率。

4.1.2 算法要素

什么问题可以使用动态规划呢?我们首先要分析问题是否具有以下两个性质:

(1) 最优子结构

最优子结构性质是指问题的最优解包含其子问题的最优解。最优子结构是使用动态规划的最基本条件,如果不具有最优子结构性质就不可以使用动态规划解决。

(2) 子问题重叠

子问题重叠是指在求解子问题的过程中,有大量的子问题是重复的,那么只需要求解一次,然后把结果存储在表中,以后使用时可以直接查询,不需要再次求解。子问题重叠不是使用动态规划的必要条件,但问题存在子问题重叠更能够充分彰显动态规划的优势。

什么问题可以使用动态规划呢?我们首先要分析问题是否具有以下两个性质:

(1) 最优子结构

最优子结构性质是指问题的最优解包含其子问题的最优解。最优子结构是使用动态规划的最基本条件,如果不具有最优子结构性质就不可以使用动态规划解决。

(2) 子问题重叠

子问题重叠是指在求解子问题的过程中,有大量的子问题是重复的,那么只需要求解一次,然后把结果存储在表中,以后使用时可以直接查询,不需要再次求解。子问题重叠不是使用动态规划的必要条件,但问题存在子问题重叠更能够充分彰显动态规划的优势。

4.1.1 解题秘籍

遇到一个实际问题,如何采用动态规划来解决呢?

(1) 分析最优解的结构特征。

(2) 建立最优值的递归式。

(3) 自底向上计算最优值,并记录。

(4) 构造最优解。

本章通过8个实例,讲解了动态规划的解题过程。动态规划求解最优化问题时需要考虑两个性质:最优子结构和子问题重叠,只要满足最优子结构性质就可以使用动态规划,如果还具有子问题重叠,则更能彰显动态规划的优势。判断可以使用动态规划后,就可以分析其最优子结构特征,找到原问题和子问题的关系,从而得到最优解递归式。然后按照最优解递归式自底向上求解,采用备忘机制(查表法)有效解决子问题重叠,重复的子问题不需要重复求解,只需查表即可。

动态规划的关键:

(1)最优子结构判定

a. 作出一个选择;

b. 假定已经知道了哪种选择是最优的;

例如矩阵连乘问题,我们假设已经知道在第k个矩阵加括号是最优的,即(AiAi+1…Ak)(Ak+1Ak+2…Aj)。

c. 最优选择后会产生哪些子问题;

例如矩阵连乘问题,我们作出最优选择后产生两个子问题:(AiAi+1…Ak),(Ak+1Ak+2…Aj)。

d. 证明原问题的最优解包含其子问题的最优解。

通常使用“剪切—粘贴”反证法。证明如果原问题的解是最优解,那么子问题的解也是最优解。反证:假定子问题的解不是最优解,那么就可以将它“剪切”掉,把最优解“粘贴”进去,从而得到一个比原问题最优解更优的解,这与前提原问题的解是最优解矛盾。得证。

例如:矩阵连乘问题,c=a+b+d,我们只需要证明如果c是最优的,则a和b一定是最优的(即原问题的最优解包含子问题的最优解)。

反证法:如果a不是最优的,(AiAi+1…Ak) 存在一个最优解aˊ,aˊ<a,那么,aˊ+b+d<c,这与假设c是最优的矛盾,因此如果c是最优的,则a一定是最优的。同理可证b也是最优的。因此如果c是最优的,则a和b一定是最优的。因此,矩阵连乘问题具有最优子结构性质。

(2)如何得到最优解递归式

a.分析原问题最优解和子问题最优解的关系;

例如矩阵连乘问题,我们假设已经知道在第k个矩阵加括号是最优的,即(AiAi+1…Ak)(Ak+1Ak+2…Aj)。作出最优选择后产生两个子问题:(AiAi+1…Ak),(Ak+1Ak+2…Aj)。如果我们用m[i][j]表示AiAi+1…Aj矩阵连乘的最优解,那么两个子问题:(AiAi+1…Ak),(Ak+1Ak+2…Aj)对应的最优解分别是m[i][k],m[k+1][j]。剩下的只需要考察(AiAi+1…Ak)和(Ak+1Ak+2…Aj)的结果矩阵相乘的乘法次数了。两个结果矩阵相乘的乘法次数是pi*pk+1*qj。

因此,原问题最优解和子问题最优解的关系:m[i][j]= m[i][k]+m[k+1][j]+ pi*pk+1*qj

b.考察有多少种选择;

实质上,我们并不知道哪种选择是最优的,因此就需要考察有多少种选择,然后从这些选择中找到最优解。

例如矩阵连乘问题,加括号的位置k(AiAi+1…Ak)(Ak+1Ak+2…Aj),k的取值范围是{i,i+1,…,j-1},即i≤k<j,那么我们考察每一种选择,找到最优值。

c.得到最优解递归式。

例如矩阵连乘问题,m[i][j]表示AiAi+1…Aj矩阵连乘的最优解,根据最优解和子问题最优解的关系,并考察所有的选择,找到最小值就是我们要的最优解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年12月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一种基于小数据量做分析判断的方法
在进行业务开发时,可能经常需要根据累计的样本数据,进行判断;并根据判断的结果进行相关的处理。
ivanlwyan
2018/08/24
1.4K0
A/B Test 的统计原理和效果解读
持续快速有效的 A/B Test 是实现业务从十到百增长的必杀器,而背后的黑科技来源于基础的统计理论。为此,本文将介绍做 A/B Test 所涉及的重要统计学知识,以帮助更好的设计实验和解读实验结果,做出科学有效的数据驱动决策。
阿泽 Crz
2020/12/11
2.1K0
A/B Test 的统计原理和效果解读
用Scipy求解单个正态总体的置信区间
假定参数是射击靶上 10 环的位置,作一次射击,打在靶心 10 环的位置上的可能性很小,但打在靶子上的可能性就很大,用打在靶上的这个点画出一个区间,这个区间包含靶心的可能性就很大,这就是区间估计的基本思想。
用户3577892
2020/09/01
2K0
以数据之道:发现数据真与假?
从7.23动车事故开始,死亡35人便成为了一部分网民经久不衰的话题。他们认为,当事故死亡人数超过35人时,省市官员就必须为此负责,因此官员将有动机将死亡人数实际超过35人的事故压低到死亡35人以内。
herain
2022/04/27
4410
以数据之道:发现数据真与假?
AB试验(二)统计基础
AB试验(二)统计基础 随机变量 均值类指标:如用户的平均使用时⻓、平均购买金额、平均购买频率等 概率类指标:如用户点击的概率(点击率)、转化的概率(转化率)、购买的概率 (购买率)等 经验结论:在数
HsuHeinrich
2023/09/18
7491
AB试验(二)统计基础
业界 | 如果数据分布是非正态的怎么办?用切比雪夫不等式呀!
上图是万圣节的一周,在捣蛋和给糖之间,数据极客们在社交媒体上为这个可爱的网红词汇而窃窃私语。
大数据文摘
2018/12/26
1.2K0
数据并非都是正态分布:三种常见的统计分布及其应用
你有没有过这样的经历?使用一款减肥app,通过它的图表来监控自己的体重变化,并预测何时能达到理想体重。这款app预测我需要八年时间才能恢复到大学时的体重,这种不切实际的预测是因为应用使用了简单的线性模型来进行体重预测。这个模型将我所有过去的体重数据进行平均处理,然后绘制一条直线预测未来的体重变化。然而,体重减轻通常不会呈线性发展,使用更复杂的数学模型,如泊松回归,可能会更加贴近真实情况。
deephub
2024/06/17
4540
数据并非都是正态分布:三种常见的统计分布及其应用
数据科学19 | 统计推断-t分布置信区间
当样本量足够大,总体标准差已知时,根据中心极限定理可以用标准正态分布估计总体均值;t分布适用于小样本估计呈正态分布的总体均值。
王诗翔呀
2020/07/03
3.8K0
数据科学19 | 统计推断-t分布置信区间
R语言混合效应模型(mixed model)案例研究|附代码数据
在本文中,我们描述了灵活的竞争风险回归模型。回归模型被指定为转移概率,也就是竞争性风险设置中的累积发生率
拓端
2022/11/17
1.4K0
两篇文章带你深入理解A/B Testing(二)
导读:这里是A/B Testing的第二篇文章,如果希望了解A/B Testing 实际应用的指标说明,可以只读当前文章这部分。如果你希望了解一些理论基础,可以先看第一篇。
数据森麟
2021/01/08
7980
两篇文章带你深入理解A/B Testing(二)
斯坦福 Stats60:21 世纪的统计学:第十章到第十四章
在上一章中,我们讨论了如何使用数据来检验假设。这些方法提供了一个二元答案:我们要么拒绝要么未能拒绝零假设。然而,这种决定忽略了一些重要的问题。首先,我们想知道答案有多大的不确定性(无论结果如何)。此外,有时我们没有一个明确的零假设,因此我们想看到与数据一致的估计范围。其次,我们想知道效应实际上有多大,因为正如我们在上一章中的减重示例中看到的,统计上显著的效应未必是实际上重要的效应。
ApacheCN_飞龙
2024/01/16
2710
斯坦福 Stats60:21 世纪的统计学:第十章到第十四章
如何理解95%置信区间_95的置信区间和90的置信区间
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 经常有同学私信或留言询问相关问题,V号bitcarmanlee。github上star的同学,在我能力与时间允许范围内,尽可能帮大家解答相关问题,一起进步。
全栈程序员站长
2022/11/09
4.2K0
如何理解95%置信区间_95的置信区间和90的置信区间
一些统计学基础知识,Statistics basics
全距:最大值与最小值的差。仅描述数据的宽度,并没有描述数据上界和下届间数据的分布。
小末快跑
2019/07/03
1.1K0
当数据遇上代码:程序员的假设检验
在降本增效的大背景下,我们会尝试去使用价格更加合理的云服务,那么我们该如何测试服务SLI是否如其宣称一样?
用户6879030
2024/06/05
1360
当数据遇上代码:程序员的假设检验
Python数据科学:正态分布与t检验
区间估计用到了中心极限定理,表现为如果抽样多次,每次抽样都有一个均值,产生的多个均值服从正态分布。
小F
2020/10/09
2.1K0
Python数据科学:正态分布与t检验
没想到你是这个样子的置信区间
在关联分析的结果中,对于odd ratio值会给出95% CI的结果,这里的CI其实是confidence interval的缩写,代表置信区间。那么置信区间有什么用呢?
生信修炼手册
2019/12/19
1.2K0
没想到你是这个样子的置信区间
数据分析必备——统计学入门基础知识
导读:要做好数据分析,除了自身技术硬以及数据思维灵活外,还得学会必备的统计学基础知识!因此,统计学是数据分析必须掌握的基础知识,即通过搜索、整理、分析、描述数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学。统计学用到了大量的数学及其它学科的专业知识,其应用范围几乎覆盖了社会科学和自然科学的各个领域,而在数据量极大的互联网领域也不例外,因此扎实的统计学基础是一个优秀的数据人必备的技能。
数据社
2020/10/09
1.7K0
数据分析必备——统计学入门基础知识
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
AI科技评论按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI科技评论编译。 Jason Brownlee 许多随机机器学习算法存在
AI科技评论
2018/03/13
1.2K0
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
数据科学18 | 统计推断-渐近性
渐近性(asymptopia)是样本量接近于无穷大时统计行为的一个术语。渐近统计即大样本统计主要研究当样本量n→∞时统计方法的有关渐进性质。渐近性有助于简单的统计推断和估计,也是频率解释概率的基础。
王诗翔呀
2020/07/03
2.6K0
数据科学18 | 统计推断-渐近性
基于R语言混合效应模型(mixed model)案例研究|附代码数据
在本文中,我们描述了灵活的竞争风险回归模型。回归模型被指定为转移概率,也就是竞争性风险设置中的累积发生率
拓端
2023/02/10
1.3K0
推荐阅读
相关推荐
一种基于小数据量做分析判断的方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档