1.大写Ο符号
大写Ο符号给出了函数f的一个上限。

定义[大写Ο符号]:f(n)=Ο(g(n)),当且仅当存在正的常数c和n0,使得对于所有的n≥n0,有 f(n)≤c*g(n)

上述定义表明,函数f至多是函数g的c倍,除非n小于n0。因此,对于足够大的n(如n≥n0),g 是 f 的一个上限(不考虑常数因子 c )。

在为函数 f 提供一个上限函数 g 时,通常使用比较简单的函数形式。比较典型的形式是含有 n 的单个项(带一个常数系数)。对于对数函数logn,没有给出对数的基数,是因为对于任何大于1的常数 a 和 b ,都有:logan=logbn/logba所以logan和logbn都有一个相对的乘法系数1/logba,其中 a 是一个常量。

2. Ω符号
Ω符号给出了函数f的一个下限。

定义[Ω符号]:f(n)=Ω(g(n)),当且仅当存在正的常数c和n0,使得对于所有的n≥n0,有 f(n)≥c*g(n)。

上述定义表明,函数f至少是函数 g 的 c 倍,除非 n 小于 n0。因此,对于足够大的n(如n≥n0),g 是 f 的一个下限(不考虑常数因子c )。与大Ο定义的应用一样,通常使用单项形式的 g 函数。g(n)仅是f(n)的一个下限,与大Ο符号的情形类似,也可能存在多个函数g(n)满足f(n)=Ω(g(n))。

为了使f(n)=Ω(g(n))更有实际意义,其中的 g(n) 应足够大。因此,有3n+3=Ω(n),6*2n+n2=Ω(n2)。而3n+3=Ω(l),6*2n+n2=Ω(n)不是所希望的,尽管他们也是正确的。

3. Θ符号
Θ符号适用于同一个函数g既可以作为f的上限,也可以作为f的下限的情形。

定义[Θ符号]:f(n)=Θ(g(n)),当且仅当存在正的常数c1,c2和n0,使得对于所有的n≥n0,有 c1g(n)≤f(n)≤c2g(n)。

定义表明,函数f介于函数g的c1倍和c2倍之间,除非n<n0。因此对于足够大的n(如n≥n0), g既是f的上限,也是f的下限(不考虑常数因子c)。与大Ο定义和Ω定义的应用一样,通常仅使用单项形式的g函数。

4.小写o符号
定义[小写o]:f(n)=o(g(n))当且仅当
f(n)=Ο(g(n))且f(n)≠Ω(g(n))。

图3.1列出了一些常用的有关Ο、Ω和Θ的标记,其中,除n以外所有符号均为正常数。图3.1 渐近标记(其中⊕可以Ο、Ω、Θ是之一)

图3.2给出了一些关于“和”与“积”的有用的引用规则。对于图3.2的引用规则,大家不难举例验证。

  在时间或步数的渐近表示中,利用了图3.1和图3.2的结论。注意,首先要知道程序完成什么功能,然后分析程序的执行时间和执行步数,再采用渐近表示记录它们,最后根据图3.1和图3.2得到结果。

  有时,可以把Ο(g(n))、Ω(g(n))和Θ(g(n))分别解释成如下集合:
Ο(g(n))={f(n)|f(n)=Ο(g(n))}
Ω(g(n))={f(n)|f(n)=Ω(g(n))}
Θ(g(n))={f(n)|f(n)=Θ(g(n))}
在这种解释下,诸如Ο(g1(n))=Ο(g2(n))和Θ(g1(n))=Θ(g2(n))这样的语句就有了明确的含义。因为,此时可以将f(n)=Ο(g(n))读作“f(n)是g(n)的一个大Ο成员”,另外两种的读法也类似。
小写o符号通常用于执行步数的分析。执行步数3n+Ο(n)表示3n加上上限为n的项。在进行这种分析时,可以忽略步数少于Θ(n)的程序部分。
可以扩充Ο、Ω、Θ和o的定义,采用具有多个变量的函数。例如,
f(m,n)=Ο(g(n,m))当且仅当存在正常量c、n0和m0,使得对于所有的n≥n0和所有的m≥m0,有f(m,n)≤c*g(n,m)。

