时间复杂度
I.适用范围:
\(T(1)=\mathcal{O}(1)\) \(\space \space \space \space \space n=1\)
\(T(n)=a*T(\frac{n}{b})+\mathcal{O}(n^d)\) \(\space \space \space \space \space \space n\geq1\)
II.内容:
当 \(d<\log_b a\) 时,递归时间复杂度为:\(\mathcal{O}(n^{\log_b a})\)
当 \(d=\log_ba\) 时,递归时间复杂度为:\(\mathcal{O}(n^d * \log n)\)
当 \(d>\log_b a\) 时,递归时间复杂度为:\(\mathcal{O}(n^d)\)
III.Akra-Bazzi
Akra–Bazzi 定理适用于递归公式
\[T(x)=\left\{\begin{matrix}
\Theta(1) & x<x_0\\
g(x)+\sum_{i=1}^{k}a_iT(b_ix+h_i(x)) & x\geq x_0
\end{matrix}\right.\]
其中:
- \(a_i>0,0<b_i<1\) 且它们是常数。
- \(|g'(x)|\in\mathcal{O}(x^c)\),其中 \(c\) 是常数,这里是大 O 记号,意思是 \(x^c\) 是 \(g(x)\) 的导数的绝对值的渐进上界,下同。
- \(|h_i(x)|\in\mathcal{O}\left(\frac{x}{\log^2x}\right)\),\(h_i\) 表示的是一个小扰动,举个用例,它可以用来处理取整的情况:\(\lfloor b_ix\rfloor=b_ix+(\lfloor b_ix\rfloor-b_ix)\),其中 \(\lfloor b_ix\rfloor-b_ix\) 很小,在 \(0\) 和 \(1\) 之间,\(h_i\) 就可以用来忽略取整函数,就是说,\(T(n)=n+T\left(\frac{1}{2}n\right)\) 和 \(T(n)=n+T\left(\lfloor\frac{1}{2}n\rfloor\right)\) 有相同的渐进表现。
- \(x_0\) 是常数。
求出 \(p\) 使得 \(\sum_{i=1}^{k}a_ib_i^p=1\),那么就有:
\[T(x)\in\Theta\left(x^p\left(1+\int_{1}^x\frac{g(u)}{u^{p+1}}du\right)\right)
\]

浙公网安备 33010602011771号