分治法主定理
主定理的证明
假设有递归式:
T(n)=aT(bn)+f(n)
证明:
T(n)=aT(n/b)+f(n)
=a[aT(n/b2)+f(n/b)]+f(n)
=a2T(n/b2)+f(n)+af(n/b)
=akT(n/bk)+j=0∑k−1ajf(n/bj)
=⋯ (不妨设n是b的幂)
=alogbnT(1)+j=0∑logbn−1ajf(n/bj)
由对数的换底公式:
alogbn=blogb(alogbn)=blogbalogbn=blogbnlogba=blogb(nlogba)=nlogba
所以原递归式的渐进复杂度为
O(nlogba)+j=0∑logbn−1ajf(n/bj)
简单起见,下面只考虑
f(n)=nk 的情形:
j=0∑logbn−1ajf(n/bj)
=j=0∑logbn−1aj(n/bj)k
=nkj=0∑logbn−1(a/bk)j
=⎩⎪⎨⎪⎧nk(1−a/bk1−(a/bk)logbn),nk(logbn−1),如果a=bk如果a=bk
=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧O(nk),O(nlogba),O(nklogbn)=O(nlogbalogbn),如果a<bk(k>logba)如果a>bk如果a=bk
综上所述,对
T(n)=aT(bn)+f(n) 的情形:
T(n)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧O(nk),O(nlogba),O(nklogbn)=O(nlogbalogbn),如果a<bk(k>logba)如果a>bk如果a=bk
减治法主定理