时间复杂度

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) \]

posted @ 2025-09-21 23:24  nick_zha  阅读(26)  评论(0)    收藏  举报