algorithm - 线性时间排序

标签 algorithm sorting big-o radix-sort

我正在阅读 introduction to algorithms 2nd edition,有一道题说我们可以在线性时间内对 0 到 n3-1 之间的 n 个整数进行排序。我在考虑 IBM 的基数排序方法。我从最低有效数字开始,根据最低有效数字分隔数字,然后排序,然后根据下一个最低有效数字分隔等等。每次分离都需要 O(n) 时间。但是我有一个疑问,例如,如果其中一个数字由 n 位数字组成,那么该算法需要 O(1*n+2*n+...+n*n)=O(n2) 时间,对吗?我们能保证数字少于 n 位吗,或者任何人都可以为这个问题给出另一个提示吗?谢谢

最佳答案

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

仅当d 为常量时,算法才以线性时间运行!在您的情况下 d = 3log(n) 并且您的算法将在 O(nlog(n)) 中运行。

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

关于algorithm - 线性时间排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323740/

相关文章:

c - 在这个冒泡排序代码中,这些变量 c 和 d 在 C 中意味着什么?

algorithm - Shell排序的时间复杂度?

algorithm - 如果循环变量除/乘以恒定量,为什么我们将时间复杂度视为 O(Logn)?

Python 摩尔斯电码 : S. O.S

c++ - 通过确定系数找到两个 vector 的关系

algorithm - 为什么哈希表扩展通常通过将大小加倍来完成?

algorithm - 对数函数的下界

c - 生成数独谜题

algorithm - 学生初学排序算法应该先教什么?

javascript - 按整数大小对嵌套数组进行排序