【问题标题】:Temporal complexity of a recursive algorithm in JavaJava中递归算法的时间复杂度
【发布时间】:2017-05-30 03:03:40
【问题描述】:

我只是从另一个帖子中得到这个算法,但我需要知道如何计算这个算法的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);
 }

【问题讨论】:

    标签: java algorithm complexity-theory temporal


    【解决方案1】:

    假设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*基准时间。这告诉您算法的时间与 2m 成正比,其中 m 是数组的长度。所以答案会写成 O(2m).

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      相关资源
      最近更新 更多