preNoip|CSP-S1中时间复杂度的计算

特征方程法解一阶线性代数递推式

数列{ a n a_n an}满足 a 1 = b , a n + 1 = c a n + d a_1=b,a_{n+1}=ca_n+d a1=b,an+1=can+d,求该数列的通项公式

针对递推关系式作出一个特征方程 x = c x + d x=cx+d x=cx+d

定理:设上述递推关系式的特征方程根为 x 0 x_0 x0

  1. x 0 = a 1 x_0=a_1 x0=a1时, a n = a 1 a_n=a_1 an=a1
  2. x 0 ≠ a 1 x_0\neq a_1 x0=a1时, a n = b n + x 0 , b n = b 1 c n − 1 , b 1 = a 1 − x 0 a_n=b_n+x_0,b_n=b_1c^{n-1},b_1=a_1-x_0 an=bn+x0,bn=b1cn1,b1=a1x0

证明2:
∵ c ≠ 0 , 1 \because c\neq 0,1 c=0,1
x 0 = d 1 − c x_0=\frac{d}{1-c} x0=1cd
作换元 b n = a n − x 0 b_n=a_n-x_0 bn=anx0
∴ b n + 1 = a n + 1 − x 0 = c a n + d − d 1 − c = c a n − c d 1 − c = c ( a n − x 0 ) = c b n \therefore b_{n+1}=a_{n+1}-x_0=ca_n+d-\frac{d}{1-c}=ca_n-\frac{cd}{1-c}=c(a_n-x_0)=cb_n bn+1=an+1x0=can+d1cd=can1ccd=c(anx0)=cbn

特征方程法解二阶线性代数递推式

有数列{ a n a_n an},递推公式为 a n + 2 = p a n + 1 + q a n , a 1 = α , a 2 = β a_{n+2}=pa_{n+1}+qa_n,a_1=\alpha,a_2=\beta an+2=pan+1+qan,a1=α,a2=β

特征方程为 x 2 − p x − q = 0 x^2-px-q=0 x2pxq=0

  1. x 1 ≠ x 2 x_1\neq x_2 x1=x2时, a n = A x 1 n − 1 + B x 2 n − 1 a_n=Ax_1^{n-1}+Bx_2^{n-1} an=Ax1n1+Bx2n1
  2. x 1 = x 2 x_1=x_2 x1=x2时, a n = ( A + B ) x 1 n − 1 a_n=(A+B)x_1^{n-1} an=(A+B)x1n1

(以上两式中的 A , B A,B A,B a 1 = α , a 2 = β a_1=\alpha,a_2=\beta a1=α,a2=β决定)
当然解高阶线性代数都可以用迭代法
斐波那契数列 f ( n + 2 ) = f ( n + 1 ) + f ( n ) f(n+2)=f(n+1)+f(n) f(n+2)=f(n+1)+f(n)的特征方程为 x 2 − x − 1 = 0 x^2-x-1=0 x2x1=0,得 x = 1 ± 5 2 x=\frac{1\pm\sqrt{5}}{2} x=21±5

真题

t1

T ( n ) = 2 T ( n 2 ) + 2 n T(n)=2T(\frac{n}{2})+2n T(n)=2T(2n)+2n
= 2 ( 2 T ( n 4 ) + 2 × n 2 ) + 2 n =2(2T(\frac{n}{4})+2\times\frac{n}{2})+2n =2(2T(4n)+2×2n)+2n
= 4 T ( n 4 ) + 2 n + 2 n =4T(\frac{n}{4})+2n+2n =4T(4n)+2n+2n
= 4 ( 2 T ( n 8 ) + 2 × n 4 ) + 2 n + 2 n =4(2T(\frac{n}{8})+2\times \frac{n}{4})+2n+2n =4(2T(8n)+2×4n)+2n+2n
= 8 T ( n 8 ) + 2 n + 2 n + 2 n =8T(\frac{n}{8})+2n+2n+2n =8T(8n)+2n+2n+2n
猜想 T ( n ) = 2 k T ( n 2 k ) + 2 n × k T(n)=2^kT(\frac{n}{2^k})+2n\times k T(n)=2kT(2kn)+2n×k
n 2 k = 1 \frac{n}{2^k}=1 2kn=1时, n = 2 k , k = l o g 2 n n=2^k,k=log_2n n=2k,k=log2n
∴ T ( n ) = 2 k T ( 1 ) + 2 n × k = a n + 2 n l o g 2 n \therefore T(n)=2^kT(1)+2n\times k=an+2nlog_2n T(n)=2kT(1)+2n×k=an+2nlog2n
故选B

