目录

  • 1.T(n)函数
  • 2.渐进分析
    • 2.1渐进紧确界(θ记号)
      • 举例
    • 2.2渐进上界 (O记号)
      • 举例
    • 2.3渐进下界 (Ω记号)
      • 举例
  • 3.常用的换算公式
    • 3.1举例证明

算法分析分为算法时间复杂度分析{\color{Red}算法时间复杂度分析}算法时间复杂度分析与算法空间复杂度分析{\color{Red}算法空间复杂度分析}算法空间复杂度分析。一般而言,时间对于我们来说更重要,算法的优化主要也是对时间的优化,而对于空间只要我们的计算机性能较好,对于计算结果影响就不会很大。,下面主要也是对算法一些关于时间复杂度的描述!


1.T(n)函数

当算法时间仅依赖于问题输入规模n,我们可以将其表示为T(n)。

T(n)直接由每一步的操作次数之和相加构成。

下面我们以插入排序的伪代码为例来计算它的T(n)

但是因为当规模变大时,其主要决定作用的就是最高项,所以我们只需要取它的最高项即可,那么久可以表示为 T(n) = n2

2.渐进分析

渐进分析: 就是指忽略掉T(n)的系数与低阶项,仅关注高阶项,用记号θ表示。

下面我们介绍一些渐进记号:

2.1渐进紧确界(θ记号)

先给出它的官方定义:

什么意思呢?就是用θ(g(n))来描述T(n)有一个具体的上界和一个具体的下界,当我们可以找到时,才能进行θ表示。

举例

T(n)=32n2+72−4=θ(n2)T(n) = \frac{3}{2} n^{2} + \frac{7}{2} - 4 = \theta(n^{2})T(n)=23​n2+27​−4=θ(n2)

令n0 = 2,那么当 n ≥ n0时,有

寻找下界: 32n2+72−4≥32n2≥n2\frac{3}{2} n^{2} + \frac{7}{2} - 4 ≥ \frac{3}{2} n^{2} ≥ n^{2} 23​n2+27​−4≥23​n2≥n2

寻找上界:32n2+72−4≤32n2+72+n2=6n2\frac{3}{2} n^{2} + \frac{7}{2} - 4 ≤ \frac{3}{2} n^{2} + \frac{7}{2} + n^{2} = 6n^{2} 23​n2+27​−4≤23​n2+27​+n2=6n2

所以存在 c1 = 1,c2 = 6,n0 = 2,使得上式成立,存在渐进紧确界,才可以使用 θ(n2) 表示。

同理可得:

32n5+72n−10=θ(n5)\frac{3}{2} n^{5} + \frac{7}{2}n - 10 = \theta(n^{5}) 23​n5+27​n−10=θ(n5)

n3+n2+n=θ(n3)n^{3} + n^{2} + n = \theta(n^{3}) n3+n2+n=θ(n3)

2.2渐进上界 (O记号)

渐进上界使我们算法分析最常用的方式,因为当我们评价一个算法的优劣时,一般都去找它的最差情况,那么这个就是渐进上界。(大O记法)

先看定义:

举例

cosn=O(1)cos n = O(1) cosn=O(1)

因为 cos n 最大取1,所以是O(1)。

n22−12n=O(n2)\frac{n^{2}}{2} - 12n = O(n^{2}) 2n2​−12n=O(n2)

通过画坐标图来看,很明显 n2 更大,所以上界为O(n)。

log7n=log2nlog27=O(log2n)=O(logn)log_{7} n = \frac{log_{2}n}{log_{2}7} = O(log_2{n}) = O(logn) log7​n=log2​7log2​n​=O(log2​n)=O(logn)

使用换底公式进行求解。

对于一般的式子来说我们只需要去掉系数取最高项即可,对于特殊的函数我们才会去找他≤什么。

2.3渐进下界 (Ω记号)

渐进下界就是最好情况,一般不使用它来衡量算法的优劣。

它的定义如下:

举例

n3−2n=Ω(n3)n^{3} - 2n = Ω(n^{3}) n3−2n=Ω(n3)

