es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Almacenamiento eficiente de bits 2D en Ruby (100M elementos) con bajo consumo de memoria.

Quiero utilizar una estructura de datos grande para representar un bit (0 o 1) o booleano (verdadero/falso) en Ruby.

En el siguiente ejemplo de código, estoy usando una matriz 2D de tamaño 10^4 * 10^4, para almacenar datos booleanos.

require ‘get_process_mem’

num = 10000
twod = Array.new(num) { Array.new(num, false) }
for i in 0..num-1 do
for j in 0..num-1 do
twod[i][j] = i > j
end
end

mem = GetProcessMem.new
puts mem.inspect

La salida muestra que utiliza ~778 MB.

#

Acabo de intentar cambiar el tipo de dato a entero en el código, y el uso de memoria informa el mismo valor.

Código actualizado:

require ‘get_process_mem’

num = 10000
twod = Array.new(num) { Array.new(num, 500) }
for i in 0..num-1 do
for j in 0..num-1 do
twod[i][j] = 1000+i+j
end
end

mem = GetProcessMem.new
puts mem.inspect

Salida:

#

¡Esperaba que la matriz booleana usara menos memoria que la matriz de enteros, lo que no parece ser el caso!
¿Hay alguna otra forma optimizada de almacenar valores de bits o booleanos?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay formas más eficientes en términos de memoria para representar una estructura de datos de bits o booleana en Ruby. Una opción es usar una clase o gema BitArray, lo que permite manipular los bits individuales en una estructura de datos compacta. Otra opción es usar los operadores bitwise integrados en Ruby para almacenar varios valores booleanos dentro de un solo número entero. Por ejemplo, se pueden representar 32 valores booleanos con un solo número entero de 32 bits, usando operaciones bitwise para establecer y desestablecer bits individuales. Este enfoque puede ser más complejo de implementar, pero puede ser mucho más eficiente en términos de memoria para estructuras de datos booleanas grandes.

Comments are closed.