![](/img/trans.png)
[英]How much does the order of case labels affect the efficiency of switch statements?
[英]Predict an algorithm's theoretical average-case efficiency and order of growth using summation
我需要使用求和/西格瑪符號來預測算法相對於其輸入大小的平均大小效率,以得出最終答案。 許多資源都使用求和來預測最壞的情況,而我找不到找到解釋如何預測平均情況的人,因此請逐步回答。
該算法包含一個嵌套的for循環,其基本操作位於最里面的循環內:
[已編輯代碼]
編輯:基本操作的執行將始終在第二個for循環內執行,如果已輸入第二個for循環,並且沒有break或return語句。 但是:第一個for循環的末尾具有return語句,該語句取決於基本操作中產生的值,因此數組的內容確實影響算法每次運行將執行基本操作的總次數。
傳遞給算法的數組具有隨機生成的內容
我認為預測的平均案例效率為(n ^ 2)/ 2,使其成為n ^ 2的增長階數/ n ^ 2的大Theta,但我不知道如何從理論上證明這一點。 答案非常感謝!
TL; DR:如果“基本運算”的復雜度為Θ(1)
並且沒有return
, break
或goto
運算符,則平均情況下的代碼復雜度為Θ(n²)
。
說明:平均情況下的復雜度只是在給定輸入大小的情況下對代碼中操作數的預期。
假設T(A, n)
是您的代碼執行給定大小為n
數組A
的許多操作。 很容易看到
T(A, n) = 1 + // int k = ceil(size/2.0);
n * 2 + 1 + // for (int i = 0; i < size; i++){
n * (n * 2 + 1) + // for(int j = 0; j < size; j++){
n * n * X + // //Basic operation
1 // return (some int);
其中X
是“基本運算”中的多個運算。 如我們所見, T(A, n)
不依賴於數組A
實際內容。 因此,在給定數組大小的情況下,預期的操作數(這只是給定n
所有可能A
的T(A, n)
的算術平均值)完全等於它們中的每個:
T(n) = T(A, n) = 3 + n * 2 + n * n * (2 + X)
如果我們假設X = Θ(1)
,則該表達式為Θ(n²)
。
即使沒有此假設,我們也可以估算:如果X = Θ(f(n))
,則您的代碼復雜度為T(n) = Θ(f(n)n²)
。 例如,如果X
為Θ(log n)
,則T(n) = Θ(n² log n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.