2013-02-11 83 views
2

我創建在Java該方法指示整數數組是否被排序或沒有。它的複雜性是什麼?我認爲如果好的話,O(1)在最壞的情況下是O(n)在一般情況下?複雜性的情況下優異的,平均和壞

static boolean order(int[] a){ 
    for(int i=0;i<a.length-1;i++){ 
    if(a[i]>a[i+1]) return false; 
    } 
return true; 
} 
+0

你問平均?因爲你的好和最壞的情況對我來說似乎是正確的。 – 2013-02-11 14:38:26

+2

平均情況取決於您輸入的統計屬性...也許您想補充一點,您希望假設輸入的均勻分佈情況下的平均情況? – thang 2013-02-11 14:38:58

+0

是的,在平均情況下? – Enzo 2013-02-11 14:39:34

回答

2

你沒有告訴你輸入任何東西。所以假設它是完全隨機的。因此,對於任何2個鄰居對,我們有50%的機會被訂購。這意味着我們有1步的概率爲1,2步爲0.5,3步爲0.25,k步的概率爲2 ^( - k)。讓我們來計算步數預計:

enter image description here

我不知道如何計算這一系列的總和,所以我使用Wolfram Alpha的,並得到answer: 2,所以這是一個常數。

因此,正如我理解爲隨機輸入平均情況是O(1)。

我不知道它是計算平均複雜正確的方法,但似乎沒什麼問題。

+0

你是不是指進行1次比較的概率1/2,進行2次比較的1/4等等? – thang 2013-02-11 15:04:25

+0

還有一個錯字?在你的方程中......(1 /(2^-k))= 2^k。這件事會爆炸......這不是你在文中所描述的。 – thang 2013-02-11 15:05:32

+0

@thang是的,我的意思是1/2 1 1/4 2等我會解決錯字關於式,由於 – 2013-02-11 15:06:16

0

複雜性通常報價在最壞的情況下,你的情況是O(n)。

+0

是的,我知道,但我也知道在一般情況下! – Enzo 2013-02-11 14:38:25

+0

@Enzo如果你認爲平均案例是相關的,那麼你需要考慮你的投入,我們無法預測會發生什麼。 – Qwerky 2013-02-11 14:41:38

+0

@Qwerky在分析「平均情況」時,您通常使用隨機輸入進行計算,並計算成本的*期望值*(平均值) - 這會給您提供平均情況下的複雜度。例如,在這種情況下,應該用所有可能的排列來完成,給出1/n的每個置換概率!被選中。 – amit 2013-02-11 16:27:43