[英]How does the time complexity of the bubble sort algorithm result in O(n^2) regarding the way you calculate it?
我明白為什么冒泡排序是 O(n^2)。
然而,在許多解釋中,我看到了這樣的事情:
(n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1
Sum = n(n-1)/2
您如何從這部分計算Sum
:
(n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1
任何人都可以幫忙嗎?
這是訣竅:
If n is even:
n + (n-1) + (n-2) + … + 3 + 2 + 1
= [n + 1] + [(n-1) + 2] + [(n-2) + 3] + … + [(n - (n/2 - 1)) + n/2]
= (n + 1) + (n + 1) + (n + 1) + … + (n + 1)
= n(n+1)/2
If n is odd:
n + (n-1) + (n-2) + … + 3 + 2 + 1
= [n + 1] + [(n-1) + 2] + [(n-2) + 3] + … + [(n - (n-1)/2 + 1) + (n-1)/2] + (n-1)/2 + 1
= (n+1) + (n+1) + (n+1) + … + (n+1) + (n-1)/2 + 1
= (n+1)(n-1)/2 + (n-1)/2 + 1
= (n^2 - 1 + n - 1 + 2)/2
= (n^2 + n)/2
= n(n+1)/2
對於您的情況,由於您最多計數 n-1 而不是 n,因此請在此公式中將 n 替換為 (n-1) 並簡化:
x(x+1)/2, x = (n-1)
=> (n-1)((n-1)+1)/2
= (n-1)(n)/2
= n(n-1)/2
無需推導方程即可理解的最簡單的“證明”是將復雜性想象為面積:
所以如果我們有序列:
n+(n-1)+(n-2)...
我們可以從中創建一個形狀......讓我們考慮n=5
:
n 5 *****
n-1 4 ****
n-2 3 ***
n-3 2 **
n-4 1 *
現在,當您查看起點時,它們形成了一個具有 2 個等長邊的直角三角形......這是nxn
正方形的一半,因此面積是:
area = ~ n.n / 2 = (n^2)/2
在復雜性中,常數是沒有意義的,所以復雜性是:
O(n^2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.