算法分析数学基础

相对增长率

    我们将两个函数的相对增长速度称为相对增长率,从数学角度上来说其实就是一阶导数,看谁的增长速度更快,比如 f ( x ) = x 2 f(x)=x^2 f(x)=x2的增长速度比 g ( x ) = x g(x)=x g(x)=x要更快。
    在算法分析中:

  • 我们将 f ( x ) f(x) f(x)的增长率大于或等于 g ( x ) g(x) g(x)的增长率记为 g ( x ) = O ( f ( x ) ) g(x)=O(f(x)) g(x)=O(f(x)),也叫大O标记法。
  • 反之,我们将 f ( x ) f(x) f(x)的增长率小于或等于 g ( x ) g(x) g(x)的增长率记为 g ( x ) = Ω ( f ( x ) ) g(x)=Ω(f(x)) g(x)=Ω(f(x))
  • f ( x ) f(x) f(x)的增长率等于 g ( x ) 的 增 长 率 g(x)的增长率 g(x)记为 g ( x ) = Θ ( f ( x ) ) g(x)=Θ(f(x)) g(x)=Θ(f(x))
  • 另外还有一个 g ( x ) = o ( f ( x ) ) g(x)=o(f(x)) g(x)=o(f(x)),不同于 O O O的大于等于,小 o o o表示 f ( x ) f(x) f(x)的增长率大于 g ( x ) g(x) g(x)

    基于上面的定义,有几点推论:

  • 如果 T 1 ( N ) = O ( f 1 ( N ) ) T_1(N)=O(f_1(N)) T1(N)=O(f1(N)) T 2 ( N ) = O ( f 2 ( N ) ) T_2(N)=O(f_2(N)) T2(N)=O(f2(N)),则有 T 1 ( N ) + T 2 ( N ) = O ( f 1 ( N ) + f 2 ( N ) ) T_1(N)+T_2(N)=O(f_1(N)+f_2(N)) T1(N)+T2(N)=O(f1(N)+f2(N))

  • 如果 T 1 ( N ) = O ( f 1 ( N ) ) T_1(N)=O(f_1(N)) T1(N)=O(f1(N)) T 2 ( N ) = O ( f 2 ( N ) ) T_2(N)=O(f_2(N)) T2(N)=O(f2(N)),则有 T 1 ( N ) ⋅ T 2 ( N ) = O ( f 1 ( N ) ⋅ f 2 ( N ) ) T_1(N) \cdot T_2(N)=O(f_1(N) \cdot f_2(N)) T1(N)T2(N)=O(f1(N)f2(N))

  • T ( N ) T(N) T(N)为k次多项式, T ( N ) = Θ ( N k ) T(N)=Θ(N^k) T(N)=Θ(Nk),即低次项和常数可以忽略

  • 对于任意尝试k, l o g k N = O ( N ) log^kN=O(N) logkN=O(N),对于对数,无论是几次幂,他的增长率也没有N的增长率大,说明对数函数的增长率极其慢。

相对增长率与极限的关系

  • lim ⁡ x → ∞ T ( N ) f ( N ) = 0 \displaystyle \lim_{x \to \infty}{\frac{T(N)}{f(N)}}=0 xlimf(N)T(N)=0,则 T ( N ) = o ( f ( N ) ) T(N)=o(f(N)) T(N)=o(f(N))

  • lim ⁡ x → ∞ T ( N ) f ( N ) = c \displaystyle \lim_{x \to \infty}{\frac{T(N)}{f(N)}}=c xlimf(N)T(N)=c,c为常数,则 T ( N ) = Θ ( f ( N ) ) T(N)=Θ(f(N)) T(N)=Θ(f(N))

  • lim ⁡ x → ∞ T ( N ) f ( N ) = ∞ \displaystyle \lim_{x \to \infty}{\frac{T(N)}{f(N)}}= \infty xlimf(N)T(N)=,c为常数,则 f ( N ) = o ( T ( N ) ) f(N)=o(T(N)) f(N)=o(T(N))

程序的增长率函数

    对于不同的程序逻辑都会对应不同增长率,所以不同的算法在大数据下执行效率千差万别,对于一般的顺序执行或者判断,他的增长率为 O ( 1 ) O(1) O(1),你不管传入多大的入参,执行起来是无差别的,而对于循环语句则意味着 O ( N ) O(N) O(N),而循环中嵌入了k重循环,则增长率是 O ( N k ) O(N^k) O(Nk)。而一些折半或者二分算法他的增长率就是 O ( l o g N ) O(logN) O(logN)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值