时间复杂度&Big-O
- O(f(n)): 上界
- Ω(f(n)): 下界
- Θ(f(n)): 确界
- ∃c1,c2>0,∀n>>2,c1⋅f(n)≥T(n)≥c2⋅f(n)
辨析
O(1)
一定不含循环?不一定
for (int i = 0; i < n; i += n/2025 + 1); // 常数
一定不含分支?不一定
if (false) goto UNREACHABLE;
一定不含递归?不一定
if (false) neverCalled();
O(logcn)
常底数和常数次幂的取值均不影响。
O(2n)
SubsetSum 问题:O(2n) 复杂度的算法已经是最优。
级数
k=1∑nk=1+2+⋯+n=O(n2)
k=1∑nk2=O(n3)
k=1∑nkd≈∫0nxddx=O(nd+1)
k=0∑nak=O(an)
k=2∑n(k−1)k1=1−n1=O(1)
k is a perfect power∑k−11=31+71+⋯=1=O(1)
i=1∑∞(1−λ)⋅kλk−1=1−λ1=O(1)
k=1∑nk1=lnn+γ+O(2n1)=Θ(logn)
k=1∑nlnk=lnk=1∏nk=lnn!=Θ(nlogn)
i=0∑nlog2i=O(nlogn)
k=1∑nk⋅logk=O(n2logn)
k=1∑nk⋅2k=O(n⋅2n)