- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析第2章
第二章递归与分治
Recurrence, Divide Conquer
递归
• 用函数自身给出定义的函数称为递归函数。
直接或间接地调用自身的算法称为递归算
法。
• 递归是设计算法的一种有力的工具。
• 著名的丘奇— 图灵论点:凡是可计算的函
数都是一般递归函数。
例. F(n) = n!
• 计算阶乘F(n) = n!,n为非负整数
– 0! = 1
– n! = 1 ×… ×(n-1) ×n = (n-1)! ×n, n>0
• 建立递归函数
– F(0) = 1
– F(n) = F(n-1) ×n, n>0
• 设计递归算法
Algorithm F(n)
if n = 0 return 1
else return F(n-1) * n
算法分析
• 把n看作算法的输入规模
• 算法的基本操作是乘法,其运行时间(或执行次数)为
T(n) ,其递归关系式(recurrence relations,或称递归方程)
T(n) = T(n - 1) + O(1), n>0
计算F(n-1)所需
乘法次数 计算F(n-1) ×n所需
乘法次数
初始条件(initial condition):停止递归调用的条件
T(0) = 0
– 当n=0时乘法次数为0
• 把递归关系式转换为解析式
– 代入法(substitutions):归纳出解析式
• 向前代入法(forward ~):从初始条件开始
• 向后代入法(backward ~):到初始条件终止
分治法(Divide-and-Conquer)
• 将一个规模为n 的问题分解为k个规模较小的子问题。
= n
T(n)
T(n/2) T(n/2) T(n/2) T(n/2)
分治法(Divide-and-Conquer)
• 对这k个子问题分别求解。如果子问题的规模仍然不够
小,则再划分为k个子问题,如此递归的进行下去,直
到问题规模足够小,很容易求出其解为止。
= n
T(n)
n/2 n/2 n/2 n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)
分治法(Divide-and-Conquer)
• 将求出的小规模的问题的解合并为一个更大规模的问
题的解,自底向上逐步求出原来问题的解。
= n
T(n)
n/2 n/2 n/2 n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)
分治法(Divide-and-Conquer)
• 将求出的小规模的问题的解合并为一个更大规模的问
题的解,自底向上逐步求出原来问题的解。
文档评论(0)