渐进记法(O,Ω,Θ)

第一次在《算法导论》中看到这三种渐进记法的符号,当时对此一窍不通,所以也就没有注意它们,直接把他们忽略了,知道学习算法的时候,才知道当初的做法有多傻,因为一个算法的好坏以及复杂度,可以用它们来表示。现在我学习过程当中用的最多的是O(g(n)),大概是老师认为我们还不具有算法设计分析与优化的能力吧。

先声明一下:本文不会对算法的时间复杂度和空间复杂度进行讨论,大家可以查看别的博客。^_^

好了,首先介绍一下这三个符号吧。

符号 含义
O 渐进小于或等于
Ω 渐进大于或等于
Θ 渐进等于

其实大家一看到本文的标题,就应该猜到这几个符号的用法与高等数学有关,因为“渐进”两个字,比如在高等数学中经常听到渐进线之说。

请看以下两个举例:

如果a=x^2+x,b=x^2+5,则称a与b是相同等级的,且a渐进等于b;

如果a=x^2+x,b=x^3+5,则称a与b不是相同等级的,且a渐进小于或等于b,b渐进大于或等于a。

其中判断a和b是不是两个相同等级的,是依靠比较两个式子中自变量最高的次数,a=x^2+x中自变量最高次数为2,b=x^3+5中自变量最高次数为3。

如果两个自变量的最高次数相同,则说明它们是相同等级的,即他们俩渐进相等,如果其中一个的次数比另一个高,则称次数低的一个式子渐进小于或等于次数高的式子,次数高的一个式子渐进大于或等于次数低的式子。注意不要关注他们的系数谁大谁小。

现在用符号表示语言:

a=x^2+x,b=x^2+5;====>a=Θ(b);

a=x^2+x,b=x^3+5;====>a=O(b)或者b=Ω(a);

其实,这个只要明白比较的是什么就能理解三个符号的含义及用法了。

简记为:O表示上界,Ω表示下界,Θ表示平行。

时间: 2024-08-04 16:39:16

渐进记法(O,Ω,Θ)的相关文章

Python Algorithms – chapter2 基础知识

一.渐进记法 三个重要的记号 Ο.Ω.Θ,Ο记法表示渐进上界,Ω记法表示渐进下界,Θ记法同时提供了函数的上下界 几种常见的渐进运行时间实例 三种重要情况 最好的情况,最坏的情况,平均情况 最坏的情况通常是最有用的情况,可以对算法效率做出最佳保证 实证式算法评估 Tip1:If possible, don't worry about it. Tip2:用timeit模块进行计时 import timeit timeit.timeit("x = 2+2") #0.0032888687498

受康奈尔笔记法启发设计的程序员算法手写本

大多数程序员都习惯了平时在电脑上敲代码,但也有些情境要求我们手写代码,比如平时学习时做纸质笔记,完成老师布置的课程作业,同事之间交流讨论讲解思路,ACM比赛时手写分析算法,还有最常见的面试手写算法等.昨天看了康奈尔笔记法,觉得有点意思,于是想着把它应用到程序员的圈子里来,可以在面试等场合很好的向面试官阐述算法思路同时规范书写,希望能给大家带来一些帮助. 一.什么是康奈尔笔记法 图1.康奈尔笔记法 5R笔记法,又叫做康奈尔笔记法,是用产生这种笔记法的大学校名命名的.这一方法几乎适用于一切讲授或阅读

算法导论笔记之渐进记号

渐进记号 Θ(theta):渐进紧确界.f(n) = Θ(g(n))表示:?c1>0,c2>0,n0>0,s.t.对? n>n0,0 ≤c1g(n) ≤ f(n) ≤ c2g(n)成立.用极限表示为limn->∞f(n)/g(n) = c. O(大欧):渐进上界. f(n) = O(g(n))表示 :?c>0,n0>0,s.t.对? n>n0,0≤ f(n) ≤ cg(n)成立. Ω(大omega):渐进下界.f(n) = Ω(g(n))表示 :?c>

渐进坚强、优雅降级

你能描述一下渐进增强和优雅降级之间的不同吗? 优雅降级和渐进增强印象中是随着css3流出来的一个概念.由于低级浏览器不支持css3,但css3的效果又太优秀不忍放弃,所以在高级浏览中使用css3而低级浏览器只保证最基本的功能.咋一看两个概念差不多,都是在关注不同浏览器下的不同体验,关键的区别是他们所侧重的内容,以及这种不同造成的工作流程的差异. 举个例子: a{    display: block;    width: 200px;    height: 100px;    background

客户端考试之渐进增强与优雅降级

优雅降级(graceful degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复. 渐进增强(progressive enhancement):一开始只构建站点的最少特性,然后不断针对各浏览器追加功能.优雅降级:使用优雅降级方案,Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作.由于IE独特的盒模型布局问题,绝大多数Web设计师和开发者都通过专门的样式表或针对不同版本的IE的hack实践过优雅降级了: 使用优雅降

HDOJ1556 Color the ball 【线段树】+【树状数组】+【标记法】

Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8272    Accepted Submission(s): 4239 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌

优雅降级与渐进增强

优雅降级:观点认为应该针对那些最高级,最完善的浏览器来            设计网站,而将那些认为过时或有功能缺失的浏览器下 的测试工作安排在开发周期的最后阶段,并把测试对象   限定为主流浏览器(IE,MOZILLA等)的前一个版本 渐进增强:观点认为应关注内容本身. 内容是建立网站的诱因,有的网站展示它,有的则收集它,有的寻求, 有的网站甚至包含以上所有,但相同点都是他们全都涉及到内容,这使得 渐进增强成为一种更为合理的设计范例,这也是它立即被雅虎说采纳   并用以构建其分级式浏览器支持策

网页设计时的渐进增强和优雅降级原则

渐进增强和优雅降级是两种不同的网页设计思想,是两种相反的思路达到同样的效果. 优雅降级:设计网页时,首先满足主流浏览器和最新版本浏览器的所有效果和互动.然后在此基础上,对非主流浏览器 和较低版本的浏览器进行效果删减来兼容,最终完成所有浏览器均能适用的方法.一般在学习过程中,均采用 该方法. 渐进增强:顾名思义,是在网页制作过程中,首先满足能适应由低到高,非主流到主流所有浏览器都能适用的网页,再针对高版本 浏览器和主流浏览器来添加高级效果和互动,最终让网页能适应所有浏览器的方法. 两种方法各有优劣

如何理解算法中的渐进符号?

我们分析一个算法的时候,常常需要用到数学去描述其性能.最常用的的是?.比如在一段程序中有 For(I = 0,I < n ; I ++) For(J = 0; j < n ; j++); For (cnt = 0; cnt < n ; cnt ++); 我们会说其最坏情况是n^2+ n,这时候,实际上我们没有考虑机器因素,我们把每一条指令的执行时间都当做单位1来看,如果我们考虑到机器因素,比如在A机器上,每条指令执行的速度是c1,那么他的最坏情况是( n^2  +  n) / c1,而在