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 ...
随机推荐
- 活久见!Linux命令行居然也可以用来查看图像?
在 Linux 中有很多 GUI 应用程序可以查看图像,但是这对经常使用命令行来工作的人可能会觉得很繁琐.今天要介绍的是 3 个实用的 CLI 图像查看器来在终端上查看图像,让那些使用 CLI 的朋友 ...
- node+express+mysql实现简单的数据增删改查
前提 电脑已经安装了node,express,mysql. 实现步骤 1.新建数据库表 附数据表结构: 2.创建exprss项目 express -e myapp 新建一个以ejs为模板的expre ...
- Android 图片裁剪库 uCrop
引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. 现在 Android 开发,离不开图片,必然也需要图片裁剪功能,这个实现可以调用系统的 ...
- MySQL学习之路7-索引、事务、函数、存储过程、游标
索引 使用索引快速定位某列中特定值的行,不需要遍历数据表所有行. 创建索引的数据结构:BTREE and HASH. 主键也是一种索引,Primary key. show index from ord ...
- spark error Caused by: java.io.NotSerializableException: org.apache.hadoop.hdfs.DistributedFileSystem
序列化问题多事rdd遍历过程中使用了没有序列化的对象. 1.将未序列化的变量定义到rdd遍历内部.如定义入数据库连接池. 2.常量定义里包含了未序列化对象 ,提出去吧 如下常量要放到main里,不能放 ...
- 数据结构和算法(Golang实现)(12)常见数据结构-链表
链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...
- 使用Network Emulator Toolkit工具模拟网络丢包测试(上)
弱网络测试包括延时和丢包二种场景下应用的功能是否正常: 网络延时测试使用Fiddler工具控制上下行数据传输延时时间来模拟网络延时场景: 网络丢包测试使用Network Emulator Toolki ...
- 【python实现卷积神经网络】开始训练
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- AJ学IOS(52)多线程网络之GCD下单例设计模式
AJ分享,必须精品 单例模式 1:单例模式的作用 可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问 从而方便地控制了实例个数,并节约系统资源 单例模式的使用场合 在整个应用程序中, ...
- pickle\json,configparser,hashlib模块
python常用模块 目录 python常用模块 json模块\pickle模块 configparser模块 hashlib模块 subprocess模块 json模块\pickle模块 首先说一下 ...