第六章分治.ppt

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

heyichao@sjzue.edu.cn 6.1分治法算法总体思想 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 (类似于打仗一样。各个击破) 将求出的小规模的问题的解合并为一个更大规模问题的解,自底向上逐步求出原来问题的解。 分治法算法思想: 将数组分成两个: A[1...n/2] A[n/2+1...n] 分别在两个数组中寻找最大、最小值。 算法描述如下: stp4.以mm为中间数据,划分数组A为三个序列 A1={a|amm}; A2={a|a=mm}; A3={a|amm}。 step5.根据数据的条件进行如下处理: |A1|=k:第k小数一定在A1之中,所以对A1序列继续求解,递归调用select(A1,1,|A1|,k); |A1|+|A2|=k:第k小数就是mm; |A1|+|A2|k:第k小数肯定在A3中,|A1|+|A2|是全部序列中小于第k小数的全部元素个数。 则:select(A3,1,|A3|,k-|A1|-|A2|)。 例6.共有如下数据序列: 8、33、17、51、57、49、35、11、25、37、14、3、2、13、52、12、6、29、32、54、5、16、22、23、7。 求取第13小的元素。 步骤: 1、划分5组: {8,33,17,51,57};{49,35,11,25,37};{14,3,2,13,52}, {12,6,29,32,54};{5,16,22,23,7}. 2.排序各个数组并获取中项组成M={33,35,13,29,16}。 3.划分A数组为三个(以mm=29为中间项): {8,17,11,25,25,3,2,13,12,12,6,5,16,22,23,,7} {29} {33,51,........54} 4、因为|A1|13,所以第13小的数据项一定在其中,继续针对它进行求解。 (递归求其中的第13小数据项) 最后的求解项是:a[3]=22。 算法的总体构造思想是: 1、分解子问题,缩小搜索范围; 2、求较少序列的中项比较简单,所以将数据序列分解,求取全部数据的中项数据。 3、依据该中项数据划分原数据序列为三组,通过三组数据序列的长度与k的关系,来确定第k小元素应该在那个序列中,以确定该位置。(舍弃掉其余的数据序列) 6.6快速排序 在合并排序中,将数组分解为两个相同的子问题,然后分别解决,最后合并,时间复杂度是O(nlogn),但是该算法的症结主要是: 1、需要额外的存储空间。 2、 另外,由于合并过程不确定,所以每一个数据在数组中的最终位置是不可预知的。 快速思想是:较多的时间用于分,较少的时间用于治。 例子6.2 排列如下数组5 7 1 6 4 8 3 2 ; low=1 high=8; 初始:x=a[low]=a[1]=5; i=1,j=2;(红色数字代表要交换数) 1:5 7 1 6 4 8 3 2(i=1,j=2) 2: 5 1 7 6 4 8 3 2 (i=2,j=3) 3: 5 1 4 6 7 8 3 2 (i=3,j=5) 4: 5 1 4 3 7 8 6 2 (i=4,j=7) 5: 5 1 4 3 2 8 6 7(i=5,j=8)//for循环终止 6: 2 1 4 3 5 8 6 7(i=5,j=8) 例6.3 4 6 3 1 8 7 2 5 第一次调用: 2 3 1 4 8 7 6 5 (split算法) 第二次调用: 2 3 1-----》(split算法) 1 2 3 第三次: 1 第四次: 3 第五次:8 7 6 5 ----》(split算法)5 7 6 8 第六次:5 7 6 ------》(split算法)5 7 6 第七次:7 6---------》(split算法)6 7 第八次:6-----------》(split算法)6 最后是: 1 2 3 4 5 6 7 8 最坏情况分析: 观察快速排序算法,最核心的是split算法,而分割算法的运行效率直接影响快速排序的效率。 1、假设当前数据

文档评论(0)

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

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

1亿VIP精品文档

相关文档