我知道如何計算每個算法的bigO,一般來說,它是如何工作的。例如,在鏈表中找到一個特定的數字就是O(N),因爲你可能需要從頭到尾遍歷鏈表中的每個輸入。然而,bigO實際上對於時間意味着什麼?即使插入排序具有更快的「時間複雜度」,合併排序的運行速度還是可以比插入排序快嗎?請給我你的意見,所以我可以理解。非常感謝你。真的很困惑時間複雜
回答
有一個看看這個例子:
比方說你有兩個算法A₁
和A₂
。這樣做,但第一個複雜度爲Θ(n)
,第二個複雜度爲Θ(n²)
。兩種算法都有不同的運行時間。您無法從複雜性中計算運行時間,因爲它取決於具體的實現方式,運行的計算機,複雜性和其他方面無法看到的東西。但是,您可以通過複雜性預測運行時間的變化。 假設您將輸入從長度n
更改爲長度2n
,表示您將輸入長度加倍。那麼運行時間也應該(幾乎)爲A₁
的兩倍,但它應該是A₂
以上的約4倍,因爲(2n)² = 4n²
。
要解決插入排序與合併排序示例: 插入排序的複雜性爲O(n²)
,合併排序的複雜度爲O(n log n)
。所以合併排序比插入排序有更好的複雜性,並且運行速度也應該更快。可能(對於非常短的列表)插入排序運行速度比合並排序快,因爲合併排序有一個更大的常數因子隱藏在大O符號中。
您遇到的問題/問題在初學者級別非常普遍。我建議你閱讀更多有關「漸近符號」的內容(網絡上有很多有用的視頻和網站可以解釋這一點)漸近分析正在考慮將算法應用於大型數據庫時的性能。 漸近概念基本上是三種類型 -
- 大O
- 大歐米茄
- 西塔的時候,我們有一個漸近上限
大O使用,這是 大當存在正的常數c和n時,g(n)的O等於f(n){O(g(n))= f(n)},使得 = f(n)< = cg )對於所有n> = n0。 (也就是你以這樣的方式,你的曲線F(N)始終位於或低於該點定義了一個最大值。
大歐米茄使用時,我們有一個漸近下界
和當我們有兩者的上限和下限西塔使用。
現在,回到你的question-插入排序有一個O(N²)的複雜性和歸併排序爲O(n log n)的。在大數值(n 2)往往比(n log n)大。
可以說n = 100。
in insertion sort t他的值將是10000和
合併排序它將是(100日誌100)100.2 - > 200。
因此,您可以看到合併排序的運行速度比插入排序快很多。
- 1. java regEx,真的很困惑
- 2. 我真的很困惑我的表格
- 3. 單身類 - 真的很困惑
- 4. 真的很困惑ajax圖片上傳
- 5. MVC RouteDatas很困惑
- 6. FLEX I很困惑
- 7. 困惑複雜加入在MySQL請求
- 8. 關於空間複雜度的一般困惑
- 9. 轉換,我很困惑
- 10. Simple HTMLDom - 我很困惑
- 11. BeautifulSoup刮:我很困惑
- 12. 我很困惑pip安裝
- 13. 指針 - 很多困惑
- 14. SQL INSERT INTO - 我很困惑
- 15. 我很困惑枚舉
- 16. arm cortex m0 nf51822 c編程硬件故障,真的很困惑
- 17. 延遲如何在PIC ASM中工作?我真的很困惑
- 18. 我真的很困惑與理解數組指針用C
- 19. 的.htaccess mod_rewrite的 - 我很困惑
- 20. C++真的困惑鏈接錯誤
- 21. 我很困惑的JavaScript執行順序
- 22. PHP + MVC - 我的域模型很困惑
- 23. 我對Java中的循環很困惑
- 24. AndroidHttpClient中的HttpRequestInterceptor。我很困惑!
- 25. 我很困惑的問題,如何array_udiff
- 26. 真正的AJAX和ASP.net之間的困惑AJAX
- 27. Python時間和日期函數 - 困惑
- 28. 我很困惑onTouch(),請看看
- 29. 批量替換命令,我很困惑
- 30. 我很困惑PROJECT_PATH = os.path.abspath(os.path.dirname(__ file__))