函数渐近界与算法性能分析

渐近界与渐进函数简介

函数渐近界实际上算是一个集合,用来表示函数的边界或范围的集合

可以按大小/量级区分为:上界(高阶),平均界(同阶),下界(低阶)

image-2022609214958

再根据是否渐进区分(有没有可能相等)

一般来讲,用于表示函数渐近界的渐进符号有五个:

  • 平均界(average bound)/渐进确界(asymptotically tight bound):θ
  • 渐进上界(upper bound):O
  • 渐进下界(lower bound):Ω
  • 非渐进紧确上界:o
  • 非渐进紧确下界:ω

💬注释

o ( g ( x ) ) o(g(x)) o(g(x))是一个集合, 所以实际上 f ( x ) ∈ o ( g ( x ) ) f(x) \in o(g(x)) f(x)o(g(x))

通常我们记作 f ( x ) = o ( g ( x ) ) f(x)=o(g(x)) f(x)=o(g(x)) 以表达相同的概念, 其它几个记号同理.

可以理解为:

  • f ( x ) = O ( g ( x ) ) ⟹ f ( x ) ≤ g ( x ) f(x)=O(g(x)) \Longrightarrow f(x) \leq g(x) f(x)=O(g(x))f(x)g(x)
  • f ( x ) = o ( g ( x ) ) ⟹ f ( x ) < g ( x ) f(x)=o(g(x)) \Longrightarrow f(x) < g(x) f(x)=o(g(x))f(x)<g(x)
  • f ( x ) = Ω ( g ( x ) ) ⟹ f ( x ) ≥ g ( x ) f(x)=\Omega(g(x)) \Longrightarrow f(x) \geq g(x) f(x)=Ω(g(x))f(x)g(x)
  • f ( x ) = ω ( g ( x ) ) ⟹ f ( x ) > g ( x ) f(x)=\omega(g(x)) \Longrightarrow f(x) > g(x) f(x)=ω(g(x))f(x)>g(x)
  • f ( x ) = θ ( g ( x ) ) ⟹ f ( x ) ≈ g ( x ) f(x)=\theta(g(x)) \Longrightarrow f(x) \approx g(x) f(x)=θ(g(x))f(x)g(x)

高等数学中的例子

举一个高等数学中的例子:

α ( x ) \alpha(x) α(x) β ( x ) \beta(x) β(x) 的高阶无穷小,也就是 lim ⁡ α ( x ) β ( x ) = 0 \displaystyle{\lim\limits{\frac{\alpha(x)}{\beta(x)}}=0} limβ(x)α(x)=0

那么记为: α ( x ) = o ( β ( x ) ) \alpha(x)=o(\beta(x)) α(x)=o(β(x)),可以理解为 β ( x ) \beta(x) β(x) α ( x ) \alpha(x) α(x) 的非渐进紧确上界

函数阶的例子

再以函数阶举例:

image-2022609215309

image-20221129194855799

任取图上两个函数 a = f ( n ) a=f(n) a=f(n) b = g ( n ) b=g(n) b=g(n) ,只要 a a a b b b 的左边,那都可以说:

  • a = O ( b ) a=O(b) a=O(b) a = o ( b ) a=o(b) a=o(b)
  • b = Ω ( a ) b=\Omega(a) b=Ω(a) b = ω ( a ) b=\omega(a) b=ω(a)

运用于算法性能分析

渐近界的概念经常被用于算法性能分析中,当参数 n n n 趋于无穷的时候,各个算法(函数)孰优孰劣一看便知

对于两个算法的成本函数(时间、空间等) f ( n ) f(n) f(n) g ( n ) g(n) g(n),谁更低阶谁性能更优

  • lim ⁡ n → ∞ f ( n ) g ( n ) = c \lim\limits_{n\to\infty}\frac{f(n)}{g(n)}=c nlimg(n)f(n)=c,则 f ( n ) = θ ( g ( n ) ) f(n)=\theta(g(n)) f(n)=θ(g(n)),二者性能相当
  • lim ⁡ n → ∞ f ( n ) g ( n ) = 0 \lim\limits_{n\to\infty}\frac{f(n)}{g(n)}=0 nlimg(n)f(n)=0,则 f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n)) f ( n ) f(n) f(n) 算法更优
  • lim ⁡ n → ∞ f ( n ) g ( n ) = ∞ \lim\limits_{n\to\infty}\frac{f(n)}{g(n)}=\infty nlimg(n)f(n)=,则 f ( n ) = ω ( g ( n ) ) f(n)=\omega(g(n)) f(n)=ω(g(n)) g ( n ) g(n) g(n) 算法更优

比如对于冒泡排序算法而言

  • 冒泡排序伪代码
(输入N个待排序的数,其中的第i个数可用a[i]表示)
定义一个i,i的值从N到2递减,对于每个i:
         定义一个j,j的值从1到i-1递增,对于每个j:
                  如果a[j]>a[j+1]:
                          将a[j]和a[j+1]的值交换
  • 冒泡排序流程图

image-2022030123311002

  • 冒泡排序过程动图

image-2022030123311003

冒泡的平均时间复杂度是 O ( n 2 ) O(n^2) O(n2),这意味着排序 n n n 个数据,平均需要耗费 n 2 n^2 n2 量级的时间

其他算法的复杂度如下图

image-2022030123311004

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值