Notations
下面四种记号是为了建立函数间的相对级别。
CLRS上的一张图很直观:
大O记号
定义:如果存在正常数\(c\)和\(n_0\),使得当\(N\ge n_o\)时\(T(N)\le cf(N)\),记\(T(N)=O(f(N))\)。
举个栗子:
当\(N < 1000\)时,\(1000N\gt N^2\),但\(N^2\)增长率更大,所以最终\(N^2\)会更大,即\(O(N^2)=1000N\)。
也就是说,总会存在某个点\(n_0\),从这个点以后\(cf(N)\)至少和\(T(N)\)一样大,忽略常数因子,即\(T(N)\)的增长率小于等于\(f(N)\)的增长率。
那么为什么这个常数因子\(c\)可以忽略呢?
当\(N\ge n_o\)时,\(T(N)\le cf(N)\),也就是\(\frac{T(N)}{f(N)}\le c\)。此时如果\(T(N)\)的增长率大于\(f(N)\)的增长率,那么\(\frac{T(N)}{f(N)}\)不可能小于某个常数,也就是\(c\)不存在,与我们的前提条件矛盾,所以说忽略掉常数因子后,\(T(N)\)的增长率仍然小于等于\(f(N)\)的增长率。
那么既然\(T(N)\)是以不快于\(f(N)\)的速度增长,也就可以说\(f(N)\)是\(T(N)\)的一个上界(upper bound),即最坏情况。
\(\Omega\)记号
定义:如果存在正常数\(c\)和\(n_0\),使得当\(N\ge n_o\)时\(T(N)\ge cg(n)\),记\(T(N)=\Omega(g(n))\)。
与上述大O的分析类似,可知:
\(T(N)\)的增长率大于等于\(g(N)\)的增长率,\(g(N)\)是\(T(N)\)的一个下界(lower bound),即最好情况。
\(\Theta\)记号
定义:当且仅当\(T(N)=\Omega(h(n))\)、\(T(N)=O(h(n))\)时,
\(T(N)=\Theta(f(n))\)。
那么这个就是说\(T(N)\)的增长率等于\(h(N)\)的增长率,即最坏情况和最好情况相同。
小o记号
定义:若\(T(N)=O(p(n))\)且\(T(N)\neq\Theta(p(n))\)时,
\(T(N)=o(f(n))\)。
与大O不同,小o表示\(T(N)\)的增长率小于\(p(N)\)的增长率,不包括等于。
Notations的更多相关文章
- 深入理解DOM节点类型第三篇——注释节点和文档类型节点
× 目录 [1]注释节点 [2]文档类型 前面的话 把注释节点和文档类型节点放在一起是因为IE8-浏览器的一个bug.IE8-浏览器将标签名为"!"的元素视作注释节点,所以文档声明 ...
- Excel 转Latex 及tex表格的处理 总结
Excel 转LaTex表格 与TeX表格的处理 总结 工具使用:一个Latex表格输入神器--Excel2Tex插件的安装过程. 首先下载插件:http://www.ctan.org/tex-a ...
- (MTT)连续能量函数最小化方法
(MTT)连续能量函数最小化方法 Multitarget tracking Multi-object tracking 连续能量函数 读"A.Milan,S. Roth, K. Schind ...
- Pegasos: Primal Estimated sub-GrAdient Solver for SVM
Abstract We describe and analyze a simple and effective iterative algorithm for solving the optimiza ...
- [转载]VIM 教程:Learn Vim Progressively
文章来源:http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ Learn Vim Progressively TL ...
- All About Python
Part one: Learn the Basics Hello, World! print "Hello,World!" Variables and Types Python i ...
- softmax分类器+cross entropy损失函数的求导
softmax是logisitic regression在多酚类问题上的推广,\(W=[w_1,w_2,...,w_c]\)为各个类的权重因子,\(b\)为各类的门槛值.不要想象成超平面,否则很难理解 ...
- Groovy 模版引擎
1. Introduction Groovy supports multiple ways to generate text dynamically including GStrings, print ...
- Groovy 处理 XML
1. Parsing XML 1.1. XmlParser and XmlSlurper The most commonly used approach for parsing XML with Gr ...
随机推荐
- 为什么条件变量需要传入mutex?
条件变量一般而言,会有一个布尔表达式作为唤醒的条件.调用wait的线程需要读取这个布尔表达式内数据, 同样,调用signal的线程需要修改这个布尔表达式的数据,让表达式为真.故而这两个线程必然访问至少 ...
- 在写微信小程序如何 首次编译的是当前写的页面
首先点击顶部的编译如下图 染后点击添加模式哈 选择页面加载是启动的是哪一个页面
- 30 HashSet
/* * 使用HashSet存储字符串并遍历 * * Set的特点: * 无序(存储和读取的顺序可能不一样) * 不允许重复 * 没有整数索引 于List正好相反 */ public class Ha ...
- <E> 泛型
/* * 使用集合存储自定义对象并遍历 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常, * 所以java为了解决这个问题,给我们提供了一种机制, ...
- winform怎么实现财务上凭证录入和打印
序言 现如今存在的财务软件层出不穷,怎么样让自己的业务系统与财务系统相结合,往往是很多公司头痛的问题.大多数公司也没有这个能力都去开发一套属于自己的财务软件,所以只有对接像金蝶用友这类的财务软件,花费 ...
- H5 环境检测
检测是否在客户端App内 function is_app() { var userAgent = navigator.userAgent.toLowerCase();//获取UA信息 if (user ...
- Arthas-Java的线上问题定位工具
Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar ...
- 如何把Excel表暴力拆分了,python两段代码帮你搞定
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...
- C - Roads in the North DFS+树的直径
Building and maintaining roads among communities in the far North is an expensive business. With thi ...
- 调用sleep后,我做了一个噩梦
sleep系统调用 我是一个线程,生活在Linux帝国.一直以来辛勤工作,日子过得平平淡淡,可今天早上发生了一件事让我回想起来都后怕. 早上,我还是如往常一样执行着人类编写的代码指令,不多时走到了一个 ...