美文网首页算法简单学习
算法简单学习(五)—— 函数的增长

算法简单学习(五)—— 函数的增长

作者: 刀客传奇 | 来源:发表于2017-08-15 16:40 被阅读30次

版本记录

版本号 时间
V1.0 2017.08.15

前言

将数据结构和算法比作计算机的基石毫不为过,追求程序的高效是每一个软件工程师的梦想。下面就是我对算法方面的基础知识理论与实践的总结。感兴趣的可以看上面几篇。
1. 算法简单学习(一)—— 前言
2. 算法简单学习(二)—— 一个简单的插入排序
3. 算法简单学习(三)—— 分治法与合并排序
4. 算法简单学习(四)—— 冒泡排序

函数的增长

前面我们看到合并排序最坏情况的时间Θ(nlgn),插入排序最坏情况的时间为Θ(n^2),也就是说当n很大的时候,插入排序最坏情况是不如合并排序的,当输入规模很大的时候,我们可以认为算法的运行时间只与增长的量级有关,这时就是在研究算法的渐进效率。


几种渐近记号

用来表示算法的渐进运行时间的几号是用来定义域为自然数集N = {0, 1, 2 ... }的函数来定义的。下面我们就看一下几种基本的渐近几号和扩展用法。

1. Θ记号

前面我们知道插入排序最坏的情况下是T(n) = Θ(n2),下面我们就定义这个符号的含义。

