分析程序

时间:2016-02-04 21:35:07

标签: algorithm analytics

我想知道是否有人能向我解释分析程序的语义。我知道如何做简单的,但有一些更复杂的我不知道该怎么做。例如,这是我书中的一个问题。我们给出了6个代码片段并告诉他们分析它们:

(1).  sum = 0;
      for( i = 0; i < n; ++i )
          ++sum;

(2).  sum = 0;
      for( i = 0; i < n; ++i )
          for( j = 0; j < n; ++j )
              ++sum;

(3).  sum = 0;
      for( i = 0; i < n; ++i )
          for( j = 0; j < n * n; ++j )
              ++sum;

(4).  sum = 0;
      for( i = 0; i < n; ++i )
          for( j = 0; j < i; ++j )
              ++sum;

(5).  sum = 0;
      for( i = 0; i < n; ++i )
          for( j = 0; j < i * i; ++j )
              for( k = 0; k < j; ++k )
                  ++sum;

(6).  sum = 0;
      for( i = 1; i < n; ++i )
          for( j = 1; j < i * i; ++j )
              if( j % i == 0 )
                  for( k = 0; k < j; ++k )
                      ++sum;

我理解1,2和4.那些很容易。我得不到的是3,5和6。

1次运行n次,以便其中一个位于Big-Oh(n)。 2有两个for循环,每个循环运行n次,因此这个循环为Big-Oh(n^2)。 4是我以前见过的东西。内循环的运行次数与i的次数相同。因此,如果i = 1然后循环运行一次,如果i = 2循环运行两次1 + 2 + 3 + ... + n模式n(n + 1) / 2,这意味着整个Big-Oh(n^2) }}。我不确定如何在条件中使用n * n进行3。这也是我不知道如何在i * i中使用i * i的原因。至于6,我们不仅拥有if,而且还有一个n语句,可能会也可能不会运行。我该怎么办?任何人都可以帮助解释如何做那些?感谢。

UPDATE 我对3有一个想法。那个外部for循环运行n^2次,内部for循环运行n * n^2次。那么对于那个,我们会n^3 Big-Oh(n^3)吗?那个人会在$scope.form = {}; $scope.car = null; $scope.getCar = function(hash) { $http.get('/cars/'+hash).success(function(car) { $scope.car = car; $scope.form = car; }); }; 吗?

1 个答案:

答案 0 :(得分:0)

你想出了第三个。同样的理由适用于所有这些。实际上,您的目标是根据sum找到n的最终价值。

对于第五个,即求和:Σ i = 0 n (Σ j = 0 n ^ 2 (j))

内部求和只是(i 2 *(i 2 + 1))/ 2,它来自the simple summation formula

然后你有Σ i = 0 n (i 2 *(i 2 + 1)) / 2等于[Σ i = 0 n (i 4 )+Σ i = 0 < sup> n (i 2 )] /。

这是O(N 5 ),看着主导词Σ i = 0 n (i 4 ),您可以将其视为一个整数,这样您只需增加指数就可以得到N 5 。第六个是作为练习留下的,想象一下sum到底会是什么。