原创博客,转载请注明:

  http://www.cnblogs.com/wuwenyan/p/4982713.html 

  当算法的输入n非常大的时候,对于算法复杂度的分析就显得尤为重要,虽然有时我们能通过一定的方法得到较为精确的运行时间,但是很多时候,或者说绝大多数时候,我们并不值得去花精力求得多余的精度,因为精确运行时间中的倍增常量和低阶项已经被输入规模本身的影响所支配。我们需要关心的是输入规模无限增加,在极限中,运行时间是如何随着输入规模增大而增加的,通常来说,在极限情况下渐进地更优的算法在除很小的输入外的所有情况下将是最好的选择。

前提假设:本章定义的所有用在渐近记号中的函数均渐近非负(包括f(n),g(n))。

1. 渐近记号

1.1 Θ记号

  对于一个已知的函数g(n),我们定义Θ(g(n))如下:

  

  含义是:若存在常数c1和c2,使得对于足够大的n,函数f(n)能够"夹入"c1*g(n)和c2*g(n)之间,则f(n)属于集合Θ(g(n))。我们称g(n)为f(n)的一个渐近紧确界(asymptotially tight bound)。

  注意:Θ(g(n))是一个函数的集合,所以如果要表示f(n)是Θ(g(n))的一员,则需写为f(n)∈Θ(g(n)),但是在很多教材中,通常使用f(n)=Θ(g(n))来表示相同的概念,这属于对于等式的一个活用。

  下图形象地表示了渐近紧确界的形式:

  

1.2 O记号

  对于一个已知的函数g(n),我们定义O(g(n))如下:

  

  含义是:对于足够大的n,f(n)的值总小于或等于c*g(n)。我们称g(n)为f(n)的一个渐近上界(asymptotic upper bound)。

  注意:在很多教材中,会发现用O(g(n))来表示一个渐近紧确界,即Θ(g(n))表示的含义,这是不准确的,在算法文献中,标准的做法是区分渐近上界和渐近紧确界。

  下图形象地表示了渐近上界的形式:

  

1.3 Ω记号

  对于一个已知的函数g(n),我们定义Ω(g(n))如下:

  

  含义是:对于足够大的n,f(n)的值总大于或等于c*g(n)。我们称g(n)为f(n)的一个渐近下界(asymptotic lower bound)。

  下图形象地表示了渐近下界的形式:

  

1.4 相互关系

  对任意两个函数f(n)和g(n),我们有f(n)= Θ(g(n)),当且仅当f(n)= O(g(n))且f(n)= Ω(g(n))。

  插入排序复杂度分析举例:插入排序最坏情况运行时间的界为Θ(n^2)(并不表示对每个输入的运行时间界都为Θ(n^2))。首先,插入排序的运行时间为O(n^2),这意味着最坏的运行时间为O(n^2)。其次,插入排序的运行时间为Ω(n),这意味着最好的运行时间为Ω(n)(在输入已经排序好的情况下)。

  所以,插入排序的运行时间介于Ω(n)和O(n^2)之间,且是一个尽可能紧确的界,例如,不能说插入排序的运行时间是Ω(n^2),因为存在一个输入使得排序在Ω(n)内完成,然而这与插入排序最坏运行时间为Ω(n^2)(由最坏情况运行时间的界为Θ(n^2)所蕴涵)并不矛盾,因为存在一个输入使得需要Ω(n^2)的时间。

1.5 o记号和ω记号

  对于一个已知的函数g(n),我们定义o(g(n))如下:

  

  含义可以类比于O(g(n)),表示一个非紧确的上界。

  对于一个已知的函数g(n),我们定义ω(g(n))如下:

  

  含义可以类比于Ω(g(n)),表示一个非紧确的下界。

2. 常用函数性质总结

  (1)对任意整数n,存在以下性质:

  (2)对于某个常量k,如果存在,则称函数f(n)为多项式有界的。

  (3)多项式与指数的增长率可以通过以下事实相关联。对于所有使得a>1的实常量a和b,有

  据此可知

  因此,任意底大于1的指数函数增长都比多项式函数快。

  (4)在(3)的第一个等式中,用lgn代替n,并用2^a代替a,可以使得多项式与多对数的增长相互关联:

  可以得到,对于任意常量a>0,有

  因此,任意正的多项式函数都比任意多对数函数增长快。

  (5)阶乘函数的弱上界为n!<=n^n,因为在n的阶乘中,n的每项最多为n。斯特林近似公式给出了一个更紧确的上界和下界:

