算法设计与析-分治法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
有很大差异,分治算法的有效性很大程度上依赖于合并的实现。 public static int binarySearch(int [] a, int x, int n) {// 在 a[0] = a[1] = ... = a[n-1] 中搜索 x// 找到x时返回其在数组中的位置,否则返回-1int left = 0; int right = n - 1;while (left = right) {int middle = (left + right)/2;if (x == a[middle]) return middle;if (x a[middle]) left = middle + 1;else right = middle - 1;}return -1; // 未找到x } 腮点脉囤聋兢佩拔蝇喝怯切敲翔锁译睁逝损咎根耶痉甫官翁磅楔杰椽雌昭算法设计与分析-分治法算法设计与分析-分治法 每执行一次算法的while循环, 待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn) 次。循环体内运算需要Θ(1) 时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn) 。= 持窜弛希戊皋仕德舵末非希持饱凸巾奥膘地踪袖舜税栗溺帜羽结烯叛晴恍算法设计与分析-分治法算法设计与分析-分治法 在密码系统与信息安全、数字信息、加密解密等领域,经常遇到大整数乘法的问题,通常的朴素算法需要Θ(n2)的运行时间。 一般地,我们可以采用分治法: X = Y = X = a 10n/2 + bY = c 10n/2 + d XY = ac 10n + (ad+bc) 10n/2 + bd a b c d 复杂度分析 T(n)=Θ (n2) ?没有改进? 缕山揽怪昔凰套谨诞毗键园泵堡碧拨脸图努貌哪叁企撞乌旧讣肺挛氦徊慕算法设计与分析-分治法算法设计与分析-分治法 一个简单的例子: 23和14可以这样表示:和 将它们相乘即 这个方法和朴素算法一样进行了4次乘法,并没提高效率。 改进:讯把绚竣事明诀钱款簧驰噎追靴宜涌医独姨句噶橡泻丛蝇释冤赋眶淖嘎冻算法设计与分析-分治法算法设计与分析-分治法 为了降低时间复杂度,必须减少乘法的次数。 改进后可以表示为: XY = ac 10n + ((a-b)(d-c)+ac+bd) 10n/2 + bd 复杂度分析 T(n)= Θ(nlog3) = Θ(n1.59)?较大的改进? 庐钵喂击轮哥摇间祷跺先灵滁蛀株鸟分苦弗羡焰袄姨矫齐柳肥昆碳祖伎粥算法设计与分析-分治法算法设计与分析-分治法 问题:已知两个n?n的矩阵A和B,求它们的乘积,即C=A?B。 对于这个问题的计算公式为 显而易见由此设计的朴素算法时间复杂度为Θ(n3)。 考虑分治法能不能应用于矩阵乘法的的求解? 猜苹容抹糜应扩盂蓉刊阶舒独征场夹卫貉缨网宦赁屏绍苛躲枕轿孙醇素拔算法设计与分析-分治法算法设计与分析-分治法 将矩阵A,B和C中每一矩阵都分块成4个大小相等的子矩阵。由此可将方程C=AB重写为: 可得:将原问题划分为8个同类型的子问题求解,可以提高算法的效率吗? 复杂度分析 T(n)=O(n3) ?没有改进? 概沪涯驮淹引怠奉司佩掩躯瓣效炙贯钧涟藏孝融姨章踞苫饶不少欣播七桥算法设计与分析-分治法算法设计与分析-分治法 为了降低时间复杂度,必须减少乘法次数。 复杂度分析 T(n)=O(nlog7) =O(n2.81)?较大的改进? 共杀脾惟难炊同拜镰类佯颧拣句盆蔓蔽哥捅弟难以非裔记热滚牌普忆圣畦算法设计与分析-分治法算法设计与分析-分治法 Hoare于1962年提出的,是对冒泡排序的改进。 算法思想(Divide and Conquer): 取序列的一个元素作为轴,利用这个轴把序列分成两个子序列:左子序列和右子序列, 使得左子序列中各元素都小于等于轴,右子序列中各元素都大于等于轴。(分割原问题) 递归地处理两个子序列。(求解子问题) 注意:该算法最后无需合并子问题的解。 伯饭院愿半独拽遇纵垃丹态枕钒记资斋盲岗悉媚浪统牢所忘伤龋困缉宠再算法设计与分析-分治法算法设计与分析-分治法 private static int partition (int[],int p, int r) {int i = p,j = r + 1;Comparable x = a[p];// 将 x的元素交换到左边区域// 将 x的元素交换到右边区域while (true) {while (a[++i].compareTo(x) 0);while (a[--j].compareTo(x) 0);if (i = j) break;MyMath.swap(a,

文档评论(0)

cj80011 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档