算法时间复杂度和空间复杂度

为了在函数之间建立一种相对的级别,我们通过比较其相对增长率有以下两个定义:

如果存在正常数c和n0使得当N>=n0时T(N)<=cf(N),则记为T(N)=O(f(N))   即f(N)增长率大于等于T(N),f(N)是其上界

如果存在正常数c和n0使得当N>=n0时T(N)>=cf(N),则记为T(N)=Ω(f(N))   即f(N)增长率小于等于T(N),f(N)是其下界

(1) 复杂度 

为了描述一个算法的优劣,我们引入算法时间复杂度和空间复杂度的概念。 时间复杂度:一个算法主要运算的次数,用大 O 表示。通常表示时间复杂度时,我们只保留数量级最大的 项,并忽略该项的系数。 例如某算法,赋值做了 3n3+n2+8 次,则认为它的时间复杂度为 O(n3);另一算法的主要运算是比较,做 了 4×2n+2n4+700 次,则认为它的时间复杂度为 O(2n)。 当然,如果有多个字母对算法的运行时间产生很大影响,就把它们都写进表达式。如对 m×n 的数组遍历 的时间复杂度可以写作 O(mn)。 
 
空间复杂度:一个算法主要占用的内存空间,也用大 O 表示。 在实际应用时,空间的占用是需要特别注意的问题。太大的数组经常是开不出来的,即使开出来了,遍历 的时间消耗也是惊人的。 

(2) 常用算法的时空复杂度 

1s 运算次数约为 5,000,000。也就是说,如果把 n 代入复杂度的表达式,得数接近或大于 5,000,000, 那么会有超时的危险。 常见的数量级大小:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!) 

数量级    能承受的大致规模            常见算法 

O(1)        任意                               直接输出结果 

O(logn)   任意                               二分查找、快速幂 

O(n)        以百万计(五六百万)    贪心算法、扫描和遍历 

O(nlogn) 以十万计(三四十万)    带有分治思想的算法,如二分法 

O(n2)      以千计数(两千)           枚举、动态规划 

O(n3)      不到两百                         动态规划 

O(2n)      24                                  搜索 

O(n!)       10                                  产生全排列 

O(nn)      8                                    暴力法破解密码

 O(1)叫常数时间;O(n)、O(n^2)、O(n^3)、O(n^4)……叫做多项式时间;O(2^n)、O(3^n)……叫做指数时间。

 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值