转载于:https://www.cnblogs.com/wuwenyan/p/4982713.html

【算法导论学习笔记】第3章:函数的增长相关推荐

  1. 算法导论学习笔记 第6章 堆排序

    在本章中介绍了另一种排序算法:堆排序(heapsort).与归排序一样,但不同于插入排序的是,堆排序的时间复杂度式(Onlgn).而与插入排序相同,但不同于归并排序的是,堆排序同样具有空间原址性(我理 ...

  2. 算法导论学习笔记 第2章 算法基础

    本章介绍了一个贯穿本书的框架,后续的算法设计都是在这个框架中进行的. 本章通过插入排序和归并排序两种常见的算法来说明算法的过程及算法分析,在分析插入排序算法时,书中是用了循环不变式证明了算法的正确性, ...

  3. 算法导论学习笔记 第7章 快速排序

    对于包含n个数的输入数组来说,快速排序是一种时间复杂度为O(n^2)的排序算法.虽然最环情况的复杂度高,但是快速排序通常是实际应用排序中最好的选择,因为快排的平均性能非常好:它的期望复杂度是O(nlg ...

  4. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  5. 算法导论中C语言代码,算法导论-学习笔记与进度

    算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...

  6. 《算法导论》读书笔记--第三章 函数的增长

    好长时间了,继续算法导论. 当输入规模足够大时,并不计算精确的运行时间,倍增常量和低阶项被舍去.我们要研究的是算法的渐近效率,即在输入规模无限量时,在极限中,算法的运行时间如何随着输入规模的变大而增加 ...

  7. 数据挖掘导论学习笔记 第五章 分类算法

    5.1基于规则的分类器 基于规则的分类器的规则用析取范式R=(r1∨r2∨⋯∨rk)R=(r_1\lor r_2 \lor \cdots \lor r_k)R=(r1​∨r2​∨⋯∨rk​)表示.R称 ...

  8. 算法导论读书笔记 第4章 分治策略

    在第2章中,归并排序算法使用了分治策略.即在分治策略中,递归地求解一个问题,在每层递归中应包含三个步骤: 分解(Divide)步骤将问题画分为一些子问题,子问题的形式与原问题一样,只是规模更小. 解决 ...

  9. Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

最新文章

  1. 【Git】git 与远程库交互
  2. 移动web开发常用JavaScript代码(转)
  3. Python requests模块相关接口
  4. LSMW批处理使用方法(02)_步骤1
  5. android 聊天功能实现,Android聊天背景功能实现
  6. 干货设计素材|环保平面画册模板
  7. Atitit 大数据索引技术attilax总结 目录 1. 面临的问题 2 1.1. 找到太多数据 2 1.2. 不支持多字段搜索 2 1.3. 不支持模糊搜索 2 1.4. 聚合搜索 2 1.5
  8. 项目管理10大模板Excel版(可直接套用)
  9. 基于Androidstudio的2048小游戏的设计与实现
  10. Veu进阶--transition动画和animation动画的使用详解
  11. CentOS7 中查看进程端口号
  12. EChart饼图文字大小调整
  13. 想知道手机配音软件哪个好用吗?一起来看看吧
  14. 移动端隐藏scroll滚动条::-webkit-scrollbar
  15. 基于swiftype应用于Hexo-Yilia-主题的站内搜索引擎
  16. Python学者在CSDN该怎么学习
  17. HDU 6617 Enveloping Convex(凸包+半平面交+二分)
  18. css实现文字中间横线,css实现文字居中两边横线效果的示例代码
  19. Dell Systems Management Tools download
  20. win10磁盘分区解决方案

热门文章

  1. BatchNormalization对cnn训练的影响
  2. pip(pip3)安装依赖库失败
  3. linux查看全连接队列大小,[TimLinux] TCP全连接队列满
  4. php中的核心函数有哪些,PHP内核探索:函数的分类
  5. java检索字符串并提取_eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)...
  6. RabbitMQ(二):RabbitMQ高级特性
  7. 多线程编程 - GCD
  8. 计算机里面有鬼的恐怖游戏,2018年度十大最佳PC恐怖游戏
  9. 禅道826版本SQL注入,登录绕过以及禅道826后台GetShell的小技巧
  10. 计算机基础操作与应用实训教程,计算机应用基础实训教程の第 3 章 Word 2003 基本操作.pdf...