ImageVerifierCode 换一换
格式:PPT , 页数:52 ,大小:1.06MB ,
资源ID:1360640      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-1360640.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(离散数学课件-第2章-7-2.ppt)为本站会员(天天快乐)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

离散数学课件-第2章-7-2.ppt

1、1,离散数学Discrete Mathematics,汪荣贵 教授合肥工业大学软件学院专用课件2010.04,1,2018/7/3,CHAPTER 2 The Foundations: Algorithms, the Integers ,and Matrices,2.1 Algorithms算法2.2 Complexity of Algorithms算法的复杂性2.3 The Integers and Division整数和除法2.4 Integers and Algorithm整数和算法2.5 Applications of Number Theory数论的应用2.6 Matrices矩阵2

2、.7 Recursion 递归,学习内容,递 归,递归定义 引言 递归地定义函数 递归地定义集合与结构递归算法 引言 递归与迭代 归并排序,4,2018/7/3,递归定义,引言递归地定义函数递归地定义集合与结构,5,2018/7/3,6,2018/7/3,Recursive Definition 递归定义,Introduction 引言,Sometimes it is difficult to express the members of an object or numerical sequence explicitly. 有时候明确地表示一个对象或数字序列的构成是很困难的For examp

3、le, The Fibonacci sequence斐波纳契数列: fn = 0,1,1,2,3,5,8,13,21,34,55,7,2018/7/3,In a recursive definition, an object is defined in terms of itself 用某个对象定义它自身,这种过程称为递归定义。We can recursively define sequences, functions and sets.我们可以递归定义序列、函数和集合。,递归定义,递归定义图片,8,2018/7/3,递归定义,引言递归地定义函数递归地定义集合与结构,9,2018/7/3,10

4、,2018/7/3,Recursively defined functions, with the set of nonnegative integers as its domain: 以非负整数集合作为其定义域的递归定义函数。Basis Step: 规定这个函数在0处的值.Recursive Step: 给出从较小的整数处的值来求当前值的规则.这样的定义称为递归定义或归纳定义。,Recursively defined functions递归定义函数,Example 1假定f是用 f(0)=3 f(n+1)=2f(n)+3来递归地定义的。求出f(1),f(2),f(3)和f(4)解:从这个递归

5、定义得出 f(1)=2f(0)+3=2*3+3=9 f(2)=2f(1)+3=2*9+3=21 f(3)=2f(2)+3=2*21+3=45 f(4)=2f(3)+3=2*45+3=93,递归定义函数例题,11,2018/7/3,Example 2:给出阶乘函数F(n)=n!的归纳定义解:可以通过规定阶乘函数的初值,即F(0)=1,并且给出F(n)求出F(n+1)的规则,来定义这个函数。要得出这个结果,注意通过乘以n+1就从n!计算出(n+1)!。因此,所需要的规则是F(n+1)=(n+1)F(n)。 为了从例2里求出的递归定义来确定阶乘函数的一个值,比如F(5)=5!,有必要多次使用说明如何

6、F(n)表示F(n+1)的规则:F(5)=5F(4)=54F(3)=543F(2)=5432F(1)=54321F(0)=543211=120,12,2018/7/3,Example 3给出an的递归定义,其中a是非负零实数而且是非负整数。 解:这个递归定义包括两个部分。首先规定a0,即a0=1.然后给出从an求出an+1的规则,即对n=0,1,2,3,来说an+1 =a* an 。这两个等式对所有非负整数唯一地定义了an.,13,2018/7/3,递归定义函数例题,14,2018/7/3,Recursively defined functions are well-defined.递归定义的

7、函数是良定义的,Why?Let P(n) be the statement “f is well-defined at n . (1) P(0) is true.Assume that P(n) is true. Then f is well-defined at n +1. Since f(n+1) is given in terms of f(n).,递归定义的函数是良定义的,15,2018/7/3,定义 1The Fibonacci numbers 斐波那契数 fn = 0,1,1,2,3,5,8,13,21,34,55,The Fibonacci numbers can be defi

8、ned斐波那契数可被定义为: f 0 = 0 f 1 = 1 f n = f n-1 + f n-2 for n=2,3,4,斐波那契数,Example 5 斐波那契数f0,f1,f2,是用等式f0=0,f1=1,以及n=2,3,4,来说fn=fn-1+fn-2来定义的。斐波那契数f2, f3,f4 ,f5 ,f6 是什么?解:因为这个定义的第一部分说f0=0和f1=1 ,所以从这个定义的第二部分得出 f2 = f1 + f0 =1+0=1 f3 = f2 + f1 =1+1=2 f4 = f3 + f2 =2+1=3 f5 = f4 + f3 =3+2=5 f6 = f5 + f4 =5+3

