证明:nlog2n=nlogn(log2n)+1n\log_2n=n^{\log_n(\log_2n)+1}nlog2n=nlogn(log2n)+1
设 nlog2n=nan\log_2n=n^anlog2n=na。
两侧同时除以 nnn ,得:
na−1=log2n\ n^{a-1}=\log_2n na−1=log2n
a−1=logn(log2n)a-1=\log_n(\log_2n)a−1=logn(log2n)
a=logn(log2n)+1\ \ \ \ \ \ \ a=\log_n(\log_2n)+1 a=logn(log2n)+1
即上述。
T(n)T(n)T(n) 表示规模为 nnn 的问题的时间复杂度。
OOO ,小于等于。
Θ\ThetaΘ ,等于。
Ω\OmegaΩ ,大于等于。
ooo ,小于。
ω\omegaω ,大于。
应用:
对于一个规模为 nnn 的母问题分治为规模 nb\frac{n}{b}bn 的子问题,每次的额外时间复杂度是O(nd)O(n^d)O(nd)。
形式上,求形如 T(n)=aT(nb)+O(nd)T(n)=aT(\frac{n}{b})+O(n^d)T(n)=aT(bn)+O(nd) 的递归式的时间复杂度。
T(n)={O(nd)d>logbaO(ndlog2n)d=logbaO(nlogba)d 上述式子为了方便,统一采用 OOO 表示。事实上,对于 OOO 、 Θ\ThetaΘ 、 Ω\OmegaΩ 有不同的式子: forO:T(n)=aT(⌈nb⌉)+O(nd)for\ O:T(n)=aT(\lceil\frac{n}{b}\rceil)+O(n^d)for O:T(n)=aT(⌈bn⌉)+O(nd) forΘ:T(n)=aT(nb)+Θ(nd)for\ \Theta:T(n)=aT(\frac{n}{b})+\Theta(n^d)for Θ:T(n)=aT(bn)+Θ(nd) forΩ:T(n)=aT(⌊nb⌋)+Ω(nd)for\ \Omega:T(n)=aT(\lfloor\frac{n}{b}\rfloor)+\Omega(n^d)for Ω:T(n)=aT(⌊bn⌋)+Ω(nd)
下一篇:redis的三种集群模式