欢迎来到天天文库
浏览记录
ID:58709010
大小:3.81 MB
页数:53页
时间:2020-10-04
《第2章 《算法分析与设计》 递归与分治策略ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章递归与分治策略电子与电气工程系通信教研室任课老师:温洪明理解递归的概念。掌握设计有效算法的分治策略。通过下面的范例学习分治策略设计技巧。(1)二分搜索技术;(2)大整数乘法;(3)Strassen矩阵乘法;(4)棋盘覆盖;(5)合并排序和快速排序;(6)线性时间选择;(7)最接近点对问题;(8)循环赛日程表。学习要点将要求解的较大规模的问题分割成k个更小规模的子问题。算法总体思想对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。对这k个
2、子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。算法总体思想将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。算法总体思想nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/
3、4)T(n/4)nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。2.1递归的概念直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反
4、复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。下面来看几个实例。例1阶乘函数阶乘函数可递归地定义为:边界条件递归方程边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。2.1递归的概念intfactorial(intn){if(n==0)return1;returnn*factorial(n-1);}#include"st
5、dafx.h"#includeintFactorial(intn){if(n==0)return1;returnn*Factorial(n-1);}intmain(intargc,char*argv[]){intn;intm;cout<<"请输入正整数n(n<10):";cin>>n;m=Factorial(n);cout<<"n的阶乘n!等于:"<intmain(intargc,c
6、har*argv[]){intn,m=1;cout<<"请输入正整数n(n<10):";cin>>n;for(i=1;i<=n;i++)m=m*i;cout<<"n的阶乘n!等于:"<7、rnfibonacci(n-1)+fibonacci(n-2);}#include"stdafx.h"#includeintFibonacci(intn){if(n<=1)return1;returnFibonacci(n-1)+Fibonacci(n-2);}intmain(intargc,char*argv[]){intn,m;cout<<"请输入正整数n:";cin>>n;m=Fibonacci(n);cout<<"第"<8、#include"stdafx.h"#includeintmain(intargc,char*argv[]){intn,m,a,b;cout<<"请输入正整数n:";cin>>n;cout<<“前”<
7、rnfibonacci(n-1)+fibonacci(n-2);}#include"stdafx.h"#includeintFibonacci(intn){if(n<=1)return1;returnFibonacci(n-1)+Fibonacci(n-2);}intmain(intargc,char*argv[]){intn,m;cout<<"请输入正整数n:";cin>>n;m=Fibonacci(n);cout<<"第"<8、#include"stdafx.h"#includeintmain(intargc,char*argv[]){intn,m,a,b;cout<<"请输入正整数n:";cin>>n;cout<<“前”<
8、#include"stdafx.h"#includeintmain(intargc,char*argv[]){intn,m,a,b;cout<<"请输入正整数n:";cin>>n;cout<<“前”<
此文档下载收益归作者所有