北邮2022-23学年第一学期算法设计与分析复习(一)——算法复杂性

  • 算法复杂性的概念
  • 用特征方程解递归方程的通解

一、算法复杂性的概念

1、衡量算法优劣的指标

在探讨算法复杂性之前了解一下如何评价一个算法的优劣。衡量算法优劣的指标主要如下:

  • 正确性
  • 健壮性
  • 可读性
  • 简单性
  • 复杂性(包括时间和空间)
    由于期末考试不涉及其他四个性质的考核,因此只对算法复杂性做说明。

2、算法的复杂性

算法复杂性=算法运行所需要的计算机资源的量。
C = F ( N , I , A ) C=F(N,I,A) C=F(N,I,A)
其中C表示算法复杂性,N表示算法要解决的问题规模,I表示算法输入,A表示应用的算法。
算法需要的时间资源为时间复杂性,空间(存储器)的量为空间复杂性。由于不在考点内,不再赘述。

3、渐进符号

该部分主要考察渐进符号以及相关定义的证明,

  • 定义1-O: 如果存在正整数 c c c n 0 n_0 n0使得对于任意正整数 n ≥ n 0 n\geq n_0 nn0都有 T ( n ) ≤ c f ( n ) T(n)\leq cf(n) T(n)cf(n), 则称 f ( n ) f(n) f(n) T ( n ) T(n) T(n)的渐进上界,记作 T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))
  • 定义2 Ω \Omega Ω 如果存在正整数 c c c n 0 n_0 n0使得对于任意正整数 n ≥ n 0 n\geq n_0 nn0都有 T ( n ) ≥ c f ( n ) T(n)\geq cf(n) T(n)cf(n), 则称 f ( n ) f(n) f(n) T ( n ) T(n) T(n)的渐进下界,记作 T ( n ) = Ω ( f ( n ) ) T(n)=\Omega(f(n)) T(n)=Ω(f(n))
  • 定义3 Θ \Theta Θ : T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n)) T ( n ) = Ω ( f ( n ) ) T(n)=\Omega(f(n)) T(n)=Ω(f(n))时记作 T ( n ) = Θ ( f ( n ) ) T(n)=\Theta(f(n)) T(n)=Θ(f(n)),通常情况下证明过程中选择的 c c c是相同的,但是根据实际情况一般会有不同的 n 0 n_0 n0
  • 定义4-o: 如果存在正整数 c c c n 0 n_0 n0使得对于任意正整数 n ≥ n 0 n\geq n_0 nn0都有 T ( n ) < c f ( n ) T(n)< cf(n) T(n)<cf(n), 则称 f ( n ) f(n) f(n) T ( n ) T(n) T(n)的渐进上界,记作 T ( n ) = o ( f ( n ) ) T(n)=o(f(n)) T(n)=o(f(n))
  • 定义5 ω \omega ω 如果存在正整数 c c c n 0 n_0 n0使得对于任意正整数 n ≥ n 0 n\geq n_0 nn0都有 T ( n ) > c f ( n ) T(n)> cf(n) T(n)>cf(n), 则称 f ( n ) f(n) f(n) T ( n ) T(n) T(n)的渐进下界,记作 T ( n ) = ω ( f ( n ) ) T(n)=\omega(f(n)) T(n)=ω(f(n))

例如2022-2023学年第一学期的考题中的第一题: 给出渐进上界 O O O的定义,并证明: 3 n 2 + 4 n = O ( n 2 ) 3n^{2} +4n=O(n^2) 3n2+4n=O(n2)


二、用特征方程解递归方程的通解

1、K阶程序书线性齐次递归方程

