基数排序:LSD与MSD版本

时间:2012-08-13 17:56:38

标签: algorithm radix-sort sorting

这本书"Introduction to Algorithms"提到了基数排序的LSD(最低有效数字)版本。但是,正如其他人在stackoverflow中指出的那样,MSD(最高有效数字)版本也存在。所以我想知道每一个的利弊。我的猜测是LSD版本比MSD版本有一些好处,但我不确定。因此问题。

3 个答案:

答案 0 :(得分:9)

取自链接,可能有用:http://www.eternallyconfuzzled.com/tuts/algorithms/jsw_tut_sorting.aspx(在最底层)

LSD基数排序的最大问题是它从最小差异的数字开始。如果我们可以从最重要的数字开始,第一遍将对整个范围进行排序,并且在此之后的每次传递将简单地处理细节。 MSD基数排序的想法是将具有相等值的所有数字划分到它们自己的桶中,然后对所有桶执行相同的操作,直到对数组进行排序。当然,这表明一个递归算法,但它也意味着我们现在可以对可变长度的项进行排序,我们不必触摸所有的数字来获得一个排序的数组。这使得MSD基数排序更快,更有用。

答案 1 :(得分:4)

当有固定长度时,LSD比MSD快。 MSD对于小文件来说太慢了,它需要对小文件进行大量的递归调用。

答案 2 :(得分:3)

如书Algorithms所述,LSD和MSD都是字符串数组排序算法,基于所谓的密钥索引计数而不是比较。 因此,与传统的快速排序或合并排序相比,LSD和MSD具有不同的运行时间。

正如Dzhabarov所提到的,LSD和MSD之间的最大区别在于MSD首先考虑最重要的数字或字符,它本质上排序字符串而不迭代字符串中的所有数字。这是一个优点。但是,MSD的递归实现比LSD使用更多的空间。

下表说明了快速排序,LSD和MSD之间的部分区别。

algorithm    running time              extra space
quicksort    N(lgN)^2                  1
LSD          NW                        N
MSD          between N and NW          N + WR

其中N是数组的长度,W是字符串的长度,R是基数的大小。

PS:正如书中所提到的,Java系统排序使用一般排序算法,快速字符串比较,而不是LSD或MSD。

相关问题