Foros del Web » Programando para Internet » PHP »

Algoritmo de Busqueda

Estas en el tema de Algoritmo de Busqueda en el foro de PHP en Foros del Web. hola todos los foreros, estoy realizando una aplicacion web que se conecta a 2 diferentes Bases de datos, funciona como si fuera un importador, es ...
  #1 (permalink)  
Antiguo 16/05/2011, 13:47
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Algoritmo de Busqueda

hola todos los foreros,

estoy realizando una aplicacion web que se conecta a 2 diferentes Bases de datos,
funciona como si fuera un importador, es decir, de la BD origen realiza una consulta y tiene que ir comparando si existe en la BD destino, si existe lo actualiza y si no lo inserta, se trabaja con mas de 2000 registros,
he probado hacerlo con el algoritmo de busqueda binario, pero se demora un poco y sobre pasa el tiempo de 30 sec que tiene el php como maximo de espera de ejuciocn de un script,

si alguien tiene alguna idea de como poder resolver, consejo, me seria de mucha utilidad

saludos
rodno
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #2 (permalink)  
Antiguo 16/05/2011, 13:55
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Algoritmo de Busqueda

Utiliza la siguiente función para permitir al script ejecutarse durante más tiempo.

Código PHP:
Ver original
  1. ini_set('max_execution_time', 300); //300 segundos

o esta:

Código PHP:
Ver original 
  #3 (permalink)  
Antiguo 16/05/2011, 14:17
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Respuesta: Algoritmo de Busqueda

hola, gracias por la respuesta, ese podria ser unas de los consejos que voy a tomar,
pero en realidad lo que me interesa es un algoritmo que busqueda optimo que consuma lo menos recurso posibles.

uno que he probado es el algortimo de busqueda binario, ordeno el el reultado de la consulta,
"el divide la cantidad
entre dos, y compara el valor buscado, y verifica si utiliza la lista superior o inferior"


saludos y gracias
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #4 (permalink)  
Antiguo 16/05/2011, 14:43
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Algoritmo de Busqueda

El algoritmo de búsqueda binaria es de los mejores (sino el mejor) cuando los datos están ordenados, así que no creo que encuentres otro más rápido.

Supongo que la ordenación del resultado la haces en la propia consulta sql, si no es así mejor hazlo.
  #5 (permalink)  
Antiguo 16/05/2011, 15:01
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Respuesta: Algoritmo de Busqueda

si, lo hago en la misma consulta, lo no me hice explicar bien,

lo que voy a tener que hacer acortar los limites de los resultados de los recordset para ver si gano en velocidad de respuesta,

cualquier otra sugerencia se admite
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #6 (permalink)  
Antiguo 16/05/2011, 15:04
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Pregunta Respuesta: Algoritmo de Busqueda

hola, mira como lo implemente, o lo mejor tengo algun error y por eso se me demora

Código PHP:
                                    $limit_search=round($rs_datos_destino->RecordCount()/2,0);
                                    echo 
$limit_search;
                                    while (!
$rs_datos_origen->EOF)
                                    {
                                       
//$rs_datos_destino->fields[3];
                                      // while ($i<10)
                                       //{
                                        

                                            
$i++;
                                            
                                            
$flag_compare=false;
                                            
$rs_datos_destino->Move($limit_search);
                                            if (
$rs_datos_destino->fields[3]==$rs_datos_origen->fields[0])
                                                
$flag_compare=true;
                                            else
                                            if (
$rs_datos_destino->fields[3]>$rs_datos_origen->fields[0]) 
                                                {
                                                 
//$limit_search=round($limit_search/2,0);
                                                 //echo $limit_search." mayor \n";
                                                 
$rs_datos_destino->MoveFirst();
                                                 for (
$k=0;$k<$limit_search;$k++)
                                                    {
                                                    if (
$rs_datos_destino->fields[3]==$rs_datos_origen->fields[0])
                                                       {
                                                        
$flag_compare=true;
                                                        
$k=$limit_search;
                                                       }
                                                       
//echo "inferior \n";
                                                   
$rs_datos_destino->MoveNext();    
                                                    }
                                                }
                                            else 
//Busqueda 
                                                
{
                                                
//$limit_search=round(($rs_datos_destino->RecordCount()-$limit_search)/2,0); 
                                                
                                                 
$rs_datos_destino->MoveNext();
                                                 
                                                  while (!
$rs_datos_destino->EOF || $flag_compare!=true)
                                                      {
                                                      
//echo " superior \n";  
                                                      
if ($rs_datos_destino->fields[3]==$rs_datos_origen->fields[0])
                                                         
$flag_compare=true;
                                                       
$rs_datos_destino->MoveNext();    
                                                      }
                                                }
     
                                      
$rs_datos_origen->MoveNext();  
                                   } 
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #7 (permalink)  
Antiguo 16/05/2011, 15:09
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Algoritmo de Busqueda

Yo ahí no veo una búsqueda binaria, más bien parece una búsqueda secuencial (mucho más lenta), aunque puedo estar equivocado.

Normalmente una búsqueda binaria se realiza mediante recursión (por supuesto, se puede realizar una versión iterativa).

Etiquetas: algoritmos, busquedas
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 10:55.