Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 32 by

Estas en el tema de Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 32 by en el foro de PHP en Foros del Web. Hola a todos Estuve viendo la forma de hacer un algoritmo que me muestre todas las combinaciones posibles entre el numero 0 al 45, mostrado ...
  #1 (permalink)  
Antiguo 11/02/2015, 09:05
 
Fecha de Ingreso: enero-2015
Ubicación: en mi casa
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 0
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 32 by

Hola a todos
Estuve viendo la forma de hacer un algoritmo que me muestre todas las combinaciones posibles entre el numero 0 al 45, mostrado en una columna de 6 numeros.

Lo que intento hacer es ver cuantas combinaciones de numeros hay en un juego de loteria, donde hay que sacar 6 numeros diferentes, de entre 0 a 45, y la idea es mostrar todos los numeros de combinaciones, sin repetir ninguno.

Encontre un codigo, pero me da este error:

Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 32 bytes)

Ese error me da al querer poner el numero 6 en vez de 3 en esta linea:

$pe = permutations($words,3);

Segun entiendo, necesito unos 67 GB para poder mostrar todas las permutaciones de a 6 numeros del 00 al 45.

¿Alguna idea de como solucionarlo?
¿Hay forma de mandar la salida a un archivo de texto u otro formato?

Gracias

CODIGO:

<?PHP
ini_set('memory_limit', '65000M'); //Probe con memory_limit = -1 y no funciona
ini_set('max_execution_time', '300');

function permutations($arr,$n)
{
$res = array();

foreach ($arr as $w)
{
if ($n==1) $res[] = $w;
else
{
$perms = permutations($arr,$n-1);

foreach ($perms as $p)
{
$res[] = $w." ".$p;
}
}
}

return $res;
}

// Your array
$words = array('00','01','02','03','04','05','06','07','08' ,'09','10','11','12','13','14','15','16','17','18' ,'19','20','21','22','23','24','25','26','27','28' ,'29','30','31','32','33','34','35','36','37','38' ,'39','40','41','42','43','44','45');

// Get permutation by groups of 3 elements
$pe = permutations($words,3);

// Print it out
print_r($pe);
?>
  #2 (permalink)  
Antiguo 11/02/2015, 10:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allo

¿En serio son necesarios 67GB para realizar dichas permutas?

Creo que el problema es otro y si llegaste al extremo de acabarte la memoria entonces es más obvio aún: tu solución es mal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/02/2015, 10:15
 
Fecha de Ingreso: enero-2015
Ubicación: en mi casa
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allo

Puede ser que no sea el mejor algoritmo, no soy un programador experto, y tampoco soy matematico y no tengo experiencia con formulas matematicas...

Pero lo que veo que php es pesimo para este tipo de algoritmos...no me quiero imaginar a php trabajando con big data...

Voy a ver si otros lenguajes soportan generar 9 millones de combinaciones...seguro que java y c++ lo pueden manejar mucho mejor, pero php y la web son un desastre para esto...

Suerte!
  #4 (permalink)  
Antiguo 11/02/2015, 10:17
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allo

Y para eso haces un programa de php?
El número de combinaciones diferentes es : 46! / ((46-6)!*6!)
  #5 (permalink)  
Antiguo 11/02/2015, 10:23
 
Fecha de Ingreso: enero-2015
Ubicación: en mi casa
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allo

¿Y para que pretendes que use PHP o cualquier otro lenguaje?
¿Acaso los lenguajes de programacion no se usan para hacer ALGORITMOS?
¿No te rompieron la cabeza en la universidad, con diferentes lenguajes, para que hagas diferentes tipos de algoritmos que hagan calculos y cuentas?
¿No se te ocurrio pensar en crear con tu inteligencia si hay algortimos que demuestren lo pesimo que es un lenguaje de programacion, a la hora de manejar numeros, y toneladas de informacion?

Generalmente la gente que sabe, lo demuestra...yo no se, por eso pregunto, y pregunte en varios foros como hacerlo....muchos me tratan de ayudar, pero es obvio que tu pensamiento esta mas orientado a criticar, que en pensar una forma de crear un algoritmo capaz de generar 9 millones de combinaciones sin romper un servidor web...

Si no sabes crear codigo, callate...y si sabes hacerlo, probate a vos mismo que podes hacerlo.
  #6 (permalink)  
Antiguo 11/02/2015, 10:41
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allo

Cita:
Iniciado por oknarf1976 Ver Mensaje
¿Y para que pretendes que use PHP o cualquier otro lenguaje?
¿Acaso los lenguajes de programacion no se usan para hacer ALGORITMOS?
¿No te rompieron la cabeza en la universidad, con diferentes lenguajes, para que hagas diferentes tipos de algoritmos que hagan calculos y cuentas?
Espero que en la universidad, incluso antes, te enseñaran temas básicos de estadística y probabilidad.
Generar todas las combinaciones **manualmente**, por **fuerza bruta** es lo más lejano que existe de un "ALGORITMO".
Cita:
Iniciado por oknarf1976 Ver Mensaje
¿No se te ocurrio pensar en crear con tu inteligencia si hay algortimos...
Mi inteligencia la uso para cosas más productivas.Sobre todo, para evitar hacer cosas que ya existen.

Cita:
Iniciado por oknarf1976 Ver Mensaje
Generalmente la gente que sabe, lo demuestra...yo no se, por eso pregunto, y pregunte en varios foros como hacerlo....muchos me tratan de ayudar, pero es obvio que tu pensamiento esta mas orientado a criticar, que en pensar una forma de crear un algoritmo capaz de generar 9 millones de combinaciones sin romper un servidor web...
Si no sabes crear codigo, callate...y si sabes hacerlo, probate a vos mismo que podes hacerlo.
A mi mismo me lo pruebo desde hace décadas.No te me líes.Tú lo que has preguntado es
cuantas combinaciones de numeros hay en un juego de loteria. Que por ignorancia hayas usado la forma más bestia de saberlo, por lo que PHP te ha dado un error de memoria, te ha hecho venir aquí a preguntar Alguna idea de como solucionarlo.
Luego, por algún motivo que no alcanzo a entender, dices que el problema es de PHP.
Y, posteriormente, me vendes que no, que en realidad estás usando tu inteligencia para crear "algoritmos" capaces de romper lenguajes malisimos.

Pero tu preguna , que cuantas combinaciones de numeros hay en un juego de loteria , te la he contestado.Ahora bien, si no sabes preguntar, ni sabes responder, ni sabes cuándo te responden, como a la vista está, y encima intentas darme clases de, uh, lo que es un algoritmo, o cosas así...
Oye, mira...Whatever

Etiquetas: combinaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:34.