我正在阅读关于Radix排序的维基百科文章,并在描述其效率时,它说
对于
O(d·n)
或更少{n}个键的基数排序效率为d
数字。有时候d
会被表示为常数,这会产生 基数排序更好(对于足够大的n
)而不是最好的 基于比较的排序算法,均为O(n·log(n))
需要比较的次数。但是,一般来说d
不可能 被视为常数。特别是在共同之下(但有时候 隐式)假设所有键都是不同的,那么d
必须是 至少是log(n)
的顺序,它最多给出(密集的 打包密钥)时间复杂度O(n·log(n))
。
现在我不明白的是 - 假设所有键都是不同的,那么d
必须至少为log(n)
的顺序
究竟是什么意思?
答案 0 :(得分:2)
如果我们认为密钥是不同的,那么我们有n
个不同的密钥,现在假设最大密钥是k
,我们知道因为所有数字都是不同的所以k
更大或等于到n
。因此k
有log(k)
个数字且至少为log(n)
,因此d
为O(log(n))
修改强>
要更清楚地了解基座log
和10
以及Big-O中的2
,请阅读此post。
答案 1 :(得分:0)
如果所有键都是不同的,那么您可以对它们进行排序,最大值至少为n(仅考虑正整数)
那么n的位数是log10(n),这就是为什么d至少是log(n)