C++ program to Convert a Matrix to Sparse Matrix
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)
Please Login to comment...