Given a matrix with most of its elements as 0, convert this matrix to sparse matrix in C++
Examples:
Input: Matrix: 0 1 1 1 2 2 2 1 3 3 2 5 4 3 4 Output: Sparse Matrix: 0 1 0 0 0 0 2 0 0 3 0 0 0 0 5 0 0 0 0 4 Explanation: Here the Sparse matrix is represented in the form Row Column Value Hence the row 0 1 1 means that the value of the matrix at row 0 and column 1 is 1
Approach:
- Get the matrix with most of its elements as 0.
- Create a new 2D array to store the Sparse Matrix of only 3 columns (Row, Column, Value).
- Iterate through the Matrix, and check if an element is non zero. In this case insert this element into the Sparse Matrix.
- After each insertion, increment the value of variable length(here ‘len’). This will serve as the row dimension of the Sparse Matrix
- Print the Dimension of the Sparse Matrix and its elements.
CPP
// C++ program to convert a Matrix // into Sparse Matrix #include <iostream> using namespace std;
// Maximum number of elements in matrix #define MAX 100 // Array representation // of sparse matrix //[][0] represents row //[][1] represents col //[][2] represents value int data[MAX][3];
// total number of elements in matrix int len;
// insert elements into sparse matrix void insert( int r, int c, int val)
{ // insert row value
data[len][0] = r;
// insert col value
data[len][1] = c;
// insert element's value
data[len][2] = val;
// increment number of data in matrix
len++;
} // printing Sparse Matrix void print()
{ cout << "\nDimension of Sparse Matrix: "
<< len << " x " << 3;
cout << "\nSparse Matrix: \nRow Column Value\n" ;
for ( int i = 0; i < len; i++) {
cout << data[i][0] << " "
<< data[i][1] << " "
<< data[i][2] << "\n" ;
}
} // Driver code int main()
{ int i, j;
int r = 5, c = 4;
// Get the matrix
int a[r] = { { 0, 1, 0, 0 },
{ 0, 0, 2, 0 },
{ 0, 3, 0, 0 },
{ 0, 0, 5, 0 },
{ 0, 0, 0, 4 } };
// print the matrix
cout << "\nMatrix:\n" ;
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
cout << a[i][j] << " " ;
}
cout << endl;
}
// iterate through the matrix and
// insert every non zero elements
// in the Sparse Matrix
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
if (a[i][j] > 0)
insert(i, j, a[i][j]);
// Print the Sparse Matrix
print();
return 0;
} |
Output:
Matrix: 0 1 0 0 0 0 2 0 0 3 0 0 0 0 5 0 0 0 0 4 Dimension of Sparse Matrix: 5 x 3 Sparse Matrix: Row Column Value 0 1 1 1 2 2 2 1 3 3 2 5 4 3 4
Time complexity: O(m*n) where m is no of rows and n is no of columns of matrix
Auxiliary Space: O(MAX)