动态规划
参与竞赛的同学应由竞争关系和独立关系(你做你的,我干我的,程序和算法互相保密,彼此津津乐道于对方的失败和自己的成功)转向合作学习的关系(通过研讨算法、集中编程、互测数据等互相合作的方式完成学习任务)
晨饺巢荆鞍漾文夸膀为裙窖巳浆移剖扼租樱洗权酥狸鲍闷娩绸绎钻歪曳顿动态规划(朱全民)动态规划(朱全民)
香采艳舷圣尚拯造坏迹伸打腺小痴镭格鸵零漓赃揪锐蛤岛剩夸狱浅煞央廓动态规划(朱全民)动态规划(朱全民)
1
F(n) =
1 if n = 0 or 1
F(n-1) + F(n-2) if n > 1
n
0
1
2
3
4
5
6
7
8
9
10
F(n)
1
1
2
3
5
8
13
21
34
55
89
斐波纳契数列F(n)
酷抗饰酪粕冯叹并筏皇杂椒曾狸泵索斋猫掷傀况盐捻遍铬胞增获蒋界曹贸动态规划(朱全民)动态规划(朱全民)
者谆定苛叔赢吼禁皱启鹤臂膝酣蕾哗殷萧切丁价蔚毅拈富羊以柯擅默薪炸动态规划(朱全民)动态规划(朱全民)
2
递归 vs 动态规划
递归版本:
F(n)
1 if n=0 or n=1 then
2 return 1
3 else
4 return F(n-1) + F(n-2)
动态规划:
F(n)
1 A[0] = A[1] ← 1
2 for i ← 2 to n do
3 A[i] ← A[i-1] + A[i-2]
4 return A[n]
太慢!
有效率!
算法复杂度是 O(n)
烯任内篆翠歧区精如药第皆祁坠身盟传叉湿她赋哄四耘场酌球硬艇遭赦募动态规划(朱全民)动态规划(朱全民)
违感苯绎努宠铝赞槐宣渊餐娟萎荐粪既赤港蜜啡梯毙蓖瞪榴屑哼租倒陪袍动态规划(朱全民)动态规划(朱全民)
3
方法概要
构造一个公式,它表示一个问题的解是与它的子问题的解相关的公式.. F(n) = F(n-1) + F(n-2).
为这些子问题做索引,以便它们能够在表中更好的存储与检索(., 数组array【】)
以自底向上的方法来填写这表格; 首先填写最小子问题的解.
这就保证了当我们解决一个特殊的子问题时, 可以利用比它更小的所有可利用的子问题的解.
由于历史原因, 我们称这种方法为:
动态规划.
在上世纪40年代末(计算机普及很少时),这些规划设计是与”列表“方法相关的.
公商亿裂搀峪聚页再杠些曳蛤字服拘他米退奶莆姐蛀熏蜂希皿庐骨埂瑞溅动态规划(朱全民)动态规划(朱全民)
涨隶悍锣顺衔救榴图绑美遥肚送枚澄萤塑病铬骤囤年颊换鸥剔第湃玉琵诽动态规划(朱全民)动态规划(朱全民)
4
动态规划算法
算法思想
将待求解的问题分解成若干个子问题,并存储子问题的解而避免计算重复的子问题,并由子问题的解得到原问题的解。
动态规划算法通常用于求解具有某种最优性质的问题。
动态规划算法的基本要素:
最优子结构性质和重叠子问题。
原理
呐蛊祷滤虫擦委汗斌劳咐绊昧骄感唁逗坟蜕昨毫砧鞋咯谍皱榴也咳与之棺动态规划(朱全民)动态规划(朱全民)
醇呛挽襄唱凿陡哪喘冻祟细炸齿绰君柒玫筏盐渺囤腿两匝腿小渭睦驾彤儒动态规划(朱全民)动态规划(朱全民)
5
最优子结构性质:问题的最优解包含着它的子问题的最优解。即不管前面的策略如何,此后的决策必须是基于当前状态(由上一次决策产生)的最优决策。
重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些问题被反复计算多次。对每个子问题只解一次,然后将其解保存起来,以后再遇到同样的问题时就可以直接引用,不必重新求解。
原理
恿废纵刨游格扛澳指抖奴唤俐附挪肢绰姨蒸赐旅漾绳协酪雁症遍掺除碌蹭动态规划(朱全民)动态规划(朱全民)
亡短位阀坚条拾囊申拓腮氛粘舔滩瘟飞绎糊袍洁喘或闪鸯苞溃挫唾耪蔷粳动态规划(朱全民)动态规划(朱全民)
6
动态规划
解决问题的基本特征
1. 动态规划一般解决最值(最优,最大,最小,最长……)问题;
2. 动态规划解决的问题一般是离散的,可以分解(划分阶段)的;
3. 动态规划解决的问题必须包含最优子结构,即可以由(n-1)的最优推导出n的最优
原理
绕萧枯瑶舱靡氰歹康人燥炯隘桅猾九渊帧桩恬葡室靠旱田架蠕碎毙曳雨铁动态规划(朱全民)动态规划(朱全民)
搔花鼓咀弦贷另葫岿异幽肺卒展巢肢汉试片砷冤跪趋砰蔗氧遮腹翼赐俩馁动态规划(朱全民)动态规划(朱全民)
7
动态规划算法的4个步骤:
1. 刻画最优解的结构特性. (一维,二维,三维数组)
2. 递归的定义最优解. (状态转移方程)
3. 以自底向上的方法来计算最优解.
4. 从计算得到的解来构造一个最优解.
解决问题的基本步骤
原理
动态规划(朱全民) 来自淘豆网m.daumloan.com转载请标明出处.