首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
编程语言
> 详细
算法基础:分治模式,归并排序ΘΘΘΘΘΘ知识小结
时间:
2015-03-13 23:50:31
阅读:
438
评论:
0
收藏:
0
[点我收藏+]
标签:
1.分治模式在每层递归时都有三个步骤
:分解,解决,合并
2.归并排序算法完全遵循分治模式
:
分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列
解决:使用归并排序递归的排序两个子序列
合并:合并两个已排序的子序列以产生已排序的答案
3.分析分治算法所需要的时间计算:
假设T(n)是规模为n的一个问题的运行时间,若问题足够小,如对某个常量c,n≦c,则直接求解需要常量时将,我们将其写作Θ(1).假设吧原问题分解成a个子问题,每个子问题的规模是原问题的1/b(对归并排序,a和b都为2,然而,我们将看到在许多分治算法中a≠b)为了求解一个规模为n/b的子问题,需要T(n/b)的时间,所以需要aT(n/b)的时间n来求解a个子问题,如果分解问题成子问题需要时间D(n),合并子问题的解成原问题的解需要时间C(n) 那么得到递归式:
T(n)={Θ(1) 若,n≦c
aT(n/b)+D(n)+C(n) 其他
4.归并排序算法
分析建立归并排序n个数的最坏情况运行时间T(n)的递归式,归并排序的一个元素需要常量时间,当有n>1
我们元素分解运行时间如下:
分解:
分解步骤仅仅计算子数组的中间位置,需要常量时间,因此D(n)=Θ(1)
解决:
我们递归的求解两个规模均为n/2的子问题,将贡献2T(n/2)的运行时间
合并:
我们已经注意到在一个具有n个元素的字数组上过程MERGE需要
Θ(n)的时间,所以C(n)=
Θ(n)
当分析归并排序而把函数D(n) 与C(n)相加时,我们是在吧一个
Θ(n)函数与另一个
Θ(1)函数相加,相加的和是n的一个线性函数,即
Θ(n),把它与来自“解决”步骤的2T(n/2)相加,
将给出归并排序的最坏情况运行时间T(n)的递归式
Θ(1) 若n=1
T(n)={ 2T(n/2)+
Θ(n) 若n>1
在第4章,我们将看到“主定理” ,可以用改定理来证明T(n)为
Θ(nlgn),其中lgn代表㏒2n,因为对数函数比任何线性函数增长要慢,所以对足够大的输入,在最坏的情况下运行实际为
Θ(nlgn)的归并排序将优于运行时间为
Θ(n2)的插入排序
重写归并排序算法:
c 若n=1
T(n)={ 2T(n/2)+cn 若n>1
(
常量c代表求解规模为1的问题所需的时间以及在分解步骤与合并步骤处理每个数组元素所需的时间
)
lgn +1 代表层,cn 为每层贡献总代价
cnlgn + cn=cn(lgn +1) 忽略低阶项和常量c便给出了期望的结果
Θ(nlgn)
算法基础:分治模式,归并排序ΘΘΘΘΘΘ知识小结
标签:
原文地址:http://blog.csdn.net/u014236541/article/details/44246347
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
Spring Cloud 从入门到精通(一)Nacos 服务中心初探
2021-07-29
基础的排序算法
2021-07-29
SpringBoot|常用配置介绍
2021-07-29
关于 .NET 与 JAVA 在 JIT 编译上的一些差异
2021-07-29
C语言常用函数-toupper()将字符转换为大写英文字母函数
2021-07-29
《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)
2021-07-28
4-1 YAML配置文件 注入 JavaBean中
2021-07-28
【python】 用来将对象持久化的 pickle 模块
2021-07-28
马拉车算法
2021-07-28
用Python进行冒泡排序
2021-07-28
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!