Suponiendo que quieras una respuesta práctica a "Tengo demasiadas cartas en mis manos a la vez; ¿cómo puedo barajarlas razonablemente bien en un tiempo relativamente corto?", puede que quieras considerar una "barajada paralela", distribuyendo el trabajo entre varios jugadores con la esperanza de que podamos conseguir un mazo adecuadamente barajado en menos minutos de reloj de pared que una barajada de una sola persona, incluso si requiere más operaciones totales y minutos de jugador que una barajada de una sola persona.
Me recuerda al "diagrama de mariposa FFT" utilizado en el procesamiento digital de señales y a la "red Omega" utilizada en algunos clusters de ordenadores, basada en la "interconexión perfecta".
http://www.ece.ucsb.edu/~kastner/ece15b/project1/fft_description_files/image032.jpg
http://github.com/vijendra/Omega-network/raw/master/16X16.png
Algoritmo paralelo de barajar y dar: (para $k \le n$ )
- de alguna manera, da a k jugadores n cartas a cada uno (o bien coge un bloque de n cartas de la parte superior para cada jugador, o reparte uniformemente las cartas a los k jugadores)
- barajar: cada uno de los k jugadores baraja uniformemente su submazo de n cartas
- repartir: cada uno de los k jugadores reparte por igual -- boca abajo -- su submazo a los otros k jugadores (incluida ella misma). De forma equivalente, cada jugadora divide su submantel en k submanteles iguales y distribuye un submantel a cada jugador (incluida ella misma). Después de que todos los jugadores hayan repartido, cada jugador reúne sus cartas (unas cuantas de cada jugador, incluida ella misma) en un submazo de n cartas.
- barajar: (como arriba)
En esta etapa (1 ronda), hemos hecho el equivalente a aleatorizar cada fila de una matriz, y luego cada columna. Cualquier carta particular podría ser en cualquier lugar después de una ronda de barajar-descartar-barajar, con igual probabilidad. Por desgracia, en esta fase, todavía hay algunas permutaciones que tienen probabilidad cero. Por ejemplo, las posibles permutaciones equivalentes a una rotación por cizalla (RBS) ("¿cómo rotar un mapa de bits?") requieren 3 cizallas. Lo más cercano que puede producir una sola ronda de barajar-desbaratar-barajar es 2 cizallas, lo que no es suficiente para producir esas permutaciones. Así que continuamos con la segunda ronda:
- trato: (como arriba)
- barajar: (como arriba)
- reunir todas las subcubiertas en una gran cubierta completa
El algoritmo completo de 2 rondas shuffle-deal-shuffle-deal-shuffle puede producir cualquier permutación posible, pero cada permutación no tiene exactamente la misma probabilidad.
Cada uno de los dos pasos de "reparto" mezcla al menos tan bien como una sola barajada de las cartas completas. El documento - por Dave Bayer y Persi Diaconis - que David Speyer mencionó demuestra que $m = \frac{3}{2} \log_2 (kn) + \theta$ barajan los rizos son suficientes.