大多數排序算法的複雜度爲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(sqrt(n)* log(n))?
- 2. 是這個算法的漸近時間複雜度O(log n)?
- 3. 計數排序O(n + k)時間複雜度是什麼k?
- 4. 時間複雜度:O(logN)或O(N)?
- 5. 合併排序時間複雜度與我的算法。大O
- 6. 排序算法的時間複雜度
- 7. O(fib n)複雜度算法?
- 8. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 9. KMP模式匹配算法時間複雜度可以是O(m * n)?
- 10. 時間複雜度 - O(n^2)到O(n log n)搜索
- 11. O(3^n)指數時間複雜度
- 12. 用大O計算時間複雜度
- 13. 具有O(n)時間複雜度的N皇后的解釋?
- 14. 分時排序算法的時間複雜度是多少?
- 15. 以下程序的時間複雜度是多少? O(log n)是否正確?
- 16. 複雜度O(log(n))是否等於O(sqrt(n))?
- 17. 是否有任何時間複雜度爲O(lg * n)(迭代對數函數)的算法?
- 18. 爲什麼這個算法的空間複雜度是O(1)
- 19. 證明/解釋算法的時間複雜度爲O(h + k)
- 20. 查找數組中缺失的數字,時間複雜度爲O(N),空間複雜度爲O(1)
- 21. 如何確定的時間複雜度爲O(M + N)或O(Math.max(M,N))
- 22. 排序時間複雜度
- 23. 排序在O(n)的單次通過的時間複雜度的整數elemets
- 24. 證明這個雙循環的時間複雜度是O(n)
- 25. O(n)排序算法可能嗎?
- 26. 大O時間複雜度
- 27. 爲什麼代碼O(log n)的時間複雜度?
- 28. 以下代碼的時間複雜度如何爲O(n)?
- 29. O(nⁿ)和O的時間複雜度
- 30. 算法複雜度時間
+1用於引用存儲區排序。 O(n log n)的下界僅適用於基於比較的排序算法。 – 2014-10-28 22:44:10