Page 32, Exercise 6: Product
a. Counts
void prod(int a[][MAX_SIZE], int b[][MAX_SIZE], int c[][MAX_SIZE], int rowsA, int colsB, int colsA)
{
int i, j,k;
int count = 0;
for (i = 0; i < rowsA; i++) {
count ++; /*for i loop */
for (j = 0; j < colsB; j++) {
c[i][j] = 0; count++; /* for assignment */
count++; /*for j loop */
for (k = 0; k < colsA; k++) {
count++; /* for k loop*/
c[i][j] += (a[i][k] * b[k][j]); count++; /*for assignment */
}
count++; /*last time of k */
}
count++; /* last time of j */
}
count++; /* last time of i */
printf("Prod Count: %d\n", count);
}
b. Simplified Counts
void prod(int a[][MAX_SIZE], int b[][MAX_SIZE],
int c[][MAX_SIZE], int rowsA, int colsB, int colsA)
{
int i, j,k;
int count = 0;
for (i = 0; i < rowsA; i++) {
for (j = 0; j < colsB; j++) {
c[i][j] = 0; count++;
count+=3; /* includes last time of k loop */
for (k = 0; k < colsA; k++) {
c[i][j] += (a[i][k] * b[k][j]);
count+=2;
}
}
count+=2; /* for i loop and last time of j loop */
}
count++; /* last time of i */
printf("Prod Count: %d\n", count);
}
c. Final Count for 5x5 matrix
void prod(int a[][MAX_SIZE], int b[][MAX_SIZE], int c[][MAX_SIZE],
int rowsA, int colsB, int colsA)
{
int i, j,k;
for (i = 0; i < rowsA; i++)
for (j = 0; j < colsB; j++) {
c[i][j] = 0;
for (k = 0; k < colsA; k++)
c[i][j] += (a[i][k] * b[k][j]);
}
}
d. Step Count Table : 336
| Statement | s/e | f (A = rows A, B = rowsB) | Total Steps |
void prod(int a[][MAX_SIZE], int b[][MAX_SIZE],
int c[][MAX_SIZE], int rowsA, int colsB, int colsA)
{
int i, j,k;
for (i = 0; i < rowsA; i++)
for (j = 0; j < colsB; j++)
{
c[i][j] = 0;
for (k = 0; k < colsA; k++)
c[i][j] += (a[i][k] * b[k][j]);
}
} |
0 0 0 0 1 1 0 1 1 1 0 0 |
1 1 1 1 A+1 A•B+ B+1 A•B A•B A•B•A + A•B+ A+1 A•B•A + A•B+ A A•B A |
0 0 0 0 A+1 A•B+ B+1 0 A•B A•B•A + A•B+ A+1 A•B•A + A•B+ A 0 0 |
| Total : 2A•B•A + 3A•B + 2A + B + 3 | |||