分治法主定理

主定理的证明
假设有递归式:
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

减治法主定理
