Java中递归算法的时间复杂性

时间:2017-05-30 03:03:40

标签: java algorithm complexity-theory temporal

我刚刚从另一篇文章中获得此算法,但我需要知道如何计算此算法的temporal complexity?我是一名学生,对如何做到这一点并不了解。

 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);
 }

1 个答案:

答案 0 :(得分:0)

假设numbersArray的长度为5.我假设有人打算用starting = 0来调用它,即getSum(numbersArray, 0, 0)。现在:

这将打两次getSum(numbersArray, 1, x)

getSum(numbersArray, 1, x)的每次通话都会拨打getSum(numbersArray, 2, x)两次。

getSum(numbersArray, 2, x)的每次通话都会拨打getSum(numbersArray, 3, x)两次。等等。

当我们到达getSum(numbersArray, 5, x)时,时间是恒定的;我们称之为 baseTime

假设我们说T(n)是执行getSum(numbersArray, n, x)的时间。然后T(5)是 baseTime ; 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 * 2 * T(5)= 2 * 2 * 2 * 2 * 2 * baseTime 。这告诉你的是算法的时间与2 m 成正比,其中 m 是数组的长度。所以答案写成O(2 m )。