分治算法主定理
2016-05-29 21:01
211 查看
分治算法主定理
分治算法通常遵守一种通用模式:即:在解决规模为n的问题时,总是先递归地求解a个规模为nb的子问题,然后在O(nd)时间内将子问题的解合并起来,其中a,b,d>0是一些特定的整数。分治算法的运行时间可以通过公式:T(n)=aT(⌈nb⌉)+O(nd)
得出。以下将给出这类一般递推式的一个封闭解,以便由于遇到新的问题时,无需重新求解。
主定理(还存在更一般的结果):如果对于常数a>0、b>1以及d≥0,有T(n)=aT(⌈nb⌉)+O(nd)成立,则:
T(n)=⎧⎩⎨⎪⎪O(nd)O(ndlog2n)O(nlogba)d>logbad=logbad<logba
譬如:归并排序的时间复杂度为T(n)=2T(⌈n2⌉)+O(n1)
那么a=2,b=2,d=1,则d=1=logba=1,由主定理可知T(n)=O(ndlog2n)=O(nlog2n)
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- 算法详解之分治法具体实现
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例