时间复杂度分析与常系数齐次线性递推

ducati

2024-03-06 14:54:11

Algo. & Theory

推出一个挺有意思的结论,随手记录一下。

T(n) 为算法在数据规模 = n 时的运算次数上界,满足

T(n) = \sum_{i = 1}^n f_i \ T(n - i)

特征方程为

x^n - \sum_{i = 0}^{n - 1} x^i f_{n-i} = 0

设有 n两两互异的复根 x_1,x_2,\cdots,x_n,则 \exists A_1, A_2, \cdots, A_n 满足

T(n) = \sum_{i = 1}^n x_i^n A_i

根据 |x_i^n| = |x_i|^n,可得 x_i^n 的实部不超过 |x_i|^n

\alpha = \max_{1 \le i \le n} \{|x_i|\}

T(n) = O(\alpha^n)

更进一步,若存在重根,仍有

T(n) = O(\alpha^n \text{poly}(n))

例题:求 T(n) = T(n - 1) + T(n - 4) 的级别。

解法:方程的四个解为 x_1 \approx -0.724492x_2 \approx -0.248126 - 1.03398 \mathrm{i}x_3 \approx -0.248126 + 1.03398 \mathrm{i}x_4 \approx 1.22074,无重根,且 T(n) = O(1.22074^n)