2017-05-30 16 views
0

私はこのアルゴリズムを別の投稿から取得しましたが、私はこのアルゴリズムのtemporal complexityをどのように計算できますか?私は学生であり、それをどうやって行うかについてはあまり知らない。Javaの再帰アルゴリズムの時間的複雑さ

public static void getSum(int[] numbersArray, int starting, int sum) 
{ 
    if(numbersArray.length == starting) 
    { 
    // Now we print sum here 
    System.out.println(sum); 
    return; 
    } 

    int value = sum + numbersArray[starting]; 

    getSum(numbersArray, starting + 1, value); 
    getSum(numbersArray, starting + 1, sum); 
} 

答えて

0

と仮定numbersArrayは、私は、すなわちgetSum(numbersArray, 0, 0)、誰かがstarting = 0でこれを呼び出すために起こっていることを仮定している長さ5を持っています。 Now:

これはgetSum(numbersArray, 1, x)を2回呼び出す予定です。

getSum(numbersArray, 1, x)の各呼び出しでは、getSum(numbersArray, 2, x)が2回呼び出されます。

getSum(numbersArray, 2, x)の各呼び出しは、getSum(numbersArray, 3, x)を2回呼び出します。等々。

getSum(numbersArray, 5, x)になると、時間は一定です。それをbaseTimeとしましょう。

T(n)がgetSum(numbersArray, n, x)を実行する時刻であるとします。次に、T(5)はのベース時刻です。 T(4)= 2 * T(5)。 T(3)= 2 * T(4);等々。 T(0)= 2 * T(1)= 2 * 2 * T(2)= 2 * 2 * 2 * T(3)= 2 * 2 * 2 * 2 * T(4)= 2 * 2 * 2 * 2 * T(5)= 2 * 2 * 2 * 2 * baseTime。アルゴリズムの時間は2 mに比例します。ここで、mは配列の長さです。答えはO(2 m)と書かれています。

関連する問題