【笔记】
基数排序按最低有效位数字进行排序。
给定n个d位数,每一个数位可取k种可能的值。如果所用的稳定排序需要Θ(d(n+k))的时间正确地堆这些数进行排序。
给定n个b位数和任何正整数r<=b,如果采用稳定排序需要Θ(n+k)时间,那么RADIX-SORT能在Θ((b/r)(n+2^r))时间内正确的对这些数进行排序。
【练习】
8.3-1 示出基数排序RADIX-SORT作用于下列英语单词上的过程:"COW","DOG","SEA","RUG","ROW","MOB","BOX","TAB","BAR","EAR","TAR","DIG","BIG","TEA","NOW","FOX"。
SEA TEA MOB TAB DOG RUG DIG BIG BAR EAR TAR COW ROW NOW BOX FOX
TAB BAR EAR TAR SEA TEA DIG BIG MOB DOG COW ROW NOW BOX FOX RUG
BAR BIG BOX COW DIG DOG EAR FOX MOB NOW ROW RUG SEA TAB TAR TEA
8.3-2 下面的算法中那些是稳定的:插入排序,合并排序,堆排序和快速排序?给出一个能使任何排序算法都稳定的方法。所给出的方法带来的额外时空开销是多少?
插入排序、合并排序稳定,堆排序和快速排序不稳定。
为每个元素附加一个域,表示其在原始数组中的位置。在排序中的比较过程中,若数据相同,则比较附加域,附加域小的在前。由于附加域全部不相同,所以最后的结果是稳定的。额外带来时间开销*2,空间开销n。
8.3-3 利用归纳法来证明基数排序算法能正常工作。在所给出的证明中,哪个地方需要假设排序是稳定的?
当开始处理最低位时,最低位变为有序。
当第2次处理时,低第2位变为有序,对于该位相同的数字,由于之前低位是有序的,因此内部仍是排序的。
当第i次处理时,低第i位变为有序,对于第i位相同的数字,由于前i-1位是有序的,因此内部仍是排序的。
当第n次处理后,数列变为有序。
对于第i位相同数字,要想前i-1位有序,要假设排序是稳定的。
8.3-4 说明如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序。
将数据x转化为2位n进制数,即x=d1*n+d2,对其进行基数排序,则其时间复杂度为O(n+2)=O(n)。
*8.3-5 在本节第一个卡片排序算法中,为排序d位十进制数,在最坏情况下需要排序几遍?最坏情况下操作员要看管几堆卡片?
每排序一遍就分为10堆卡片。第一位排序1遍,第二位10遍,第i位10^(i-1) 遍,最坏景象下需排序(10^d-1)/9遍。在第d位共有10^d堆。
【《算法导论》笔记 第8章 8.3基数排序】
推荐阅读
- 集合的全排列(Java实现)
- 算法导论学习笔记——2.3.1分治法——习题2-4逆序对数
- 拓展欧几里得算法详解
- 算法导论程序15-计数排序(Python)
- 算法导论 — 8.3 基数排序
- 算法导论程序16--基数排序(Python)
- 算法导论 基数排序
- RSA模重复平方算法小示例
- 【算法导论之四】计数排序
- 算法导论计数排序实现