算法分析(渐进分析)
目录
- 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)=23n2+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} 23n2+27−4≥23n2≥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} 23n2+27−4≤23n2+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}) 23n5+27n−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) log7n=log27log2n=O(log2n)=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)≤c1f(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:c2f(n)≤g(n)≤c3f(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}:c2f(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))得证
算法分析(渐进分析)相关推荐
- 算法笔记——渐进分析和渐进符号
算法分析是理论研究,是关于计算机程序性能(performance)和资源利用(resource usage)的研究. More important than performents 模块化(耦合度越低 ...
- 【数据结构】算法的渐进分析-渐进时间复杂度
算法的渐进分析(asymptotic algorithm analysis)简称算法分析.算法分析直接与它所求解的问题的规模 n 有关,因此,通常将问题规模作为分析的参数,求算法的时间和空间开销与问 ...
- 算法学习四:算法性能分析理论基础——函数增长与渐进分析
算法学习四:算法性能分析理论基础--函数增长与渐进分析 在算法性能分析过程中,特别是在算法运行效率分析中,我们经常使用渐渐分析法,它使我们在分析算法性能时不必纠结于不同硬件平台的差异性,着重考虑算法的 ...
- 渐进分析(Ο,Ω,Θ)
渐进分析(Ο,Ω,Θ): f(n)=O(g(n)) iff存在常数c和n0,使得对所有n>n0,有 f(n)<cg(n)成立 lim^n->∞^|f(n)/g(n)|=c,0< ...
- 算法复杂度-渐进分析
算法复杂度-渐进分析 渐进表达式的定义 渐进上界 大OOO O(g(n))={f(n):∃c>0,n0>0.s.t.∀n≥n0,0≤f(n)≤cg(n)}O(g(n)) = \{f(n): ...
- 哈工大威海算法设计与分析_【斯坦福算法分析和设计02】渐进分析
点击上方蓝字,关注公众号 目录 1. The Gist 1.1 为什么要学它(Motivation) 1.2 High level idea 1.3 4个例子 2. Big-Oh Notation 2 ...
- 算法分析渐进符号(O、o、Θ、Ω、ω)总结
用"渐近记号"来表示"渐近复杂度". 1. 渐近记号包括: (1)Θ(西塔):紧确界. 相当于"=" (2)O (大 ...
- 渐进算法分析(简称算法分析)详解
本篇文章将要介绍: 文章目录 1.什么是算法分析 2.算法分析专有名词 3.渐进算法分析 a).时间复杂度化简规则 b).如何得到算法的增长率 c).两个函数的增长率比较 4.渐进算法分析的局限性 5 ...
- 数据结构与算法的分析 —— 渐进复杂度(三个记号)
对于某些问题,一些算法更适合于用小规模的输入,而另一些则相反.幸运的是,在评价算法运行效率时,我们往往可以忽略掉其处理小规模问题时的能力差异,转而关注其在处理大规模数据时的表现.道理是显见的,处理大规 ...
最新文章
- mapreduce.job.reduce.slowstart.completedmaps
- Java - 死锁 Dead Lock 定位分析
- Java 8 中的流操作-基本使用性能测试
- 安卓linux交叉编译,Linux Ubuntu下用Android NDK 生成独立交叉编译链
- HTML+CSS+JS实现 ❤️酷炫的时光隧道旅行动特效❤️
- cassandra 数据量_Cassandra和Spark的数据处理简介
- 配置和使用APM功能和调用链分析功能
- ASSERT(0) 详解
- WCF 第五章 行为 事务之选择一个事务协议-OleTx 或者WS-AT
- 为什么vi用HJKL和ESC
- 黑马程序员C++学习笔记(第二阶段核心:面向对象)(一)
- TPM设备管理系统对企业生产有何作用?
- python 正则表达式 compile_使用compile()函数编译正则表达式【Python技术文章】
- 一己之力,不过举鼎,奈何撼天;一世芳华,不余百年,怎易如愿?
- IDEA-Translation插件更新TKK失败
- 计算机毕业论文致谢信范文,论文致谢信10篇
- 泰裤辣!五一烧烤倒计时,还有人没做好攻略吗?
- 揭秘HTTP/3优先级
- 有m个人围成一圈,顺序编号,编号固定,从1道n循环报数,遇到n出圈,依次类推。。。。。
- zookeeper代码实现常用命令 - 雨中散步撒哈拉