9、=8,16,2018/7/3,17,2018/7/3,Example 6 Show that,Proof:,(1) Inductive base,Assume that P(k) is true, namely, that for all integers k with .,We must show that P(k+1) is true, that is .,Therefore,Since is the solution of , it follows that,By the inductive hypothesis, if , it follows that,Therefore,(2) I

10、nductive step,递归定义,引言递归地定义函数递归地定义集合与结构,18,2018/7/3,19,2018/7/3,Recursively defined sets 递归地定义集合,Sets can be defined recursively.Basis Step: Specify an initial collection of elements.规定初始的一些元素Recursive Step: Give the rules for constructing elements of the set from other elements already in the set. 给

11、出用来从已知属于集合的元素来构造集合的新元素的规则,Sets described in this way are well-defined.,20,2018/7/3,Example 7 Consider the subset of the set of integers defined by考虑如下定义的整数集合的子集S,Basis Step: 3 SRecursive Step: if x S and y S , then x+y S,子集的定义,21,2018/7/3,定义 2 The set * of strings over the alphabet .字母表 上的字符串的集合* 递归

12、地定义成:,Solution:,Basis Step: *, where is the empty string containing no symbols. *, (其中是不包含任何符号的空串)Recursive Step: x * whenever * and x .若x 且 * ,则x *,字符串的集合的定义,22,2018/7/3,Note: The length of a string, l(), is a function that can be defined recursively, and the assertion l(xy) = l(x) + l(y) can be pr

13、oved inductively.,字符串的长度l()可以定义为: l() = 0; l( x) = l() + 1, 若x 且 * .,字符串的长度的定义,Example 8 证明l(xy) = l(x) + l(y) ,其中x, y *,字符串的长度的例题,设P(y)是命题:每当x *时就有l(xy) = l(x) + l(y) ;Basis Step: 先证明P()为真,即对所有x *来说有l(x) = l(x) + l()。易知,l(x) = l(x) = l(x) + 0 = l(x) + l(),即P()为真。Recursive Step: 假定P(y)为真,且蕴含着每当a 时,就

14、有P(ya)为真。需证明对每个a 来说有l(xya) = l(x) + l(ya):根据l()定义,有l(xya) = l(xy) + 1和l(ya) = l(y) + 1,又根据归纳假设,有l(xy) = l(x) + l(y),故得出l(xya) = l(x) + l(y) + 1 = l(x) + l(ya)。,23,2018/7/3,定义 3 递归定义根树的集合,其中根树是由一个顶点集合和连接这些顶点的边组成的,顶点集合包含的一个特殊顶点称为树根:,Solution:,Basis Step: 单个顶点r是根树。Recursive Step: 假设T1,T2,Tn是根树,分别带有树根r1

15、,r2,rn。则如下形成的图也是根树:从树根r开始,r不属于树根中T1,T2,Tn的任何一个,从r到r1,r2,rn中的每个都加一条边。,根树的集合,24,2018/7/3,建立根树,根树的集合,25,2018/7/3,定义 4 递归定义扩展二叉树的集合:,Solution:,Basis Step: 空集合是扩展二叉树。Recursive Step: 如果T1和T2都是扩展二叉树,则存在一个表示为T1 T2的扩展二叉树,它包含树根r和当左子树T1和右子树T2都非空时,连接从r到这两个子树各自的根的边。,扩展二叉树的集合,26,2018/7/3,建立扩展二叉树,扩展二叉树的集合,27,2018/

16、7/3,定义 5 递归定义满树的集合:,Solution:,Basis Step: 存在一个只含有单个顶点的满二叉树。Recursive Step: 如果T1和T2都是满二叉树,则存在一个表示为T1 T2的满二叉树,它包含树根r和连接从r到左子树T1和右子树T2各自的根的边。,满树的集合,28,2018/7/3,建立满树,满树的集合,29,2018/7/3,递 归,递归定义 引言 递归地定义函数 递归地定义集合与结构递归算法 引言 递归与迭代 归并排序,30,2018/7/3,递归算法,引言递归与迭代归并排序,31,2018/7/3,32,2018/7/3,Recursive Algorith

