Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

215
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!