我正在阅读C ++中Robert Sedwick算法中基数排序的性能特征。这里作者在下面的第10.6节中提到了
以下链接是在线参考。
使用w-byte对N个记录进行排序的LSD基数排序的运行时间 密钥与Nw成正比,因为算法使w经过 所有N键。此分析不依赖于输入。
对于长按键和短字节,此运行时间与N lg相当 N:例如,如果我们使用二进制LSD基数排序来排序1 十亿个32位密钥,然后w和lg N都是大约32个 密钥和更长的字节,这个运行时间与N:For相当 例如,如果在64位密钥上使用16位基数,则w将为4,a 小常数。
关于上述文字的问题
为什么作者对长键和短字节的N lg N进行比较?作者如何在这里结束w和lg N都是32?
为什么作者与N比较较短的密钥和较长的字节?这里如何计算w?
我不知道作者的短字节和长字节是什么意思?
答案 0 :(得分:2)
他尝试使用标准符号表示Radix排序的复杂性(nlogn在第一次看起来比wN更容易想象)。长键和短字节只是您使用基数排序的可能情况之一,所以这是一个例子(在不同的情况下你会得到不同的复杂性)。对于N =十亿的lg(N)约为29,8所以它接近32,因此接近w = 32.
如果您假设现在比较16位值,那么您的w = 64/16 = 4(单个键由4个16位值组成)。这是一个相对较小的常数,因此总成本Nw渐近接近N.
作者所指的“字节”是构建密钥的单个部分的大小。因此,如果你使用基数排序的char数组,你可能会按字符“逐字符”排序,你的字节将是8位(对于标准字符)。但是如果你对一些奇怪的元素进行基数排序,这些元素是由ex构成的“make-of”。 16位,你的字节是16位。