algorithms中计算时间的渐近表示
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中计算时间的渐近表示的更多相关文章
- 计算时间:一个C++运算符重载示例
Time类是一个用于计算时间的类,其原型如下:程序清单11.1 mytime0.h // mytime0.h -- Time class before operator overloading #if ...
- 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有相关 ...
- Java8中Instant和LocalDate来计算时间或者日期间隔
/** * java.time.Instant * java.time.Duration * Instant 默认使用UTC时区:2019-01-24T14:01:32.258Z * mongo中的时 ...
- [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义
C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...
- JAVA中计算两个日期时间的差值竟然也有这么多门道
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...
- [MIT Intro. to algo]Lecture 1: 课程介绍,算法优势,插入算法和归并算法分析,渐近符号
The theoretical study of computer program performance and resource useage. First, analysis and the ...
- Spark比MR快是因为在内存中计算?错!
MapReduce 就像一台又慢又稳的老爷车,虽然距离 MapReduce 面市到现在已经过去了十几年的时间,但它始终没有被淘汰,任由大数据技术日新月异.蓬蓬勃勃.花里胡哨地发展,这个生态圈始终有它的 ...
- 基于GMC/umat的复合材料宏细观渐近损伤分析(一)
近期在开展基于GMC/umat的复合材料宏细观渐近损伤分析,一些技术细节分享如下: 1.理论基础 针对连续纤维增强复合材料,可以通过离散化获得如下的模型: (a)(b)(c) 图1 连续纤维增强复合材 ...
- 年轻的心与渐行渐近的梦——记微软-斯坦福产品设计创新课程ME310
作者:中国科学技术大学 王牧 Stanford D. School 2014年6月,沐浴着加州的阳光,在斯坦福大学(下文简称Stanford)完成汇报后,历时一年的创新设计课程ME310的项目结束 ...
随机推荐
- Quartz动态配置表达的方法
在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间, ...
- CenOS中下载RPM包
在实施部署时,往往服务器环境无外网或无法访问国外网址.这是可以在本机虚拟机的CentOS环境中下载RPM. 方法一:yum yum命令本身就可以用来下载一个RPM包,标准的yum命令提供了--down ...
- Solaris10下Telnet、SSH、ftp使用root登录
学习solaris过程中,使用SecureCRT.putty等工具用root账号登录,总是登录不上去,后来经老师解答和网上找答案,发现是 solaris默认是不可以远程使用root账号登录的,如果想开 ...
- 单点登录sso规范
http://jasig.github.io/cas/development/protocol/CAS-Protocol-Specification.html
- 关于使用digitalocean的vps
先说说测试速度 平均在延迟125ms,机房选择新加坡 还有其他机房,比如伦敦,西海岸,阿姆斯特丹,基本全球覆盖. 以前用linode,virpus. linode以前有$5的套餐,现在最低都在10刀了 ...
- HDU 1890--Robotic Sort(Splay Tree)
题意:每次找出第i大的数的位置p输出,然后将i~p之间的数反转. 题解:每次把要的区间转成一棵子树,然后更新.因为每次将第i小的数转到了了i,所以k次操作后,可知前k个数一定是最小的那k个数,所以以后 ...
- 【Stage3D学习笔记续】真正的3D世界(三):纹理效果
混合模式: 代码 示例是<Stage3D指南>中的直接弄出来的,可以通过点击键盘上的Q.W.E这3个按键,更换混合模式.模型和纹理,可以直观的查看不同混合模式的效果,住:下方的地形使用&q ...
- hdu 2844 Coins (多重背包)
题意是给你几个数,再给你这几个数的可以用的个数,然后随机找几个数来累加, 让我算可以累加得到的数的种数! 解题思路:先将背包初始化为-1,再用多重背包计算,最后检索,若bb[i]==i,则说明i这个数 ...
- 【转载】如何将Emmet安装到到 Sublime text 3?
http://www.cnblogs.com/tinyphp/p/3217457.html 看清楚哦~~这是Sublime text 3不是2的版本,两者的安装还是有区别的,下面的方法是我感觉比较简单 ...
- jqueryui.position.js源代码分析
近期要写前端组件了.狂砍各种组件源代码,这里分析一款jqueryui中的posistion插件,注意,它不是jqueryui widget,首先看下源代码整体结构图 1.看到$.fn.position ...