说明此伪代码计算并确定其运行时的内容

时间:2017-07-09 20:11:11

标签: java algorithm runtime pseudocode

我很快就会在考试中提出这样的问题。我在书中发现了这一点,但遗憾的是没有解决方案。所以我解决了它,我希望你能告诉我,如果我做得对吗?

a。)算法计算什么?

b。)根据n

分析算法的运行时间
     Input: Array A of length |A|=n with n >= 2
     Output: Number x
      x := 0;
      for i := 1 to n do
         for j := i+1 to n do
           if x < |A[i] - A[j]| then
              x := |A[i] - A[j]|;
           end if
         end for
      end for
      return x;

对于a。)我在java中输入了伪代码作为完整代码并执行了程序。经过几次输出比较后,我意识到算法会计算出最小和最大的数组元素(如果需要,你可以在这里查看我的代码:https://gist.github.com/anonymous/b27877536f3c9f553500388af78ee962

b。)我不确定这是如何正确完成的,但我也确实试过了:

     Input: Array A of length |A|=n with n >= 2     O(1)
     Output: Number x
      x := 0;                                       O(1)
      for i := 1 to n do                            O(n)
         for j := i+1 to n do                      *O(n)
           if x < |A[i] - A[j]| then               *O(1)
              x := |A[i] - A[j]|;                  *O(1)
           end if                                  *O(1)
         end for                                   *O(1)
      end for                                      *O(1)
      return x;                                     O(1)
                                                  = O(n*n) = O(n^2)

1 个答案:

答案 0 :(得分:2)

您在 A部分中的回答是不正确的,因为|A[i] - A[j]|表示绝对值而不是 factorial 。例如:|1-3| = 2。因此,算法计算数组值之间的最大差异。

B部分中,您是对的,它是O(n ^ 2),它被称为二次方,您可以找到更多信息here