Keywords:Big O; Little O;Big Omega;Little Omega;Theta;Mathematical Formula。

说到算法,大家最熟悉的恐怕就是这个大欧标记了,即O。什么基于比较的排序算法最好是O(nlgn)了什么的。(注,本系列文章里不区分log和lg,两个符号都是表示以二为底的对数)

更general一点,我们可以写成O(g(n)),这个东西是什么吗,其实他是一个集合,表示所以满足条件的一系列函数,这一系列函数有什么特点呢?那就是g(n)是他们的上界,更准确的说,是一个constant c, c*g(n)是他们的上界。如下图,(截自算法导论)

假设f(n)表示我们quick sort的时间,我们写作f(n) = O(nlgn),这时候你可能要问了,刚才上面不是说O(nlgn)表示一个集合吗,这么集合里面显然都是函数,那怎么能写 函数 = 函数的集合呢?没错,其实这样写确实不好,但是我们现在已经约定俗成了,这里的等号就表示元素和集合关系的属于的符号。

现在来看一下Big O的formal的定义。

O(g(n)) = {f(n) : 存在一个正常数c,和一个 N0, 对于所有的N>N0, 0<= f(n) <= c*g(n)}

其实结合上面的图和这个定义,Big O的意思还是很明显的。他是f(n)的一个upper bound。

同理,我们可以定义 Big Omega 和 Theta。

Omega(g(n)) = {f(n): 存在一个正常数c,和一个 N0, 对于所有的N>N0, 0<= c*g(n) <= f(n) }

当然,这是我们f(n)的一个lower bound。

Theta(g(n)) = {f(n): 存在正常数c1和c2,和一个 N0, 对于所有的N>N0, c1*g(n) <= f(n) <= c2*g(n)}

下面是算法导论里面完整的图。

下面给一下Litter O 和 Litter Omega的概念。

通过上面的定义我们可以发现,在Big O,Big Omega和Theta的定义中,我们都出现了“=”,当然,类比当我们数字的比较,我们有大于等于,小于等于,同样,我们也有大于,小于。

当然对于这个等号,我们可以说是一个tight的bound,比如2n^2 = O(n^2),这个bound就是asymptotically tight的,但是对于2n = O(n^2)来说,这个就不是tight的。所以,这时我们的Little O就孕育而生了。用算法导论里面的原话就是: We use o-notation(Litter O) to denote an upper bound that is not asymptotically tight.

下面来看Little O的formal的定义。

o(g(n)) = {f(n): 对于任意的正常数c,存在一个N0,对于所有的N>N0, 0<= f(n) < c*g(n)}

同样,我们可以定义Little Omega。

w(g(n)) = {f(n): 对于任意的正常数c,存在一个N0,对于所有的N>N0, 0<= c*g(n) <=f(n)}

============================================华丽的分割线==================================

对于这些标记,其实我们还可以从growth rate和极限的方面来考虑。

比如对于little O, it means that g(x) grows much faster than f(x), or similarly, the growth off(x) is nothing compared to that of g(x).(偷懒一下,直接从wikipedia上抄下来)

其余的大家自己也应该都可以琢磨出来。(*^__^*) 嘻嘻……

最后给几个常用且简单的数学公式,权当remind了。

========================================================================================

本作品采用知识共享署名 2.5 中国大陆许可协议进行许可。 本博客采用知识共享署名 2.5 中国大陆许可协议进行许可。本博客版权归作者所有,欢迎转载,但未经作者同意不得随机删除文章任何内容,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请给我留言。

转载于:https://www.cnblogs.com/Gavin_Liu/archive/2011/04/12/2011105.html

