我们已经简单的讨论了下渐进分析以及最坏,平均和最佳情况的分析。渐进分析的主要思想是分析算法的效率,不用依靠计算机的具体快慢,不需要实现这个算法,也不需要真正去计算时间。渐进记号是一种数学的工具来表示渐进分析算法的时间复杂度。下面列出三种最常用的渐进符号来表示算法的时间复杂度。

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 翻译的更多相关文章

  1. 算法最坏,平均和最佳情况(Worst, Average and Best Cases)-------geeksforgeeks 翻译

    最坏,平均和最佳运行时间(Worst, Average and Best Cases) 在上一篇文章中,我们讨论到了渐进分析可以解决分析算法的问题,那么在这一篇中,我们用线性搜索来举例说明一下如何用渐 ...

  2. 空间复杂度是什么?What does ‘Space Complexity’ mean? ------geeksforgeeks 翻译

    这一章比较短! 空间复杂度(space complexity)和辅助空间(auxiliary space)经常混用,下面是正确的辅助空间和空间复杂度的定义 辅助空间:算法需要用到的额外或者暂时的存储空 ...

  3. 平摊分析 Amortized Analysis ------geeksforgeeks翻译

    当偶尔一切操作很花的时间很慢,而大多数操作的时间都很快的时候,平摊分析的方法就很很好用了.在平摊分析中,我们分析一串操作并且可以得到最坏情况下的平均时间复杂度.例如hash table, disjoi ...

  4. 用大O记号法测量算法的效率(Algorithm efficiency Asymptotic notation Big O notation)

    为什么要了解算法的效率? 一般来说,编程就是把各种已知的算法代入到自己的代码当中,以此来解决问题.因此,了解各种算法的效率对于我们选择一个合适的算法有很大帮助. 算法的效率由什么确定? 从算法分析的理 ...

  5. Memory Layout of C Programs

    Memory Layout of C Programs   A typical memory representation of C program consists of following sec ...

  6. CSP-S 初赛最后的复习

    2020CSP-S 模拟赛1 3.一个圆形水池中等概率随机分布着四只鸭子,那么存在一条直径,使得鸭子全在直径一侧的概率是(). A.\(\frac 1{16}\) B.\(\frac 1{8}\) C ...

  7. 网易2016研发project师笔试题

    网易2016研发project师笔试题 2015/12/9 11:25(网上收集整理的,參考答案在后面,若有错误请大神指出) 1. 运行指令find / -name "test.c" ...

  8. Ravindrababu Ravula老师的数据结构与算法

    最关键的问题是,作为印度裔,他的英语口音真的真的很好懂!!!而且语速很慢,适合大家学习. 作为一哥热衷于搬砖的小伙,我将他的视频搬运到了B站,大家可以前往我的B站观看,搜索"爱码士Noe&q ...

  9. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2021.7

    公告 ApacheCN 翻译预计将于半年内恢复. 我们的开源项目必须有中文的 README,如果是文档类项目,必须全部中文,否则将会被清理.请大家贡献项目时一定要留意. 我们目标是[财务自由+情感自由 ...

随机推荐

  1. 【学习整理】NOIP涉及的数论 [updating]

    扩展欧几里得 求二元一次不定式方程 的一组解. int exgcd(int a,int b,int &x,int &y) { int t; ;y=;return a;} t=exgcd ...

  2. SQL Server性能影响的重要结论

    第一次访问数据会比接下来的访问慢的多,因为它要从磁盘读取数据然后写入到缓冲区: 聚合查询(sum,count等)以及其他要扫描大部分表或索引的查询需要大量的缓冲,而且如果它导致SQL Server从缓 ...

  3. 为什么重新设计 ASP.NET?

    灵活的跨平台运行时需求 早期 .NET Framework 版本一直作为单一且全面的整体进行安装,每个新版本都包含了新功能和几乎所有早期功能,而鲜有删减,这就不可避免的造成Framework的体积的增 ...

  4. rabbitmq学习笔记1 安装和配置

    环境 OS: CentOS Linux release 7.1.1503 (Core) kernel:3.10.0-229.el7.x86_64   安装 参考:http://www.rabbitmq ...

  5. ABAP - 3D Graphs with SAP

    在ABAP设计中,程序员经常需要用图形显示报表的统计结果,我们可以使用函数:GRAPH_MATRIX_3D来达到图形显示.GRAPH_MATRIX_3D函数参数很多,但只有三个参数必须需要输入:Tab ...

  6. Ieditor

    Interfaces Description IActiveViewEvents (esriCarto) Provides access to events that occur when the s ...

  7. 代码导出Reporting Services报表文件

    背景部分 使用Reporting Services很容易制作和发布我们需要的报表,报表效果也还不错 不过如果报表数据过大或报表数量过多,打开及查看报表感觉可能就是另外一回事了 好在Reporting ...

  8. 全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗

    号称全球最低功耗蓝牙单芯片DA14580在可穿戴市场.健康医疗.ibeacon定位等市场得到广泛的应用,但是因为其较为封闭的技术/资料支持导致开发人员有较高的技术门槛,网络上也极少看到有关DA1458 ...

  9. iOS 开发技巧-制作环形进度条

    有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现. 先看一下这篇博客,博客地址:ht ...

  10. 朝花夕拾-android 自定义application 管理activity的生命周期

    为了安全退出多个已创建的activity? 可以自定义application:myapplication. 增加一个list成员保存,一些关键的已创建的activity实例: private List ...