对于一个给定的函数g(n),用Θ(g(n))来表示函数集合。Θ(g(n)) = {f (n) : 存在正常数c1 ,c2,n0,使对所有的n≥n0,有0 ≤ c1g(n) ≤ f (n) ≤ c2g(n) },对任一个函数f(n),若存在正常数c1 ,c2,使当n充分大的时候,f (n) 能被夹在 c1g(n)和c2g(n)之间,则f (n) 属于集合Θ(g(n))。也可以说f (n)是Θ(g(n))的元素,可以写成f (n) = Θ(g(n)

下面几个图给出了f(n)和g(n)的几种关系。

图1 图2 图3

下面说一下这几张图示。

  • 图1:Θ记号限制一个函数在正常范围内,如果存在正常数c1 ,c2,n0,使对所有的n≥n0,有0 ≤ c1g(n) ≤ f (n) ≤ c2g(n),就可以写作f (n) = Θ(g(n))
  • 图2:O记号给出一个函数在常数因子内的上限,如果存在正常数n0和c,使得在n0右边的f(n)的值永远等于或者小于cg(n),那么就可以写为f (n) = O(g(n))
  • 图3:Ω记号给出一个函数在常数因子内的下限,如果存在正常数n0和c,使得在n0右边的f(n)的值永远等于或者大于cg(n),那么就可以写为f (n) = Ω(g(n))

2. O记号

Θ记号给出了上界和下界,当只有上界的时候用O记号表示。下面我们就给一下定义,其实前面那几张图基本已经说得很清楚了。

我们以O(g(n))表示一个函数集合,如果存在正常数n0和c,使得在n > n0时有 0 ≤ f(n) ≤ cg(n),那么就可以写为f (n) = O(g(n))

3. Ω记号

Θ记号给出了上界和下界,当只有下界的时候用Ω记号表示。下面我们就给一下定义,其实前面那几张图基本已经说得很清楚了。

我们以Ω(g(n))表示一个函数集合,如果存在正常数n0和c,使得在n > n0时有 0 ≤ cg(n) ≤ f(n),那么就可以写为f (n) = Ω(g(n))

下面我们看一下定理。

定理1:对任意两个函数f(h)和g(n),f (n) = Θ(g(n))当且仅当f (n) = O(g(n))f (n) = Ω(g(n))

定理的应用范围并不是根据上下界的范围确定渐近上界和渐近下界,而是用渐近上界和渐近下界证明出渐近确界。


等式与不等式中的渐进符号

如果等式或者不等式中有渐进符号,比如公式中:2n2 + 3n + 1 = 2n2 + Θ(n),这就表示2n2 + 3n + 1 = 2n2 + f(n),其中f(n)是某个属于集合Θ(n)的函数,在这里f(n) = 3n + 1,确实在Θ(n)中。

等式里的渐近符号的作用就是有助于略去一个等式中无关紧要的细节,比如说我们前面说过合并排序最坏情况的运行时间表示为递归式。

T(n) = 2T(n/2) + Θ(n)

如果只对T(n) 的渐进行为感兴趣,则没有必要写出所有的低阶项,它们都被包含在由Θ(n)表示的匿名函数中了。

1. o记号

O记号提供的渐近上界可能是也可能不是渐近精确的,比如说2n2 = O(n2)就是渐近精确的,但是2n = O(n2)就不是,我们使用o记号来表示非渐近精确的上界,o(g(n))的形式定义为集合o(g(n)) = {f(n), 对任意正常数c,存在常数n0 > 0,使对所有的n ≥ n0,有 0 ≤ f (n) ≤ cg(n)}。例如, 2n = o(n2),但是,2n2 ≠ o(n2)。

这里还要说一下O和o的区别,二者不同的是,f (n) = O(g(n)),界0 ≤ f(n) ≤ cg(n)对某个常数c > 0成立,但是对f (n) = o(g(n)),界0 ≤ f(n) ≤ cg(n)对所有常数c > 0成立。可以认为o表示当n趋于无穷大时,函数f(n)相对于g(n)的极限。

2. ω记号

ω记号与Ω记号的关系就好像是o记号与O记号的关系一样,我们用ω记号来表示非渐近精确的下界。这里的定义就不给出了,具体可参考上面对o记号的定义。


函数的性质

许多关系属性可以应用于渐近比较,假设f(n)g(n)是渐近正值函数。

1. 传递性

传递性

2. 自反型

自反性

3. 对称性

对称性

4. 转置对称性

转置对称性

因为这些性质对渐近记号也成立,我们可以将两个函数fg的渐近比较和两个实数ab的比较作一类比。

渐近比较

虽然任何两个实数都可以做比较,但并不是所有的函数都是渐近可比较的,也就是说,对于两个函数f(n)和g(n),可能f(n) = O(g(n))f(n) = Ω(g(n))都不成立,举个例子,函数nn^(1 + sinn)无法利用渐近记号来比较,因为n^(1 + sinn)中指数的范围是 0 ~ 2。

后记

未完,待续~~~

相关文章

  • 算法简单学习(五)—— 函数的增长

    版本记录 前言 将数据结构和算法比作计算机的基石毫不为过,追求程序的高效是每一个软件工程师的梦想。下面就是我对算法...

  • 2020-08-10--KNN01

    KNN算法的原理介绍KNN算法的一个简单实现(肿瘤分类)将KNN算法封装成函数机器学习套路使用scikit-lea...

  • 算法(2)

    上篇算法(1) 一、函数的渐近增长 函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N, 使得对于...

  • 增长的三个步骤

    学习老喻《人生算法》"07 五段-增长:增长黑客的三大步骤"。 学习笔记脑图如下: 人在成长的过程中,我们总有一种...

  • 数据分析-机器学习(一)

    简单来说机器学习就是讲一段已经存有的数据,与数据对应的结果通过机器学习的算法,得到估计函数.然后再将需要预测的函数...

  • 感知器(Perceptron)数据分类算法

    基本原理 步调函数与阈值 权重更新算法 阈值的更新 感知器算法使用范围 机器学习-简单实现神经网络感知器分类算法部...

  • iOS集合类

    算法时间复杂度分析 时间复杂度通常用大 O 符号描述。定义了函数的极限特征,被用于描绘算法效率。O 定义了函数增长...

  • 深度学习笔记

    构建机器学习算法 数据集 代价函数 优化算法 模型

  • 算法基础+分治策略(算法复习第1弹)

    马上就要算法考试了,好紧张,先复习第一波.... 参考文献(算法导论)+(张莉老师ppt) 函数的增长,对算法效率...

  • 逻辑回归代价函数及其梯度下降公式推导

    逻辑回归是机器学习算法中常用的算法之一,其简单,容易理解,故被后人广泛使用。今天来总结下它的损失函数及其推导过程。...

网友评论

    本文标题:算法简单学习(五)—— 函数的增长

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