Algorithm 是否可以编写通用桶排序?
众所周知,bucket排序算法非常有效:它的运行时间大约为O(N+m),其中N是要排序的项目数,m是使用fpr排序的数组大小。问题是它只适用于有限的一组键:整数,它填充到数组的大小中 问题:是否有一些方法可以将其用于任意类型的密钥? 例如,如果我们有一些任意键,我们可以使用它的hashcode作为bucket索引。当然,我们需要保留规则:如果key1>key2,那么hashcode1>hashcode2等等 有可能实施这一点吗Algorithm 是否可以编写通用桶排序?,algorithm,sorting,bucket-sort,Algorithm,Sorting,Bucket Sort,众所周知,bucket排序算法非常有效:它的运行时间大约为O(N+m),其中N是要排序的项目数,m是使用fpr排序的数组大小。问题是它只适用于有限的一组键:整数,它填充到数组的大小中 问题:是否有一些方法可以将其用于任意类型的密钥? 例如,如果我们有一些任意键,我们可以使用它的hashcode作为bucket索引。当然,我们需要保留规则:如果key1>key2,那么hashcode1>hashcode2等等 有可能实施这一点吗 例如,如果我们需要对字符串进行排序,那么很容易获得根据其字符表示构建
例如,如果我们需要对字符串进行排序,那么很容易获得根据其字符表示构建的字符串的bucket索引。您给出的运行时-O(n+M)-并且您说该算法只对整数有效,这一事实让我认为您指的是bucket sort,而不是bucket sort。如果你想知道是否总是有可能找到一种方法给对象提供任意的索引,比如散列码,这样它们就可以进行计数排序,那么答案是否定的,这样做并不总是可能的 以字符串为例。假设我们有一些从字符串到整数的映射,如果str1
问题是:在代码(“”)和代码(“”)之间只有k个不同的整数值,但是有k+1个字符串需要填补这些空白。这将迫使两个字符串发生冲突并具有相同的数字代码,从而导致排序失败
这是一个问题的原因是整数与许多其他结构不同,例如字符串、整数对、实数等。如果存在函数f(k)->a[0..m]
(这样可以保持顺序)。一个问题是bucket排序不如m>>N理想。更实际的是需要相反的规则:如果hashcode(k1)>hashcode(k2),那么k1>k2,尽管这意味着您需要在bucket中进行二次排序。