Pues no sé qué le pasará entonces a mi implementación de rand()
Código PHP:
Ver originalCon suffle: 14
Fuerza bruta: 26
Mejor: 14
Con suffle: 12
Fuerza bruta: 24
Mejor: 10
Con suffle: 13
Fuerza bruta: 28
Mejor: 12
Con suffle: 13
Fuerza bruta: 23
Mejor: 11
Con suffle: 14
Fuerza bruta: 24
Mejor: 11
Con suffle: 13
Fuerza bruta: 24
Mejor: 10
Con suffle: 13
Fuerza bruta: 24
Mejor: 11
Con suffle: 13
Fuerza bruta: 23
Mejor: 11
Con suffle: 13
Fuerza bruta: 24
Mejor: 11
Con suffle: 13
Fuerza bruta: 23
Mejor: 11
Así que he ido a:
http://sandbox.onlinephpfunctions.com/, a ver qué salía:
PHP 5.5.5 : Con suffle: 10 Fuerza bruta: 121 Mejor: 10
PHP 5.5.0 Con suffle: 10 Fuerza bruta: 127 Mejor: 9
PHP 5.4.21 Con suffle: 10 Fuerza bruta: 137 Mejor: 9
PHP 5.4.5: Con suffle: 9 Fuerza bruta: 131 Mejor: 9
PHP 5.3.23 :Con suffle: 9 Fuerza bruta: 135 Mejor: 9
Cita: Esta filosofía tiene una mejora, y es no hacer un shuffle, si no un array_rand, que saca valores al azar. Así mejoras algo el tiempo de ejecución, pero no el consumo de memoria, que sigue siendo disparatado en comparación al problema a resolver.
Si quieres comparar shuffle con array_rand, no añadas un array_slice.Quita el array_slice (que no es necesario), y vuelve a ejecutar tus tests.
Veamos que dice el sandbox sin el array_slice:
5.5.5: Con suffle: 7 Fuerza bruta: 127 Mejor: 9
5.5.0: Con suffle: 6 Fuerza bruta: 129 Mejor: 10
5.4.1:Con suffle: 7 Fuerza bruta: 130 Mejor: 9
5.3.23:Con suffle: 6 Fuerza bruta: 134 Mejor: 9
Sobre el consumo de memoria "disparatado" en comparación al problema a resolver (aprox. 4*44 bytes): Declara 1 sola estructura de control en PHP (un if, un for, cualquier cosa), y va a consumir más que eso.El algoritmo de fuerza bruta declara un bucle, variables, aparte de arrays de destino, cosa que en shuffle no necestas....Mucho más de 4*44 bytes.No veo lo "disparatado".
PD : resultados de
http://writecodeonline.com/php:
Con suffle: 12 Fuerza bruta: 236 Mejor: 17 (sin array_slice)
PD2: Ideone da los resultados que indicas.Para n=8, el tiempo es el mismo en shuffle y rand.La única cosa donde he visto resultados "parecidos" es en codepad.org, pero es demasiado inestable como para ser significativo.