C++ program to Convert a Matrix to Sparse Matrix
Last Updated :
11 Jul, 2022
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
#include <iostream>
using namespace std;
#define MAX 100
int data[MAX][3];
int len;
void insert( int r, int c, int val)
{
data[len][0] = r;
data[len][1] = c;
data[len][2] = val;
len++;
}
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" ;
}
}
int main()
{
int i, j;
int r = 5, c = 4;
int a[r] = { { 0, 1, 0, 0 },
{ 0, 0, 2, 0 },
{ 0, 3, 0, 0 },
{ 0, 0, 5, 0 },
{ 0, 0, 0, 4 } };
cout << "\nMatrix:\n" ;
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
cout << a[i][j] << " " ;
}
cout << endl;
}
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
if (a[i][j] > 0)
insert(i, j, a[i][j]);
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)
Share your thoughts in the comments
Please Login to comment...