第8章 程序设计基本算法和应用.ppt
《第8章 程序设计基本算法和应用.ppt》由会员分享,可在线阅读,更多相关《第8章 程序设计基本算法和应用.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 程序设计基本算法与应用8.1 8.1 迭代法迭代法8.2 8.2 递推法递推法8.3 8.3 递归法递归法8.4 8.4 穷举法穷举法8.5 8.5 回朔法回朔法8.6 8.6 贪心法贪心法8.7 8.7 分治法分治法8.8 8.8 动态规划动态规划8.1 迭代法:方程求根(牛顿迭代法)迭代法:方程求根(牛顿迭代法)迭代法是一种不断用变量的旧值递推新值的过程。迭代法是一种不断用变量的旧值递推新值的过程。迭代法是一种不断用变量的旧值递推新值的过程。迭代法是一种不断用变量的旧值递推新值的过程。运用迭代法的基本步骤:运用迭代法的基本步骤:运用迭代法的基本步骤:运用迭代法的基本步骤:(1 1)
2、确定迭代的变量)确定迭代的变量)确定迭代的变量)确定迭代的变量(2 2)建立迭代关系)建立迭代关系)建立迭代关系)建立迭代关系(3 3)对迭代过程进行控制)对迭代过程进行控制)对迭代过程进行控制)对迭代过程进行控制 设设设设r r r r是是是是f(xf(xf(xf(x)=0)=0)=0)=0的根,选取的根,选取的根,选取的根,选取x0 x0 x0 x0作为作为作为作为r r r r初始近似值,初始近似值,初始近似值,初始近似值,过点(过点(过点(过点(x0,f(x0)x0,f(x0)x0,f(x0)x0,f(x0))做曲线)做曲线)做曲线)做曲线y=y=y=y=f(xf(xf(xf(x)的切
3、线的切线的切线的切线L L L L,L L L L的方程的方程的方程的方程为为为为y=f(x0)+f(x0)(x-x0)y=f(x0)+f(x0)(x-x0)y=f(x0)+f(x0)(x-x0)y=f(x0)+f(x0)(x-x0),求出,求出,求出,求出L L L L与与与与x x x x轴交点的横坐轴交点的横坐轴交点的横坐轴交点的横坐标标标标 x1=x0-f(x0)/f(x0)x1=x0-f(x0)/f(x0)x1=x0-f(x0)/f(x0)x1=x0-f(x0)/f(x0),称,称,称,称x1x1x1x1为为为为r r r r的一次近似值。的一次近似值。的一次近似值。的一次近似值。过
4、点(过点(过点(过点(x1,f(x1)x1,f(x1)x1,f(x1)x1,f(x1))做曲线)做曲线)做曲线)做曲线y=y=y=y=f(xf(xf(xf(x)的切线,并求该切的切线,并求该切的切线,并求该切的切线,并求该切线与线与线与线与x x x x轴交点的横坐标轴交点的横坐标轴交点的横坐标轴交点的横坐标 x2=x1-f(x1)/f(x1)x2=x1-f(x1)/f(x1)x2=x1-f(x1)/f(x1)x2=x1-f(x1)/f(x1),称,称,称,称x2x2x2x2为为为为r r r r的二次近似值。重复以上过程,得的二次近似值。重复以上过程,得的二次近似值。重复以上过程,得的二次近
5、似值。重复以上过程,得r r r r的近似值序列,的近似值序列,的近似值序列,的近似值序列,其中其中其中其中x(n+1)=x(n+1)=x(n+1)=x(n+1)=x(nx(nx(nx(n)f(x(n)/f(x(nf(x(n)/f(x(nf(x(n)/f(x(nf(x(n)/f(x(n),称为,称为,称为,称为r r r r的的的的n+1n+1n+1n+1次次次次近似值,上式称为牛顿迭代公式。近似值,上式称为牛顿迭代公式。近似值,上式称为牛顿迭代公式。近似值,上式称为牛顿迭代公式。8.1 迭代法:方程求根(牛顿迭代法)迭代法:方程求根(牛顿迭代法)#include#include math.h
6、math.h#include#include stdio.hstdio.h float float fun(floatfun(float a,floata,float b,floatb,float c,floatc,float d)d)float x=0.5,y;float x=0.5,y;do do y=x;y=x;x=x-(a*x=x-(a*x+bx+b)*)*x+cx+c)*x+d)/(3*a*x+2*b)*)*x+d)/(3*a*x+2*b)*x+cx+c););while(fabs(x-ywhile(fabs(x-y)=0.0000001);)=0.0000001);return x
7、;return x;8.1 迭代法:方程求根(牛顿迭代法)迭代法:方程求根(牛顿迭代法)main()float a,b,c,d;printf(nplease input a,b,c,d:);scanf(%f%f%f%f,&a,&b,&c,&d);printf(x=%10.7fn,fun(a,b,c,d);8.1 迭代法:方程求根(牛顿迭代法)迭代法:方程求根(牛顿迭代法)8.2 递推法:斐波那契数列递推法:斐波那契数列2递推法是利用问题本身所具有的一种递推关系求解问递推法是利用问题本身所具有的一种递推关系求解问题的方法。题的方法。斐波那契(斐波那契(FibonacciFibonacci)数列:
8、数列)数列:数列1 1、1 1、2 2、3 3、55,是著名的斐波那契数列,其递推通项公式为:,是著名的斐波那契数列,其递推通项公式为:f(0)f(0)0;0;f(1)=1;f(1)=1;f(nf(n)=f(n-2)+f(n-1)(n1)=f(n-2)+f(n-1)(n1),请编写程序输出,请编写程序输出斐波那契数列的前斐波那契数列的前2020项。项。8.2 递推法:斐波那契数列递推法:斐波那契数列#define N 20main()long fN=0,1;int i;for(i=2;iN;i+)fi=fi-2+fi-1;printf(“Fibonacci%d=%ldn”,i,fi);8.2
9、递推法:斐波那契数列递推法:斐波那契数列 一般而言,兔子在出生两个月后,就有繁殖能力,一般而言,兔子在出生两个月后,就有繁殖能力,一般而言,兔子在出生两个月后,就有繁殖能力,一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都一对兔子每个月能生出一对小兔子来。如果所有兔都一对兔子每个月能生出一对小兔子来。如果所有兔都一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?不死,那么一年以后可以繁殖多少对兔子?不死,那么一年以后可以繁殖多少对兔子?不死,那么一年以后可以繁殖多少对兔子?我们不妨拿新出生的一对小兔子分析一下:我们不妨
10、拿新出生的一对小兔子分析一下:我们不妨拿新出生的一对小兔子分析一下:我们不妨拿新出生的一对小兔子分析一下:第一个月小兔子没有繁殖能力,所以还是一对第一个月小兔子没有繁殖能力,所以还是一对第一个月小兔子没有繁殖能力,所以还是一对第一个月小兔子没有繁殖能力,所以还是一对;两个月后,生下一对小兔民数共有两对两个月后,生下一对小兔民数共有两对两个月后,生下一对小兔民数共有两对两个月后,生下一对小兔民数共有两对;三个月以后,老兔子又生下一对,因为小兔子还三个月以后,老兔子又生下一对,因为小兔子还三个月以后,老兔子又生下一对,因为小兔子还三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三
11、对没有繁殖能力,所以一共是三对没有繁殖能力,所以一共是三对没有繁殖能力,所以一共是三对;8.2 递推法:斐波那契数列递推法:斐波那契数列依次类推可以列出下表:依次类推可以列出下表:依次类推可以列出下表:依次类推可以列出下表:所经过月数:所经过月数:所经过月数:所经过月数:0 0 0 0、1 1 1 1、2 2 2 2、3 3 3 3、4 4 4 4、5 5 5 5、6 6 6 6、7 7 7 7、8 8 8 8、9 9 9 9、10101010、11111111、12 12 12 12 兔子对数:兔子对数:兔子对数:兔子对数:1 1 1 1、1 1 1 1、2 2 2 2、3 3 3 3、5
12、5 5 5、8 8 8 8、13131313、21212121、34343434、55555555、89898989、144144144144、233 233 233 233 表中数字表中数字表中数字表中数字1 1 1 1,1 1 1 1,2 2 2 2,3 3 3 3,5 5 5 5,8 8 8 8构成了一个序构成了一个序构成了一个序构成了一个序列。这个数列有关十分明显的特点,那是:前面相邻列。这个数列有关十分明显的特点,那是:前面相邻列。这个数列有关十分明显的特点,那是:前面相邻列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。两项之和,构成了后一项。两项之和,构成了后
13、一项。两项之和,构成了后一项。8.3 递归法:斐波那契数列递归法:斐波那契数列 一个过程或函数在其定义或说明中又直接或间接一个过程或函数在其定义或说明中又直接或间接一个过程或函数在其定义或说明中又直接或间接一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题调用自身的一种方法,它通常把一个大型复杂的问题调用自身的一种方法,它通常把一个大型复杂的问题调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求层层转化为一个与原问题相似的规模较小的问题来求层层转化为一个与原问题相似的规模较小的问题来求层层转化为一个与原问题相似的规
14、模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所解,递归策略只需少量的程序就可描述出解题过程所解,递归策略只需少量的程序就可描述出解题过程所解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。需要的多次重复计算,大大地减少了程序的代码量。需要的多次重复计算,大大地减少了程序的代码量。需要的多次重复计算,大大地减少了程序的代码量。一般来说,递归需要有边界条件、递归前进段和递归一般来说,递归需要有边界条件、递归前进段和递归一般来说,递归需要有边界条件、递归前进段和递归一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归
15、前进;当边界条返回段。当边界条件不满足时,递归前进;当边界条返回段。当边界条件不满足时,递归前进;当边界条返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。件满足时,递归返回。件满足时,递归返回。件满足时,递归返回。8.3 递归法:斐波那契数列递归法:斐波那契数列注意:注意:注意:注意:任何一个递归都包含两部分的内容:任何一个递归都包含两部分的内容:递归体:递归体:递归所进行的操作。递归所进行的操作。递归出口递归出口 :为了防止递归调用无终止地进行,必:为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加须在函数内有终止递归调用的手段。常用的办法是加条
16、件判断,满足某种条件后就不再作递归调用,然后条件判断,满足某种条件后就不再作递归调用,然后逐层返回。逐层返回。8.3 递归法:斐波那契数列递归法:斐波那契数列#define N 20main()int i;for(i=0;i1)return fib(n-1)+fib(n-2);8.4 穷举法穷举法:水仙花数水仙花数 穷举法是对可能是解的所有候选解进行逐一穷举法是对可能是解的所有候选解进行逐一穷举法是对可能是解的所有候选解进行逐一穷举法是对可能是解的所有候选解进行逐一检验,从中找出满足要求的解。检验,从中找出满足要求的解。检验,从中找出满足要求的解。检验,从中找出满足要求的解。main()int
17、 i,j,k,n;printf(water flowernumber is:);for(n=100;n1000;n+)i=n/100;/*分解出百位分解出百位*/j=n/10%10;/*分解出十位分解出十位*/k=n%10;/*分解出个位分解出个位*/if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%-5d,n);回溯法回溯法(探索与回溯法探索与回溯法)是一种选优搜索法,按选是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新发现原先选择并不优或达不
18、到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为足回溯条件的某个状态的点称为“回溯点回溯点”。1 1、问题描述、问题描述 从出发点(入口)开始,在给定的空间中,沿可从出发点(入口)开始,在给定的空间中,沿可行的路径进行探索,直到达到目标(出口)。行的路径进行探索,直到达到目标(出口)。在资源勘探中,在战争或游戏中,都会有类似的在资源勘探中,在战争或游戏中,都会有类似的情景,在给定的空间中,如森林、山洞、沙漠等,搜情景,在给定的空间中,如森林、山洞、沙漠等,搜索特定目标,如出路、人或物等。索特定目标,如
19、出路、人或物等。这类问题都可以归结为迷宫问题。这类问题都可以归结为迷宫问题。8.5 回朔法:迷宫问题回朔法:迷宫问题2 2、需要需要解决解决的的问题问题u如何表示给定的空间和可行的路径?如何表示给定的空间和可行的路径?u 如何表示入口和出口?如何表示入口和出口?u 当有多条可行的路径时如何选择?当有多条可行的路径时如何选择?u 当某条路径在某一点再没有可行之路时如何处理?当某条路径在某一点再没有可行之路时如何处理?前两个问题属于数据结构选择和设计,前两个问题属于数据结构选择和设计,后两个问题涉及后两个问题涉及算法设计算法设计。8.5 回朔法:迷宫问题回朔法:迷宫问题3 3、迷宫表示迷宫表示 可
20、以用一个可以用一个m m行行n n列的二维数组列的二维数组mazemnmazemn 来表来表示迷宫空间(或称迷宫地图),并约定:示迷宫空间(或称迷宫地图),并约定:当数组元素当数组元素mazeijmazeij=0=0,表示通路,表示通路,mazeijmazeij=1=1,表示不通;,表示不通;入口为左上角入口为左上角maze11maze11,出口为右下角出口为右下角mazemnmazemn;8.5 回朔法:迷宫问题回朔法:迷宫问题 迷宫地图简化迷宫地图简化 为了使探索方向个数一致,可在原来的迷宫地图为了使探索方向个数一致,可在原来的迷宫地图四周都扩展一个点,即增加两行和两列,并将迷宫四四周都扩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 程序设计基本算法和应用 程序设计 基本 算法 应用
限制150内