n2+n=Ω(n2)n^{2} + n = Ω(n^{2}) n2+n=Ω(n2)

同理对于普通的式子,直接去掉系数取最高阶项,遇到复杂的例如调和级数等,我们才会去找他≥什么。

3.常用的换算公式

O(f(n))+O(g(n))=O(max{f(n),g(n)})O(f(n)) + O(g(n)) = O(max \left \{f(n),g(n)\right \}) O(f(n))+O(g(n))=O(max{f(n),g(n)})

O(f(n))+O(g(n))=O(f(n)+g(n))O(f(n)) + O(g(n)) = O(f(n)+g(n)) O(f(n))+O(g(n))=O(f(n)+g(n))

O(f(n))∗O(g(n))=O(f(n)∗g(n))O(f(n))*O(g(n)) = O(f(n)*g(n)) O(f(n))∗O(g(n))=O(f(n)∗g(n))

O(c∗f(n))=O(f(n))O(c*f(n)) = O(f(n))O(c∗f(n))=O(f(n))

O(f(n))+θ(f(n))=θ(f(n))O(f(n)) + \theta(f(n)) = \theta(f(n)) O(f(n))+θ(f(n))=θ(f(n))

3.1举例证明

证明:O(f(n))+θ(f(n))=θ(f(n))O(f(n)) + \theta(f(n)) = \theta(f(n)) O(f(n))+θ(f(n))=θ(f(n))

设:O(f(n))=h(n),θ(f(n))=g(n)O(f(n)) = h(n), \theta(f(n)) = g(n) O(f(n))=h(n),θ(f(n))=g(n)
注:h(n)和g(n)是不同的函数{\color{Red}注:h(n)和g(n)是不同的函数} 注:h(n)和g(n)是不同的函数
所以有:
O(f(n))=h(n)=>∃c1,n0>0,∀n≥n0:0≤h(n)≤c1f(n)O(f(n)) = h(n) => \exists c_{1},n_{0}>0, \forall n\ge n_{0}:0\le h(n) \le c_{1}f(n) O(f(n))=h(n)=>∃c1​,n0​>0,∀n≥n0​:0≤h(n)≤c1​f(n)
θ(f(n))=g(n)=>∃c2,c3,n1>0,∀n≥n1:c2f(n)≤g(n)≤c3f(n)\theta(f(n)) = g(n) => \exists c_{2},c_{3},n_{1}>0, \forall n\ge n_{1}:c_{2}f(n)\le g(n) \le c_{3}f(n) θ(f(n))=g(n)=>∃c2​,c3​,n1​>0,∀n≥n1​:c2​f(n)≤g(n)≤c3​f(n)

得出:
∀n≥max{n0,n1}:c2f(n)≤h(n)+g(n)≤max{c1,c3}f(n)\forall n \ge max \left \{ n_{0},n_{1} \right \} :c_{2}f(n) \le h(n)+g(n) \le max \left \{ c_{1},c_{3} \right \}f(n)∀n≥max{n0​,n1​}:c2​f(n)≤h(n)+g(n)≤max{c1​,c3​}f(n)

即:O(f(n))+θ(f(n))=θ(f(n))得证O(f(n)) + \theta(f(n)) = \theta(f(n)) 得证O(f(n))+θ(f(n))=θ(f(n))得证

