valores utilizando una teclado programas posiciones por operaciones muestra matriz matrices interfaz grafica ejercicio cómo cuadrada con comparar como agregan java boolean

utilizando - ¿Cómo se hacen matrices booleanas REALMENTE grandes usando Java?



operaciones con matrices en java utilizando interfaz grafica (10)

¿Por qué no simplemente almacenar los valores en un archivo y luego buscar la posición en el archivo y obtener el valor correcto? Como han dicho otros, eso es 70GB de datos. En la mayoría de los casos, ni siquiera sería capaz de mantener eso en la memoria. Si va a almacenarlo en un archivo, incluso podría mirar bits individuales al almacenar y recuperar los datos utilizando operadores bit a bit para ahorrar espacio de almacenamiento.

Además, dado que el número de números primos disminuye con el tamaño de los números, probablemente sea mejor almacenar los números primos en el archivo, en orden, y luego hacer una búsqueda binaria para ver el número si es uno de los números primos. .

Cuando intento crear una matriz booleana muy grande utilizando Java, como por ejemplo:

boolean[] isPrime1 = new boolean[600851475144];

Me da una posible pérdida de error de precisión?

¿Es demasiado grande?


¿Qué valores tienes en la matriz? Para un número tan grande, supongo que será una matriz dispersa, así que tal vez sería mejor usar un Mapa / Lista y simplemente asignar espacio y almacenar un valor por un valor de 1 por un bit. O para un valor de 0 si la mayoría de sus valores serán 1.



El problema es que está utilizando un valor largo frente a un valor int para el tamaño de la matriz. Java no admite longitudes de matriz más largas que el valor máximo de un int. Java trata su longitud como larga porque el tamaño que especificó supera el valor máximo para una int pero se ajusta dentro de una longitud larga. Por lo tanto, debe convertir la longitud a una int para crear una matriz. La conversión de long -> int está produciendo la advertencia que estás viendo


Puede usar una matriz de longs, encapsulada en una clase que manejaría todas las operaciones en la matriz. Algo así como su propia implementación de BitSet.


Um ... eso sería alrededor de 70GB de booleanos. No va a funcionar De ninguna manera.


Ya que intentas resolver el problema de Euler # 3 de la manera incorrecta, aquí hay una pista: se supone que debes encontrar todos los factores primos de un número, no todos los números primos por debajo de un cierto límite.

Por cierto: este problema particular de Euler se puede resolver usando una cantidad muy pequeña de RAM.


Apache ActiveMQ tiene una estructura de datos llamada BitArrayBin. Esto se usa para averiguar si un mensaje está duplicado. Un ID de mensaje es una combinación de ID de productor e ID de secuencia. Cada productor tendrá un BitArrayBin para rastrear sus ID de secuencia. Una vez que descubre el BitArrayBin para el productor dado, establece el ID de secuencia que es un valor largo para el BitArrayBin.

oldValue = bitArrayBin.setBit(sequenceId, true) if (oldVlaue) { "message is duplicated" }

El método devuelve el valor anterior.

Si y es el índice largo, se usa para derivar en un índice bin y un desplazamiento en él.

y = bin index * 64 + offset

BitArrayBin no es más que un soporte para muchos contenedores donde se puede definir el tamaño durante su construcción. Cada contenedor contiene una variable larga para almacenar los bits para que pueda almacenar hasta 64 valores booleanos.

El enmascaramiento de bits se usa para establecer el bit, y luego, obtener su valor.

Esta clase no tiene mucha documentación. Necesitas pasar por su código fuente para conocer las partes internas.


Un índice de matriz es un int, no un largo, por lo que su "matriz" es demasiado grande para caber en una matriz. Una de las clases de la Colección Java podría ser más adecuada. No importa: Collection.size () también devuelve un int, por lo que Collection no puede almacenar más elementos de Integer.MAX_VALUE tampoco.


Para almacenar 600 mil millones de bits, necesita un espacio de direcciones mínimo absoluto de 75 gigabytes . ¡Buena suerte con eso!

Peor aún, la especificación Java no especifica que una matriz boolean usará un solo bit de memoria para cada elemento; podría ( y en algunos casos lo hace ) usar más.

En cualquier caso, reconozco ese número del Proyecto Euler # 3 . Si necesita tanta memoria, lo estás haciendo mal ...