【发布时间】:2015-01-28 08:38:38
【问题描述】:
我试图理解桶排序的算法,我突然想到,如果没有正确的分布模型,我们可以获得 O(n^2) 的复杂度。不少网站的桶数等于数组的大小(比如'n')并使用算法
std::vector<float> bucket[n];
for (int i = 0; i<n; i++){
bucket[(array[i]*n)/(MAX_ELEMENT_IN_INPUT_ARRAY+1)].push_back(array[i]);
}
我知道整数可以是随机的,并且没有完美的散列算法,但我不太明白上述算法如何将元素平均分配到各自的桶中。有没有我遗漏的直截了当的逻辑?
【问题讨论】:
-
码snap代表均匀分布,根据这个假设,
x=array[i]/(MAX_ELEMENT_IN_INPUT_ARRAY+1)是均匀分布x~U[0,1)(含零,不含1)。因此,n*x均匀分布在[0,n)
标签: algorithm sorting bucket-sort