- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
样式为镶有金黄色边的五角红星
浅析倍增思想在信息学竞赛中的应用 安徽省芜湖市第一中学 朱晨光 引言 引言 倍增思想应用之一在变化规则相同的情况下加速状态转移 例一 例一 小结一 例二 骰子的运动 例二 骰子的运动 分析 分析 分析 分析 分析 分析 分析 分析 小结二 小结二 倍增思想应用之二 加速区间操作 例三 一般RMQ问题 一般RMQ问题的ST算法 例四 构造后缀数组 一个有趣的探讨 一个有趣的探讨 一个有趣的探讨 一个有趣的探讨 一个有趣的探讨 一个有趣的探讨 总结 总结 总结 谢谢 应用之一的其他实现方法 小结二 倍增思想 1,2,4,8,16,32,…… 在思考中体会内涵 在实战中积累经验 自然融入到思考过程中 指导自己解决各类问题 举重若轻 挥洒自如 纸上得来终觉浅 绝知此事要躬行 * * 它的本质思想是 每次根据已经得到的信息,将考虑的范围扩大一倍,从而加速操作。 倍增思想是一种十分巧妙的思想,在当今的信息学竞赛中应用得十分广泛。 在解决信息学问题方面,倍增思想主要有这两个方面的应用—— 一、在变化规则相同的情况下加速状态转移 二、加速区间操作 首先,让我们来看一个简单的例子——已知实数a,计算an。 很显然,一种最简单的方法就是令b=a,然后重复(n-1)次进行操作b=b*a.这样,为了得到an,共进行了(n-1)次乘法。 现在考虑另外一种方法 ? 将n表示成为二进制形式并提取出其中的非零位,即n=2b1+2b2+……+2bw,不妨设b1b2……bw 由于已知 ,所以也就知道了 ,重复bw次将这个数平方并记录下来,就可以得到(bw+1)个数: , , ,……, 根据幂运算的法则,可以推出 = = * * * ……* . 而这些数都已经被求出,所以最多再进行w次操作就可以得到 由于n的二进制表示最多有 个非零位,所以bw最大为 。也就是说,最多进行O(log2n)次乘法就可以算出 ,这比进行O(n)次乘法效率高得多。 在实际情况中,a可能是一个实数,也可能是一个矩阵或是一个抽象的状态。变化规则也可以是其他操作(如矩阵乘法、动态规划的状态转移等)。但是只要符合以下两个条件,就可以应用倍增思想并采用类似于上面的方法加速计算: 一、每次的变化规则必须相同 二、变化规则必须满足结合律 具体到上面的例子,每次的变化规则都是乘法,而乘法是满足结合律的。 下面将通过例二更加深入地探讨倍增思想在加速状态转移方面的应用,同时得到更精确的定义。 给定一个六个面的骰子,每个面上都有一定的权值(1到50之间的整数)。骰子运动的范围是一个宽度为4,向左右无限延伸的带子。带子从左到右的横坐标值为……,-3,-2,-1,0,1,2,3,……,从前到后的纵坐标值依次为1,2,3,4。这样,带子被分成了无限多个格子。每个格子恰好能与骰子的一个面完全重合。骰子每次可以向前后左右中的一个方向滚动一格,但不能移出带子,花费是滚动后朝上的面所附带的权值。 给定当前骰子位置的坐标与各个面的朝向,求将这个骰子移动到某个新位置所需的最小花费。(所给横坐标的绝对值小于等于109)。 如果不考虑横坐标巨大的差值,本题完全可以用动态规划求解。方法是将每一格按照骰子的朝向拆分成24种状态,然后按列进行动态规划得到最小花费。 具体方法是从起点所在列的24*4=96个状态推到第二列96个状态,再推到第三列,第四列……,一直推到终点所在的列。每次都用Dijkstra算法算出从一列中某个状态转移到相邻的一列中某个状态的最小花费。时间复杂度是与横坐标差值n是同阶的。 但是,由于n最大可达109,所以这个算法无论从时间还是空间上都难以满足要求。那么,是否可以采用倍增思想呢? 答案是肯定的! 下面,我们来验证这里是否存在一种变化规则符合运用倍增思想的要求——相同并符合结合律。 设骰子从第1列某个状态A运动到第2列某个状态B最少需要花费代价c,则骰子从第2列的状态A运动到第3列的状态B同样最少需要花费代价c! 这就是一种“相同的变化规则”! 更一般地,如果骰子从第i列某个状态A运动到第(i+k)列某个状态B最少需要花费代价c,则骰子从第j列的状态A运动到第(j+k)列的状态B也最少需要花费代价c. 又由于
原创力文档


文档评论(0)