计算给定程序的基本操作

时间:2015-05-06 18:36:24

标签: c++ performance runtime big-o

我正在查看以下内容:Operations Counting Example

应该显示以下伪代码的操作计数:

Algorithm prefixAverages(A)
 Input array A of n numbers
 Output array B of n numbers such that B[i] is the average
 of elements A[0], A[1], … , A[i]

for i = 0 to n - 1 do
   b = 0
   for j = 0 to i do
       b = b + A[j]
       j++;
   B[i] = b / (i + 1)
return B

但我不知道如何达到内部for循环的计数。它说对于case i=0; j=0;,内部for循环运行两次?但令我感到震惊的是它应该只运行一次才能看到0 < 0。任何人都可以提供有关给定操作数来自何处或提供自己的操作计数的信息吗?

这是基于原始操作的假设:

  • 分配
  • 阵列访问
  • 数学运算符(+, - ,/,*)
  • 比较
  • 增量/减量(伪装数学)
  • 返回陈述

如果有任何不清楚或您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:0)

当您关注的文章&#34;对于var&lt; - 0到var2&#34;时,它就像&#34; for(var = 0; var&lt; = var2; var ++),所以是的,当i = 0时,它进入&#34; for&#34;两次(一次当i = 0时,再次当i = 1时,它就会消失)。 (对不起,如果英语不好)

编辑和改进:当我计算程序的复杂性时,我唯一感兴趣的是大O复杂性;在这种情况下,你有&#39; i&#39;循环运行&#39; n&#39;时代,&#39; j&#39;循环运行&#39; i&#39;时间,所以&#39; i&#39;循环运行(1 + 2 + 3 + ... + n)次,即n(n + 1)/ 2次,这是O(n ** 2)复杂度。

在第一行中,你有一个赋值(i =某事),并且对每个i值进行比较(i <= n-1)(&#34; 2次操作&#34;),并作为最后一行值是i = n,它执行那两个操作,因为i = 0,直到i = n,并且因为那些是n + 1个值(从0到n),这一行做2(n + 1)次操作。

第二行有点明显,因为它进入循环n次(因为i = 0,直到i = n-1)。

在第二个循环中,它执行2个操作,一个任务和一个比较(就像第一个循环一样),并且这样做i + 2次(例如,当i = 0时,它进入循环1次,但它必须做i = 1的任务,1&lt; = 0比较,所以它总共2次),所以它做这个微积分2(i + 2)次,但它这样做,因为i = 0,直到i = n-1,所以要计算所有这些,我们必须做和(从i = 0到i = n-1:2(i + 2))= 2((i的总和从0到0) n-1)+(从i = 0到i = n-1的2之和))= 2((n(n-1)/ 2)+ 2n)= n(n-1)+ 4n = n&#34 ; 2 - n + 4n = n&#34; 2 + 3n。

我稍后会继续这样做,我希望到目前为止我的答案对你有所帮助。 (再次,对不起,如果一些不好的英语)