算法合集之《“约制、放宽”方法在解题中的应用》.ppt

算法合集之《“约制、放宽”方法在解题中的应用》.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
——“约制、放宽”方法在解题中的应用 广东省中山纪念中学 陈启峰 “约制、放宽”方法的简单定义 “约制”方法——添增一些约束的条件、限制,并保证在这些条件和限制下依然能找到解。 “约制、放宽”方法的简单定义 “放宽”方法——减除、放宽一些条件、限制,并保证在这些条件和限制下依然能找到解。 引言 在分析问题、设计算法时,我们常常觉得条件、限制 [例题]消防站(POJ2152) LTC国有n个城市。城市间连着公路。每两个城市间有且只有一条通路。由于常发生火灾,LTC决定在某些城市建消防站。在城市k建一个消防站需要W(k)的费用。每个城市k在距离D(k)范围内,必须选择最近的消防站作为负责站。LTC想用最少的费用来满足以上要求。 数学模型 以城市为结点,公路为边, 路长为边权构树。令dis(i,j)为结点i、j间的距离。任务是建一些消防站,使得任意结点i,都有 并得使得目标函数 最小化。 算法模型分析 搜索? 图论算法? 树型动态规划? 尝试与探索 首先,确定状态。 一般地,状态有参数Root—— 表示研究对象为Root的子树。 如果只用Besti表示在i的子树中修 建满足要求的消防站的最少费用, 尝试与探索 尝试与探索 为了解决这种情况,我们通常会增加一个参数—— 最近消防站的距离或编号? 树内或外的最近消防站的编号? 初步分析 在分析中发现: 在状态转移时,难以保证最近消防站的距离或编号与定义的一致 ——换句话说,就是状态定义太严格、题目要求太苛刻。 “放宽”方法 主要障碍——“结点i在D(i)范围内,必须选择最近的消防站作为负责站 ” “放宽”方法 其实我们无须知道最近的消防站在哪,而只要在D范围内有消防站就行了。 限制:“结点i在D(i)范围内,必须选择最近的消防站作为负责站 ” “放宽”方法 现在结点享有一定“自由权”了,此时就有必要定义新状态。 “放宽”方法 令 表示 1、在i的子树建一些消防站; 2、在j上必须建一个消防站; 3、i的子树结点选择树内或j上 的可选消防站为负责站; 4、i必须选择j上消防站为负责站; 的最少总费用(j在i的子树外则不算在内) “放宽”方法 “放宽”方法 “放宽”方法 这样定义的好处是, “最近的消防站”在定义中消失了。 这种自由为转移方程提供了很大方便。 进一步分析 然而,此时要定下转移方程还是遇到了一点点困难,总觉得结点间相对独立。 原因:策略选取的任意性导致 “约制”方法 动态规划讲求拓扑顺序和无后效性。 于是不妨对策略增添限制 —— 令P1到负责站Pm的路径为P1 P2 P3……Pm,则任意Pi的负责站都为Pm。 “约制”方法 P1——P2——P3——P4……Pm “约制”方法 下面通过构造证明至少存在一个最优解满足该性质——P1到负责站Pm的路径P1 P2……Pm中任意Pi的负责站都为Pm。 “约制”方法 证明:假设某最优解不满足这性质。 Ⅰ构造:⑴增加结点s,在s和有消防 站的结点间连一条权为0的边。 ⑵以s为源点做Dijkstra,记 录下前驱结点。 ⑶如果结点上有消防站则选 择它为负责站,否则选择前 驱结点的负责站为负责站。 “约制”方法 最小费用=2 “约制”方法 Ⅱ此方案满足上述性质和必要限制: 1、设任意一个结点到源点的最短路为P1 P2 P3……Pm s;   即任意Pi的负责站都为Pm。 “约制”方法 2、结点都选择最近消防站,所以到负责站的距离不超过D(这结点); 3、构造选取的消防站与最优解一样,所以总费用最少。 Ⅲ 综上所述,总存在一个最优解 (构造出来的方案)满足上述的性质。 如今这限制可以安全地增添上了。 转移方程 首先确定下Best的转移方程 下面对F进行分析: ①当dis(i,j)D(i)时,令 =+∞ , 这表示不存在此状态 。 ②当dis(i,j) D(i)时, 转移方程 (1) 当j在i的子树外时, (2)当i=j时, (3)当j不等于i并且在i的子树内时, 令j在i的儿子child的子树内, 复杂度分析 时间复杂度为 空间复杂度为 编程复杂度低 小结 原始模型 总结 在应用这两种方法的时候,首先要摸清这两者的适用范围、所起的作用和效果。 一张一弛作为一种解题方法,是需要在思索、做题中慢慢形成的。除了实践外,还有几点是需要注意的: 总结 敢于创新 敢

文档评论(0)

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

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

1亿VIP精品文档

相关文档