How to store a Sparse Vector efficiently?
A sparse vector is a vector that has a large number of zeros so it takes unwanted space to store these zeroes.
The task is to store a given sparse vector efficiently without storing the zeros.
Examples:
Input: vector = { 2, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 5 } Output: {2, 3, 4, 1, 5, 4, 2, 3, 1, 5}
Approach:
To store the sparse vector efficiently, a vector of pairs can be used. The First element of pair will be the index of sparse vector element(which is non-zero) and the second element will be the actual element.
Below is the implementation of the above approach:
C++
// C++ program to store sparse vectors // with the help of vector of pair #include <bits/stdc++.h> using namespace std; // Store the sparse vector // as a vector of pairs vector<pair< int , int > > convertSparseVector(vector< int > v) { vector<pair< int , int > > res; for ( int i = 0; i < v.size(); i++) { if (v[i] != 0) { res.push_back(make_pair(i, v[i])); } } return res; } // Print the vector of pairs void print(vector<pair< int , int > > res) { for ( auto x : res) { cout << "index: " << x.first << " -> value: " << x.second << endl; } } // Driver function int main() { // Get the sparse vector vector< int > v{ 2, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 5 }; // Get the stored vector of pairs vector<pair< int , int > > res = convertSparseVector(v); // Print the vector of pairs print(res); return 0; } |
Java
// Java program to store sparse vectors // with the help of ArrayList of pair import java.util.ArrayList; class GFG{ static class Pair { int first, second; public Pair( int first, int second) { this .first = first; this .second = second; } } // Store the sparse ArrayList // as a ArrayList of pairs static ArrayList<Pair> convertSparseVector( int [] v) { ArrayList<Pair> res = new ArrayList<>(); for ( int i = 0 ; i < v.length; i++) { if (v[i] != 0 ) { res.add( new Pair(i, v[i])); } } return res; } // Print the ArrayList of pairs static void print(ArrayList<Pair> res) { for (Pair x : res) { System.out.printf( "index: %d -> value: %d\n" , x.first, x.second); } } // Driver code public static void main(String[] args) { // Get the sparse ArrayList int [] v = { 2 , 0 , 0 , 0 , 0 , 3 , 0 , 4 , 0 , 0 , 0 , 1 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 5 }; // Get the stored ArrayList of pairs ArrayList<Pair> res = convertSparseVector(v); // Print the ArrayList of pairs print(res); } } // This code is contributed by sanjeev2552 |
Python3
# Python3 program to store sparse vectors # with the help of vector of pair # Store the sparse vector # as a vector of pairs def convertSparseVector(v): res = [] for i in range ( len (v)): if (v[i] ! = 0 ): res.append([i, v[i]]) return res # Print the vector of pairs def printf(res): for x in res: print ( "index:" , x[ 0 ], " -> value:" , x[ 1 ]) # Driver Code if __name__ = = '__main__' : # Get the sparse vector v = [ 2 , 0 , 0 , 0 , 0 , 3 , 0 , 4 , 0 , 0 , 0 , 1 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 5 ] # Get the stored vector of pairs res = convertSparseVector(v) # Print the vector of pairs printf(res) # This code is contributed by Surendra_Gangwar |
Javascript
<script> // JavaScript program to store sparse vectors // with the help of vector of pair // Store the sparse vector // as a vector of pairs function convertSparseVector(v) { let res = []; for (let i = 0; i < v.length; i++) { if (v[i] != 0) { res.push([i, v[i]]); } } return res; } // Print the vector of pairs function print(res) { for (let x of res) { document.write( "index: " + x[0] + " -> value: " + x[1] + "<br>" ); } } // Driver function // Get the sparse vector let v = [2, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 5]; // Get the stored vector of pairs let res = convertSparseVector(v); // Print the vector of pairs print(res); // This code is contributed by _saurabh_jaiswal </script> |
Output:
index: 0 -> value: 2 index: 5 -> value: 3 index: 7 -> value: 4 index: 11 -> value: 1 index: 12 -> value: 5 index: 22 -> value: 4 index: 26 -> value: 2 index: 33 -> value: 3 index: 37 -> value: 1 index: 42 -> value: 5