¿Cómo almacenar un vector disperso de manera eficiente?

Un vector disperso es un vector que tiene una gran cantidad de ceros, por lo que se necesita un espacio no deseado para almacenar estos ceros.
La tarea es almacenar un vector disperso dado de manera eficiente sin almacenar los ceros.

Ejemplos:  

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}

Enfoque: 
para almacenar el vector disperso de manera eficiente, se puede usar un vector de pares . El primer elemento del par será el índice del elemento vectorial disperso (que no es cero) y el segundo elemento será el elemento real. 

A continuación se muestra la implementación del enfoque anterior: 

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>
Producción: 

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

 

Publicación traducida automáticamente

Artículo escrito por prajmsidc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *