Q
线性时间排序?
20
A
回答
18
也看看相关的排序:pigeonhole sort或counting sort,以及Pukku提到的radix sort。
23
看一看radix sort。
2
一组有限范围的数字可以用RANGE位的位图表示。 在这种情况下,一个500MB的位图,所以对于除了巨大列表之外的任何东西,使用基数排序会更好。当你遇到数字k时,设置位图[k] = 1。单遍历列表O(N)。
3
这是非常简单的,如果n = 2和编号是唯一的:
- 构建比特的阵列(2^31-1位=>〜256MB)。将它们初始化为零。
- 读取输入,对于您看到的每个值,将阵列中的相应位设置为1.
- 扫描阵列,为每个位设置,输出相应的值。
复杂性=> O(2N)
否则,使用基数排序:
复杂性=> O(KN)(希望)
3
wikipedia示出了相当多的不同的排序算法及其复杂性。你可能想要检查它们
8
当人们说“排序算法”时,他们经常指的是“比较排序算法”,这是任何算法,只能依赖于能够问“这个东西是大于还是小于”。所以如果你仅限于询问关于数据的这个问题,那么你永远不会得到超过n * log(n)(这是对数据集的n个阶乘可能排序进行log(n)搜索的结果) 。
如果您可以摆脱“比较排序”的限制并询问关于某个数据的更复杂问题,例如“这个数据的基数是多少”,那么您可以使用任意数量的线性时间排序算法,他们只需要更多的内存。
这是一个时间空间的折衷。 Comparason排序很少或没有ram,并在N * log(n)时间运行。基数排序(例如)在O(n)时间和O(log(基数))内存中运行。
-2
一样ALGO是可能的:
M;// unsorted array
lngth; //number items of M
for(int i=0; i < lngth; i++)sorted[M[i]];
它单独用于线性复杂性可能算法中,但它具有复杂度O(K * N)由RAM(N - 数的数组元素中,k - 元素的LEN)
2
将数字看作三位数字,其中每个数字的范围从0到n-1。用基数排序将这些数字排序。对于每一位数字都有一个调用计数排序的函数,这个函数需要Theta(n + n)时间,所以总运行时间对应于Theta(n)。
相关问题
- 1. 运行合并排序和快速排序的线性时间
- 2. 排序数组2-4 +树的线性时间
- 3. 从线性时间的排序阵列构建红黑树
- 4. 线性时间可以一般排序吗?
- 5. 是否有可能以线性时间排序整数数组?
- 6. 这是一个线性时间排序算法吗?
- 7. 以线性时间排序并在适当位置
- 8. 时间排序
- 9. 线性排序搜索
- 10. 如何排序的ASCII字符线性时间和恒定的空间
- 11. 线性时间v.s.二次时间
- 12. 按时间排序正确排序
- 13. 创建以线性时间
- 14. 这些非比较排序在什么条件下以线性时间运行?
- 15. 如何使我的拓扑排序为线性时间? (代码注释很好)
- 16. 用于在多边形轮廓中排序顶点的线性时间算法
- 17. 如何在线性时间内进行稳定的二进制值排序?
- 18. 在线性时间对[log n]个不同的值进行排序
- 19. 在接近线性时间内均匀分布的随机拓扑排序
- 20. 在线性时间基于搜索字符串排序字符串
- 21. 给定n个元素的排序数组,在线性时间对子集n/2个元素进行排序
- 22. Big-Theta(n)线性排序算法?
- 23. 非线性比较排序/得分
- 24. 的Javascript排序非线性表
- 25. 日期时间排序
- 26. 让Excel按时间排序?
- 27. jqGrid日期时间排序
- 28. 排序基于时间
- 29. Array未按时间排序
- 30. MySQL:按时间排序(MM:SS)?
你能再次检查问题吗? N vs n? [0..n^31] vs [0..2^31] vs [0..2^32-1]? – 2009-04-14 22:40:27
@danbruc - 好点。另外,版本1说[0..n^3-1] - 为什么它现在是[0..n^31]? – 2009-04-15 00:22:42
我不知道为什么这改变了。我不记得更新。 – 2009-04-15 13:32:35