- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析第六章课件
第六章动态规划;6.1 一般方法
6.2 多段图
6.4 最优二分检索树
6.5 0/1背包问题
6.6 可靠性设计
6.7 货郎担问题
6.8 流水线调度问题;6.1 一般方法;20世纪50年代,美国数学家Richard Bellman提出,利用最优性原理及得到的递推关系式解决该类问题。
最优性原理(Principle of Optimality)
过程的最优决策序列具有如下性质: 无论过程的初始状态和初始决策是什么, 其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列。
如果对于所求解的问题最优性原理成立, 则说明用动态规划方法有可能解决该问题。而解决问题的关键在于获取各阶段间的递推关系式。;动态规划适用条件
最优性原理(最优子结构性质)
无后向性(无后效性)
子问题的重叠性
;6.1 一般方法;6.1 一般方法;图中的结点被划分成 k?2个不相交的集合Vi , 1?i?k,其中V1和Vk分别只有一个结点 s (源点) 和 t ( 汇点)。
图中所有的边u, v均具有如下性质:
若u?Vi ,则v?Vi+1 ,1?i?k,且每条边u, v均附有成本c(u, v).
从s到t的一条路径成本是这条路径上边的成本和。
多段图问题是求由s到t的最小成本路径。;例:多段图问题(multistage graph problem);假设s,v2,v3,…,vk-1,t是一条由s到t的最短路径
再假设从源点s开始,已作出了到结点v2的决策,因此v2就是初始决策所产生的状态
如果把v2看成是原问题的一个子问题的初始状态,解决这个子问题就是找出一条由v2到t的最短路径
这条最短路径显然是v2,v3,…,vk-1,t
如果不是,设v2,q3,…,qk-1,t由v2到t的更短路径,则路径s,v2,q3,…,qk-1,t肯定比s,v2,v3,…,vk-1,t路径短,这与假设矛盾,因此最优性原理成立.;6.1 一般方法;最优性原理对于0/1背包问题成立; 最优决策序列的表示;如果已作了k?1次决策, 1?k?1n ,设x1,…xk-1的最优决策值是r1,..,rk-1,它们所产生的状态为S1,…Sk-1
又设Xk={rk, 1, rk, 2, …, rk, pk}是xk的可能值的集合, Sk, jk是选取rk, jk决策之后所产生的状态, 1?jk?pk
?k, jk 是相应于Sk, jk的最优决策序列
因此相应于Sk?1的最优决策序列是:;向前处理法(forward approach)
最优决策序列的表示法启发我们从最后阶段开始,以逐步向前递推的方式, 列出求解前一阶段决策值的递推关系式, 即根据xi+1, … xn的那些最优决策序列来列出求取xi决策值的关系式。;6.1 一般方法;6.2 多段图;6.2 多段图;多段图向前处理算法的计算过程;1;在计算每个COST(i, j)的同时, 记下每个状态(结点j)所做出的决策(即l 的取值),令D(i, j)= l, 则容易求出这条最小成本的路径;多段图的向前处理算法
procedure FGRAPH(E,k,n,P)
real COST(n); integer D(n?1), P(k), r, j, k, n;
COST(n)?0;
for j=n?1 to 1 by ?1 do
寻找结点r, 满足j, r?E且使c(j,r)+COST(r)值最小
COST(j) ?c(j,r)+COST(r);
D(j)?r ;
repeat
P(1)?1; P(k)?n;
for j?2 to k?1 do P(j)?D(P(j?1)) ;
end FGRAPH;1;k=5; n=12;
COST(12)=0;
for j=11 downto 1 do
{ COST(j)=min{c(j,r)+COST(r)};
D(j)=r ; }
P(1)=1; P(k)=12;
for j=2 to 4 do P(j)=D(P(j-1)) ;;多段图向后处理的算法 ;多段图向后处理算法的计算过程;procedure BGRAPH(E,k,n,P)
real BCOST(n); int D(n?1), P(k), r, j, k, n;
BCOST(1)?0;
for j?2 to n do
寻找结点r, 满足r, j?E且使BCOST(r)+c(r, j)值最小
BCOST(j)? BCOST(r)+c(r, j);
D(j)?r ;
repeat
P(1)?1; P(k)?n;
for j?k?1 downto 2 do P(j)?D(P(j+1)) ;
文档评论(0)