按线性时间排序

时间:2013-03-10 15:13:14

标签: algorithm sorting big-o radix-sort

我正在阅读算法第2版的介绍,并且有一个问题是我们可以在线性时间内对0和n 3 -1之间的n个整数进行排序。我正在考虑IBM的基数排序方法。我从最低有效数字开始,相对于最低有效数字分开数字,然后排序,然后相对于下一个最低有效数字分开,依此类推。每次分离需要O(n)次。但我有一个疑问,例如,如果其中一个数字由n个数字组成,那么算法需要O(1 * n + 2 * n + ... + n * n)= O(n 2

2 个答案:

答案 0 :(得分:3)

基数排序复杂度为O(dn)d为数字中的位数。

只有当d不变时,算法才会以线性时间运行!在您的情况下d = 3log(n),您的算法将在O(nlog(n))中运行。

老实说,我不确定如何在线性时间内解决这个问题。是否有关于数字性质的其他信息,我想知道是否有任何其他信息缺失关于数字的性质......

答案 1 :(得分:2)

假设一个字RAM模型,并且n适合O(1)个字,则有一个线性时间算法。

将每个数字写入基数n,并进行基数排序(使用稳定版本的计数排序作为基础数字排序)。

如果你想假设无界n,那么输入的大小实际上是n log n,在这种情况下,基数排序再次起作用(在O(n log n)时间内),从技术上讲,它仍然是线性的时间算法! (当然,我认为这仍假设算术是O(1)...)