算法导论: 第8章
8.1-4 n/k个k大小的有序子序列排序
每个k大小的序列有k!种排列可能,所以n/k个子序列有(k!)^(n/k)个子序列,也即决策树至少要有这么多个叶子。设树高为h,则有
2^h >= (k!)^(n/k),得h >= lg((k!)^(n/k)) = (n/k)lg(k!) >= (n/k)lg((k/2)^(k/2)) = (n/2)lgk
8-3 排序不同长度的数据项
a) 先用计数排序按“数字位数”进行排序,然后再用基数排序对位数相同的每个桶内的数字排序。
b) 根据第一个字母排序(计数排序),然后对第一个字母相同的每组递归用按首字母排序计数排序。
8-5 平均排序
d) 建立k个筐,然后依次循环放入元素:a[1]->1筐,a[2]->2筐,……,a[k]->k筐;然后循环,a[k+1]->1筐,a[k+2]->2筐
这样,最后将n个元素放完后,就有k个完全不重叠的筐,依次为:
1筐:{a[1],a[1+k],a[1+2k],a[1+3k]};
2筐:{a[2],a[2+k],a[2+2k],a[2+3k]};
……
每个筐最多有n/k个元素,排序用(n/k)lg(n/k),总共用O(nlg(n/k))
e)如d中一样分筐,则每个筐内的元素已经是排好序的,然后对这k个筐进行k路归并(维护一个k元素的最小堆)