算法导论8-4
读书笔记
本小节介绍了桶排序,桶排序是将元素按照规则放在一个个递增区间内,区间之间是递增的,区间内部也是递增的,最后依次合并区间得到次序;
具体过程如下:
伪代码如下:
BUCKET-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
insert A[i] into list B[⌊nA[i]⌋]
for i = 0 to n-1
sort list B[i] with insertion sort
concatenate tthe list B[0], B[1],...,B[n-1] together in order
事实上伪代码的第\(6\)行没有解释清楚,首先数组\(B\)空间大小只有\(n\),可是\(\lfloor nA[i] \rfloor\)又明显大于\(n\),这显然说不通。
然后我在网上搜索到了这一篇文章:排序算法之桶排序的深入理解以及性能分析
课后习题
8.4-1
参照图8-4的方法,说明\(BUCKET-SORT\)在数组\(A=<0.79, 0.13, 0.16, 0.64, 0.>\)
略。
8.4-2
解释为什么桶排序在最坏情况下运行时间是\(n^2\)?我们应该如何修改算法,使其在保持平均情况为线性时间的代价的同时,最坏情况下时间代码为\(O(n\lg{n})\)?
- 因为插入排序的时间复杂度为\(\theta(n^2)\)。
- 将排序过程换成快速排序。
8.4-3
设\(X\)是一个随机变量,用于表示在将一枚硬币抛掷两次时,正面朝上的次数。\(E[X^2]\)是多少呢?\(E^2[X]\)是多少呢?
X | 0 | 1 | 2 |
---|---|---|---|
P | 1/4 | 1/2 | 1/4 |
所以\(E[X]=0*\frac{1}{4}+\frac{1}{2}+2* \frac{1}{4}=1\),\(E[X^2]=2\), \(E^2[X]=1\)