算法导论 第八章 线性时间排序
来源:互联网 发布:淘宝开店店铺简介 编辑:程序博客网 时间:2024/05/21 11:26
线性时间排序
之前的几种排序,有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于他们之间的比较。我们把这类算法叫做比较排序。
8.1 排序算法的下界
决策树模型
比较排序可以被抽象成一棵决策树。决策树是一棵完全二叉树,它可以表示在给定输入规模情况下,某一特定排序算法对所有元素的比较操作。
最坏情况的下界
在决策树中,从根结点到任意一个可达叶结点之间最长简单路径的长度,表示的是对应的决策算法中最坏情况下的比较次数。因此,一个比较排序算法中的最坏情况比较次数就等于其决策树的高度。同时,当决策树中每种排列都以可达叶结点的形式出现时,该决策树高度的下界也就是比较排序算法运行时的下界。也就是说,最坏情况下,任何比较排序算法都需要做Ω(nlgn)次比较。
8.2 计数排序
计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。
计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,可以直接把x放到它在输出数组中的位置上。例如,如果有17个元素小于x,则x就应该在第18个输出位置上。当有几个元素相同时,这一方案要略作修改。因为不能把它们放在同一输出位置上。
在计数排序算法的代码中,假设输入是一个数组A[1, n]。我们还需要两个数组,B[1..n]存放排序的输出,C[0..k]提供临时存储空间。
COUNTING-SORT(A, B, k) let C[0..k] be a new array for i=0 to k C[i]=0 for j=1 to A.length C[A[j]]=C[A[j]]+1 //C[i] now contains the number of elements equal to i for i =1 to k C[i]=C[i]+C[i-1] //C[i] now contains the number of elements less than or equal to i for j=A.length downto 1 B[C[A[j]]]=A[j] C[A[j]]=C[A[j]]-1
可以看出,在计数排序算法中,A应该是正整数数组,而k是比A中的最大值还要大的一个整数。
计数排序的一个重要性质就是它是稳定的:具有相同值的元素在输出数组中的相同次序与他们在输入数组中的相对次序相同。也就是说,对两个相同的数来说,在输入数组中先出现的数,在输出数组中也位于前面。通常,这种稳定性只有当进行排序的数据还附带卫星数据时才比较重要。计数排序的稳定性很重要的另一个原因是:计数排序经常会被用作基数排序算法的一个子过程。为了使基数排序正确运行,计数排序必须是稳定的。
8.3 基数排序
RADIX-SORT(A, d) for i=1 to d use a stable array to sort array A on digit i
基数排序与直观感觉相悖的是:先按最低有效位进行排序。
8.4 桶排序
桶排序假设输入输入服从均匀分布,平均情况下它的时间代价为O(n)。与计数排序类似,因为对输入数据作了某种假设,桶排序的速度也很快。
BUILD-SORT(A) n=A.length let B[0..n-1] be a new array for i=0 to n-1 make B[i] an empty list for i=1 to n make A[i] into list B[nA[i]] for i=0 to n-1 srot list B[i] with insertion sort concatenate the lists B[0],B[1]..,B[n-1] together in order
- 算法导论: 第八章 线性时间排序
- 算法导论第八章:线性时间排序
- [算法导论]第八章《线性时间排序》
- 算法导论 第八章:线性时间排序
- 算法导论 第八章 线性时间排序
- 算法导论读书笔记 第八章 线性时间排序
- 算法导论第八章线性时间排序课后答案
- 算法导论第八章总结:线性时间排序
- 算法导论第八章-线性时间排序-Cpp代码实现
- 算法导论_第八章_线性时间排序
- 算法导论学习笔记-第八章-线性时间排序
- 线性时间排序-算法导论
- 算法导论--线性时间排序
- 算法导论 学习笔记 第八章 线性时间内的排序
- 第八章 线性时间排序
- 第八章 线性时间排序
- 算法导论学习笔记-第8章 线性时间排序
- 算法导论代码 第8章 线性时间排序
- Linux中的粘滞位
- Java设计模式三
- Telnet与SSH两大协议的区别
- 「2016山东省队集训」 Play with array
- 程序设计实训报告 项目2.2
- 算法导论 第八章 线性时间排序
- 使用eclipse远程hive时出现的错误大汇总
- 孙宇教授解读:美国国家机器人计划2.0——无处不在的协作机器人
- shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别
- MATLAB读取不同行列的txt格式文件
- 程序设计实训报告 项目3.2
- 「2016山东省队集训」 分子切割 molecule
- 如何评价微软在其数据中心大量部署FPGA?
- c++运算符重载总结