基数排序的性能特征

时间:2013-12-27 12:02:29

标签: algorithm sorting

我正在阅读C ++中Robert Sedwick算法中基数排序的性能特征。这里作者在下面的第10.6节中提到了

以下链接是在线参考。

http://books.google.co.in/books?id=ZCchAeprwvYC&pg=PT605&lpg=PT605&dq=performance+characteristics+of+radix+sorts&source=bl&ots=1aH-jTEDZK&sig=zcIRfsIUn6_QtjhG7WR3IbWtGtA&hl=en&sa=X&ei=sGq9Up69NseprAfx2IG4BA&ved=0CFAQ6AEwBg#v=onepage&q=performance%20characteristics%20of%20radix%20sorts&f=false

  

使用w-byte对N个记录进行排序的LSD基数排序的运行时间   密钥与Nw成正比,因为算法使w经过   所有N键。此分析不依赖于输入。

     

对于长按键和短字节,此运行时间与N lg相当   N:例如,如果我们使用二进制LSD基数排序来排序1   十亿个32位密钥,然后w和lg N都是大约32个   密钥和更长的字节,这个运行时间与N:For相当   例如,如果在64位密钥上使用16位基数,则w将为4,a   小常数。

关于上述文字的问题

  1. 为什么作者对长键和短字节的N lg N进行比较?作者如何在这里结束w和lg N都是32?

  2. 为什么作者与N比较较短的密钥和较长的字节?这里如何计算w?

  3. 我不知道作者的短字节和长字节是什么意思?

1 个答案:

答案 0 :(得分:2)

  1. 他尝试使用标准符号表示Radix排序的复杂性(nlogn在第一次看起来比wN更容易想象)。长键和短字节只是您使用基数排序的可能情况之一,所以这是一个例子(在不同的情况下你会得到不同的复杂性)。对于N =十亿的lg(N)约为29,8所以它接近32,因此接近w = 32.

  2. 如果您假设现在比较16位值,那么您的w = 64/16 = 4(单个键由4个16位值组成)。这是一个相对较小的常数,因此总成本Nw渐近接近N.

  3. 作者所指的“字节”是构建密钥的单个部分的大小。因此,如果你使用基数排序的char数组,你可能会按字符“逐字符”排序,你的字节将是8位(对于标准字符)。但是如果你对一些奇怪的元素进行基数排序,这些元素是由ex构成的“make-of”。 16位,你的字节是16位。

相关问题