- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法艺术与信息学竞赛》标准课件 递归与分治(二) 刘汝佳 目录 一、Karatsuba快速乘法 二、Strassen矩阵乘法 三、求解线性递推方程 四、快速排序 五、求k大元素 六、最近点对问题 一、 Karatsuba快速乘法 给两个n位数, 计算它们的乘积 分析 类似于Strassen矩阵乘法, 先写成递归形式 容易得到下面的过程, T(n)=4T(n/2)+O(n), 因此还是T(n) = O(n2). Karatsuba快速乘法 Anatoli? Karatsuba(由Knuth改进)在1962年提出: ac + bd – (a-b)(c-d) = bc+ad 因此中间项bc+ad只需要一次递归调用而不是两次 分析 显然, 递归方程为T(n) =3T(n/2)+O(n), T(n) = O(nlg3) = O(n1.585), 比O(n2)快. 注意: 真实程序中, 应该使用二进制而不是10进制, 这样可以充分利用机器乘法的特点 进一步得: 更细的进行分治可以得到更好的算法, 直到Fast Fourier Transform, 用它计算乘法只需要O(nlogn)的时间 二、Strassen矩阵乘法 标准算法 基本分治算法 基本分治算法分析 Strassen算法 Strassen算法 Strassen算法 Divide: 把A和B划分成(n/2)*(n/2)个子矩阵 Conquer: 递归对子矩阵进行7次乘法 Combine: 对子矩阵进行加法和减法得到C 三、求解线性递推方程 Fi = a1Fi-1+a2Fi-2+a3Fi-3…+akFi-k 已知F1, F2, …, Fk, 求任意的Fn 例: Fibonacci数 数学方法 通项公式 由于分子第二项小于1,可以只算第一项,舍入到最近的整数 求幂可以用对数或倍增法 问题:精度误差! 代码: 直接递归 可以直接写出递归代码 分析 记T(n)为计算fib(n)的时间复杂度 T(n)=T(n-1)+T(n-2), 设T(1)=T(2)=c, 则T(n)=c*Fn-2. 由于 因此T(n) = O(1.618n), 指数时间算法! 动态规划 依次计算出很多结果, 采用预处理的方式 时间复杂度仅为O(n), 但空间复杂度也上升到O(n) 滚动数组 在执行的过程中计算出了F1, F2, F3, … Fn, 但代价是使用了O(n)的空间存放这些数 如果的确需要得到所有值, 附加空间是必须的, 但如果只需要得到Fn呢? 滚动数组: 把以后再也用不到的值及时扔掉 滚动的含义: 在递推的过程中, 数组内元素值始终发生变化 代码: 滚动数组 下面的代码, F[0..2]实际代表Fi-2~Fi 分析 一开始f[1]=0, f[2]=1实际上是F0=0, F1=1 第i次循环时, 刚开始f[0], f[1], f[2]保存着Fi-3~Fi-1, 执行以后变为了Fi-2~Fi 问题: 如果递推式比较长,每次需要花费比较多的时间把数组进行“移位”. 在多维的情况下这个移位可能很慢! 比较好的解决方法是用循环数组, 让f[p]为当前要求的值,则f[prev(p)]和f[prev(prev(p))]就是前两次求出的值 代码: 循环滚动数组 矩阵乘法 m*n矩阵A和n*p矩阵B可以相乘得m*p的矩阵C Cik=sum{AijBjk}, 其中j取遍1,2,3…,n 矩阵乘法满足结合率, 但不满足交换率 和自然数一样,可以用倍增法求矩阵的幂 特别地,两个2*2矩阵相乘的公式为 分析 注意到 如果让a=Fk-1, b=Fk, 我们就能得到Fk与Fk+1 从F0和F1出发, 由结合律得: 可用倍增法在O(logn)时间内求出幂(忽略高精度) 一般情形 设 若 , 则 四、快速排序 一个基于分治思想的排序算法 196.Hoare提出 原地排序,不像归并排序需要辅助空间 微调后非常实用 快速排序的分治思想 Divide. 把数组以轴心x为分界线划分成两部分,左边的元素都比x小,右边的元素都比x大,如下图 Conquer. 递归把两部分排序 Combine. 平凡的 关键:线性时间的划分过程 划分过程一 划分过程一 划分过程二 两个指针left和right. left左边的都比x小, right右边的都比x大, 未知区域在中间 left和right交替移动, 一旦发现不满足要求的元素就停下来. 交换这两个元素, 使同时满足要求 好处:当相同元素比较多时较快 划分过程二框架 虽然效率还可以优化, 但非常容易理解 快速排序主过程 不管使用哪种划分方法,快速排序的主过程如下: 最坏情况分析 如果每次划分出来的序列都是一边n-1个元素一边1个元素
您可能关注的文档
最近下载
- 第四章战国、秦、汉、三国时期的建筑详解.ppt VIP
- T_HAEPCI 55—2023(有色冶炼场地土壤-地下水重金属污染协同修复与管控技术指南).pdf VIP
- 青春筑梦婴幼儿托育服务与管理专业启航未来职业生涯.pptx VIP
- 【新教材】2025-2026学年统编版(2024)三年级道德与法治上册第1课《学习伴我成长》课件.pptx
- T ACEF 111—2023 焦化污染土壤多环芳烃生物修复智能监测预警技术指南.pdf VIP
- MTT 114-2005 煤矿用多级离心泵.pdf VIP
- TACEF 112-2023 焦化污染土壤多环芳烃生物修复智能监测设备配置技术指南.pdf VIP
- GBT18479-2001 地面用光伏(PV)发电系统 概述和导则.pdf
- 低血容量性休克的护理.pptx VIP
- 2《住宅项目规范》宣贯培训-第3章.pdf
文档评论(0)