算法设计与分析分治法精选课件.ppt
《算法设计与分析分治法精选课件.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析分治法精选课件.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于算法设计与分析关于算法设计与分析分治法分治法第一页,本课件共有62页2subproblem 2 of size n/2subproblem 1 of size n/2a solution to subproblem 2a problem of size na solution to subproblem 1a solution tothe original problem分治法的基本思想分治法的基本思想第二页,本课件共有62页3分治法的基本思想分治法的基本思想将规模为将规模为N的问题分解为的问题分解为k个规模较小的子问题个规模较小的子问题,使这些使这些子问题相互独立可分别求解子问题相互独立
2、可分别求解,再将再将k个子问题的解合并成原个子问题的解合并成原问题的解问题的解.如如子问题子问题的规模仍很大的规模仍很大,则则反复分解反复分解直到问题小到直到问题小到可直接求解为止。可直接求解为止。在分治法中在分治法中,子问题的解法通常与原问题相同子问题的解法通常与原问题相同,自然导致自然导致递递归过程归过程。第三页,本课件共有62页4一个简单的例子:一个简单的例子:N个数字求和,如何用分治法解决?个数字求和,如何用分治法解决?是不是分治法一定比蛮力法高效呢?是不是分治法一定比蛮力法高效呢?串行计算串行计算并行计算并行计算通过分治法解决大问题的时间等于所有解决小问通过分治法解决大问题的时间等于
3、所有解决小问题的时间?题的时间?T(n)=aT(n/b)+f(n)划分为规模为划分为规模为n/b的小问题的小问题a个小问题个小问题解决大问题的解决大问题的消耗的时间消耗的时间合并小问题消合并小问题消耗的时间耗的时间第四页,本课件共有62页5T(n)=aT(n/b)+f(n)递推式的解法递推式的解法直接使用公式直接使用公式写出分治法解决写出分治法解决n个数字相加问题的效率类型,设每次个数字相加问题的效率类型,设每次分为分为2个子问题个子问题第五页,本课件共有62页6本章解决的问题:本章解决的问题:排序排序查找查找大整数乘法大整数乘法矩阵乘法矩阵乘法最近对最近对凸包凸包二叉树遍历二叉树遍历第六页,
4、本课件共有62页74.1 合并排序合并排序 问题:问题:将将n个元素排成非递减顺序。个元素排成非递减顺序。思考如何使用分治法将大问题分成小问题?思考如何使用分治法将大问题分成小问题?第七页,本课件共有62页8思想思想83297154123456788329238914577154832938291745832971547154分分合合第八页,本课件共有62页9算法思路:算法思路:若若n为为1,算法终止算法终止;否则否则,将将n个待排元素分割成个待排元素分割成k(k=2)个大致相等子集合个大致相等子集合A、B,对每一个子集合对每一个子集合分别递归排序分别递归排序,再将排好序的子集归并为一个集再将
5、排好序的子集归并为一个集合。合。第九页,本课件共有62页10合并排序的递归算法合并排序的递归算法算法算法MergeSort(A0.n-1)/输入:未排序序列输入:未排序序列A0.n-1/输出:已排序序列输出:已排序序列A0.n-1ifn1copyA0.n/2-1toB0.n/2-1copyA n/2.n-1toC0.n/2-1MergeSort(B)MergeSort(C)Merge(B,C,A)当前当前n规模规模的问题,分的问题,分成成2个子问题个子问题以同样的方式解决子问题以同样的方式解决子问题用归并排序,形成最终的有序用归并排序,形成最终的有序数组数组第十页,本课件共有62页11Merg
6、e(B,C,A)是将是将有序数组有序数组B、C合并为合并为有序数有序数组组A的算法。的算法。称为归并排序称为归并排序归并排序示例:归并排序示例:1 3 4 9 13 34 672 5 61 23 4569 13 34 67B数组数组C数组数组第十一页,本课件共有62页12前提前提:数组数组B及数组及数组C已经有序已经有序。比较数组比较数组B的第一个记录与数组的第一个记录与数组C的第一个记录的第一个记录将将KEY值小者输出至数组值小者输出至数组A,再从相应数组读进,再从相应数组读进一个记录,替代已被输出的记录,再继续比较。一个记录,替代已被输出的记录,再继续比较。结束结束:直至有一个数组的记录已
7、被穷尽,然后再直至有一个数组的记录已被穷尽,然后再将未穷尽的数组上的所有记录拷贝到输出数组将未穷尽的数组上的所有记录拷贝到输出数组A上。上。第十二页,本课件共有62页13Merge(B0.p-1,C0.q-1,A0.p+q-1)i=0,j=0,k=0;whileipandj1copyA0.n/2-1toB0.n/2-1copyA n/2.n-1toC0.n/2-1MergeSort(B)MergeSort(C)Merge(B,C,A)基本操作?基本操作?似乎较难判断。似乎较难判断。写出总体工作量表达式。写出总体工作量表达式。设设n=2k,总工作量表示为:总工作量表示为:C(n)=(1次除法次除
8、法)+2Ccopy(n/2)+2C(n/2)+Cmerge(n)C(1)=0第十四页,本课件共有62页15简写为简写为C(n)=2C(n/2)+Cmerge(n)+kn基本操作基本操作比较?拷贝?比较?拷贝?(比较的次数不会大于拷贝的次数比较的次数不会大于拷贝的次数)是否和其他因素相关?是否和其他因素相关?最坏情况如何?最坏情况如何?归并排序的效率归并排序的效率Cmerge(n)=n,C(n)=2C(n/2)+sn解得解得C(n)=nlog2n-n+1(nlog2n)C(n)=(1次除法次除法)+2Ccopy(n/2)+2C(n/2)+Cmerge(n)第十五页,本课件共有62页16合并排序结
9、论合并排序结论最坏情况最坏情况(nlog2n)优点:优点:合并排序在最坏情况下的键值比较次数合并排序在最坏情况下的键值比较次数十分接近于十分接近于任任何基于比较的排序算法在何基于比较的排序算法在理论理论上能够达到的最少次数上能够达到的最少次数合并排序精确解合并排序精确解Cworst(n)=nlog2n-n+1理论最小值理论最小值nlog2n-1.44n向上取整向上取整缺点:缺点:需要线性的额外空间,体现在何处?需要线性的额外空间,体现在何处?虽然合并也可做到虽然合并也可做到“在位在位”,但导致算法过于复杂。,但导致算法过于复杂。第十六页,本课件共有62页174.2 快速排序快速排序算法思路算法
10、思路:对于输入对于输入A0.n-1,按以下三个步骤进行排序:,按以下三个步骤进行排序:(1)分区分区:取取A中的一个元素为中的一个元素为支点支点(pivot)将将A0.n-1划划分成分成3段段:A0.s-1,As,As+1.n-1,使得使得A0.s-1中任一元素中任一元素 As,As+1.n-1中任一元素中任一元素 As;下标下标s在划分过程在划分过程中确定。中确定。(2)递归求解递归求解:递归调用快速排序法分别对递归调用快速排序法分别对A0.s-1和和As+1.n-1排序。排序。(3)合并合并:合并合并A0.s-1,As,As+1.n-1为为A0.n-1第十七页,本课件共有62页184938
11、65971327一趟排序后一趟排序后27381349769765分别快排分别快排132738657697第十八页,本课件共有62页19快速排序算法快速排序算法QuickSort(Al.r)/使用快速排序法对序列或者子序列排序使用快速排序法对序列或者子序列排序/输入:子序列输入:子序列Al.r或者序列本身或者序列本身A0.n-1/输出:非递减序列输出:非递减序列AiflrsPartition(Al.r)QuickSort(Al.s-1)QuickSort(As+1.r)/s是中轴元素是中轴元素/基准点,是数组分区位置的标志基准点,是数组分区位置的标志中轴元素如何选?中轴元素如何选?选好中轴后如何
12、扫描数组形成分区?选好中轴后如何扫描数组形成分区?找到分裂点找到分裂点s,分区,分区按同样的方法处理子区间按同样的方法处理子区间第十九页,本课件共有62页20分区的例子(双向扫描)分区的例子(双向扫描)初始数组初始数组A0.n-1=5,3,1,9,8,2,4,7,取元素取元素A0=5作为分裂点作为分裂点,红色表示红色表示i上的元素上的元素,蓝色表示蓝色表示j上的元素上的元素位置位置i0123456753198247i,j上的元素和分裂点比较并移动上的元素和分裂点比较并移动对于对于i遇到比分裂点大或等于时停止遇到比分裂点大或等于时停止对于对于j遇到比分裂点小或等于时停止遇到比分裂点小或等于时停止
13、53198247停止后,停止后,ij交换分裂点和交换分裂点和Aji=jAi=Aj=分裂点上的值分裂点上的值53148297交换后,交换后,i加加1,j减减153148297继续前面的比较和移动继续前面的比较和移动5314289753142897ij交换分裂点和交换分裂点和Aj23145897一次分区完成一次分区完成第二十页,本课件共有62页21数组的分区算法:数组的分区算法:算法算法Partition(Al.r)/输入:子数组输入:子数组Al.r/输出:分裂点输出:分裂点/基准点基准点pivot的位置的位置pAlil;jr+1repeatrepeatii+1untilAiprepeatjj1u
14、ntilAjpswap(Ai,Aj)untilijswap(Ai,Aj)swap(Al,Aj)returnj第二十一页,本课件共有62页22快速排序效率分析快速排序效率分析iflrsPartition(Al.r)QuickSort(Al.s-1)QuickSort(As+1.r)基本操作?基本操作?似乎较难判断。似乎较难判断。写出总体工作量表达式。写出总体工作量表达式。C(n)=Cpartition(n)+CQuickSort(s前面前面)+CQuickSort(s后面后面)第二十二页,本课件共有62页23C(n)=Cpartition(n)+CQuickSort(s前面前面)+CQuickS
15、ort(s后面后面)上式依赖于上式依赖于s的位置。的位置。考虑考虑partition的的基本操作:基本操作:比较比较一次分区算法的比较次数是否和其他因素相关一次分区算法的比较次数是否和其他因素相关对于对于一次长度为一次长度为n的数组的的数组的分区算法分区算法,如果出现指针交,如果出现指针交叉,所执行的比较是叉,所执行的比较是n+1次,为什么?次,为什么?相等,比较次数为相等,比较次数为n次次第二十三页,本课件共有62页24整个算法的最坏情况下:整个算法的最坏情况下:在进行了在进行了n+1次比较后建立了分区,还会对数次比较后建立了分区,还会对数组进行排序,继续到最后一个子数组组进行排序,继续到最
16、后一个子数组An-2.n-1。总比较次数为:总比较次数为:Cworst(n)=(n+1)+n+3=(n+2)(n+1)/2-3(n2)第二十四页,本课件共有62页25最好情况最好情况每次分区执行每次分区执行n次次并且每次都是等分并且每次都是等分Cbest(n)=2Cbest(n/2)+n(nlog2n)第二十五页,本课件共有62页26平均情况平均情况分裂点有可能在一次分区后出现在每个位置分裂点有可能在一次分区后出现在每个位置设概率是设概率是1/n第二十六页,本课件共有62页274.1-4.2 结论结论合并排序最差合并排序最差(nlog2n)快速排序最优快速排序最优(nlog2n)最差最差(n2
17、)平均平均(1.38nlog2n)选择排序选择排序(n2)冒泡排序冒泡排序(n2)第二十七页,本课件共有62页284.3 折半查找折半查找(有序数组有序数组)位置:位置:0123456789101112值:值:3,14,27,31,39,42,55,70,74,81,85,93,98K=70迭代迭代1l=0m=6r=12迭代迭代2lm=9r迭代迭代3lr结果结果m=(7+8)/2=7第二十八页,本课件共有62页29 BinarySearch(A0.n-1,k)/输入:已排序大小为输入:已排序大小为n的序列的序列A,待搜索对象,待搜索对象k/输出:如果搜索成功,则返回输出:如果搜索成功,则返回k
18、的位置,否则返回的位置,否则返回-1l=0,r=n-1;Whilelr mid=(l+r)/2 ifk=Amidreturnmid elseifkAmidr=m-1elsel=m+1return-1折半查找伪代码折半查找伪代码第二十九页,本课件共有62页30折半查找效率分析:基本操作:比较基本操作:比较最坏情况下,比较次数最坏情况下,比较次数C(n)=C(n/2)+1C(1)=1设设n=2k,可解得,可解得C(n)=k+1=log2n+1于是于是C(n)(log2n)第三十页,本课件共有62页314.3 结论结论折半查找折半查找最差最差(log2n)顺序查找顺序查找(n)是一种退化了的分治法是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 分治 精选 课件
限制150内