- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章:线性时间排序
2
本章内容
介绍了几种O(nlgn)的排序算法:
合并排序和堆排序达到此上界;
快速排序平均情况下达到此上界;
比较排序算法的下界
线性时间排序:
计数排序(Counting Sort)
基数排序(Radix Sort)
桶排序(Bucket Sort)
3
8.1 排序算法的下界
比较排序算法的作用
比较排序算法仅用来确定输入序列a1,
a2, . . ., an的元素间次序,即给定两个元素ai
和aj, 测试ai aj, ai ≤ aj, ai = aj, ai ≥ aj, 或ai
aj 中哪一个成立。
4
8.1 排序算法的下界
决策树模型
比较排序可以被抽象的视为决策树。一棵
决策树是一棵满二叉树,表示某排序算法
作用于给定输入所做的所有比较。(6,8,5)
5
决策树
在决策树中,对每个内结点都注明i:j,其中
1≤i,j≤n,n是输入序列中的元素个数。
对每个叶结点都注明排列
(π(1),π(2),…,π(n))。
排序算法的执行对应于遍历一条从树的根到叶
结点的路径。在每个内节结点处要做比较
要使排序算法能正确的工作,其必要条件是,n
个元素的n!种排列中的每一种都要作为决策树
的一个叶子而出现。
ai a j
6
最坏情况下界
在决策树中,从根到任意一个可达叶节点之间
最长路径的长度,表示对应的排序算法中最坏
情况下的比较次数。这样,一个比较排序算法
中的最坏情况比较次数就与其决策树的高度相
等。
定理8.1 任意一个比较排序算法在最坏情况
下,都需要Ω(nlgn)次的比较。
于2 ,则有
n!≤l ≤ 2
定理8.1的证明
证明:对于一棵每个排列都作为一个可达叶结点出现的
决策树,根据前面的讨论即可确定其高度。考虑一棵高
度为h的、具有l个可达叶结点的决策树,它对应于对n
个元素所做的比较排序。因为n个输入元素共有n!种排
列,每一种都作为一个叶子出现在树中,故有n!≤l。
又由于在一棵高为h的二叉树中,叶子的数目不多
对该式取对数,得到
h≥lg(n!)=Ω(nlgn)
推论8.2堆排序和归并排序是渐进最优的比较算法
证明:堆排序和归并排序的运行时间上界O(nlgn)与定理
8.1给出的最坏情况下界Ω (nlgn)一致
7
h
h
8
8.2 计数排序
计数排序假设n个输入元素中的每一个都是介于
0到k之间的整数,此处k为某个整数,当k=O(n)
时,技术排序的运行时间是O(n)。
计数排序的基本思想就是对每一个输入元素x,
确定出小于x的元素个数。有了这一信息,就可
以 把x直接放到它在最终输出数组中的位置上。
在计数排序算法中,我们假设输入时隔数组
A[1..n],length(A)=n。另外还需要两个数组:
存放排序结果的B[1..n],以及提供临时存数区
的C[1..k]
9
计数排序程序
COUNT-SORT(A,B,k)
1 for i←0 to k
2 do C[i]←0
3 for j←1 to length[A]
4 do C[A[j]] ← C[A[j]] + 1
5 ▹ C[i] 现在包含等于i的元素个数
6for i← 1 to k
7 do C[i] ← C[i] + C[i - 1]
8 ▹ C[i]现在包含小于或等于i的元素个数
7 for j← length[A] downto 1
8 do B[C[A[j]]] ← A[j]
9 C[A[j]] ← C[A[j]] - 1
10
计数排序过程
1
2
11
计数排序过程
3
4
12
计数排序过程
5
6
算法说明
在第9-11行中的for循环部分,把每个元素
A[j]放在输出数组B中与其相应的最终位置
上。如果所有n个元素都不相同,则当第
一次执行到第9行时,对每个A[j],值
C[A[j]]即为A[j]在输出数组中的最终正确位
置,因为共有C[A[j]]个元素小于等于A[j]。
由于各个元素可能不一定是不同的,因
此,每当将一个值A[j]放入数组B中时,都
要减少C[A[j]]的值。这会使得下一个其值
等于A[j]的输入元素(如果存在的话)直
接进入数组B中A[j]的前一个位置上
14
计数排序时间代价
计数排序时间代价
算法第1~2行的for循环所花时间为Θ(k)。第3~4行中for循环所
花时间为Θ(n),第6~7行for循环所花时间为Θ(k),第9~11行
的for循环所花时间为Θ(n)。这样,总的时间就是Θ(k+n)。实
践中,当k=O(n)时,运行时间为O(n)。
计数排序的特点
计数排序算法没有用到元素间的比较,它利用元素的实际
值来确定它们在输出数组中的位置,不是一个基于比较的
排序算法,从而它的计算时间下界不再
文档评论(0)