分治法课题:分治法目标:知识目标:分治的原理与分治的实现能力目标:分治的原理重点:分治的应用难点:分治的理解板书示意:1)分治的引入(例29)2)分治的应用(例30)授课过程:所谓分治法就是将问题分而治之
有将问题一分为二,也有将问题一分为三或一分为N等份
对每一等份分别进行解决后,原问题就可以很快得以解决
因此一个问题能否用分治法解决,关键是看该问题是否能将原问题分成n个规模较小而结构与原问题相似的子问题
递归的解决这些子问题,然后合并其结果就得到原问题的解
当n=2时的分治法又称二分法
使用分治策略的问题常常要借助递归的结构,逐层求解,当问题规模达到某个简单情况时,解容易直接得出,而不必继续分解
其过程大致如下:if问题不可分thenbegin直接求解;返回问题的解;endelsebegin从原问题中划出含1/n运算对象的子问题1;递归调用分治法过程,求出解1;从原问题中划出含1/n运算对象的子问题2;递归调用分治法过程,求出解2;…………从原问题中划出含1/n运算对象的子问题n;递归调用分治法过程,求出解n;将解1、解2、……、解n组合成整个问题的解;end;根据分治法的分割原则,原问题应该分为多少个子问题才较适宜
大量实践发现:在用分治法设计算法时,最好是子问题的规模大致相同
通常可以采取二分法,因为这么划分即简单而且均匀
使子问题规模相等的做法是出自平衡子问题的思想,一般情况下总是比子问题规模不等的做法要有效
例29:归并排序某数列存储在对序列A[1],A[2],……,A[n],现采用归并思想进行排序
分析:这里我们采用二分法
先将n个元素分成两个各含或()个元素的子序列;再用归并排序法对两个子序列递归的排序;最后合并两个已排序的子序列以得到排序结果
在对子序列排序时,当其长度为1时递归结束
单个元素被视为是已经排好的序列
下面我们来分析一下对两个已排好序的子序列