Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
¿Cómo obtener suficiente entropía para barajar cartas en Java?

Estoy trabajando en un proyecto de estadísticas que involucra cartas y barajar, y me encontré con un problema con la generación de números aleatorios.

¡De un simple poco de matemática hay 52! posibles permutaciones de baraja, que es aproximadamente 2^226. Creo que esto significa que necesito un generador de números aleatorios con un mínimo de 226 bits de entropía, y posiblemente más (no estoy seguro de este concepto, por lo que cualquier ayuda sería genial).

A partir de una búsqueda rápida en Google, el generador Math.random() en Java tiene un máximo de 48 bits de entropía, lo que significa que la gran mayoría de las posibles combinaciones de barajas no estarían representadas. Así que este no parece ser el camino a seguir en Java.

Estaba vinculado a este generador pero aún no tiene una implementación de Java. También para un poco de contexto aquí está uno de mis algoritmos de barajado (utiliza el método Fisher-Yates). Si tiene alguna sugerencia para mejorar la eficiencia del código, también sería fantástico.

 public void shuffle(int type, int swaps){ int[] newDeck = getNewDeck(); if(type == 1){ for(int i = 0; i < 52; i++){ int nextCardIndex = (int)(Math.random()*newDeck.length); deck[i] = newDeck[nextCardIndex]; newDeck = removeItem(nextCardIndex, newDeck); } } } public int[] getNewDeck(){ int[] newDeck = new int[52]; for(int i = 1; i <= 52; i++){ newDeck[i-1] = i; } return newDeck; } public int[] removeItem(int index, int[] array){ int[] newArray = new int[array.length-1]; for(int i = 0; i < index; i++){ newArray[i] = array[i]; } for(int i = index; i < array.length-1; i++){ newArray[i] = array[i+1]; } array = newArray; return array; }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Ha examinado las adiciones recientes que se incluyen en JDK 17?

https://docs.oracle.com/en/java/javase/17/core/pseudorandom-number-generators.html#GUID-08E418B9-036F-4D11-8E1C-5EB19B23D8A1

Hay muchos algoritmos disponibles:

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/random/package-summary.html#algorithms

Para barajar cartas, es probable que no necesite algo que sea criptográficamente seguro.

El uso de Collections.shuffle debería funcionar si proporciona un RNG decente.

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html#shuffle(java.util.List,java.util.Random)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda