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. 430flash的操作

    大概印象:430的flash好像有点像arm的flash,只不过是arm的flash要比430的大很多,而且430的flash不同于E2PROOM,这一点需要值得注意 MSP430flash的基本特点 ...

  2. [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇

    如果你正在使用CocosBuilder或者是其他基于CocosBuilder源码改装而成的工具为你的游戏搭建场景或者UI,那你一定要看看这篇文章:)   你是否已经厌倦了无聊的手工publish操作? ...

  3. STM32L152 Keil 开发环境 显示Internal command error Flash down

    使用Keil开发环境对STM32L Discovery进行开发,更新一次firmware后就不能连接目标板了,报错Internal command error Flash download faile ...

  4. 在LinearLayout中实现列表,列表采用LinearLayout横向布局-android学习

    不多讲直接上代码 1.Activity 对应的布局文件如下: <?xml version="1.0" encoding="utf-8"?> < ...

  5. php 实现文件下载,兼容IE、Firefox、Chrome等浏览器

    一.下载任意文件: Header ( "Content-type: application/octet-stream" ); $ua = $_SERVER ["HTTP_ ...

  6. return遇到finally

    public class Test { public static void main(String[] args) { System.out.println("=============t ...

  7. 【noip2012】疫情控制

    题意: 给出一颗n个节点有边权的树 和m个军队所在的位置 军队从某节点移动到相邻节点要花费边长度的时间 求最少要多少时间使得根节点(编号为1)到每个叶子的路径上最少有一支军队(根节点不能有军队) 题解 ...

  8. Visual Studio C++ Command Line

    最近在Visual Studio 2012进行vp8的开发,之前一直都是在ubuntu上进行开发,关于编译链接的一些选项可直接在makefile中定义,比如vp8的头文件都放在include文件下面, ...

  9. EasyBCD安装CentOS双系统

    之前使用CentOS安装过ubuntu,今天安装一次CentOS6.6,要复杂一些,列文备忘. 1.安装EasyBCD,下载CentOS-6.6-x86_64-bin-DVD1.iso.CentOS- ...

  10. Codeforces Wilbur and Array

    Description Wilbur the pig is tinkering with arrays again. He has the array a1, a2, ..., an initiall ...