算法设计与分析第2章.pdf

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档