Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
全面超越BERT、XLNet,中文最强NLP模型百度ERNIE2.0发布!
今年3月份,百度发布了NLP模型ERNIE初代版本。这个模型刚一出世,便取得了骄人成绩:在中文任务中,全面超越当前最强NLP模型BERT,一度引发业界广泛关注和探讨。而短短4个月时间,百度ERNIE就进化到了2代版本,这是一个中英文对话的AI框架和模型。
新智元
2019/08/05
2K0
不容错过,飞桨产业级PaddleNLP全景图大揭秘!
https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleNLP
用户1386409
2019/09/25
9850
不容错过,飞桨产业级PaddleNLP全景图大揭秘!
BERT+实体-百度ERNIE优化了啥
如何将知识(knowledge)信息融入到模型训练中,一种方式是将知识信息作为输入,成本是其他人使用的时候也要构建知识库,并且fine-tune和pre-train的知识库分布不一致,fine-tune也会出现问题。
百川AI
2021/10/19
9310
中文任务全面超越BERT:百度正式发布NLP预训练模型ERNIE
ERNIE Github 项目地址:https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE
机器之心
2019/04/09
1K0
中文任务全面超越BERT:百度正式发布NLP预训练模型ERNIE
芝麻街跨界NLP,没有一个ERNIE是无辜的
之前发在知乎、AINLP以及CSDN上的预训练模型系列文章,最近打算整理到公号上。另外欢迎大家左下角阅读原文关注我的知乎专栏:【BERT巨人肩膀】
NewBeeNLP
2020/08/26
1.7K0
芝麻街跨界NLP,没有一个ERNIE是无辜的
百度正式发布ERNIE 2.0,16项中英文任务超越BERT、XLNet,刷新SOTA
近两年,以 BERT、XLNet 为代表的无监督预训练技术在多个自然语言处理任务上取得了技术突破。基于大规模数据的无监督预训练技术在自然语言处理领域变得至关重要。
机器之心
2019/08/02
8960
百度正式发布ERNIE 2.0,16项中英文任务超越BERT、XLNet,刷新SOTA
自然语言处理中的迁移学习(上)
本文转载自公众号「哈工大SCIR」(微信ID:HIt_SCIR),该公众号为哈尔滨工业大学社会计算与信息检索研究中心(刘挺教授为中心主任)的师生的信息分享平台,本文作者为哈工大SCIR 徐啸。
AI科技评论
2019/10/23
1.4K0
自然语言处理中的迁移学习(上)
【ERNIE】深度剖析知识增强语义表示模型——ERNIE
无监督文本的深度神经网络的出现,nlp领域又火了起来,深度神经网络大大提升了nlp任务的效果。虽然早期的网络也是基于上下文进行的向量建模,但是由于单向信息流的弊端,效果上始终难以大幅度提升。Transformer中的多层self-attention的出现,推进了深度网络的发展。Google提出的BERT模型,通过掩盖的term,利用多层的self-attention的双向建模能力,横扫了NLP比赛的各大排行榜。
zenRRan
2019/12/23
2.2K0
【ERNIE】深度剖析知识增强语义表示模型——ERNIE
NLP之从word2vec到ELMO GPT再到BERT与attention transformer过程笔记与详解
在NLP自然语言处理学习或者发展过程中,在13年word2vec word embedding后,人们发现一个单词通过Word Embedding表示,很容易找到语义相近的单词,但单一词向量表示,不可避免一词多义问题。于是迎来Google的ELMO transformer BERT等动态表征模型,BERT模型更是刷新了GLUE benchmark的11项测试任务最高记录。
大鹅
2021/02/21
3.4K0
一文读懂深度学习:从神经元到BERT
自然语言处理领域的殿堂标志 BERT 并非横空出世,背后有它的发展原理。今天,蚂蚁金服财富对话算法团队整理对比了深度学习模型在自然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型,深入浅出地介绍了深度学习在 NLP 领域进展,并结合工业界给出了未来的 NLP 的应用方向,相信读完这篇文章,你对深度学习的整体脉络会有更加深刻认识。
统计学家
2019/05/27
1.3K0
百度NLP主任架构师全面讲解百度语义表示技术及最新进展
语义计算方向在百度NLP成立之初就开始研究,研究如何利用计算机对人类语言的语义进行表示、分析和计算,使机器具备语义理解能力。相关技术包含语义表示、语义匹配、语义分析、多模态计算等。
用户1386409
2019/09/09
1.1K0
百度NLP主任架构师全面讲解百度语义表示技术及最新进展
奇点已过?聊聊BERT之后的NLP时代
本文作者 吴金龙,爱因互动技术合伙人,算法负责人。本文转自知乎专栏“智能对话机器人技术”,欢迎大家关注。
AI研习社
2019/06/14
8300
奇点已过?聊聊BERT之后的NLP时代
后BERT时代:15个预训练模型对比分析与关键点探究
在小夕之前写过的《NLP的游戏规则从此改写?从word2vec, ELMo到BERT》一文中,介绍了从word2vec到ELMo再到BERT的发展路径。而在BERT出现之后的这大半年的时间里,模型预训练的方法又被Google、Facebook、微软、百度、OpenAI等极少数几个玩得起游戏的核心玩家反复迭代了若干版,一次次的刷新我们这些吃瓜群众的案板上的瓜。
zenRRan
2019/08/21
2.2K0
后BERT时代:15个预训练模型对比分析与关键点探究
预训练模型,NLP的版本答案!
问题其实很多,模型训练慢,一个月迭代一次很正常(现在做业务,两周就要有一轮迭代),显卡内存动不动就给爆了。
NewBeeNLP
2021/10/22
8880
预训练模型,NLP的版本答案!
按照时间线帮你梳理10种预训练模型
本文的主要目的是理清时间线,关注预训练的发展过程,进行模型间的联系和对比,具体原理和细节请参考原论文和代码,不再一一赘述。
zenRRan
2020/09/22
2.1K0
按照时间线帮你梳理10种预训练模型
NLP领域预训练模型的现状及分析
小牛翻译,核心成员来自东北大学自然语言处理实验室,由姚天顺教授创建于1980年,现由朱靖波教授、肖桐博士领导,长期从事计算语言学的相关研究工作,主要包括机器翻译、语言分析、文本挖掘等。团队研发的支持140种语言互译的小牛翻译系统已经得到广泛应用,并研发了小牛翻译云(https://niutrans.vip)让机器翻译技术赋能全球企业。
AI科技评论
2019/11/07
1.1K0
NLP领域预训练模型的现状及分析
NLP的12种后BERT预训练方法
论文:A Robustly Optimized BERT Pretraining Approach.
zenRRan
2020/02/24
1.3K0
强烈推荐| 飞桨十大中文NLP开源工具详解
PaddleNLP是基于飞桨(PaddlePaddle)开发的工业级中文NLP开源工具与预训练模型集,将自然语言处理领域的多种模型用一套共享骨架代码实现,可大大减少开发者在开发过程中的重复工作。PaddleNLP提供依托于百度百亿级大数据的预训练模型,适应全面丰富的 NLP任务,方便开发者灵活插拔尝试多种网络结构,并且让应用最快速达到工业级效果。下面小编就带你一一了解PaddleNLP支持的十大NLP任务和工具。
用户1386409
2019/06/21
2.8K0
强烈推荐| 飞桨十大中文NLP开源工具详解
【综述专栏】一文回顾Transformer 和 预训练模型
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
马上科普尚尚
2021/05/20
1.6K0
【NLP】预训练模型综述
摘要:近年来,预训练模型的出现将自然语言处理带入了一个新的时代。本文概述了面向自然语言处理领域的预训练模型技术。我们首先概述了预训练模型及其发展历史。并详细介绍自然语言处理领域的经典预训练模型,包括最经典的预训练模型技术和现在一系列新式的有启发意义的预训练模型。然后梳理了这些预训练模型在自然语言处理领域的优势和预训练模型的两种主流分类。最后,对预训练技术的未来发展趋势进行了展望。
黄博的机器学习圈子
2020/05/26
2.2K0
【NLP】预训练模型综述
推荐阅读
相关推荐
全面超越BERT、XLNet,中文最强NLP模型百度ERNIE2.0发布!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档