算法设计与分析Chapter2Veron.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大整数乘法 计算两个n位整数的乘积 * 小学生方法:O(n2) ?效率太低 分治法1: X = a b c d X = a 2n/2 + b Y = c 2n/2 + d XY = ac 2n + (ad+bc) 2n/2 + bd Y = 复杂度分析 T(n)=O(n2) ?没有改进 大整数乘法 为了降低时间复杂度,必须减少乘法的次数。 分治法2 XY = ac 2n + (ad+bc) 2n/2 + bd =ac 2n + ((a-c)(b-d)+ac+bd) 2n/2 + bd * 复杂度分析 T(n)=O(nlog3) =O(n1.59)?较大的改进 大整数乘法 * 小学生方法:O(n2) ?效率太低 分治法: O(n1.59) ?较大的改进 更快的方法?? 如果将大整数分成更多段,用更复杂的方式把它们组合起来,将有可能得到更优的算法。 Strassen矩阵乘法 问题 输入:n×n的矩阵A和B 输出:C=AB 简单方法 复杂性O(n3) * Strassen矩阵乘法 简单分治 使用与上例类似的技术,将矩阵A,B和C中每一矩阵都分块成4个大小相等的子矩阵。由此可将方程C=AB重写为: * 复杂度分析 T(n)=O(n3) Strassen矩阵乘法 为了降低时间复杂度,必须减少乘法的次数。 Strassen分治 * 复杂度分析 T(n)=O(nlog7) =O(n2.81)?较大的改进 Strassen矩阵乘法 * 传统方法:O(n3) 分治法: O(n2.81) 更快的方法?? Hopcroft和Kerr已经证明(1971),计算2个2×2矩阵的乘积,7次乘法是必要的。因此,要想进一步改进矩阵乘法的时间复杂性,就不能再基于计算2×2矩阵的7次乘法这样的方法了。或许应当研究3×3或5×5矩阵的更好算法。 在Strassen之后又有许多算法改进了矩阵乘法的计算时间复杂性。目前最好的计算时间上界是 O(n2.376) 是否能找到O(n2)的算法? 快速排序 对数组a[p : r]进行排序 分:以a[p]=x为基准将a[p : r]划分为3段 a[p : q-1], a[q], a[q+1 : r] a[q]=x a[p : q-1]中的元素小于等于a[q] a[q+1 : r]中的元素大于等于a[q] 治:递归调用快速排序算法对a[p : q-1]和a[q+1 : r]排序 合: * 快速排序 * void QuickSort (Type a[], int p, int r) { if (pr) { int q = Partition(a,p,r); QuickSort (a,p,q-1); //对左半段排序 QuickSort (a,q+1,r); //对右半段排序 } } * int Partition (Type a[], int p, int r) { int i = p, j = r + 1; Type x=a[p]; // 将 x的元素交换到左边区域 // 将 x的元素交换到右边区域 while (true) { while (a[++i] x); while (a[- -j] x); if (i = j) break; Swap(a[i], a[j]); } a[p] = a[j]; a[j] = x; return j; } 初始序列 {6, 7, 5, 2, 5, 8} {6, 7, 5, 2, 5, 8} {6, 5, 5, 2, 7, 8} Swap() {6, 5, 5, 2, 7, 8} Swap() {6, 7, 5, 2, 5, 8} {2, 5, 5} 6 {7, 8} 快速排序 - -j ++i - -j - -j ++i 快速排序 时间复杂性与划分是否对称有关 最坏情况 划分产生的两个区域分别包含1个元素和n-1个元素 每次递归都出现这种不对称划分 Partition计算时间为O(n) * 快速排序 最好情况 每次划分都产生两个大小为n/2的区域 平均情况 * 快速排序 改进 修改Partition函数,从a[p : r]中随机选择一个元素最为划分基准,这样可以使划分基准的选择是随机的,从而可以期望划分是较对

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档