如果算法A需要的时间与f(n)成正比,则算法A称为f(n)阶,表示为O(f(n))。函数f(n)称为算法的增率函数(growth-rate function)。该表示法使用大写字母O来表示(order),故称大O表示法。若规模为n的问题需要的时间与n成正比,则问题表示为O(n),即n阶。若需要的时间与n^2成正比,则问题表示为O(n^2),以此类推。
下面是算法的阶的定义。
        若存在常量k和n0,使算法A在解决规模n>=n0的问题时,需要的问题单元不大于k*f(n),则算法A为f(n)阶,表示为O(f(n))。
        O(f(n))定义中的条件n>=n0正式阐明了问题规模足够大的概念,一般地,有很多k和n值可以满足这个定义。大O表示法的几个数学属性有助于简化算法分析。在讨论这些属性是要记住,O(f(n))意为f(n)阶,O并不是一个函数。
       1)可忽略算法增率函数的低阶项。
       2)可忽略算法增率函数中高阶项的倍数常量。
       3)O(f(n))+O(g(n))=O(f(n)+g(n))可组合增率函数。

来源: <http://blog.csdn.net/chenloug/article/details/6917244>

对于任何数学函数,这三个记号可以用来度量其“渐近表现”,即当趋于无穷大时的阶的情况,这是算法分析中非常重要的概念。大家可以把它们分别想象成≤、≥和,分别估计了函数的渐近上界、渐近下界和准确界。诚然,渐近关系和确切大小关系是有区别的,但当问题规模很大时,忽略这种区别能大大降低算法分析的难度。

下面我们就来具体定义这三种记号的表示。

设函数f ( n )代表某一算法在输入大小为n的情况下的工作量(效率),则在n趋向很大的时候,我们将f (n)与另一行为已知的函数g(n)进行比较:

1)如果0,则称f (n)在数量级上严格小于g(n),记为f (n)=o( g(n))。(小o表示法)

2)如果正无穷,则称f (n)在数量级上严格大于g(n),记为f (n)=( ( g(n))。(?)

3)如果c,这里c为非0常数,则称f (n)在数量级上等于g(n),即f (n)和g(n)是同一个数量级的函数,记为:f (n)=Θ( g(n))。

4)如果f (n)在数量级上小于或等于g(n),则记为f (n)=O( g(n))。(大O表示法)

5)如果f(n)在数量级上大于或等于g(n),则记为f (n)=Ω( g(n))。

