在基数排序中,我们需要将待排序数列按照其每一位的值进行排序。如果待排序数列中的最大值是n,我们就需要对每一位进行排序,从低位到高位,直到最高位。因此,我们需要知道待排序数列中的最大位数k,才能进行排序。
基数排序的时间复杂度为θ(k*n),而题目中往往不会直接给出最大数值n的位数。所以我们需要通过一个数的数值n推导出它的位数k,从而计算出更加准确的时间复杂度。
假设我们使用r进制,因此,如果一个数的最高位是k位(0~k),那么它的值最大为r^k-1。因此,如果待排序数列中的最大值是n,那么它的最高位是k位,满足以下不等式:
对不等式两边同时取对数(以下只展示上界的证明),得到:
经转换:
因此,可以得到k的上界为:k=O(logn),同理可推得k的下界也为logn。
故一个数值为n的数与其位数k的关系为:k=θ(log(n))
例:计算对于以下元素个数均为n的数组进行基数排序的时间复杂度(数值采用十进制)
(a)[1...n],θ(k*n)=θ(n*lgn)
(b)[1…n²],θ(k*n)=θ(n*2*lgn)=θ(n*lgn)
(c)[1…2^n],θ(k*n)=θ(n*n*lg2)=θ(n^2)
如有疑惑和错误,欢迎讨论与指正啊!