Ver Mensaje Individual
  #17 (permalink)  
Antiguo 15/10/2012, 12:09
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Duda con shuffle

A mi me encantan las discusiones, es donde más se aprende xd. Y ya que estoy logeado, aportaré otra valiosa lección que acabo de recordar:

Ninguno de los algoritmos de Emprear está bien equilibrado. Aparentemente parece que el array está desordenado. De acuerdo. Pero si ejecutas 1000 veces ese algoritmo con el mismo array, y comparas los resultados usando cálculos estadísticos (de los cuales yo no tengo ni idea), verás que su solución no es tan aleatorioa como parece.
Demostrarlo ya digo que es difícil, pero entender el por qué es mucho más sencillo.

La direrencia principal entre su algoritmo y el que yo he posteado es ésta:
MARLANGA usa para obtener un número al azar el nuevo índice, la variable n. Pero esa variable va decreciendo con cada vuelta del bucle. Emprear sin embargo usa siempre el length del array a mezclar.

¿Cuál es el problema?
Imaginemos que tenemos un array de 4 posiciones con elementos diferentes.
¿Cuántas combinaciones podemos crear? Sencillo:
C=4! = 4*3*2*1 = 24 combinaciones.
¿Y cómo funciona el algoritmo de marlanga? IGual. Primero genera al azar un número usando todas las posiciones de array (4). Luego, sólo de 3, despues de 2, y finalmente de 1. Asi que cubro todas las posibles combinaciones sin repetir ninguna.

Ahora veamos el algoritmo de Emprear. Él, usando el array de 4 posiciones, 4 vueltas de bucle. Y en cada vuelta, genera un número entre 4 posibilidades. Asi que en total, el número de combinaciones que genera su algoritmo es de 4^4 = 4 * 4 * 4 * 4 =256 posibilidades.

Y aquí viene el problema: 256 no es múltiplo de 24, asi que varias (8) de sus combinaciones tiene más posibilidades de aparecer que otras (16). La mezcla no está equilibrada.

Los cálculos:
256/24=10;
256 - (24*10) = 16
24-16=8