分治法理论
2015-07-30 17:22
239 查看
分治算法将一个大的问题分成多个小问题,每个小问题都是大问题的组成部分,然后用点额外的处理就能得到最终答案。例如,归并排序就是将原问题分成两个次级的问题,每个次级排序问题数据是上一级问题的一半,最后使用额外O(n)的工作量进行合并。时间复杂度表达式如下:
T(n) = 2T(n/2) + O(n)
下面的理论可用于计算分治算法的时间花费。对于一个给定程序(或算法),首先找到问题的重现关系(时间复杂度表达式的递归关系)。如果递归关系是下面这种形式,我们可以直接给出问题的答案(对应的分治算法时间复杂度),而不需要再去计算。
如果递归关系是这样的形式:T(n) = aT(n/b) + θ(n k log p n),(其中 a >= 1, b>1, k>=0, p 是实数)那么:
[align=left]if a > bk, then T(n) = θ(nlogba)[/align]
[align=left]if a=bk[/align]
[align=left]if p > -1, then T(n) = θ(nlogba logp+1n)[/align]
if p = -1, then T(n) = θ(nlogba log(log n))
if p < -1, then T(n) = θ(nlogba)
if a < bk
if p >=0, then T(n) = θ(nk logpn)
if p < 0, then T(n) = O(nk)
T(n) = 2T(n/2) + O(n)
下面的理论可用于计算分治算法的时间花费。对于一个给定程序(或算法),首先找到问题的重现关系(时间复杂度表达式的递归关系)。如果递归关系是下面这种形式,我们可以直接给出问题的答案(对应的分治算法时间复杂度),而不需要再去计算。
如果递归关系是这样的形式:T(n) = aT(n/b) + θ(n k log p n),(其中 a >= 1, b>1, k>=0, p 是实数)那么:
[align=left]if a > bk, then T(n) = θ(nlogba)[/align]
[align=left]if a=bk[/align]
[align=left]if p > -1, then T(n) = θ(nlogba logp+1n)[/align]
if p = -1, then T(n) = θ(nlogba log(log n))
if p < -1, then T(n) = θ(nlogba)
if a < bk
if p >=0, then T(n) = θ(nk logpn)
if p < 0, then T(n) = O(nk)
相关文章推荐
- 5分钟读懂Win10正式版 51张高清图全方位解读你不知道的win10
- the constructor AlertDialog.Builder(new View.OnClickListener() ) is undefined
- poj 1716 Integer Intervals(差分约束||贪心)(中等)
- CSS侧边工具栏-背景图片法
- 2015 Multi-University Training Contest 4 (hdu 5335、5336)模拟
- 虚继承
- ios 开发小技巧
- HttpURLConnection及HttpClient选择(转)
- OC学习----可变数组与不可变数组
- swift创建单例
- javascript面向对象编程
- mybatis1,mybaits连接数据库
- 能屈能伸的“物”,弹性物联网能力的意义
- windows内核研究
- 51单片机自定义多个软件定时器
- MySQL数据表的CRUD(増、删、改、查)操作
- Android实现自适应正方形GridView
- Spark往Elasticsearch读写数据
- PHP中CURL方法curl_setopt()函数的一些参数
- spark shell学习笔记