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

(算法分析的设计)第2章递归与分治策略.ppt

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(算法分析的设计)第2章递归与分治策略.ppt

因为问题的计算复杂性一般是随着问题规模的增加而增加,因此大部分问题满足这个特征。 这条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用 能否利用分治法完全取决于问题是否具有这条特征,如果具备了前两条特征,而不具备第三条特征,则可以考虑贪心算法或动态规划。 这条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。 分治法的适用条件 分治法所能解决的问题一般具有以下几个特征: 该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 二分搜索技术 大整数的乘法 Strassen矩阵乘法 合并排序 快速排序 线性时间选择 二分搜索技术 分析:如果n=1即只有一个元素,则只要比较这个元素和x就可以确定x是否在表中。因此这个问题满足分治法的第一个适用条件 分析:比较x和a的中间元素a[mid],若x=a[mid],则x在L中的位置就是mid;如果xa[mid],由于a是递增排序的,因此假如x在a中的话,x必然排在a[mid]的前面,所以我们只要在a[mid]的前面查找x即可;如果xa[i],同理我们只要在a[mid]的后面查找x即可。无论是在前面还是后面查找x,其方法都和在a中查找x一样,只不过是查找的规模缩小了。这就说明了此问题满足分治法的第二个和第三个适用条件。 分析:很显然此问题分解出的子问题相互独立,即在a[i]的前面或后面查找x是独立的子问题,因此满足分治法的第四个适用条件。 二分搜索技术 给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。 分析: 该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题; 分解出的子问题的解可以合并为原问题的解; 分解出的各个子问题是相互独立的。 逐个地扫描数组a中每个元素,直到找到x为止。 在含有n个元素的线性表中查找一个元素在最坏情况下都需要进行n次比较,其时间复杂度为O(n)。 利用分治法求解此问题,求解过程是: 将n个元素分成个数大致相等彼此独立的两半部分,即a[n/2]的前面或后面两个子问题; 将第n/2位置的元素与x进行比较,如果相等,则找到x,算法结束。如果xa[n/2],则在数组a的后半部分继续搜索x;如果xa[n/2],则在数组a的前半部分继续搜索x。 二分搜索技术 给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。 据此容易设计出二分搜索算法: templateclass Type int BinarySearch(Type a[], const Type x, int l, int r) { while (r = l){ int m = (l+r)/2; if (x == a[m]) return m; if (x a[m]) r = m-1; else l = m+1; } return -1; } 算法复杂度分析: 每执行一次算法的while循环, 待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn) 次。循环体内运算需要O(1) 时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn) 。 大整数的乘法 大整数的乘法 大整数的乘法 问题描述 需要处理的整数超过了计算机硬件能直接处理的整数范围 浮点数计算对精度的影响 解决方案 利用软件方法来实现大整数的乘法 典型应用 RSA密码体系 传统做法: 需要做n*n次1位整数乘法操作,n-1次移位操作,n-1次加法操作 时间复杂度为O(n2) n/2位 n/2位 A B X= n/2位 n/2位 C D Y= 大整数X和Y的分段 X、Y为两个n位的二进制整数 XY的乘积形式(1/2) 形式一: 包括: 4次n/2位整数的乘法 3次不超过2n位的整数加法 2次移位 ☆所有加法和移位共用O(n)步运算 ☆设T(n)是2个n位整数相乘所需的运算总数 XY的乘积形式(2/2) 形式二: 包括: 3次n/2位整数的乘法 6次整数加、减法 2次移位 如果将大整数分成更多段,用更复杂的方式把它们组合起来,将有可能得到更优的算法。 最终的,这个思想导致了快速傅利叶变换(Fast Four

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档