算法复杂性和渐进复杂意义下的记号 O、Ω、θ

本文详细介绍了算法复杂性,包括时间复杂性和空间复杂性的影响因素,如问题规模、输入序列和算法本身。通过举例说明了不同查找算法的时间复杂度,并探讨了如何表示和衡量算法复杂度。此外,还阐述了渐进复杂性态的概念,以及O、Ω、θ符号在表示算法复杂性上的应用。通过对具体算法的分析,展示了如何使用这些符号来简化和比较算法的时间复杂度。

算法复杂性

算法复杂性 === 算法运行时所需要的计算机资源的量

通常指的是空间、时间资源

影响时间复杂性的因素

影响时间复杂性的因素有: 问题规模nnn、输入序列III、算法本身AAA

  • 问题规模:如果相同的序列和算法的前提下,在10个数字中找一个数字和在10万个数字中找一个数字,两者消耗的时间不一样。
  • 输入序列:如果相同的规模和算法的前提下,第一个就是要找的数字和最后一个是要找的数字,两者消耗的时间不一样。

  • 算法本身:如果相同的序列和规模的前提下,算法效率高的和算法效率低的,两者消耗的时间不一样。
    如:
    顺序查找:最少111次 ; 最多nnn
    折半查找:最少111次 ; 最多lognlog nlogn

影响空间复杂性的因素

一般请情况下,在算法使用的数据结构时需要借助大量的辅助空间来帮助完成算法。所以辅助变量影响空间复杂性。如:

  • 顺序查找:借助1个循环变量完成。
  • 冒泡排序:借助2个循环变量,1个交换的临时变量。

复杂度的表示形式有:

  • O(1)O(1)O(1) O(logn)O(logn)O(logn)
  • O(n)O(n)O(n) O(nlogn)O(nlogn)O(nlogn)
  • O(n2)O(n^2)O(n2) O(2n)O(2^n)O(2n)
  • O(nn)O(n^n)O(nn) O(n!)O(n!)O(n)

算法的渐进复杂性态的引进

设算法的运行时间为T(n)T(n)T(n) ,如果存在T∗(n)T^*(n)T(n)nnn 趋于无穷大使得

lim⁡n→∞T(n)−T∗(n)T(n)=0 \lim_{n→∞}\cfrac{T(n)-T^*(n)}{T(n)}=0 nlimT(n)T(n)T(n)=0

就称T∗(n)T^*(n)T(n)为算法的渐进性态 或 渐进时间复杂性。

nnn 很大很大时候T∗(n)T^*(n)T(n)就可以代替该算法的时间复杂度,如:
假设算法A的运行的时间表达式T1(n)T_1(n)T1(n)为:
T1(n)=30n4+20n3+40n2+46n+100T_1(n)= 30 n{^4} + 20 n{^3} + 40n{^2} + 46 n+ 100T1(n)=30n4+20n3+40n2+46n+100
令:T1∗(n)=30n4T_1{^*}(n)= 30 n{^4}T1(n)=30n4

则:
lim⁡n→∞T1(n)−T1∗(n)T1(n)=lim⁡n→∞20n3+40n2+46n+10030n4+20n3+40n2+46n+100=0 \lim_{n→∞}\cfrac{T_1(n)-T_1{^*}(n)}{T_1(n)}= \lim_{n→∞}\cfrac{20 n{^3} + 40n{^2} + 46 n+ 100}{30 n{^4} + 20 n{^3} + 40n{^2} + 46 n+ 100}=0 nlimT1(n)T1(n)T1(n)=nlim30n4+20n3+40n2+46n+10020n3+40n2+46n+100=0

这样用T1∗(n){T_1}{^*}(n)T1(n)代替T1(n)T_1(n)T1(n)简化了时间表达式,便于衡量算法的时间复杂度。

在问题的规模nnn很大很大时,T1∗(n)=30n4≈n4{T_1}{^*}(n)=30{n^4}≈{n^4}T1(n)=30n4n4

渐进意义下的记号 O、Ω、θO、Ω、θOΩθ

n,f(n)≥0,g(n)≥0n , f(n)≥0,g(n)≥0n,f(n)0,g(n)0

渐进上界记号 OOO

若存在两个正常数 cccn0n_0n0 ,使得 n≥n0n≥n_0nn0,都有T(n)≤cf(n)T(n)≤cf(n)T(n)cf(n),则称T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n)),即f(n)f(n)f(n)T(n)T(n)T(n)的上界。

