我试图理解下面给出的代码的操作计数。
void add(matrix a, matrix b, matrix c, int m, int n)
{
for(int i = 0; i < m; i++)
{
count++; //for 'for' i -------(a)
for(int j = 0; j < n; j++)
{
count++; //for 'for' j -------(b)
c[i][j] = a[i][j] + b[i][j];
count++; //for assignment ------(c)
}
count++; //for last time of 'for' j ------(d)
}
count++; //for lastime of 'for' i ---------(e)
}
作者使用变量计数来计算操作计数。我知道声明性语句(int i = 0; int j = 0)的操作计数为0。
每次for循环运行时,以下表达式应该为i&lt;米; i ++只有1次操作i&lt; m被执行。
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
但作者只计算了一次(a)和(b)。这是否意味着我&lt; m和j&lt; n不按运算计算?
在此行中,操作计数应为2:1加法运算和1个赋值操作。
c[i][j] = a[i][j] + b[i][j];
他再次计算过一次(c)。
由于这些问题,我不知道为什么他在(d)和(e)增加了计数。
//Simplified program with counting only
line void add (matrix a, matrix b, matrix c, int m, int n)
{
for(int i = 0; i < m; i++)
{
for(int j = 0; j < m; j++)
count += 2;
count += 2;
}
count++;
}
谢谢:)