渐进记号 Asymptotic Notations-------geeksforgeeks 翻译
我们已经简单的讨论了下渐进分析以及最坏,平均和最佳情况的分析。渐进分析的主要思想是分析算法的效率,不用依靠计算机的具体快慢,不需要实现这个算法,也不需要真正去计算时间。渐进记号是一种数学的工具来表示渐进分析算法的时间复杂度。下面列出三种最常用的渐进符号来表示算法的时间复杂度。
1.θ Notation:
theta 符号是用来确定算法性能的上界限和下界限,简单的来说计算Θ符号可以扔掉低阶项,忽略高阶项的系数。举例:3n3+6n2+6000 = θ(n3)。 扔掉低阶的项是OK的因为θ(n3) 肯定是比θ(n2)大的。我们用g(n) 来表示θ中的数值
Θ(g(n)) = {f(n): 存在正数常数 C1 C2 和 n0 使得
0 <= c1*g(n) <= f(n) <= c2*g(n) for all n >= n0}
在上面的定义中,如果f(n) 是 g(n)的θ中的内容,那么f(n)的值肯定是在 c1*g(n)
和c2 * g(n) 之间 当n 的值很大的情况下。还有一个条件是 f(n)必须是一个非负数。
2.Big O Notation:
大O符号用来表示算法的上界限,举一个插入排序的例子,最佳情况下插入排序会在线性时间里完成(n),
而最坏的可能是在二次时间内完成(n2)。所以我们可以很保险的说插入排序的时间复杂度是O(n2),因为这也包括了线性时间
如果我们用θ符号来表示插入排序的时间复杂度,我们必须用两个可能性,最坏的和最好的:
1.最坏的时间复杂度是 θ(n2)。
2.最好的时间复杂度是 θ(n)。
当我们只知道算法复杂度的上界限时,大O符号很有用。很多情况下,我们简单的分析一下算法就能很简单的找到上界限。
O(g(n)) = { f(n): 存在正数常数 C 和 n0 使得
0 <= f(n) <= cg(n) for all n >= n0}

3) Ω Notation:
就像O符号一样,Ω符号是找算法渐进分析的下界限。
Ω符号在我们知道下界限的时候很有用,就像我们在上一个文章说到的,最佳情况的运行时间到多数情况下是没什么用的。所以
Ω符号在三个渐进分析符号中是最没什么用的。
和之前一样,我们用插入排序举例,插入排序的运行时间可以写作Ω(n)。但是这不是一个很有用的信息。所以我们一般只对
平均情况和最坏的情况感兴趣。
Ω (g(n)) = {f(n): 存在正数常数 C 和 n0 使得
0 <= cg(n) <= f(n) for all n >= n0}.

Exercise:
Which of the following statements is/are valid?
1. Time Complexity of QuickSort is Θ(n^2)
2. Time Complexity of QuickSort is O(n^2)
3. For any two functions f(n) and g(n), we have f(n) = Θ(g(n)) if and only if f(n) = O(g(n)) and f(n) = Ω(g(n)).
4. Time complexity of all computer algorithms can be written as Ω(1) 我觉得是2,3
渐进记号 Asymptotic Notations-------geeksforgeeks 翻译的更多相关文章
- 算法最坏,平均和最佳情况(Worst, Average and Best Cases)-------geeksforgeeks 翻译
最坏,平均和最佳运行时间(Worst, Average and Best Cases) 在上一篇文章中,我们讨论到了渐进分析可以解决分析算法的问题,那么在这一篇中,我们用线性搜索来举例说明一下如何用渐 ...
- 空间复杂度是什么?What does ‘Space Complexity’ mean? ------geeksforgeeks 翻译
这一章比较短! 空间复杂度(space complexity)和辅助空间(auxiliary space)经常混用,下面是正确的辅助空间和空间复杂度的定义 辅助空间:算法需要用到的额外或者暂时的存储空 ...
- 平摊分析 Amortized Analysis ------geeksforgeeks翻译
当偶尔一切操作很花的时间很慢,而大多数操作的时间都很快的时候,平摊分析的方法就很很好用了.在平摊分析中,我们分析一串操作并且可以得到最坏情况下的平均时间复杂度.例如hash table, disjoi ...
- 用大O记号法测量算法的效率(Algorithm efficiency Asymptotic notation Big O notation)
为什么要了解算法的效率? 一般来说,编程就是把各种已知的算法代入到自己的代码当中,以此来解决问题.因此,了解各种算法的效率对于我们选择一个合适的算法有很大帮助. 算法的效率由什么确定? 从算法分析的理 ...
- Memory Layout of C Programs
Memory Layout of C Programs A typical memory representation of C program consists of following sec ...
- CSP-S 初赛最后的复习
2020CSP-S 模拟赛1 3.一个圆形水池中等概率随机分布着四只鸭子,那么存在一条直径,使得鸭子全在直径一侧的概率是(). A.\(\frac 1{16}\) B.\(\frac 1{8}\) C ...
- 网易2016研发project师笔试题
网易2016研发project师笔试题 2015/12/9 11:25(网上收集整理的,參考答案在后面,若有错误请大神指出) 1. 运行指令find / -name "test.c" ...
- Ravindrababu Ravula老师的数据结构与算法
最关键的问题是,作为印度裔,他的英语口音真的真的很好懂!!!而且语速很慢,适合大家学习. 作为一哥热衷于搬砖的小伙,我将他的视频搬运到了B站,大家可以前往我的B站观看,搜索"爱码士Noe&q ...
- 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2021.7
公告 ApacheCN 翻译预计将于半年内恢复. 我们的开源项目必须有中文的 README,如果是文档类项目,必须全部中文,否则将会被清理.请大家贡献项目时一定要留意. 我们目标是[财务自由+情感自由 ...
随机推荐
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...
- 【背景建模】PBAS
Pixel-Based Adaptive Segmenter(PBAS)检测算法,是基于像素的无参数模型,该算法结合了SACON和VIBE两个算法的优势,并在这两个算法的基础上改进而来,SACON和V ...
- ButterKnife
1.简介 ButterKnife是注解中相对简单易懂的很不错的开源框架 1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率 2.方便的处理Adapter里的ViewHolder绑定 ...
- 线上mysql内存持续增长直至内存溢出被killed分析(已解决)
来新公司前,领导就说了,线上生产环境Mysql库经常会发生日间内存爆掉被killed的情况,结果来到这第一天,第一件事就是要根据线上服务器配置优化配置,同时必须找出现在mysql内存持续增加爆掉的原因 ...
- 【GOF23设计模式】策略模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_策略模式.CRM中报价策略.GUI编程中布局管理器底层架构 package com.test.strategy; /** ...
- margin和padding对行内元素的影响
这个是在面试的时候,面试官问我的一个小问题 自己没有考虑过inline元素设置margin和padding的问题 学习的过程记录下来 1)inline元素的高度是由元素的内容决定的(字体的大小和行高) ...
- Force.com微信开发系列(一) 后台配置
为寻找国内免费云资源作为微信后台,花了一天时间试用SinaAppEngine(SAE),调试太不方便用户体验差.新浪作为媒体公司技术功底经不起考验,亚马逊能推出AWS,新浪还不行!更好选项是百度Bai ...
- Android 手机号码格式验证
package com.app.android01 ; import android.app.Activity; import android.os.Bundle; import android.te ...
- 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...
- Swift开发第一篇——异常处理及断言
本篇分两部分: 1.错误和异常处理 2.Swift 中的断言 1.错误和异常处理 在 OC 开发中,我们通常会将 error 置为 nil NSError *error; BOOL success = ...