algorithms中计算时间的渐近表示的更多相关文章

  1. 计算时间:一个C++运算符重载示例

    Time类是一个用于计算时间的类,其原型如下:程序清单11.1 mytime0.h // mytime0.h -- Time class before operator overloading #if ...

  2. NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用

    NET MVC全局异常处理(一)   目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...

  3. Java8中Instant和LocalDate来计算时间或者日期间隔

    /** * java.time.Instant * java.time.Duration * Instant 默认使用UTC时区:2019-01-24T14:01:32.258Z * mongo中的时 ...

  4. [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义

    C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...

  5. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  6. [MIT Intro. to algo]Lecture 1: 课程介绍,算法优势,插入算法和归并算法分析,渐近符号

    The theoretical study of computer program performance and resource useage.   First, analysis and the ...

  7. Spark比MR快是因为在内存中计算?错!

    MapReduce 就像一台又慢又稳的老爷车,虽然距离 MapReduce 面市到现在已经过去了十几年的时间,但它始终没有被淘汰,任由大数据技术日新月异.蓬蓬勃勃.花里胡哨地发展,这个生态圈始终有它的 ...

  8. 基于GMC/umat的复合材料宏细观渐近损伤分析(一)

    近期在开展基于GMC/umat的复合材料宏细观渐近损伤分析,一些技术细节分享如下: 1.理论基础 针对连续纤维增强复合材料,可以通过离散化获得如下的模型: (a)(b)(c) 图1 连续纤维增强复合材 ...

  9. 年轻的心与渐行渐近的梦——记微软-斯坦福产品设计创新课程ME310

    作者:中国科学技术大学 王牧 Stanford  D. School 2014年6月,沐浴着加州的阳光,在斯坦福大学(下文简称Stanford)完成汇报后,历时一年的创新设计课程ME310的项目结束 ...

随机推荐

  1. 设计模式_State_状态模式

    形象例子: 跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我 ...

  2. 标准的TCP/IP工业以太网-EtherNet/IP

    标准的TCP/IP工业以太网-EtherNet/IP                            徐智穹以太网具有传输速度高.兼容性好.应用广泛等方面的优势,支持几乎所有流行的网络协议,其中 ...

  3. Tomcat 7 Connector 精读(2) 协议处理器 Http11Protocol(待续)

    . Http11Protocol是阻塞式IO的实现,上图的几个方法是它的生命周期相关的方法.

  4. 跨平台的游戏客户端Socket封装,调整

    原文链接:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019359.html 头文件: #pragma once #ifdef WIN32 ...

  5. 【转载】setjmp和longjmp函数使用详解

    [说明]本文上半部分转载自 wykwdy007 的转载文章 http://blog.csdn.net/wykwdy007/article/details/6535322 --------------- ...

  6. Send email alert from Performance Monitor using PowerShell script (检测windows服务器的cpu 硬盘 服务等性能,发email的方法) -摘自网络

    I have created an alert in Performance Monitor (Windows Server 2008 R2) that should be triggered whe ...

  7. Getty – Java NIO 框架设计与实现

    前言 Getty是我为了学习 Java NIO 所写的一个 NIO 框架,实现过程中参考了 Netty 的设计,同时使用 Groovy 来实现.虽然只是玩具,但是麻雀虽小,五脏俱全,在实现过程中,不仅 ...

  8. unable to load default svn client myeclipse SVN安装,wen7 64位安装SVN

    在安装完后连接svn时出现unable to load default svn client的错误提示,百度知道是版本不对,我安装的是1.8的版本,插件按成1.6的了,只需下载1.8插件安装就行了 安 ...

  9. uLua学习笔记(一):uLua安装及上手

    uLua下载:http://www.ulua.org/ VS2012/2013的用于编写Lua的插件:https://babelua.codeplex.com/或http://unknownworld ...

  10. JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)

    JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...