C语言的动态规划(1).ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

ACM程序设计今天,你了吗?动态规划(1)(Dynamicprogramming)先热身一下——求a1到d1的最短路径设Di为a1到i点的最短路径,则Dd1=min{Dc1+5,Dc2+6,Dc3+6}同样Dc1=min{Db1+2,Db2+8}Dc2=min{Db1+7,Db2+9}……Da1=0动态规划的含义有一类特殊的活动过程,可按时间顺序将整个过程划分成若干个互相联系的阶段,在每一个阶段需要做出决策。在这种多阶段决策问题中,各个阶段采取的决策依赖于当前状态,又随即引起状态的转移。最优子结构与无后效性由于动态程序设计是按阶段的顺序,直接在子问题最优解的基础上计算的,当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。下面再看一个例子Mod4最优路径问题有4个点ABCD,我们定义从A到D的所有路径中,长度除以4所得余数最小的路径为最优路径。求一条最优路径。Mod4最优路径分析分析:这个图是一个多阶段图,我们按上面思路来分阶段来求最优解A-B最优值min{2mod4,3mod4}=2A-C最优值min{(2+2)mod4,(2+2)mod2}=0A-D最优值min{(0+1)mod4,(0+3)mod4}=1这个结果显然是错误的,因为a4-a5-a6这条路径中(3+2+3)mod4=0为什么该题不行呢?动态规划解决问题应该是给定某一个阶段的状态状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响。“过去的步骤只能通过当前状态影响未来的发展,当前的状态是历史的总结”城市道路最短路径右图是城市道路示意图,每条边上数字是该街道的长度,求从A1到H1的最短路径长度(只允许往右或往上走)(1)计算直线的交点数问题描述:平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。输入:n(n=20)输出:每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数。样例输入4样例输出03456思考2分钟:如何解决?初步分析:我们将n条直线排成一个序列,直线2和直线1最多只有一个交点,直线3与直线1和直线2最多有两个交点…….,直线n和其他n-1条直线最多有n-1个交点,由此得出n条直线互不平行且无三线共点的最多交点数max=1+2+……(n-1)=n(n-1)/2,但本题不这么简单,因为问题问的是:这些直线有多少种不同的交点数?用暴力的方法,可以吗?试想一下: 这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30=1024^310^9=10亿)。所以,不可以如此暴力!!! 考虑一下: 从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。 同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。 如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。 结论:自顶向下的分析,自底向上的计算。Understand?(2)堆积木比赛为迎接校庆,艺术学院最近要搞一个积木比赛。每个游戏者有n种不同尺寸的长方形积木,每种有10块。游戏规则如下:(1)一块积木上表面和下表面各最多只能跟一个其他积木接触(2)放在上面的积木要能完全放在下面的积木上(3)谁堆的最高算赢(3)思考题:最长有序子序列解决方案:理论总结一、动态规划的基本思想一、动态规划的基本思想 如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。由此而来的基本思路是,用一个表记录所有已解决的子问题的答案,不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。二、动态规划的基本步骤 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值(最大值或最小值)的那个解。设计一个动态规划算法,通常可以按以下几个步骤进行:(1)找出最优解的性质,并刻画其结构特征。(2)递归地定义最优值。(3)以自底向上的方式计算出最优值。(4)根据计算最优值时得到的信息,构造一个最优解。 其中(1)——(3)步是动态规划算法的基本步骤。在只需要求出最优值的情形

文档评论(0)

金华 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档