喵喵学动态规划(待补完)

1. 导入

2. DP可解

  确认一个问题是否DP可解是使用DP算法前最重要的一步。

2.1 相关概念

  状态:内存中存储的变量构成了计算机当前的状态。
  状态转移:如何由当前状态计算出下一时刻的状态。
  空间复杂度:空间复杂度是由状态和状态转移计算所需的变量空间决定的。
  时间复杂度:时间复杂度由开始的状态到最终的状态决定的。
  阶段:随着问题的解决,在同一个时刻可能会得到的不同状态的集合。举个例子,假如把你放在一个围棋棋盘上的某一点,你每一步只能走一格,因为你可以东南西北随便走,所以你当你同样走四步可能会处于很多个不同的位置。从头开始走了几步就是第几个阶段,走了n步可能处于的位置称为一个状态,走了这n步所有可能到达的位置的集合就是这个阶段下所有可能的状态。
  后效性:之前的路线会影响下一步的选择,这称为后效性。

2.2 不同阶段引出的不同算法

  假如问题有n个阶段,每个阶段都有多个状态,不同阶段的状态数不必相同,一个阶段的一个状态可以得到下个阶段的所有状态中的几个。那我们要计算出最终阶段的状态数自然要经历之前每个阶段的某些状态。
  一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的。

2.2.1 递推:每个阶段只有一个状态

2.2.2 贪心:每个阶段的最优状态都是由上一个阶段的最优状态得到的

  贪心算法是动态规划的一个特例。

2.2.3 搜索:每个阶段的最优状态是由之前所有阶段的状态的组合得到的

2.2.4 动态规划:每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的

  每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到,这个性质叫最优子结构,能写出状态转移方程的就说明满足最优子结构。
  而不管之前这个状态是如何得到的,这个性质叫无后效性。
  动态规划是最优化情况下的分治算法,如何拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决是动态规划的关键。拆分问题靠的就是状态的定义和状态转移方程的定义。
  状态:
  状态转移方程:

3. DP经典问题

3.1 斐波那契数列

3.2 最大上升子序列

  给定一个数列,长度为N,求这个数列的最长上升(递增)子数列(LIS)的长度.
  以1 7 2 8 3 4为例:
  这个数列的最长递增子数列是 1 2 3 4,长度为4;
  次长的长度为3, 包括 1 7 8; 1 2 3 等.

3.3 背包问题

  背包问题是经典的NP完全问题,背包容量为不太大的整数时可以使用DP算法求解背包问题。

3.4 其他问题

  背包问题. (poj1837,poj1276)
  型如下表的简单DP(可参考lrj的书 page149):
  E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
  E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列) (poj3176,poj1080,poj1159)
  C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)
  较为复杂的动态规划(如动态规划解特别的旅行商TSP问题(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
  记录状态的动态规划. (POJ3254,poj2411,poj1185)
  树型动态规划(poj2057,poj1947,poj2486,poj3140)
  需要用数据结构优化的动态规划.(poj2754,poj3378,poj3017)
  四边形不等式理论.较难的状态DP(poj3133)

4. 参考资料

https://www.zhihu.com/question/23995189/answer/35429905
https://www.zhihu.com/question/52165201
https://www.zhihu.com/question/38213967/answer/77586917

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,252评论 0 18
  • 分治方法 将问题划分成互不相交的子问题 递归地求解子问题 将子问题的解组合起来 动态规划(两个要素:最优子结构、子...
    superlj666阅读 491评论 0 0
  • 树形动态规划,顾名思义就是树+DP,先分别回顾一下基本内容吧:动态规划:问题可以分解成若干相互联系的阶段,在每一个...
    Mr_chong阅读 1,453评论 0 2
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,719评论 0 33
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,621评论 0 89