是否有任何比O(n log n)運行得更快的通用元素的實用算法(與計數排序或桶排序不同)?通用實用的排序算法比O(n log n)快嗎?
回答
很多人都提到了比較排序算法的信息論Ω(n lg n),這些算法在比較排序時不能被破解。 (This earlier question探討了爲什麼是這種情況。)
但是,有一些類型的比較排序,雖然在平均情況下不會破壞O(n lg n),但可以顯示在已預分類的輸入上運行得更快在某種程度上。例如,Dijkstra的smoothsort運行在O(n)上,已經排序的輸入中有O(n lg n)的最壞情況行爲。我最喜歡的排序之一,Cartesian tree sort,在一些指標中可以最大限度地利用預分類。例如,它可以在時間O(n)中對具有恆定數量的增加或減少的子序列的任何序列進行排序,在最壞的情況下優雅地降級爲O(n lg n)。
關於非比較排序的主題,有一些着名但棘手的排序算法整數超過O(n lg n)通過做聰明的位操作技巧。最有名的整數排序算法是一種隨機算法,可以在O(n lg lg n)中排序,而用於整數排序的最快確定性算法以O(n lg lg n)時間運行。您可能已經聽說過基數排序在O(n)中工作,儘管技術上它是O(n lg U),其中U是要排序的數組中最大的值。簡而言之,不,你不能比O(n lg n)做得更好,但是如果你知道一些關於你的輸入的信息,你可以稍微做的更好一些。
對於只能比較而不訪問內部元素的通用元素,不可能有比Theta(n log n)更快的排序算法。那是因爲有n! (n階乘)元素的可能順序,並且您需要Theta(n log n)比較來區分所有元素。
有多少元素?儘管它類似於N 1.2,但Shell-Metzner排序通常比其他多數其他元素(幾千個元素)要快。
這也取決於你的意思是「通用」和「實用」。基數排序可以擊敗O(n log n),並且它適用於相當廣泛的各種數據(但絕對不是所有的)。
如果你的想法是實用的和通用的,將算法限制爲直接比較元素的算法,那麼無 - 無(或永遠不會)比O(n log n)更好。這已經證明了相當長的一段時間。
不是。這是我們擁有的少數幾個嚴格的最小界限之一。對於n個元素的集合,有n!不同的順序,所以要指定一個給定的順序,我們需要log(n!)位。通過斯特林近似,這大約是n log n。對於我們在元素之間進行的每一次比較,我們基本上得到了一點信息(忽略了相同元素的可能性)。
- 1. floor(√2n)的O(log log n)算法?
- 2. 比O(log N)int set set實現在Java中快嗎?
- 3. 快速排序中位數在O(n log n)
- 4. 是log(n!)= O((log(n))^ 2)?
- 5. O(n)排序算法可能嗎?
- 6. 如何計算O(Log(N))?
- 7. 你能比O(log n)獲得10的冪更快嗎?
- 8. 與log(n)相比,log(n^2)的大O是什麼?
- 9. 大O符號 - O(n日誌(N))對O(的log(n^2))
- 10. 顯示n^2不是O(n * log(n))?
- 11. 爲什麼排序字符串O(n log n)?
- 12. 排序在最壞情況下O(n * log(n))
- 13. O(N)查找,但O(日誌(N))的比較排序列表
- 14. 快速帶O的最壞的情況下(N log n)的
- 15. 你如何看出O(log n)和O(n log n)之間的差異?
- 16. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 17. 爲O(n^log n)的碰撞檢測
- 18. 算法複雜度,log^k n vs n log n
- 19. 時間複雜度 - O(n^2)到O(n log n)搜索
- 20. 爲什麼此循環返回值爲O(n log log n)而不是O(n log n)?
- 21. 圖形搜索O(log(N)(N + M)
- 22. heapify O(n)算法
- 23. log(n!)=Ω(n * log(n))?
- 24. 增長率log(log * n)和log *(log n)哪個更快?
- 25. 我可以說Θ(n^3/2)時間算法漸近地比Θ(n log n)時間算法慢嗎?
- 26. 在k <n的算法運行時log(n)vs log(k)
- 27. 使用Prim算法從O(n^3)到O(n^2)優化MST
- 28. O(n Log n)是多項式時間嗎?
- 29. N ++的C++算法!排序
- 30. n!實現以n^100爲log N
以O(n√lg lg n)運行的整數排序算法的名稱是什麼? – 2017-11-15 08:51:01