簡體   English   中英

關於插入排序時間的復雜度

[英]About insertion sort time complexity

在我的教科書中,它說插入排序的時間復雜度為Θ(n 2 )。 我不明白,因為插入排序的最佳情況是O(n)。 我知道大theta上下限。 那么插入排序的時間復雜度是O(n 2 )而不是Θ(n 2 )是否正確? 對不起,我英語不好。

OΘ並非在所有情況下都是最壞情況。 這是<==之間的區別。

例如,算法Merge sort為O(n ^ 2),但不是Θ(n ^ 2),因為它比那快。

在談論一段代碼的“時間”復雜性時,您必須要小心,因為您不能指出一個單一的時間復雜性。 一段代碼可以具有最佳情況下的時間復雜度, 最壞情況下的時間復雜度, 平均情況下的時間復雜度等,並且它們不必全部相同。

說“插入排序為Θ(n 2 )”有點草率,因為它不是Θ(n 2本身插入排序 ,而是最壞的運行時。 通常,如果您說一段代碼是O(f(n)),則表示它的運行時是O(f(n)),這通常意味着您在談論最壞情況的運行時。

的確,插入排序的最佳情況運行時是Θ(n),這在輸入已被排序時發生。 最壞情況的運行時間是Θ(n 2 ),它發生在反向排序的列表上。 假設輸入是n個元素的隨機排列,則平均情況下的運行時間也是Θ(n 2 )。 這些更精確的語句可能比“插入排序為O(n)”或“插入排序為Θ(n 2 )”更好,因為它們捕獲了有關插入排序的運行時間的更多信息。

請注意,僅使用O,Θ或Ω並不會自動意味着您在談論最佳/最差/平均情況下的復雜度。 例如,您可以使用Θ表示法來討論最佳情況,最壞情況或平均情況。

一般而言,當談到“ 算法的時間復雜性時,通常會提到所有類型的輸入 ,而不僅限於例如最壞情況最佳情況。

在這種一般情況下,對於所有類型的輸入,一個情況(最壞的情況)就足以確定復雜性級別為最差的級別

因此,當我們談到所有輸入的時間復雜度時,最好的情況不會產生Θ(n)

但是,您也可以針對特定場景顯式分析算法,例如僅針對最佳情況或最壞情況等等。 然后,您限制算法 ,僅允許此類輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM