问题中的变及不变.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
问题中的变与不变 长沙市雅礼中学 陈雪 引言 对变量进行操作是信息学中的常见问题。 如果能找到变量之间的关系,把变量转化成不变量,那么算法的效率就将得到质的提升。 [例一]蚂蚁 一条树枝上有N只蚂蚁。给出他们的位置,如何安排蚂蚁初始的方向使得全部蚂蚁掉落的时间最早或最晚。 最多1,000,000只蚂蚁。 感性认识 左边的蚂蚁向左端走,右边的蚂蚁向右端走。 如何使全部掉落的时间最晚? 猜想:让左边的蚂蚁向右端走,同时右边的蚂蚁向左端走。 理性分析 直接证明猜想难度比较大。 看一般的情况: 纪录2只蚂蚁的有用信息:速度 和位置 。 设 。 在蚂蚁相遇前一刻, 在蚂蚁相遇后一颗, 一个集合内蚂蚁相遇 集合不变 继续分析 另 任何两只属于集合U内的蚂蚁相遇之后,集合U不变。 集合U只随着时间的变化而变化。 {Ansi}={蚂蚁I按起始方向走到端点} 继续分析 回到原问题 最早时间= 最迟时间= 猜想得证!! 最终时间复杂度O( n )。 即左边蚂蚁向左走,右边蚂蚁向右走 Max{蚂蚁I向近端出发} Max{蚂蚁I向远端出发} 即左边蚂蚁向右走,右边蚂蚁向左走 小结 分析题目的特殊特点: 1.原路返回 2.速度相同 将速度变量固定,成为常量。 问题得到了简化。 [例二]circular way 安排一种方案 使得总代价最小 n≤50000 最小权匹配! 无法满足题目要求!! 设A类点顺时针排序的坐标为A1,A2.. An 设B类点顺时针排序的坐标为B1,B2.. Bn 优化算法 最小权匹配必然满足下面的性质: 通过调整可以得到更优解 两条匹配边不会交叉 算法二 1.枚举和A1匹配的点Bk。 2.然后按顺序一一求出和Ai匹配的点。 3.最后统计当前的代价和,更新答案。 时间复杂度 继续分析 另Ci表示当前Ai与它匹配的Bj的距离。 当前的代价sum=ΣCi Ci随着我们枚举k而变化。 找出Ci中蕴含的不变? 观察Ci 由于Ai到Bj有顺时针,逆时针2种走法。 Ci =Min{|Ai-Bj|,L-|Ai-Bj|} Ci只同Ai和Bj有关。 不妨把Ci看成Ai和Bj的函数。 设Ci=f(Ai)+g(Bj) 讨论Ci 0 从 顺时针走到 讨论Ci 0 从 逆时针走到 讨论Ci 0 从 顺时针走到 讨论Ci 0 从 逆时针走到 继续分析 根据Ai,Bi的有序性,得到f(Ai)的每种情况对应的Bj都是连续的一段。 f(Ai)在枚举和A1匹配的点Bk的过程中 只会发生4次变化。 从Ci的N次变化 f(Ai),g(Bi)的4次变化 回到原问题 当前的代价sum=ΣCi=Σf(Ai)+Σg(Bi) A1匹配Bk,sum已经求出。 当A1匹配Bk+1,更新f(Ai),g(Bi),sum。 sum=sum’-f’(Ai)+f(Ai)-g’(Bi)+g(Bi) 把一个-f’(Ai)+f(Ai)和-g’(Bi)+g(Bi) 看成一次事件 f’(Ai)表示上一时刻f(Ai) f(Ai)表示当前f(Ai) 举例 A1匹配B4,有 A1匹配B1,有 看成一次事件 看成一次事件 分析 事件总数≤8n 根据Ai,Bi的有序性,预处理用指针即可 知道下一时刻k+1会发生的事件 更新sum 得到f (Ai)4种情况对应的Bj范围 每件事件发生时间 小结 算法流程如下 [1]将Ai,Bi排序 [2]预处理求出每个事件发生时间 [3]枚举和A1匹配的点Bk,更新sum。 [4]输出 时间复杂度 O(排序+事件总数)=O(nlgn) 小结 将变化的Ci转化成“不变”的f(Ai)和g(Bi) 减少了操作规模 问题迎刃而解 总结 [例一]蚂蚁 以不变应万变 [例二]circular way 将变量的操作规模缩小 仔细分析,大胆猜想 把握问题的本质 问题迎刃而解 变 不变 参考文献: [1] 刘汝佳,黄亮.算法艺术与信息学竞赛. 清华大学出版社.2003 [2] zju online judge 2376 ants. /show_problem.php?pid=2376 [3] sgu online judge 313 circular railway. http://acm.sgu.ru/problem.php?contest=0problem=313

文档评论(0)

xiaofei2001129 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档