《数据结构与算法分析》马克艾伦维斯 C语言描述第二版 第24页
前提:若N=2的k次,则T(N)=N*(k+1)。那为什么T(N)=NlogN+N=O(NlogN)?
T(n)=2T(n/2)+n
=2(2T(n/2*2)+n)+n
=2(2(2T(n/2*2*2)+n)+n)+n
=2^3T(n/2^3)+3n
=...
=2^kT(n/2^k)+kn 现在设 n=2^k
=nT(1)+kn
=n(T(1)+k) T(1)是常数,可以忽略
=kn
=nlogn
因为i T(N)=N*(k+1)。
而N=2的k次方,那么k就等于logN,所以T(N) = N*(logN+1) = NlogN + N
对于时间复杂度来说,只考虑多项式的最高阶,因此 T(N)=NlogN+N=O(NlogN)