算法导论: 第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元素的最小堆)

posted @ 2014-04-09 22:13  鬼蜮流风  阅读(204)  评论(0编辑  收藏  举报