Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema busqueda interpolacion

Estas en el tema de Problema busqueda interpolacion en el foro de C/C++ en Foros del Web. Tengo mi algoritmo de interpolación pero se queda trabado cuando le doy un numero a buscar. Necesito ayuda a ver si le pueden hayar el ...
  #1 (permalink)  
Antiguo 09/05/2010, 02:03
 
Fecha de Ingreso: febrero-2005
Mensajes: 17
Antigüedad: 19 años, 5 meses
Puntos: 0
Problema busqueda interpolacion

Tengo mi algoritmo de interpolación pero se queda trabado cuando le doy un numero a buscar. Necesito ayuda a ver si le pueden hayar el error

Código:
int intersearch (int v[500000], int max, int num)
{
    int izq, der, pos;
     izq=1;
     der=max;
     
     while (v[der]>=num || v[izq]<num)
     {
           pos= izq+(num-v[izq])*(der-izq)/(v[der]-v[izq]);
           if(num>v[pos])
                         izq=pos+1;
           else
               if(num<v[pos])
               der=pos-1;
               else
               izq=pos;
     }
     
     if (v[izq]==num)
        return izq;
     else
         return -1;
}

Mandado a llamar, lo demás aparte de la llamda está bien, está siendo probado con 30 archivos automaticamente y con otras 2 busquedas que funcionan.

Código:
case 3:
                                           op2=menuarch();
                                           printf("Numero a buscar en todas las pruebas: ");
                                           scanf("%d ",&num);
                                           printf("\nProcesando");
                                           for(int i=1;i<=30;i++)
                                           {
                                                   printf(".");
                                                   sprintf(root,"%d/%d",op2,i);
                                                   double secs;
                                                   LARGE_INTEGER t_ini, t_fin; 
                                                   tam=llenavec(v,root);
                                                   quicksort(v,0,tam);
                                                   QueryPerformanceCounter(&t_ini);
                                                   pos[i]= intersearch(v,tam,num);
                                                   QueryPerformanceCounter(&t_fin);
                                                   time[i] = performancecounter_diff(&t_fin, &t_ini);
                                           }
                                           guardavecb(time,pos);
                                           break;
  #2 (permalink)  
Antiguo 09/05/2010, 20:50
Avatar de gvite666  
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Problema busqueda interpolacion

ps mira ignoro que es lo que quieras hacer en tu segmento de codigo, tal ves con unos pequeños comentarios de que es lo que quieres hacer en cada linea se vea mas claro el error, y por lo que pude observar fue, hee.. ignoro como esq ingresas tus valores y provando varias cosas encontre unos errores que tienes que pensar como solucionar para que no falle tu programa, por ejemplo:
1. al poner los valores de v[] asi;
for(i=0;i<=50;i++)
{
v[i]=i;
}
encontre que el valor de "pos" es el valor de num en todos lo casos, entonces entra en un bucle infinito.
2. otro al poner v[izq] como un numero mayor que num, el valor de pos es negativo implicando que al final del while siempre el valor de izq=1.

entonces tendrias que revisar que es lo que esta pasando con la operacion de "pos".

otra cosa, mira, se que tal ves no es muy importante y q si funcione si no lo haces, pero ese doble return, a pesar que esta dentro de un if, un buen programador no solo se trata de que funcionen las cosas, sino de evitar que las cosas fallen y tengan una buena sintaxis de programacion para hacer mas eficiente tu programa, entonces en todas las funciones que tengas que regresar algo solo trata de poner un solo return.
  #3 (permalink)  
Antiguo 10/05/2010, 00:03
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Problema busqueda interpolacion

Podrias decirme cual metodo de interpolacion es?

Etiquetas: interpolacion, 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 18:20.