0% found this document useful (0 votes)
25 views

Multiplication of Sparse Matrix

This C program implements the multiplication of sparse matrices. It takes in two sparse matrices as input, represented as arrays with non-zero elements stored along with their row and column indices. It multiplies the matrices by iterating through the non-zero elements and calculating partial sums. The result is another sparse matrix with non-zero elements and their indices stored and output. Key steps include sorting the matrices, transposing one matrix, and iterating through the matrices in parallel to calculate the dot products of corresponding elements.

Uploaded by

Dhruv Sachdeva
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
25 views

Multiplication of Sparse Matrix

This C program implements the multiplication of sparse matrices. It takes in two sparse matrices as input, represented as arrays with non-zero elements stored along with their row and column indices. It multiplies the matrices by iterating through the non-zero elements and calculating partial sums. The result is another sparse matrix with non-zero elements and their indices stored and output. Key steps include sorting the matrices, transposing one matrix, and iterating through the matrices in parallel to calculate the dot products of corresponding elements.

Uploaded by

Dhruv Sachdeva
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

IMPLEMENTATION OF MULTIPLICATION OF SPARSE MATRICES

#include<stdio.h>

void print(int k[3][100], int count)


{
int i, j;
for (j = 0; j < 3; j++)
{
for (i = 0; i < count;i++)
{
printf("%d ",k[j][i]);
}
printf("\n");
}

void swap(int *a, int*b)


{
int temp;
temp = *a;
*a = *b;
*b = temp;
}

void sort(int k[3][100], int count)


{
int i, j;
for (i = 0; i < count; i++)
{
for (j = 0; j < count - i - 1; j++)
{

if (k[0][j] > k[0][j + 1])


{

swap(&k[0][j], &k[0][j +1]);


swap(&k[1][j], &k[1][j +1]);
swap(&k[2][j], &k[2][j +1]);
}
else if (k[0][j] == k[0][j + 1])
{
if (k[1][j] > k[1][j + 1])
{
swap(&k[0][j], &k[0][j +1]);
swap(&k[1][j], &k[1][j +1]);
swap(&k[2][j], &k[2][j +1]);
}
}
}
}
}

void transpose(int k[3][100], int count)


{
int i, j, temp;
printf("\n");

for (j = 0; j < count; j++)


{

swap(&k[0][j], &k[1][j]);
}
sort(k, count);

void multiply(int k[3][100], int count, int r1, int c1)


{
int b[20][20], l[3][100], i, j, r2, c2, size = 0, kpos, lpos,
result[3][100], r, c, tempk, templ, sum, rcount = 0;
printf("Enter no of rows");
scanf("%d", &r2);
printf("Enter no ofcolumns");
scanf("%d",&c2);
for (i = 0; i < r2; i++)
{
for (j = 0; j < c2; j++)
{
scanf("%d", &b[i][j]);
if (b[i][j] != 0)
{
l[0][size] = i;
l[1][size] = j;
l[2][size] = b[i][j];
size++;
}
}
}
if (c1 != r2)
{
printf("Not possible");

return;
}

transpose(l, size);

for (kpos = 0; kpos < count;)


{
r = k[0][kpos];
for (lpos = 0; lpos < size;)
{
c = l[0][lpos];

tempk = kpos;
templ = lpos;

sum =0;

while (tempk < count && k[0][tempk] == r && templ <size


&& l[0][templ] ==c)
{
if (k[1][tempk] < l[1][templ])
{
tempk++;
}
else if (l[1][templ] > k[1][tempk])
{
templ++;
}
else
{
sum += k[2][tempk++] * l[2][templ++];
}
}

if (sum !=0)
{
result[0][rcount] = r;
result[1][rcount] = c;
result[2][rcount] = sum;
rcount++;
}
while (lpos < size && l[0][lpos] == c)
{
lpos++;
}
}
while (kpos < count && k[0][kpos] == r)
{
kpos++;
}
}
print(result, rcount);
}

int main()
{
int a[20][20], k[3][100], i, j, m, n, count = 0;
printf("Enter no of rows");
scanf("%d",&m);
printf("Enter no ofcoloumns");
scanf("%d",&n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
if (a[i][j])
{
k[0][count] = i;
k[1][count] = j;
k[2][count] = a[i][j];
count++;
}
}
}

multiply(k, count, m, n);


}

Output

Dhruv sachdeva

You might also like