大多數排序算法的複雜度爲O(N N)或O(N logN)以獲得結果。但是,對於特定的一組輸入,存在具有O(N)的複雜度的算法。想知道是否有可用的排序算法,在所有情況下都具有O(N)的複雜度。是否有可用的排序算法,其時間複雜度爲O(N)?
2
A
回答
5
如果只能比較(檢查兩個項目是否爲<,>,==),那麼排序的值就不會比O(n log(n))做得更好。它是那裏算法的幾個經證實的下界之一。證明不是太複雜(查看維基百科上的比較排序以瞭解詳細信息),但足夠長時間不在這裏重複。
如果您可以做比較之外的事情,那麼您可以擁有更多的靈活性。如果你有數字,你可以檢查桶排序(一種基數排序),它可以使O(n)排序成爲可能。
1
不是。最快的通用排序算法都是O(nlgn)。實際上Θ(nlgn),因爲它已經在數學上證明基於比較的排序算法不會更有效。
這裏是我在基於比較的排序算法中找到的一篇論文,它解釋了它。 http://www.cs.cmu.edu/~avrim/451f11/lectures/lect0913.pdf
1
簡短的回答是否定的。
如果輸入數組的每個元素都屬於一個有限集合,那麼O(N)算法是可能的。假設輸入總是在有限集[0..9]內。然後你可以創建一個大小爲10的數組,掃描數組並增加相應的索引。
所以,在所有情況下,O(N)排序算法只有在內存無限時纔可能。
+0
如果記憶是無限的,那會是什麼時間?不是O(N) – smac89 2014-10-28 23:08:16
相關問題
- 1. 是這個算法的漸近時間複雜度O(log n)?
- 2. 計數排序O(n + k)時間複雜度是什麼k?
- 3. 時間複雜度:O(logN)或O(N)?
- 4. 合併排序時間複雜度與我的算法。大O
- 5. 排序算法的時間複雜度
- 6. O(fib n)複雜度算法?
- 7. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 8. KMP模式匹配算法時間複雜度可以是O(m * n)?
- 9. 時間複雜度 - O(n^2)到O(n log n)搜索
- 10. 具有O(n)時間複雜度的N皇后的解釋?
- 11. 分時排序算法的時間複雜度是多少?
- 12. 以下程序的時間複雜度是多少? O(log n)是否正確?
- 13. 複雜度O(log(n))是否等於O(sqrt(n))?
- 14. 是否有任何時間複雜度爲O(lg * n)(迭代對數函數)的算法?
- 15. 爲什麼這個算法的空間複雜度是O(1)
- 16. 證明/解釋算法的時間複雜度爲O(h + k)
- 17. 如何確定的時間複雜度爲O(M + N)或O(Math.max(M,N))
- 18. 排序時間複雜度
- 19. 排序在O(n)的單次通過的時間複雜度的整數elemets
- 20. O(n)排序算法可能嗎?
- 21. 爲什麼代碼O(log n)的時間複雜度?
- 22. 以下代碼的時間複雜度如何爲O(n)?
- 23. 算法複雜度時間
- 24. 2^n複雜度算法
- 25. 分析堆棧排序算法的時間複雜度
- 26. 替代O(N^2)的時間與O(1)空間複雜度的複雜度在陣列
- 27. 如何排序合併與O(nlogn)時間和O(1)空間複雜度
- 28. 算法的大O複雜度
- 29. Boruvka算法的複雜度如何可能爲O(E * logV)?
- 30. 二叉樹O(n)的InOrder樹遍歷的時間複雜度?
+1用於引用存儲區排序。 O(n log n)的下界僅適用於基於比較的排序算法。 – 2014-10-28 22:44:10