Foros del Web » Programando para Internet » PHP »

Optimización para anagrama. Memoria agotada

Estas en el tema de Optimización para anagrama. Memoria agotada en el foro de PHP en Foros del Web. Hola amigos, qué tal. Soy algo nuevo en esto de los foros pero les escribiré mi problema: Estaba aburrido y decidí escribir una función que ...
  #1 (permalink)  
Antiguo 17/03/2016, 19:08
 
Fecha de Ingreso: marzo-2016
Ubicación: Chignautla, Puebla
Mensajes: 1
Antigüedad: 8 años, 1 mes
Puntos: 0
Optimización para anagrama. Memoria agotada

Hola amigos, qué tal. Soy algo nuevo en esto de los foros pero les escribiré mi problema:
Estaba aburrido y decidí escribir una función que escriba todas las combinaciones posibles para una palabra, es decir, un anagrama. Funciona bien, pero solamente con cadenas de una longitud menor o igual a 4. Ya que si supero eso, me dice que el límite de memoria ha sido alcanzado. ¿Hay alguna forma de optimizar eso? O tal vez hacerlo en segundo plano, o cualquier cosa.
Para aclarar unas cosas: uso la función str_shuffle de php. Además, calculo todas las combinaciones posibles para la cadena con su factorial. Para calcular dicho factorial también escribí una función, pero esa no la pongo porque me parece innecesario. ¡Muchas gracias!
Soy un poco nuevo en esto de la programación. Les dejo aquí mi código:
Código PHP:
Ver original
  1. function dame_anagrama( $cadena , $arreglo_anagramas){
  2.  
  3.     $longitud_cadena = strlen( $cadena );
  4.     $combinaciones = factorial( $longitud_cadena );
  5.     $longitud_cadena = null;
  6.     if(count($arreglo_anagramas) +1 <= $combinaciones){
  7.         $anagrama = str_shuffle( $cadena );
  8.         if (!(in_array($anagrama, $arreglo_anagramas))) {
  9.             array_push($arreglo_anagramas, $anagrama);
  10.         }
  11.         $anagrama = null;
  12.         dame_anagrama($cadena, $arreglo_anagramas);
  13.         $arreglo_anagramas = null;
  14.         return;
  15.     }
  16.     $combinaciones = null;
  17.     sort( $arreglo_anagramas );
  18.     foreach($arreglo_anagramas as $x){
  19.         echo $x . "<br>";
  20.     }
  21. }
  #2 (permalink)  
Antiguo 17/03/2016, 21:24
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Optimización para anagrama. Memoria agotada

shuffle devuelve UNA ALEATORIA de todas las posibles (y el una aleatoria en mayusculas), por lo que será improbable que obtengas todas la combinaciones posibles y además no se exactamente que te devuelve "factorial"pero por el nombre no me gusta nada ya que la palabra no contendrá todos los caracteres anteriores a cada uno de ellos y esto huele demasiado a bucle infinito al cuadrado.

Prueba a tratar tu palabra como una cifra, que tus números disponibles sean las diferentes letras de la palabra y crea un contador.
  #3 (permalink)  
Antiguo 17/03/2016, 21:35
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Optimización para anagrama. Memoria agotada

o mejor aun le echamos un ojo al código de alguien que ya lo ha solucionado y dejamos de reinventar la rueda XD

http://www.solveet.com/exercises/Kat...2/solution-215

Etiquetas: funcion, memoria, optimización
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 07:33.