簡體   English   中英

例如,在此插入排序算法中,如何證明算法的時間復雜度為O(n ^ 2)?

[英]In this insertion sort algorithm for example, how would I prove the algorithm's time complexity is O(n^2)?

采用以下插入排序算法:

在此處輸入圖片說明

通過檢查,我知道它很容易成為O(n ^ 2)。 但是就證明它是O(n ^ 2)而言,我將如何去做呢? 我可以將所有運算加起來,但是據我所知, n + "sum of j=2 to n"不會真正導致n ^ 2。

我真的不知道如何確切地證明這一點。 有人可以嘗試以一種適用於O(n ^ 3)算法的方式清楚地解釋我將如何證明這一點嗎?

它是O(n ^ 2),因為您有一個乘法,而不是一個和。 例如,一個以相反順序排序的數組:

10 9 8 7 6 5 4 3 2 1

在這些情況下,內循環的每次迭代都會在插入下一個元素之前掃描並移位數組的整個排序子部分。 這為插入排序提供了二次運行時間(即O(n2))。

更多信息

理解復雜度的最佳方法是嘗試找到最壞的情況示例並遵循算法的步驟。

通過考慮在最壞的情況下執行多少次操作,可以證明O的復雜性很高。 您已經完成了計數部分,並將結果輸入到圖像的右列中,因此有待證明的是主導項是O(n^2)

除了涉及和的項,您的程序還包含執行n-1次的指令,因此它們都是O(n)項。

現在為總和項。 在最壞的情況下, t_j可以為j因為您可能最終將設置為j i遞減至0。因此,在最壞的情況下,我們有t_j = j ,那么您得到的項的sum from 2 to n of jO(n^2) 這是由於遵循以下數學標識:

在此處輸入圖片說明

這可以通過以下方式證明:將這兩個系列的總和相加,注意使您將兩個合計為n+1相加,然后將總和除以2。 看一下Wolfram中的證明

最后,由於O((n^2 + n)/2) = O(n^2)您會得出包含和的項主導運行時間,這就是為什么算法為O(n^2)

假設1 :如果過程P運行不超過T次,並且每次P以O(f(N))運行,則總運行時間為O(T * f(N))

假設2 :如果過程P以O(f(N))的時間運行,過程Q以O(g(N))的時間運行,則運行P后跟Q需要O(f(N)+ g( N))時間。

為方便起見,如果您願意,則假設1遵循假設2。

假設3 :賦值和算術是O(1)運算。

結合這三個假設,您可以獲得結果。

第6和7行分別以O(1)和O(1)時間運行,因此它們一起以O(1 + 1)= O(1)時間運行。 (假設3和2)

第5行確定{6,7}將不超過A.Length-0次運行,因此{5,6,7}的運行時為O(A.Length * 1)= O(A.Length)(By假設1)

第2、4和8行以O(1)時間運行,因此{2,4,5,6,7,8}以O(1 +1 + A.Length +1)= O(A.Length)進行運行時間。 (再次假設3和2)

第1行確定{2..8}將運行不超過A.Length次,因此,行{1..8}的運行時為O(A.Length * A.Length)= O(A.Length ^ 2 )(根據假設1)。

暫無
暫無

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

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