略标题党。
解决递归式时间复杂度题目的新方法
在初赛中,递归式时间复杂度计算通常以选择题的形式出现,所以可以不求解而是验证。
这里给出一种快速验证时间复杂度的不严谨简便方法,在主定理不适用的情况下也能使用,我和机房同学称之为 o 定理。
例 1(主定理不适用):
T(n)=4nT(n)+n
若要检验时间复杂度是不是
O(nlog2n),只需带入
T(n)=knlog2n,得等式右边为
4n×knlog2(n21)+n=4kn×41log2n+n=klog2n+n,最高次项为
klog2n,等式左边也是
klog2n,所以成立。
例 2(主定理适用):
T(n)=T(2n)+nlogn
带入
T(n)=knlogn,得等式右边为
2klog2n+nlogn=2k(logn+C)+nlogn=2k+2nlogn+2kC,等式左边为
knlogn,令
k=2,等式左右最高次项相同。
例 3(主定理不适用):
T(n)=3T(2n)+4T(4n)+n
带入
kn2,得等式右边为
3k×4n2+4k×16n2+n=43kn2+4kn2+n=kn2+n,左右最高次项相同。
初赛模拟的时候随便想的,如果错了轻喷