我刚刚从另一篇文章中获得此算法,但我需要知道如何计算此算法的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);
}
答案 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 )。