漫谈算法(番外篇) 符号标记以及基本数学公式相关推荐

  1. OpenCV-Python实战(番外篇)——利用 SVM 算法识别手写数字

    OpenCV-Python实战(番外篇)--利用 SVM 算法识别手写数字 前言 使用 SVM 进行手写数字识别 参数 C 和 γ 对识别手写数字精确度的影响 完整代码 相关链接 前言 支持向量机 ( ...

  2. OpenCV-Python实战(番外篇)——利用 KNN 算法识别手写数字

    OpenCV-Python实战(番外篇)--利用 KNN 算法识别手写数字 前言 手写数字数据集 MNIST 介绍 基准模型--利用 KNN 算法识别手写数字 改进模型1--参数 K 对识别手写数字精 ...

  3. 程序猿成长之路番外篇之前后端加解密(rsa+aes混合加解密算法)

    今年国庆前夕接手一个外部项目,说是要保障接口数据安全,数据安全相对容易些,接口安全嘛emmmmm, 这个要考虑加解密算法.白名单之类的问题了.于是打算今天搞一期接口安全为题的成长之路番外篇. 为什么要 ...

  4. NLP 开源形近字算法之相似字列表(番外篇)

    创作目的 国内对于文本的相似度计算,开源的工具是比较丰富的. 但是对于两个汉字之间的相似度计算,国内基本一片空白.国内的参考的资料少的可怜,国外相关文档也是如此. 本项目旨在抛砖引玉,实现一个基本的相 ...

  5. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    转载自:https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程:给深度学习入门者的Python快速教程 - 基础篇 给深度学习入门者的Python快速教程 - ...

  6. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法

    数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...

  7. 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏

    为什么80%的码农都做不了架构师?>>>    转自:http://blog.csdn.net/pongba/archive/2008/09/21/2958094.aspx 数学之美 ...

  8. Java番外篇1——正则表达式

    Java番外篇1--正则表达式 1.什么是正则表达式 正则表达式定义了字符串的模式 正则表达式可以用来搜索.编辑或处理文本 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别 2.正则表达式 ...

  9. clang static analyzer源码分析(番外篇):RegionStore以及evalCall()中的conservativeEvalCall

    引子 我们在上一篇文章<clang static analyzer源码分析(番外篇):evalCall()中的inline机制>中提及了clang如何创建CallGraph,如何进行函数i ...

  10. 番外篇2.3 图像处理与深度学习 - 模式识别

    在谈R-CNN之前,应该要先总结一下模式识别. 模式识别主要是对已知数据样本的特征发现和提取,比如人脸识别.雷达信号识别等,强调从原始信息中提取有价值的特征,在机器学习里面,好的特征所带来的贡献有时候 ...

最新文章

  1. 中石油训练赛 - Get Strong(dfs双向搜索+二分)
  2. go vs python 对接外部web api_python--web--让python提供api服务--aiohttp-Go语言中文社区
  3. python 运行时 变量_python运行过程,变量,符号
  4. 一、数据类型和运算符——3-数据类型
  5. EShop网上商城项目(二)
  6. myeclipse中hibernate出错
  7. 为什么有时候代码会提示要去掉@override
  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse...
  9. 增强版的RecycleViewAdapter,能够直接使用
  10. golang json string remove field
  11. 微积分是研究连续变化的数学理论
  12. Unity实现2D小游戏
  13. 计算机丢失dll文件夹,简单几招教你解决windows7旗舰版丢失dll文件
  14. exchange rate维护
  15. IdentityServer4揭秘---Consent(同意页面)
  16. WindowsServer修改用户密码
  17. RabbitMQ None of the specified endpoints were reachable 错误 解决方案
  18. 基于python的个人博客系统的设计开题报告_基于SSM的个人博客系统设计开题报告...
  19. 超详细Vue Devtools的下载和安装——Vue的调试工具
  20. Python 接入飞书端口API - 实现共享空间的Excel更新

热门文章

  1. FPGA开发综合技巧
  2. Vivado IP核生成设置
  3. Xilinx的FPGA命名规则
  4. C++实现输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
  5. 场效应晶体管的几点使用知识!
  6. 1503 - A PRIMARY KEY must include all columns in the table's partitioning function
  7. 微服务开源项目ServiceComb 毕业成为Apache顶级项目
  8. JAVA post和get方式请求远程HTTP接口
  9. Java服务器热部署的实现原理
  10. squid启动失败的解决办法