t2

这个的迭代就很简单了,选D

t3

同理, T ( n ) = 2 k T ( n 4 k ) + k n T(n)=2^kT(\frac{n}{4^k})+k\sqrt{n} T(n)=2kT(4kn)+kn
n = 4 k , 2 k = n , k = l o g 2 n 2 n=4^k,2^k=\sqrt{n},k=\frac{log_2n}{2} n=4k,2k=n ,k=2log2n
T ( n ) = n + n 2 l o g 2 n T(n)=\sqrt{n}+\frac{\sqrt{n}}{2}log_2\sqrt n T(n)=n +2n log2n
显然答案为C

t4

特征方程为 2 x 2 − x − 1 = 0 2x^2-x-1=0 2x2x1=0
x 1 = − 1 2 , x 2 = 1 x_1=-\frac{1}{2},x_2=1 x1=21,x2=1
a 1 = A + B = 0 , a 2 = A x 1 + B x 2 = − 1 2 A + B = 1 a_1=A+B=0,a_2=Ax_1+Bx_2=-\frac{1}{2}A+B=1 a1=A+B=0,a2=Ax1+Bx2=21A+B=1
解得 A = − 2 3 , B = 2 3 A=-\frac{2}{3},B=\frac{2}{3} A=32,B=32
a n = − 2 3 × ( − 1 2 ) n − 1 + 2 3 × 1 n − 1 a_n=-\frac{2}{3}\times(-\frac{1}{2})^{n-1}+\frac{2}{3}\times1^{n-1} an=32×(21)n1+32×1n1
lim ⁡ n → + ∞ a n = 2 3 {\lim_{n \to +\infty}}a_n=\frac{2}{3} n+liman=32
选择B

下面是一道…神题…?其实也没这么难
t5

一样的迭代
T ( n ) = 2 T ( n 2 ) + n l o g 2 n T(n)=2T(\frac{n}{2})+nlog_2n T(n)=2T(2n)+nlog2n
T ( n 2 ) = 2 T ( n 4 ) + n 2 ( l o g 2 n − 1 ) T(\frac{n}{2})=2T(\frac{n}{4})+\frac{n}{2}(log_2n-1) T(2n)=2T(4n)+2n(log2n1)
T ( n 4 ) = 2 T ( n 8 ) + n 4 ( l o g 2 n − 2 ) T(\frac{n}{4})=2T(\frac{n}{8})+\frac{n}{4}(log_2n-2) T(4n)=2T(8n)+4n(log2n2)
T ( n ) = 2 ( 2 T ( n 4 ) + n 2 ( l o g 2 n − 1 ) ) + n l o g 2 n T(n)=2(2T(\frac{n}{4})+\frac{n}{2}(log_2n-1))+nlog_2n T(n)=2(2T(4n)+2n(log2n1))+nlog2n
= 4 T ( n 4 ) + n ( l o g 2 n − 1 ) + n l o g 2 n =4T(\frac{n}{4})+n(log_2n-1)+nlog_2n =4T(4n)+n(log2n1)+nlog2n
= 4 ( 2 T ( n 8 ) + n 4 ( l o g 2 n − 2 ) ) + n ( l o g 2 n − 1 ) + n l o g 2 n =4(2T(\frac{n}{8})+\frac{n}{4}(log_2n-2))+n(log_2n-1)+nlog_2n =4(2T(8n)+4n(log2n2))+n(log2n1)+nlog2n
= 8 T ( n 8 ) + n ( l o g 2 n − 2 ) + n ( l o g 2 n − 1 ) + n l o g 2 n =8T(\frac{n}{8})+n(log_2n-2)+n(log_2n-1)+nlog_2n =8T(8n)+n(log2n2)+n(log2n1)+nlog2n
= 8 T ( n 8 ) + 3 n l o g 2 n − 2 n − n =8T(\frac{n}{8})+3nlog_2n-2n-n =8T(8n)+3nlog2n2nn
= 2 k T ( n 2 k ) + k n l o g 2 n − k ( k − 1 ) 2 n =2^kT(\frac{n}{2^k})+knlog_2n-\frac{k(k-1)}{2}n =2kT(2kn)+knlog2n2k(k1)n
n 2 k = 1 , n = 2 k , k = l o g 2 n \frac{n}{2^k}=1,n=2^k,k=log_2n 2kn=1,n=2k,k=log2n
T ( n ) = n + n l o g 2 n − 1 2 l o g 2 n T(n)=n+nlog^2n-\frac{1}{2}log^2n T(n)=n+nlog2n21log2n
选C