算法分析(渐进分析)相关推荐

  1. 算法笔记——渐进分析和渐进符号

    算法分析是理论研究,是关于计算机程序性能(performance)和资源利用(resource usage)的研究. More important than performents 模块化(耦合度越低 ...

  2. 【数据结构】算法的渐进分析-渐进时间复杂度

     算法的渐进分析(asymptotic algorithm analysis)简称算法分析.算法分析直接与它所求解的问题的规模 n 有关,因此,通常将问题规模作为分析的参数,求算法的时间和空间开销与问 ...

  3. 算法学习四:算法性能分析理论基础——函数增长与渐进分析

    算法学习四:算法性能分析理论基础--函数增长与渐进分析 在算法性能分析过程中,特别是在算法运行效率分析中,我们经常使用渐渐分析法,它使我们在分析算法性能时不必纠结于不同硬件平台的差异性,着重考虑算法的 ...

  4. 渐进分析(Ο,Ω,Θ)

    渐进分析(Ο,Ω,Θ): f(n)=O(g(n)) iff存在常数c和n0,使得对所有n>n0,有 f(n)<cg(n)成立 lim^n->∞^|f(n)/g(n)|=c,0< ...

  5. 算法复杂度-渐进分析

    算法复杂度-渐进分析 渐进表达式的定义 渐进上界 大OOO O(g(n))={f(n):∃c>0,n0>0.s.t.∀n≥n0,0≤f(n)≤cg(n)}O(g(n)) = \{f(n): ...

  6. 哈工大威海算法设计与分析_【斯坦福算法分析和设计02】渐进分析

    点击上方蓝字,关注公众号 目录 1. The Gist 1.1 为什么要学它(Motivation) 1.2 High level idea 1.3 4个例子 2. Big-Oh Notation 2 ...

  7. 算法分析渐进符号(O、o、Θ、Ω、ω)总结

    用"渐近记号"来表示"渐近复杂度". 1.  渐近记号包括: (1)Θ(西塔):紧确界.            相当于"=" (2)O (大 ...

  8. 渐进算法分析(简称算法分析)详解

    本篇文章将要介绍: 文章目录 1.什么是算法分析 2.算法分析专有名词 3.渐进算法分析 a).时间复杂度化简规则 b).如何得到算法的增长率 c).两个函数的增长率比较 4.渐进算法分析的局限性 5 ...

  9. 数据结构与算法的分析 —— 渐进复杂度(三个记号)

    对于某些问题,一些算法更适合于用小规模的输入,而另一些则相反.幸运的是,在评价算法运行效率时,我们往往可以忽略掉其处理小规模问题时的能力差异,转而关注其在处理大规模数据时的表现.道理是显见的,处理大规 ...

最新文章

  1. mapreduce.job.reduce.slowstart.completedmaps
  2. Java - 死锁 Dead Lock 定位分析
  3. Java 8 中的流操作-基本使用性能测试
  4. 安卓linux交叉编译,Linux Ubuntu下用Android NDK 生成独立交叉编译链
  5. HTML+CSS+JS实现 ❤️酷炫的时光隧道旅行动特效❤️
  6. cassandra 数据量_Cassandra和Spark的数据处理简介
  7. 配置和使用APM功能和调用链分析功能
  8. ASSERT(0) 详解
  9. WCF 第五章 行为 事务之选择一个事务协议-OleTx 或者WS-AT
  10. 为什么vi用HJKL和ESC
  11. 黑马程序员C++学习笔记(第二阶段核心:面向对象)(一)
  12. TPM设备管理系统对企业生产有何作用?
  13. python 正则表达式 compile_使用compile()函数编译正则表达式【Python技术文章】
  14. 一己之力,不过举鼎,奈何撼天;一世芳华,不余百年,怎易如愿?
  15. IDEA-Translation插件更新TKK失败
  16. 计算机毕业论文致谢信范文,论文致谢信10篇
  17. 泰裤辣!五一烧烤倒计时,还有人没做好攻略吗?
  18. 揭秘HTTP/3优先级
  19. 有m个人围成一圈,顺序编号,编号固定,从1道n循环报数,遇到n出圈,依次类推。。。。。
  20. zookeeper代码实现常用命令 - 雨中散步撒哈拉

热门文章

  1. 新开普生产实习【智能家居灯控系统】
  2. altium designer 学习笔记 原理图库(schematic library)设计与使用
  3. 创建一个集群和探索ProxmoxGUI
  4. 电力现货市场的业务流程
  5. 经典排序算法(一) —— Selection Sort 选择排序
  6. 伦理困境下的计算机决策
  7. MT【97】三元基本不等式秒解一道三元不等式
  8. 小红书竞品分析_小红书报告,(浅析)小红书产品分析报告:
  9. 2983:谁是你的潜在朋友 ①
  10. Fedora 14 下安装五笔输入法