美文网首页数据结构和算法分析
CHAPTER1 函数的增长与递归式

CHAPTER1 函数的增长与递归式

作者: shenghaishxt | 来源:发表于2019-02-28 20:06 被阅读4次

本文来自我的个人博客 https://www.zhangshenghai.com/posts/36105/

渐进记号

用来表示算法的渐进运行时间的记号是用定义域为自然数集N=\{ 0, 1, 2, ...\}的函数来定义的,这些记号便于用来表示最坏情况运行时间T(n),因为T(n)​一般仅定义于整数的输入规模上。

\Theta记号(紧渐进界)

对于\Theta​记号有如下的定义:

\Theta记号限制一个函数在常数因子内,如图所示,n_0是最小的可能值。如果存在正常数n_0, c_1, c_2使得在n_0右边f(n)的值永远在c_1g(n)c_2g(n)之间,那么可以写成f(n) = \Theta(g(n))​

O记号(渐进上界)

对于O记号有如下的定义:

O记号给出一个函数在常数因子内的上限。如图所示,n_0是最小的可能值。如果存在正常数n_0, c使得在n_0右边f(n)的值永远等于或小于cg(n),那么可以写成f(n) = O(g(n))

Ω记号(渐进下界)

对于Ω​记号有如下的定义:

1544506062143.png

Ω记号给出一个函数在常数因子内的下限。如图所示,n_0是最小的可能值。如果存在正常数n_0, c使得在n_0右边f(n)的值永远等于或大于cg(n),那么可以写成f(n) = Ω(g(n))

o记号(渐进非紧上界)

O记号所提供的渐进上界可能是紧的,但也有可能不是。例如,2n^2=O(n^2)是一个紧的上界,但2n=O(n^2)却不是一个紧的上界。于是,我们使用o记号来表示一个紧的上界。

对于o​记号有如下的定义:

例如,2n=o(n^2),但2n^2 \neq o(n^2)

O记号与o记号的定义是类似的,主要区别在于对于f(n)=O(g(n)),界0 \leq f(n) \leq cg(n)对某个常数c>0成立即可,而对于f(n)=o(g(n)),界0 \leq f(n) \leq cg(n)对所有常数c>0成立。

ω记号(渐进非紧下界)

ω记号与Ω记号的关系就与前面小o和大o之间的关系是类似的,我们用ω记号表示一个紧的下界。

对于ω记号有如下的定义:

例如,n^2/2=ω(n),但n^2/2\neqω(n^2)

函数间的比较

实数的许多关系属性可以用于渐进比较,以上的记号之间具有传递性和对称性,下面假设f(n)g(n)是渐进正值函数。

解递归式的三种方法

求解递归式,即找出解的渐进“\Theta”或“O”界的方法主要有三种:

  • 代换法:先猜某个界存在,然后用数学归纳法证明该猜测的正确性。
  • 递归树方法:将递归式转换成树形结构,树中的节点代表在不同递归层次付出的代价。
  • 主方法:给出递归形式T(n) = aT(n/b)+f(n)的界,其中a \geq 1, b>1f(n)是给定的函数。这种方法要记忆三种情况,就可以确定很多简单递归式的界了。

代换法

用代换法解递归式需要两个步骤:

  1. 猜测解的形式。
  2. 用数学归纳法找出使解真正有效地常数。

递归树方法

虽然代换法给递归式的解的正确性提供了一种简单的证明方法,但是有的时候很难得到一个好的猜测。此时,画出一个递归树是一种得到好猜测的直接方法。

T(n) = 3T(n/4)+n^2​,则使用递归树求解该递归式的过程如下图所示:

主方法

a \geq 1, b>1f(n)为一函数,T(n)由递归式
T(n) = aT(n/b)+f(n)
对非负整数定义,那么T(n)有如下的渐进界:

求解和式时有一个比较常用的公式,假设f(k)是单调递增的函数,那么有如下的性质:

相关文章

  • CHAPTER1 函数的增长与递归式

    本文来自我的个人博客 https://www.zhangshenghai.com/posts/36105/ 渐进记...

  • Python 之路03 - Python基础3

    本节内容 函数与函数式编程 函数式编程之参数详解 局部变量与全局变量作用域嵌套函数 递归 函数式编程介绍 高阶函数...

  • Python语言程序---代码复用与函数递归(二)

    Python语言程序---代码复用与函数递归(二) 函数递归 在函数定义中,调用函数自身的方式就是递归。 递归并不...

  • 【Scala】尾递归优化

    以递归方式思考 递归通过灵巧的函数定义,告诉计算机做什么。在函数式编程中,随处可见递归思想的运用。下面给出几个递归...

  • python 10天快速教程 Day4

    本节重点 递归函数 匿名函数 python内置函数 切片 列表生成式 内存地址 可变类型与不可变类型详解 公共运算...

  • IOS 总结 第四课C语言特性

    1.一个函数体内调用他自身时,被称为函数的递归。递归函数包含一种隐式的循环。递归一定要向已知方向递归,避免死循环。...

  • Kotlin 函数用法入门

    本文内容: 函数与函数常量 扩展函数 命名参数与默认参数 运算符重载 递归与尾递归 定义函数 在 Kotlin 中...

  • 初识递归

    1 什么是递归? 先递进,再回归. 2 递归三大要素 明确函数想要什么? 寻找递归结束条件. 找出函数的等价关系式...

  • Scheme学习笔记(一)——尾递归

    欢迎访问我的博客原文地址本文为SCIP课堂作业思考总结。 尾递归的定义 尾递归是函数式编程中,递归函数的一种优化手...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

网友评论

    本文标题:CHAPTER1 函数的增长与递归式

    本文链接:https://www.haomeiwen.com/subject/zdokuqtx.html