常见符号#
严格范围:Θ(⋅)(as tight as we can,tight bound),T(n)=Θ(f(n)) 意味着 T(n)=Ω(f(n)),T(n)=O(f(n)).
不大于(上界):O(⋅).
下界(不严谨):Ω(⋅),f(n)=Ω(g(n)) 表明,存在一个常数 c,存在一个 n0,使得对于所有 n>n0,有 f(n)>c×g(n). 所以虽说是下界,但不是数学上严格定义的下界,首先隐去了常数系数,其次要 n 足够大 (large enough)
上面的 Θ,O,Ω 严格来说是集合,上面的 = 可以解释为 ∈。
在 n 足够大, Θ,O,Ω 就是同级无穷大、上界(高级无穷大)、下界(低级无穷大)。应当注意,logbn∼log2n=logn for logbn=log2blog2n
简单结论#
T(n)=T(2n)+Θ(n)=Θ(nlogn)通用的递归法 T(n)=cT(bn)+f(n):
将 n 根据树状结构不断细分下去,每个节点(假设其值是k)都有自己的 f(k),一直到最后叶子的 f(1).
T(n)<f(n)+bf(n/b)+b2f(n/b2)+…<(1+b+b2+⋯+blogbn)O(f(n))<1−b1−bnO(f(n))<b−1bnO(f(n))注意,这个放缩放得太宽了。
Master定理
T(n)T(n)T(n)T(n)=aT(n/b)+O(nd)=a(aT(n/b2)+O((n/b)d))+O(nd)…=alogbn+i=0∑logbnaiO((n/bi)d)=nlogba+O(nd)i=0∑logbnbidai更详细的推导,在红色小本上。
结果是:
T(n)=⎩⎨⎧O(nd),d>logbaO(ndlogn),d=logbaO(nlogba),d<logba只用再证下界。递归成树出来的结果一般是 tight bound, 可以写成 Θ
调和级数:∑i=1ni1=O(logn) (将分子放缩为2的幂)。