网站大量收购独家精品文档,联系QQ:2885784924

一类算法复合的方法教案.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一类算法复合的方法 江苏省扬州中学 张煜承 问题描述 维护集合S,初始时为空。有N个操作需要依次处理 B X 在S中插入一个整数X A Y 询问S中被Y除余数最小的数,如果有多个则任取一个 1≤N≤40000,1≤X,Y≤R=500000 允许离线算法 初步分析 算法1:对询问中每个不同的Y,维护它对应的询问当前的答案 时间复杂度为O(N2),不能解决问题 但当询问中出现的不同Y的个数比较少时会很快,时间复杂度可以写成O(不同Y的个数×N) 进一步分析 当遇到一个询问A Y时,要在S中寻找使得x mod Y最小的数x 把这里的x写成kY+r,其中0≤rY,k和r是整数 也就是说,我们要在集合S中,寻找使得r最小的数kY+r 算法2:枚举k,找[kY,(k+1)Y)中的最小值。最后在这些最小值中取最优的 一个例子 S={2,3,6,8} Y=5 0 1 2 3 4 5 6 7 8 9 10 … 最小值为2 最小值为6 2 mod 5 = 2 6 mod 5 = 1 因此取6 现在的问题:询问S中给定区间[a,b]内的最小数 可以看成是询问≥a的最小数q(a) 0 1 2 3 4 5 6 7 8 9 10 … a q(a) 2 2 2 3 6 6 6 8 8 +∞ +∞ … 对很多连续的a,q(a)是相等的 形成了若干个区间 假设X所在的区间为[s,t],现在在S中插入X [s,t]被拆分成了区间[s,X]和[X+1,t] s s+1 … X-1 X X+1 … t-1 t a q(a) t t t t t t t t t s s+1 … X-1 X X+1 … t-1 t X X X X X t t t t 只有插入操作,所以一直在拆分区间,而不合并区间 让时间倒流,把所有操作按照从后往前的顺序处理,那么区间就一直都在被合并了 并查集 把这里每个区间看作是一个集合,并维护它们对应的q 每次操作近似地认为是均摊O(1) 算法2 对一个询问“A Y”,需要询问O(R/Y)个区间,最多O(R)个区间 一次询问的时间复杂度高达O(R) 总时间复杂度 O(NR),也不能解决问题 尝试着优化 算法2的瓶颈在于一次询问需要处理的区间可能非常多,但只会发生在很少当Y非常小的时候 一个例子:当YR0.5时,算法2已经可以接受了 我们可以对这部分很少的Y的询问使用另一种算法 算法1当询问中的不同的Y很少时会很快,所以这里的另一种算法可以选择算法1 算法3 设一个边界值K 对YK的询问使用算法2 O(NR/K) 对Y≤K的询问使用算法1 O(NK) 总时间复杂度O(NK+NR/K) 将N和R看作常数,容易得出当K=R0.5时总时间复杂度最小,为O(NR0.5) 算法3可以完全解决本题 我们解决本题的重点是:不使用统一的算法,而是同时使用这个问题的两种算法,分别解决问题中的两个互补的部分 我的论文里还有另一个例子 SPOJ RECTANGL 这个问题同样可以通过同时使用两种不同的算法得到较好的解决 总结 一个问题往往可以被看作是由若干个相对并列的部分组成起来的 通常对这些部分使用统一的算法 而有时这个问题可以使用多种算法解决,并且当这些算法应用在问题中不同特征的部分时,会有不同的效果 这时就可以将这些算法复合,对问题的不同部分,根据它们的特征分别选择使用对这个部分较优的算法 总结 两个算法合并起来后,很神奇地得到了一个更优的算法 这是因为这两种算法具有互补的优势,而我们把问题分成了若干部分,对每一部分根据其特征使用较优的算法,就使得两种算法的优势得到了结合 总结 每个算法都有各自的优势和劣势 如果我们取长补短,充分利用它们的优势,也许就将会得出总体更优的算法 这种取长补短的思想是非常重要的

文档评论(0)

三沙市的姑娘 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档