17、ms 递归算法,定义 1 An algorithm is called recursive if it solves a problem by reducing it to an instance of the same problem with smaller input. 若一个算法通过把问题规约到带更小的输入的相同问题的实例,来解决原来的问题,则这个算法称为递归的Once you have figured out a recursive definition for a function, one can immediately turn it into a recursive algo

18、rithm in languages (such as Java) which can handle recursion.,33,2018/7/3,procedure factorial(n: positive integer)if n=0 then factorial(n):=1else factorial(n) := nfactorial(n-1),Example 1 Give a recursive algorithm for computing the factorial function n! .给出计算阶乘n!的递归算法,递归算法的例题,34,2018/7/3,Algorithm

19、2 A Recursive Algorithm for Computing gad(a,b). procedure gcd(a,b: nonnegative integers with ab)if a=0 then gcd(a,b):=belse gcd(a,b):= gcd(b mod a,a),Example 2 Give a recursive algorithm for computing the greatest common divisor of two nonnegative integers a and b with ab.给出满足ab的两个非负整数a和b的最大公因子的递归算法

20、。,35,2018/7/3,Algorithm 3 A Recursive Linear Search Algorithm). procedure search(i, j, x)if ai=x then location:=ielse if i=j then location:=0else search(i+1, j, x),Example 3 Express the linear search algorithm as a recursive procedure.把线性搜索算法表达成递归过程,递归算法,引言递归与迭代归并排序,36,2018/7/3,递归与迭代,递归:算法容易实现,不过效率低

21、下;迭代:算法实现稍难,不过效率高;,37,2018/7/3,procedure iterative factorial (n: 正整数) x:=1For i:= 1 to n x: I x x是n!,阶乘的迭代过程,38,2018/7/3,procedure iterative fibonacci (n: 非负整数)If n=0 then y:=0ElseBegin x:=0 y:=1 for i:= 1 to n-1Begin z := x + y x := y y := zendEnd y是第n个斐波那契数,斐波那契数的迭代算法,39,2018/7/3,递归算法,引言递归与迭代归并排序,

22、40,2018/7/3,基本思想将两个或两个以上的有序子序列“归并”为一个有序序列。基本原理为将一个具有n个待排序记录的序列看成是n个长度为1的有序列,然后进行两两归并,得到n/2 个长度为2的有序序列,再进行两两归并,得到n/4 个长度为4的有序序列,如此重复,直至得到一个长度为n的有序序列为止。 在内部排序中,通常采用的是2-路归并排序。即:将两个位置相邻的有序子序列归并为一个有序序列。,ri rm rm+1 rn,有序,有序,有序,ri rn,归并排序,41,2018/7/3,原理 假设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列长度为1。然后两两归并,得到n/2个长度为2

23、或1的有序子序列;再两两归并,如此重复,直至得到一个长度为n的有序序列为止。,初始时: 49 38 65 97 76 13 27,归并排序原理,42,2018/7/3,43,2018/7/3,如何进行两路归并? 将两个有序表的元素进行比较,小者复制到目标表中。,(5,24,35,74,222),(19,23,30),( ),两路归并,44,2018/7/3,5,24,35,74,222,(,),19,23,30,(,),(,),5,19,23,24,30,35,74,222,两路归并动画演示,s,m,t,m+1,45,2018/7/3,归并排序方法可以用递归的形式描述,即首先将待排序的记录序列

24、分为左右两个部分,并分别将这两个部分用归并方法进行排序,然后调用2-路归并算法,再将这两个有序段合并成一个含有全部记录的有序段。,归并排序的递归算法,46,2018/7/3,归并排序的递归算法,47,2018/7/3,归并排序的例子,Example 9 描述如何合并两个表2,3,4,5和1,4。,48,2018/7/3,Example 10对8,2,4,6,9,7,10,1,5,3进行归并排序。,49,2018/7/3,归并两个表,50,2018/7/3,引理 1 使用不超过m+n-1次比较,可以把带m个元素和n个元素的两个有序表合并成一个有序表。,定理 1 对一个带n个元素的表进行归并排序所需要的比较次数是O(nlogn)。,Note 事实上归并排序最好、最坏、平均时间复杂度均为O(nlogn)。,引理、定理,51,2018/7/3,本节内容到此结束,谢谢大家!,52,2018/7/3,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报