2015-12-14 49 views
1

他們是否有條不紊的方式來做到這一點?就像如果給我這樣的功能:如何系統地確定函數的big-O?

public static int f2(int[] arr, int lo, int hi) 
{ 
    // N = initial value of (hi-lo+1) of 1st activation of f2 
    if(lo == hi) 
     return lo; 
    if(arr[hi] >= arr[lo]) 
     return f2(arr, lo+1, hi); 
    return f2(arr, lo, hi-1); 
} 

許多我已經看過了資源的不告訴你一步一步如何得到你從來沒見過一個函數的符號。有沒有辦法直觀地做到這一點?如果是這樣,我將如何以big-O的方式獲得最糟糕的運行時間?謝謝。

+1

問題是沒有可靠的方法來計算任何函數的時間複雜度。有些,特別是一些遞歸的特別困難,有時候只能派生出一個緊密的債券。 –

回答

3

這是O(n),其中nhi - lo + 1並且在每個遞歸由1

lohi減小之間的間隙我懷疑這是不可能的一般解決這個作爲最壞的情況是一樣的嘗試解決Halting problem

+2

事實上,對於停止問題引用+1。 –