《算法设计技术》PPT课件.ppt
《《算法设计技术》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《算法设计技术》PPT课件.ppt(41页珍藏版)》请在三一办公上搜索。
1、第13章 算法设计技术 引言,1984年的图灵奖得主Niklaus Wirth“Programs=Algorithm+Data Structures”算法是对特定问题求解步骤的一种描述。其基本特性为:有穷性确定性可行性输入输出一个好的算法应当具备以下特点:正确性可读性健壮性效率与低存储量需求,引言,当我们遇到一个问题时,首先需要设计算法,但是算法的设计并非一件容易的事情,它需要具备各方面的知识,同时还需要一些灵感。好在现实生活中并非每件事情的解决都要我们去传造出新的方法,很多事情前人们已经遇到,而且已经给出了很好的解决,因此首先掌握一些经典的算法思想不仅可以帮助我们解决现有的问题,而且也有助于
2、我们在此基础上进行创造性的劳动。在学习的过程中我们应当仔细体会这些思想的奥妙。,引言,经常采用的算法设计技术主要有:迭代法穷举法递归法回溯法分枝限界法分治法动态规划法贪心法,迭代法,意大利数学家Fibonacci曾提出过一个有趣的问题:“设有一对新生兔子,从第三个月开始它们每月都生一对兔子。按照这个规律,并假设兔子没有死亡的,求一年后有多少对兔子。”思路:首先我们根据已知条件来找规律,迭代法,4月个数3月个数(old)2月个数(new)=2+1=35月个数4月个数(old)3月个数(new)=3+2=56月个数5月个数(old)4月个数(new)=5+3=87月个数6月个数(old)5月个数(
3、new)=8+5=13Fib(n)=Fib(n-1)+Fib(n-2)Fib(1)=Fib(2)=1,迭代法,对于以上问题我们可以描述为Fib(n)=Fib(n-1)+Fib(n-2)Fib(1)=Fib(2)=1特点:1)存在初值。2)存在一个表达式。3)求值的过程从初值开始,通过表达式不断的计算得出新值,新值是不断的通过旧值计算出来的。我们称以上过程即为迭代过程。其思想就是由一个初值开始使用一个迭代表达式进行反复迭代,从而不断求出新值,直到求得需要的值。,迭代法,迭代过程的实现比较简单,常常使用循环结构生成效率极高的过程。int fun(int n)int i,fib,fib1,fib2;
4、fib1=fib2=1;/初值for(i=3;i=n;i+)/迭代条件:3=i=nfib=fib2+fib1;fib2=fib1;fib1=fib;return fib;,穷举法,顾名思义就是将所有的情况全部列举出来的意思。对于我们来说,穷举法似乎是一种“较笨”的算法,而且如果情况比较复杂,可能根本无法办到。为什么还要提这种方法呢?思路简单很多情况下规律的寻找并不容易,有时可能无法找到。穷举虽然对于人很麻烦易错,但是对于高速运算的计算机而言,实在是不在话下,而且重复机械计算正是计算机的特长。,穷举法,因此作为一种算法思想,加上计算机这种强大的计算工具,穷举也成为一种被人们经常使用的解决问题的方
5、法。举例下棋程序中很多时候就是运用了穷举法则,每一步可能的走法及对应招数都被存储在海量存储器中,每下一步棋,电脑便依靠强大的计算速度查询海量存储器寻找对应的解决办法,然后猜测可能的结果,最终选定一步最好的走法。求排列、组合问题,递归与分治,递归定义:直接或间接地调用自身的过程称为递归过程。,递归与分治,递归的工作原理,1,2,6,24,递归与分治,递归三要素1)问题形式:需要哪些输入参数?返回结果是什么?2)递归规则:问题如何进行分解?3)终结条件:什么情况下可以无须分解而直接求解?,递归与分治,分治思想:将一个难以直接解决的大问题,分割成一些与原问题同类型的、规模小于原问题的子问题,然后各个
6、击破,分而治之,最后再合并子问题的解从而得到原问题的解。,凡治众如治寡,分数是也。孙子兵法,递归与分治,图例:,递归与分治,分治和递归的关系由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。,递归与分治,分治法所能解决的问题一般具有以下几个特征:该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结
7、构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。,递归与分治,分治法举例Hanoi塔问题问题描述:设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:,1、每次只能移动1个圆盘;2、任何时刻都将较大的圆盘放在较小的圆盘之下;3、在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。,递归与分治,问题的分解,n个盘从A移动到B,n-1个
8、盘从A移到C,移动剩余的盘到B,n-1个盘从C移到B,n-2个盘从A移到B,移动剩余的盘到C,n-2个盘从B移到C,n-2个盘从C移到A,移动剩余的盘到B,n-2个盘从A移到B,递归与分治,程序,void hanoi(int n,int a,int b,int c)if(n=1)move(a,b);else hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);,递归与分治,人们从大量实践中发现,在用分治法设计算法时,最好使子问题的规模大致相同。即将一个问题分成大小相等的k个子问题的处理方法是行之有效的。这种使子问题规模大致相等的做法是出自一种平衡(balan
9、cing)子问题的思想,它几乎总是比子问题规模不等的做法要好。,递归与分治,递归算法优点结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。缺点运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。解决方法在递归算法中消除递归调用,使其转化为非递归算法:采用一个用户定义的栈来模拟系统的递归调用工作栈。通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情。,回溯法,也称为试探法。可以将回溯法看作是带优化的穷举法。基本思想在一棵含有问题全部可能解的状态空间树上进行深度优先搜索,解为叶子结点。搜索过程中,每到达一个结点时,则
10、判断该结点为根的子树是否含有问题的解,如果可以确定该子树中不含有问题的解,则放弃对该子树的搜索,退回到上层父结点,继续下一步深度优先搜索过程。在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造。,回溯法,回溯法,在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,并继续试探的过程称为向前试探。,回溯法,举例:迷宫问题问题描述:求从入口出口的路径,迷宫的图形表示(b)迷宫的二维数组表示,回溯法,求解迷宫问题的简单方法是:从入口出发,沿某一方向进行探索。若能走通,则继续向前走;否则沿原路返回,换一方向再进行探索
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法设计技术 算法 设计 技术 PPT 课件
链接地址:https://www.31ppt.com/p-5588749.html