K阶程序书线性齐次递归方程是指给定 K + 1 K+1 K+1项之间的递推关系和前K项值的递归方程。形式如下,其中 b i b_i bi 为常数。
{ f ( n ) = a 1 f ( n − 1 ) + a 2 f ( n − 2 ) + . . . + a k f ( n − k ) f ( 0 ) = b 0 f ( 1 ) = b 1 . . . f ( k ) = b k \begin{cases} f(n)=a_1f(n-1) + a_2f(n-2) + ... + a_kf(n-k) \\ f(0)=b_0 \\ f(1)=b_1 \\ ...\\ f(k)=b_k \end{cases} f(n)=a1f(n1)+a2f(n2)+...+akf(nk)f(0)=b0f(1)=b1...f(k)=bk
在上式中用 x n x^n xn取代 f ( n ) f(n) f(n)并两边同时除以 x k x^k xk 即可得到一元 k k k 次方程
x k = a 1 x k − 1 + a 2 x k − 2 + . . . + a k x^k=a_1x^{k-1}+a_2x^{k-2} + ...+a_k xk=a1xk1+a2xk2+...+ak
对于上述一元 k k k 次方程,应有 k k k 个解 x 1 , x 2 , . . . , x k x_1, x_2, ..., x_k x1,x2,...,xk,对这些解作如下讨论:

  • 如果 k k k个解各不相同,即对于所有不相等的 i , j i,j i,j ,都有 x i ≠ x j x_i \neq x_j xi=xj,由此可得递推方程的通解如下。
    f ( n ) = c 1 x 1 n + c 2 x 2 n + . . . + c k x k n f(n)=c_1x_1^{n} + c_2x_2^n + ... + c_kx_k^n f(n)=c1x1n+c2x2n+...+ckxkn
  • 如果在这些解中存在 x i = x i + 1 = . . . = x i + j = . . . = x i + m ( 1 ≤ j ≤ m ) x_i=x_{i+1}=...=x_{i+j}=...=x_{i+m}(1\leq j\leq m) xi=xi+1=...=xi+j=...=xi+m(1jm),即有 m m m个解是相同的,则在上式中将等号右边的对应项替换成 c i + j n j x j n c_{i+j}n^jx_j^n ci+jnjxjn。将上式改写为
    f ( n ) = c 1 x 1 n + . . . + ( c i + c i + j n j + . . . + c i + m n m ) x n + . . . + c k x k n f(n)=c_1x_1^{n} + ... + (c_i + c_{i+j}n^j + ... + c_{i+m}n^m)x^n + ... + c_kx_k^n f(n)=c1x1n+...+(ci+ci+jnj+...+ci+mnm)xn+...+ckxkn
    如果有多组相同解则都按照同样的方法替换
    由待定系数将通式代入
    f ( 0 ) = b 0 f ( 1 ) = b 1 . . . f ( k ) = b k f(0)=b_0 \\ f(1)=b_1 \\ ...\\ f(k)=b_k f(0)=b0f(1)=b1...f(k)=bk
    解方程组即可得到所有系数。

2、k阶常系数线性非齐次递归方程组

k阶常系数线性非齐次递归方程组是指形式如下的方程组:
{ f ( n ) = a 1 f ( n − 1 ) + a 2 f ( n − 2 ) + . . . + a k f ( n − k ) + g ( n ) f ( 0 ) = b 0 f ( 1 ) = b 1 . . . f ( k ) = b k \begin{cases} f(n)=a_1f(n-1) + a_2f(n-2) + ... + a_kf(n-k)+g(n) \\ f(0)=b_0 \\ f(1)=b_1 \\ ...\\ f(k)=b_k \end{cases} f(n)=a1f(n1)+a2f(n2)+...+akf(nk)+g(n)f(0)=b0f(1)=b1...f(k)=bk
其通解形式为 f ( n ) = f ( n ) ‾ + f ∗ ( n ) f(n)=\overline{f(n)}+f^*(n) f(n)=f(n)+f(n),其中

  • f ( n ) ‾ \overline{f(n)} f(n) 为对应齐次递归方程的通解
  • f ∗ ( n ) f^*(n) f(n)为原非齐次递归方程的特解
    对于特解 f ∗ ( n ) f^*(n) f(n)分以下两种情况

(1)当g(n)为n的m次多项式

假如在方程中的g(n)形如 g ( n ) = b 1 n m + b 2 n m − 1 + . . . + b m n + b m + 1 g(n)=b_1n^m+b_2n^{m-1}+...+b_mn+b_{m+1} g(n)=b1nm+b2nm1+...+bmn+bm+1
此时特解也是n的m次多项式,形如
f ∗ ( n ) = A 1 n m + A 2 n m − 1 + . . . + A m n + A m + 1 f^*(n)=A_1n^m+A_2n^{m-1}+...+A_mn+A_{m+1} f(n)=A1nm+A2nm1+...+Amn+Am+1
其中 A i ( 1 ≤ i ≤ m + 1 ) A_i (1\leq i\leq m+1) Ai1im+1为待定的常系数。将此表达式代入原递归方程及初始条件即可解得特解。再将该特解与待定系数的通解合并并代入初始条件则可解得非齐次方程组的通解。

(2)当g(n)含有指数函数时

假如在方程中的g(n)形如 g ( n ) = ( b 1 n m + b 2 n m − 1 + . . . + b m n + b m + 1 ) a n g(n)=(b_1n^m+b_2n^{m-1}+...+b_mn+b_{m+1})a^n g(n)=b1nm+b2nm1+...+bmn+bm+1an
其中 a a a b i b_i bi都为常数,此时根据a的值分类讨论:

  • 假如a不是特征方程的重根,特解形式与 g ( n ) g(n) g(n)相同,即假设待定系数的表达式 f ∗ ( n ) = ( A 1 n m + A 2 n m − 1 + . . . + A m n + A m + 1 ) a n f^*(n)=(A_1n^m+A_2n^{m-1}+...+A_mn+A_{m+1})a^n f(n)=A1nm+A2nm1+...+Amn+Am+1an
  • 假如a是特征方程的 r r r 重特征根,特解形式如下 f ∗ ( n ) = ( A 1 n m + A 2 n m − 1 + . . . + A m n + A m + 1 ) n r a n f^*(n)=(A_1n^m+A_2n^{m-1}+...+A_mn+A_{m+1})n^ra^n f(n)=A1nm+A2nm1+...+Amn+Am+1nran

关于算法设计与分析第一章复杂度和特征方程求解就介绍到这里。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏洛特兰兰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值