Ver Mensaje Individual
  #5 (permalink)  
Antiguo 16/07/2015, 10:21
Koan
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Respuesta: ¿Cambiar el step de un range o generador en tiempo de ejecución?

Cita:
Iniciado por razpeitia Ver Mensaje
Eso es porque todavía mantienes un enfoque de todo en un arreglo.

Lo que yo haría:
1. Obtener el numero de combinaciones en un arreglo de longuitud n (esto es sencillo y rápido).
2. Generar números aleatorios entre 1 y nCr (esto también es sencillo y rápido)
3. Para cada uno de esos números aleatorios obtener la n-esima combinación (esto también es -wait for it- sencillo y rápido).
A ver si me voy aclarando...

Un generador en Python no contiene todas las combinaciones en memoria. Por lo que las va generando en tiempo real. Al no tener un indice cada combinacion, no se puede llamar de forma selectiva a cada uno de ellas. Como si se haria con un arreglo.

Es decir, en un generador no se le puede pedir que nos devuelva la combinacion ubicada en las posiciones: 1, 4, 56, 34, 500, 560, etc...

Y en una matriz no podemos 'guardar' trillones de vectores.

Por ejemplo ¿Como guardar 1.61358778796735e+27 de combinaciones en una matriz?

200 numeros en 20 grupos

Código Python:
Ver original
  1. import math
  2. math.factorial(200) / (math.factorial(200 - 20) * math.factorial(20))

Resultado:

Código Python:
Ver original
  1. 1.61358778796735e+27

¿Como puedo decirle? De 1.61358778796735e+27 devuelveme las que te pido segun su posicion ordenada. Pero ¡Ojo!, que no recorra todas ellas para devolver las solicitadas. Ya que de ese modo, podria tardar una semana en darmelas.



Es que no se si estamos hablando de lo mismo

¡Saludos!

Última edición por Koan; 16/07/2015 a las 10:30