Foros del Web » Programación para mayores de 30 ;) » Programación General »

Es PHP poco potente?...

Estas en el tema de Es PHP poco potente?... en el foro de Programación General en Foros del Web. Hola a todos, Hace unos dias, inicie un proyecto para la escuela en el que tena que crear un programa que generase horarios escolares mediante ...
  #1 (permalink)  
Antiguo 12/08/2008, 08:09
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 11 meses
Puntos: 2
Es PHP poco potente?...

Hola a todos,

Hace unos dias, inicie un proyecto para la escuela en el que tena que crear un programa que generase horarios escolares mediante PHP. El caso es que utilizo un sistema de asignacion de asignaturas aleatorio basico y el caso es que el programa se me satura cuando ecibe demasiada informacion.

Lo que me hace pensar es que si pongo 4 dias de la semana, el programa me lo reproduce facilmente pero si le pongo 5 dias, se me para.

Con esto quiero decir que lo que tarda el programa no es progresivo ya que de un pequeño cambio a otro , el programa pasa de hacerlo muy rapido a pararse.

Tambien he incrementado el tiempo de procesamieno del script de 30 a 300 segundos pero aun asi , el programa no es capaz de procesarlo.

Nada mas, espero que puedan ayudarme ya que necesito que PHP me procese todo el programa.

Muchas gracias!
  #2 (permalink)  
Antiguo 12/08/2008, 08:18
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Es PHP poco potente?...

Esto no tiene nada que ver con el PHP. Esto sólo tiene que ver con el programador: tú en este caso.

Tienes que optimizar tus algoritmos, asegurarte que no malbaratas recursos y no tienes redundancia en los datos y asegurarte que el camino utilizado para resolver el problema es el más corto posible.

Para aprender eso sólo puedes mirarte libros de ADA (análisis y diseño de algoritmos) y practicar mucho. Sobretodo practicar es la clave.
__________________
Un Lannister siempre cumple sus promesas
  #3 (permalink)  
Antiguo 12/08/2008, 08:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Es PHP poco potente?...

Tema trasladado a Ingenieria del Software y Gestion de Proyectos.
  #4 (permalink)  
Antiguo 12/08/2008, 10:21
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: Es PHP poco potente?...

Puede que tengas razon, pero creo que tengo un sistema bastante bueno y agil.
Para que veais como es, voy a postearlo acontinuacion para que lo veais:

Código PHP:
$as $_POST[hor_lun];
//////////////////////////////////DISTRIBUIMOS LAS MATERIAS DEL LUNES/////////////////////////
    
$ale_cad=0;
    
$amat $mat;
     for(
$i=1$i<=$as$i++) 
     {
      
$ale mt_rand(1,$mat);
      if( 
$ale == $mat )
      {
      
$mat $mat 1;
      }
      
$bus substr_count($ale_cad$ale);
      
          while ( 
$bus != || $h[$ale] == 0)
              {
              
$ale_cad $ale_cad.$ale;
              
$ale mt_rand(1,$mat);
              
              if( 
$ale == $mat )
                 {
                  
$mat $mat 1;
                  }
                 
               
$bus substr_count($ale_cad$ale);
              }
        
$mat $amat;
        
$ale_cad $ale_cad.$ale;
        
$h[$ale] = $h[$ale] - 1
Os explico por partes que hace cada cosa:

Código PHP:
$as $_POST[hor_lun];
//////////////////////////////////DISTRIBUIMOS LAS MATERIAS DEL LUNES/////////////////////////
    
$ale_cad=0;
    
$amat $mat
Al principio declaramos las variables, $as, es un numero de asignaturas que tiene cad dia, en este caso el lunes. $ale_cad, es la cadena en la que se van almacenando los valores que ya hemos usado o que no sirven como validos. Y finalmente $amat, es el valor por defecto de $mat, que originalmente es un valor del numero de asignaturas totales.

Luego iniciamos un bucle del que saldran tantas asignaturas como asignaturas tiene asignadas el dia.

Código PHP:
 $ale mt_rand(1,$mat);
      if( 
$ale == $mat )
      {
      
$mat $mat 1;
      }
      
$bus substr_count($ale_cad$ale); 
Aqui vemos como $ale toma forma de un numero del 1 asta las materias que hayan, normalmente 11 o 12. Luego comprobamos si el numero aleatorio es igual al ultimo numero , con lo que si es asi, nos lo quitamos de enciam restandole 1 para reducir los numeros aleatorios. Al final buscamos el numero aleatorio en la cadena para ver si ya ha sido usado.

Código PHP:
 while ( $bus != || $h[$ale] == 0)
              {
              
$ale_cad $ale_cad.$ale;
              
$ale mt_rand(1,$mat);
              
              if( 
$ale == $mat )
                 {
                  
$mat $mat 1;
                  }
                 
               
$bus substr_count($ale_cad$ale);
              } 
Creamos un bucle en el que miramos si el numero aleatorio que ha salido esta en la lista o si el valor de tal numero es 0( aclaro que $h[$ale] tiene un valor del 0 al 3, con lo que si es 0, ya no puedo ponerlo mas veces en el horario). Si ocurre alguno de estas dos cosas, se mete en el bucle para cambiar de numero y si es el ultimo se vuelve a restar, al final se vuelve al bucle para ver si es un numero valido. Se vuelve a buscar en la cadena para ver si no esta en ella.

Código PHP:
$mat $amat;
        
$ale_cad $ale_cad.$ale;
        
$h[$ale] = $h[$ale] - 1
Si logra pasar el bucle, significa que tenemos un numero valido, nunca usado antes, y cuyo valor de $h[numero] no es 0 y por tanto puedo asignarlo otr vez.
en cuanto a $mat = $amat volvemos a asignarle su antiguo valor para scripts siguientes. Tambien inscribimos el numero en la cadena para que no pueda volver a ser escogido y restamos 1 a $h[numero] con lo que si es 0, luego ya no podra ser cojido en ningun dia.

Esto es todo, creo que esta bastante bien estructurado, pero no funciona optimamente.

A ver si alguien puede decirme metodos mas rapidos de algorritmos para este caso.

Porcierto, cuando el script se me bloquea siempre se me queda en esta linea
Código PHP:
$bus substr_count($ale_cad$ale); 
He pensado en cambiarla pero no se me ocurre una alternativa mas rapida.

Muchas gracias a todos por su tiempo y disculpen el toston este....
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 14:26.