Python算法教程:渐近记法

将焦点集中在解决问题方法中那些能独立于具体实现的属性,希望能排除那些细节干扰,区分出核心问题所在。

渐近记法核心思想是想提供一种资源表示形式,主要用于分析某项功能在应对一定规模参数输入时所需要的资源(通常指的是时间,但有时候也包括内存)。

渐近记法使用的是一组由希腊字母构成的记号体系。这之中最重要的记号分别是O(omicron)Ω(omega)θ(theta)。其中,O记号的定义可以被当作其他两个符号的基础。

表达式O(g)代表的是一组与某个函数g(n)有关的函数集合。若要让某函数f(n)属于该集合,该函数须满足以下关系:

存在自然数n0和正数c,对于所有的n>=n0都有: f(n) <= c*g(n)

而另外两种记法Ω与θ则可以被视为O记法的变体。其中,Ω的定义正好与之相反。也就是说,若要让函数f(n)属于Ω(g),该函数须满足以下关系:

存在自然数n0和正数c,对于所有的n>=n0都有: f(n) >= c*g(n)

因此,O记法所代表的其实是所谓的渐近上界,而Ω记法所代表的则是渐近下界。

而θ记法所代表的集合正好是前面两种记号的交集,即θ(g) = O(g) ∩ Ω(g)。换句话说,若要让某个函数属于θ(g),该函数须满足以下关系:

存在自然数n0和正数c,对于所有的n>=n0都有: c1*g(n) <= f(n) <= c2*g(n)

渐近运行时间

几种常见的渐近运行时间实例

时间复杂度相关名称相关示例及说明
θ(1)常数级哈希表的查询与修改
θ(lg n)对数级二分搜索
θ(n)线性级列表的遍历
θ(n lg n)线性对数级任意值序列的最优化排序,其复杂度等同θ(lg n!)
θ(n²)平方级拿n个对象进行相互比对
θ(n³)立方级Floyd-Warshall算法
O(n^k)多项式级基于n的k层嵌套循环,且必须满足常数k>0
Ω(k^n)指数级每n项产生一个子集(其中k=2),且必须满足k>1
θ(n!)阶乘级对n个值执行全排列操作

(最近更新:2019年05月22日)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值