递归与分治策略精选文档.ppt





《递归与分治策略精选文档.ppt》由会员分享,可在线阅读,更多相关《递归与分治策略精选文档.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、递归与分治策略本讲稿第一页,共三十八页 学习要点学习要点:n理解递归的概念。n掌握设计有效算法的分治策略。n通过下面的范例学习分治策略设计技巧。(1)二分搜索技术;(2)合并排序和快速排序;主要内容主要内容:n2.0 分治法总体思想n2.1 递归:阶乘、Fibonacci和Hanoin2.2 分治法的适用条件,基本步骤,复杂性分析n2.3 二分搜索技术n2.4 快速排序n2.5 合并排序n总结本讲稿第二页,共三十八页 将要求解的较大规模的问题分割成k个更小规模的子问题。2.0 分治法总体思想nT(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n
2、)=对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。本讲稿第三页,共三十八页2.0 算法总体思想n对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)
3、T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。本讲稿第四页,共三十八页2.0 算法总体思想n将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)
4、T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)本讲稿第五页,共三十八页2.0 算法总体思想n将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T
5、(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)分治法的设计思想是,将一个难以直接解决的大问题,分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分分割成一些规模较小的相同问题,以便各个击破,分而治之。而治之。本讲稿第六页,共三十八页2.1 递归的概念n直接或间接地调用自身的算法称为递归算法递归算法。用函数自身给出定义的函数称为递归函数递归函数。n由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一
6、致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。n分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。下面来看几个实例。本讲稿第七页,共三十八页2.1 递归的概念例例1 1 阶乘函数阶乘函数 阶乘函数可递归地定义为:边界条件边界条件递归方程递归方程边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。本讲稿第八页,共三十八页2.1 递归的概念例例2 Fibonacci2 Fibonacci数列数列无穷数列1,1,2,3,5,8,13,21,34,55,称为Fibonacci数列。它可以递
7、归地定义为:边界条件边界条件递归方程递归方程第n个Fibonacci数可递归地计算如下:int fibonacci(int n)if(n=1)return 1;return fibonacci(n-1)+fibonacci(n-2);本讲稿第九页,共三十八页例例2 Fibonacci调用结构:调用结构:本讲稿第十页,共三十八页例例2 Fib复杂度分析:The call tree is a full binary tree down to depth n/2,the rightmost path being the shortest,such as n,n-2,0.(n is even).The
8、refore,the running time is at least O(2n/2)本讲稿第十一页,共三十八页Modify the procedure of Example 2,whichcomputes Fibonacci numbers,to use only aconstant numbers for work space and still computeFn in O(n)time.nif(n=1)return n;nprev2=0;prev1=1;nfor(i=2;i 0)hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);本讲稿第十四页,共三
9、十八页2.1 递归小结优点:优点:结构清晰,可读性强,而且容易用数学结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。法、调试程序带来很大方便。缺点:缺点:递归算法的运行效率较低,无论是耗费递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算的计算时间还是占用的存储空间都比非递归算法要多。法要多。本讲稿第十五页,共三十八页解决方法:解决方法:在递归算法中消除递归调用,使其转化为在递归算法中消除递归调用,使其转化为非递归算法。非递归算法。1 1、采用一个用户定义的栈来模拟系统的递归调用
10、工、采用一个用户定义的栈来模拟系统的递归调用工作栈。该方法通用性强,但本质上还是递归,只不过作栈。该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。人工做了本来由编译器做的事情,优化效果不明显。2 2、用递推来实现递归函数。反向递归、用递推来实现递归函数。反向递归3 3、通过变换能将一些递归转化为尾递归,从而迭、通过变换能将一些递归转化为尾递归,从而迭代求出结果。反演变换代求出结果。反演变换 后两种方法在时空复杂度上均有较大改善,但后两种方法在时空复杂度上均有较大改善,但其适用范围有限。其适用范围有限。2.1 递归小结本讲稿第十六页,共三十八页2.2 分治法
11、的适用条件分治法所能解决的问题一般具有以下几个特征:分治法所能解决的问题一般具有以下几个特征:分治法所能解决的问题一般具有以下几个特征:分治法所能解决的问题一般具有以下几个特征:n该问题的规模缩小到一定的程度就可以容易地解决;该问题的规模缩小到一定的程度就可以容易地解决;n该问题可以分解为若干个该问题可以分解为若干个规模较小的相同规模较小的相同问题,即该问题具有问题,即该问题具有最优子结构性质最优子结构性质n利用该问题分解出的子问题的解利用该问题分解出的子问题的解可以合并可以合并为该问题的解;为该问题的解;n该问题所分解出的各个子问题是该问题所分解出的各个子问题是相互独立的相互独立的,即子问题
12、之间,即子问题之间不包含公共的子问题。不包含公共的子问题。因为问题的计算复杂性一般是随着问题规模的增加而增加,因此大部分问题满足这个特征。这条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用能否利用分治法完全取决于问题是否具有这条特征,如果具备了前两条特征,而不具备第三条特征,则可以考虑贪心算法贪心算法或动态规划动态规划。这条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规动态规划划较好。本讲稿第十七页,共三十八页divide-and-conquer(P)if(|P|=n0)a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 分治 策略 精选 文档

限制150内