这里我们假定f (n),g (n)是非负单调的,且极限存在。如果这个极限不存在,则无法对f (n)和g (n)进行比较。在进行此种计算时,一个经常用到的技术是洛必达(L'Hopital)法则。该法则由17世纪法国数学家Guillaume de L'Hopital发现(也有人认为是瑞士数学家Johann Bernoulli发现的)。该法则声称,两个函数的比率极限等于两个函数的导数的比率极限,这里当然假定两个函数的导数比率的极限存在,即有:

有了这个定义,就可以对素性测试的两个算法进行比较了。

,符合第1个定义,因此这两个素性测试算法的效率差异是数量级的差异。

在算法分析中,最常选取的g(n)有如下一些,见表2-1。

一个值得提醒的问题是,根据定义,对于任意一个g (n)函数来说,可能存在很多个函数f (n),使得f (n)=O(g(n)),即O(g(n))表示的实际上是一个函数的集合,这里的等于也不是普通意义上的等于,而是说明f (n)是函数集合o(g(n))里的一员,即f (n)=O(g(n))并不意味着f (n)等于O(g(n))。等于号的这种使用令那些严谨的科学家非常不快甚至愤怒,但计算机界人士很喜欢这种马虎的表示。不过,我们在心里应该知道,f (n)=O(g(n))并不意味着f (n)≠O(g(n))。不然,我们就被自己骗了!

等号在其他渐近表示中的使用也可以同样解释。

来源: <http://book.2cto.com/201211/8127.html>

算法概念:大O表示法/小o表示法/Ω/Θ相关推荐

  1. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

  2. 命名规则之大驼峰命名法和小驼峰命名法

    大驼峰命名规则又称骆驼式命名法(Camel-Case),是电脑程式编写时的一套命名规则(惯例).是指混合使用大小写字母来构成变量和函数的名字. 程序员们为了自己的代码能更容易的在同行之间交流,所以多采 ...

  3. 大驼峰命名法和小驼峰命名法

    前言 我们在做项目的时候,命名格式必须统一,这样才会方便不同人之间的编码阅读!,所以今天就来说一下驼峰命名法! 骆峰式命名法(Camel-Case)是电脑程式编写时的一套命名规则(惯例). 骆峰式命名 ...

  4. 算法 - 堆排序(大顶堆、小顶堆)

    用的是顺序存储二叉树,也就是数组实现的二叉树,遍历的时候按照的是二叉树的形式 代码实现 package tree;import java.util.Arrays;public class HeapSo ...

  5. 图像处理_Ostu算法(大律法、最大类间方差法)

    一.算法简述 Otsu算法是一种用于二值化最佳阈值的选取方法.基本原理是根据阈值T将图像中的像素点分为C1和C2两类,不断的调整阈值T之后若此时两类之间存在最大的类间方差,那么此阈值即是最佳阈值. 二 ...

  6. 算法分析之大O、大Ω、大Θ和小o表示法

    算法分析中常常使用大O表示法.大Ω表示法.大Θ表示法和小o表示法来对算法复杂度进行分析.本文就来讨论它们的具体定义并给出一些例子. 在不同的参考书上大O表示法会出现不同的定义,但是本质上它们都是统一的 ...

  7. 编程面试的10大算法概念汇总

    编程面试的10大算法概念汇总 嘿,第一次翻译文章,在ProgramCreek看到的,原文章名为Top 10 Algorithms for Coding Interview, 对于我这个明年即将直奔BA ...

  8. 数据结构考研:大O表示法最浅显易懂且详细深入的解释及与小o表示法的区别(十分钟必懂)

    大O表示法的背景 作为软件工程专业的学生,在我们学习数据结构的时候,总是会碰见对各种算法时间复杂度和空间复杂度的大O表示法的描述.我们只是将信将疑的用着,并不知道大O表示法的准确含义,今天博主李同学在 ...

  9. 计算机e的指数怎么计算方法,e^x的基本算法——剥离大指数法

    e^x的基本算法--剥离大指数法 e^x泰勒展开式 e^x = 1+x+x^2/2!+x^3/3!+--+x^n/n!+-- 当x<0.1时,e^x泰勒展开式收缩很快, 当x=1时,e=1+1/ ...

最新文章

  1. 安装spket-1.6.23.jar
  2. Excel 如何根据单元格中的值设立不同的颜色(或渐变)?(222)
  3. 图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题
  4. 虚拟成像技术_AI帝国将崛起,国内幻真虚拟成像技术第一家
  5. HTML 5 meta 标签
  6. linux网站如何添加swf支持,linux下安装swftools和openOffice
  7. 前端ajax数据提交到服务器_详解前端如何让服务器主动向浏览器推送数据
  8. UVA10325 The Lottery【GCD+LCM】
  9. 用idea搭建SSM框架maven项目
  10. matlab isnumeric函数,matlab中isnan函数
  11. mysql5.5默认引擎,在MySQL5.5以上系统中,默认的存储引擎是( )。
  12. Mybatis全局配置文件Configuration.xml详解
  13. linux 修改mysql端口
  14. 利用MATLAB 实现证件照换底色教程
  15. 阿里云抢月饼代码实验,自己写着玩的
  16. 如何拿下最适合晚上睡不着看的网站?建议收藏!
  17. 《从零开始做运营》心得
  18. 集赞免费领《新程序员》电子刊!
  19. 【QT+OpenCascade+RL】安川机器人仿真器源码学习
  20. PHP使用ffmpeg压缩视频

热门文章

  1. 动态修改 DHTML Gantt甘特图皮肤样式
  2. [高通SDM450][Android9.0]CTA认证--拆分申请权限分组
  3. 台湾科技挣扎,人祸大于天灾?
  4. 什么是天灾人祸,天灾是智商比较低,什么是人祸,人祸就是自己还不努力
  5. JDE910笔记2--OMW项目建立及简单使用[转]
  6. html 整个页面只能看,如何截图整个完整的网页页面(包含滚动条下面看不到的网页)...
  7. 区块链是什么通俗解释_区块链是什么?如何用一句话通俗解释区块链
  8. C#.NET面试题:一批编号为1-100全部开关朝上(开)的灯进行以下操作: 开关编号凡是1的倍数反方向拨一次开关;若该编号也是2的倍数反方向又拨一次开关;若该编号又是3的倍数反方向又拨一次开关……
  9. 中医针灸学综合练习题库【3】
  10. 重读《从菜鸟到测试架构师》-- 从专家到高手