例子:
OOO表示T(n)=10n+4T(n)=10n+4T(n)=10n+4的阶。

  • 存在c=12,n0=12c=12 , n_0=12c=12,n0=12,使得 n≥n0n≥n_0nn0 都有:
  • T(n)=10n+4≤12nT(n) = 10n+4≤12nT(n)=10n+412n成立
  • f(n)=nf(n) = nf(n)=n,可得T(n)≤cf(n)=12nT(n)≤cf(n)=12nT(n)cf(n)=12n
  • T(n)=O(f(n))=O(n)T(n) = O(f(n))= O(n)T(n)=O(f(n))=O(n)

例子:
OOO表示T(n)=n2+nT(n)=n{^2}+nT(n)=n2+n的阶。

  • 存在c=2,n0=1c=2 , n_0=1c=2,n0=1,使得 n≥n0n≥n_0nn0 都有:
  • T(n)=n2+n≤2n2T(n) = n{^2}+n≤2n{^2}T(n)=n2+n2n2成立
  • f(n)=n2f(n) = n{^2}f(n)=n2,可得T(n)≤cf(n)=2n2T(n)≤cf(n)=2n{^2}T(n)cf(n)=2n2
  • T(n)=O(f(n))=O(n2)T(n) = O(f(n))= O(n{^2})T(n)=O(f(n))=O(n2)

存在c、n0c 、 n_0cn0即是说只要找到就行,数值不唯一。

渐进下界记号 ΩΩΩ

若存在两个正常数 cccn0n_0n0 ,使得 n≥n0n≥n_0nn0,都有T(n)≥cf(n)T(n)≥cf(n)T(n)cf(n),则称T(n)=Ω(f(n))T(n)=Ω(f(n))T(n)=Ω(f(n)),即f(n)f(n)f(n)T(n)T(n)T(n)的下界。与OOO相对

例子:
ΩΩΩ表示T(n)=30n4+20n3+40n2+46n+100T(n)= 30 n{^4} + 20 n{^3} + 40n{^2} + 46n+ 100T(n)=30n4+20n3+40n2+46n+100

  • 存在c=30,n0=1c=30 ,n_0=1c=30n0=1,使得n≥n0n≥n_0nn0都有T(n)≥30n4T(n)≥30n^4T(n)30n4
  • 构造f(n)=n4f(n)=n{^4}f(n)=n4,可得T(n)≥cf(n)=30n4T(n)≥cf(n)=30n^4T(n)cf(n)=30n4,
  • T(n)=Ω(f(n))=Ω(n4)T(n)=Ω(f(n))=Ω(n^4)T(n)=Ω(f(n))=Ω(n4)

渐进精确界记号 θθθ

若存在3个正常数 c1、c2c_1、c_2c1c2n0n_0n0 ,使得 n≥n0n≥n_0nn0,都有c2f(n)≤T(n)≤c1f(n)c_2f(n)≤T(n)≤c_1f(n)c2f(n)T(n)c1f(n),则称T(n)=θ(f(n))T(n)=θ(f(n))T(n)=θ(f(n))

例子:
θθθ表示T(n)=20n2+8n+10T(n)=20n^2+8n+10T(n)=20n2+8n+10的阶

①① 求得上界:
存在c1=29,n0=10c_1=29,n_0=10c1=29n0=10,使得n≥n0n≥n_0nn0都有:
T(n)≤20n2+8n+n=20n2+9n≤20n2+9n2=29n2T(n)≤20n^2+8n+n=20n^2+9n≤20n^2+9n^2=29n^2T(n)20n2+8n+n=20n2+9n20n2+9n2=29n2
构造f(n)=n2f(n)=n^2f(n)=n2,可得T(n)≤c1f(n)=29n2T(n)≤c_1f(n)=29n^2T(n)c1f(n)=29n2,即T(n)=O(f(n))=O(n2)T(n)=O(f(n))=O(n^2)T(n)=O(f(n))=O(n2);
②② 求得下界:
存在c2=20,n0=10c_2=20,n_0=10c2=20n0=10,使得n≥n0n≥n_0nn0都有T(n)≥20n2T(n)≥20n^2T(n)20n2
构造f(n)=n2f(n)=n^2f(n)=n2,可得T(n)≥c2f(n)T(n)≥c_2f(n)T(n)c2f(n)T(n)=Ω(f(n))=Ω(n2)T(n)=Ω(f(n))=Ω(n^2)T(n)=Ω(f(n))=Ω(n2)
③③ 求得精确界:
存在c1=29、c2=20c_1=29、c_2=20c1=29c2=20n0=10n_0=10n0=10,使得你≥n0你≥n_0n0都有:
20n2≤T(n)≤29n220n^2≤T(n)≤29n^220n2T(n)29n2 可得T(n)=θ(f(n))=θ(n2)T(n)=θ(f(n))=θ(n^2)T(n)=θ(f(n))=θ(n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lazy_Goat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值