更新:时隔一年,NOIp死了,CSP-J/S活了,LZ也来更一次博客以示尊重
(下面假设T(1)=1)
ex1
根据迭代的思想 T ( n ) = n log ⁡ 2 2 n + 2.5 × ( 2 n / 5 ) log ⁡ 2 2 n + 2. 5 2 × ( 2 / 5 ) 2 log ⁡ 2 2 n + . . . T(n)=n\log_2^2n+2.5\times (2n/5)\log_2^2n+2.5^2\times (2/5)^2\log_2^2n+... T(n)=nlog22n+2.5×(2n/5)log22n+2.52×(2/5)2log22n+...
= n log ⁡ 2 2 n + n log ⁡ 2 2 n + n log ⁡ 2 2 n + . . . ( log ⁡ 2 n 个 ) =n\log_2^2n+n\log_2^2n+n\log_2^2n+...(\log_2n个) =nlog22n+nlog22n+nlog22n+...(log2n)
= n log ⁡ 2 3 n =n\log_2^3n =nlog23n
这里可以发现 T ( n ) T(n) T(n)最终比 n log ⁡ 2 2 n n\log_2^2n nlog22n多了一个 log ⁡ \log log
为了对比,我们再看一道题
ex2
发现与上面 2.5 × 2 n / 5 = n 2.5\times 2n/5=n 2.5×2n/5=n不同的是 3 n / 4 < n 3n/4<n 3n/4<n了,会有什么不同呢?
依旧迭代 T ( n ) = n log ⁡ 2 n + ( 3 n / 4 ) log ⁡ 2 n + ( 3 4 ) 2 n log ⁡ 2 n + . . . T(n)=n\log_2n+(3n/4)\log_2n+(\frac{3}{4})^2n\log_2n+... T(n)=nlog2n+(3n/4)log2n+(43)2nlog2n+...
= ( 1 + 3 4 + ( 3 4 ) 2 + . . . ) n log ⁡ 2 n =(1+\frac{3}{4}+(\frac{3}{4})^2+...)n\log_2n =(1+43+(43)2+...)nlog2n
根据收敛原则 T ( n ) = 1 1 − 3 4 × n log ⁡ 2 n = 4 n log ⁡ 2 n T(n)=\frac{1}{1-\frac{3}{4}}\times n\log_2n=4n\log_2n T(n)=1431×nlog2n=4nlog2n
发现4是个没用的常数
所以 T ( n ) = n log ⁡ 2 n T(n)=n\log_2n T(n)=nlog2n
为什么在这里我们就发现 T ( n ) T(n) T(n) n log ⁡ 2 n n\log_2n nlog2n是同阶的了呢

原因在于:

  • 在前一题中 2.5 × 2 5 = 1 2.5\times \frac{2}{5}=1 2.5×52=1是不收敛的,这样的东西一共有 log ⁡ 2 \log_2 log2项,所以多了一个 log ⁡ \log log
  • 而后一题中 3 / 4 < 1 3/4<1 3/4<1是收敛的,最终收敛于一个常数可以被省略,因此什么都没有多
  • 那么当 k / m > 1 k/m>1 k/m>1时, T ( n ) = ( 1 + k m + ( k m ) 2 + . . . + ( k m ) log ⁡ m n ) n log ⁡ 2 n T(n)=(1+\frac{k}{m}+(\frac{k}{m})^2+...+(\frac{k}{m})^{\log_mn})n\log_2n T(n)=(1+mk+(mk)2+...+(mk)logmn)nlog2n(假设给定的是 T ( n ) = k T ( n / m ) + n log ⁡ 2 n T(n)=kT(n/m)+n\log_2n T(n)=kT(n/m)+nlog2n
    = ( 1 − ( k m ) log ⁡ m n 1 − k m ) n log ⁡ 2 n = ( k log ⁡ m n n ) × n log ⁡ 2 n =(\frac{1-(\frac{k}{m})^{\log_mn}}{1-\frac{k}{m}})n\log_2n=(\frac{k^{\log_mn}}{n})\times n\log_2n =(1mk1(mk)logmn)nlog2n=(nklogmn)×nlog2n
    = k log ⁡ m n log ⁡ 2 n =k^{\log_mn}\log_2n =klogmnlog2n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值