主定理的证明及应用举例

时间:2014-04-30 22:44:38   收藏:0   阅读:435

主定理

主定理最早出现在《算法导论》中,提供了分治方法带来的递归表达式的渐近复杂度分析。
规模为n的问题通过分治,得到a个规模为n/b的问题,每次递归带来的额外计算为c(n^d)
T(n) <= aT(n/b)+c(n^d)
那么就可以得到问题的复杂度为:

证明方法

本来使用主定理是可以免去画递归树的,但为了证明主定理,还是需要画树。

mamicode.com,码迷

可见,每次递归把问题分为a个规模为n/b的子问题。从根节点开始,共有logb(n)+1层,叶子节点数为a^(logb(n))。那么,第j层共有a^j个子问题,每个问题规模为n/b^j,每个子问题运算量为c*(n/b^j)^d需要完成的计算量为:

mamicode.com,码迷

求和得到整个问题的运算量:

mamicode.com,码迷

那么,根据a与b^d的关系,很容易得到主定理。

应用

二分搜索

快速排序

归并排序

基数排序(Radix sort)

快速傅里叶变换:FFT

Karatsuba快速乘法

转载请注明作者:Focustc,博客地址为http://blog.csdn.net/caozhk,原文链接为点击打开

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!