Estructura de Datos : Búsqueda Secuencial


Definiciones

              R1   R2   R3             Ri             Rn
   ........------------------.......--------.......--------.......
            | K1 | K2 | K3 |         | Ki |         | Kn |              n slots
   ........------------------.......--------.......--------.......

         R0   R1   R2   R3             Ri             Rn
   ...-----------------------.......--------.......--------.......
       | K0 | K1 | K2 | K3 |         | Ki |         | Kn |              n + 1 slots
   ...-----------------------.......--------.......--------.......


Funciones

SEQSRCH

Busca en un archivo F, con claves K1, K2, ..., Kn, por el registro Ri, tal que Ki = K. La variable n es la cantidad de registros del archivo. Las variables F, n y K son de entrada. La variable i es de salida e indica la posición del registro hallado, si i es distinto de 0, e indica que no existe un registro con la clave buscada si i es 0.


                                               +--.......--+  +-+  +-+  +------ Comenzar
                                               |           |  | |  | |  |
                                               |           |  | |  | |  |
                                               V           |  V |  V |  V
               R0   R1   R2   R3             Ri            Rn-2 Rn-1  Rn
         ...-----------------------.......--------.......------------------.......
             | K0 | K1 | K2 | K3 |         | Ki |         | Kn | Kn | Kn |              n + 1 slots    n - i + 1 comparaciones
         ...-----------------------.......--------.......------------------.......
                                            |
                                            |
                               Existe <-----+

                 +-+  +-+  +-+  +--.......--+  +--.......--+  +-+  +-+  +------ Comenzar
                 | |  | |  | |  |           |  |           |  | |  | |  |
                 | |  | |  | |  |           |  |           |  | |  | |  |
                 V |  V |  V |  V           |  V           |  V |  V |  V
               R0   R1   R2   R3             Ri            Rn-2 Rn-1  Rn
         ...-----------------------.......--------.......------------------.......
             | K0 | K1 | K2 | K3 |         | Ki |         | Kn | Kn | Kn |              n + 1 slots    n - 0 + 1 comparaciones
         ...-----------------------.......--------.......------------------.......
              |
              |
No existe <---+
Observar que el algoritmo siempre encuentra a K, aunque más no sea en el registro ficticio K0, pero en este caso devolvería un i = 0, indicatriz de que realmente no existe un registro con la clave igual a K. Si la clave no existe en el archivo se realizan n + 1 comparaciones. Si la clave existe en el archivo se realizan n - i + 1 comparaciones. El promedio de las búsquedas exitosas es la sumatoria, variando i desde 1 a n, de ( n - i + 1 ), luego dividida la sumatoria por n. La sumatoria anterior es igual a ( n + 1 ) / 2, lo que es igual a 0,5 * n + 0,5. Esto indica que se trata de un algoritmo que responde a un orden de magnitud lineal, del tipo O(n). Observar que si el file estaria ordenado respecto de la clave la búsqueda sería más rapida, ya que podríamos detener la búsqueda ni bien la clave del registro analizado es menor que la que se busca y decretar que no es hallada.


Ejercicios

Implementar la función SEQSRCH1(F,n,i,K), capaz de determinar el registro Ri, del archivo F, de n registros, tal que K sea igual a Ki, en las mismas condiciones que la función SEQSRCH(F,n,i,K), salvo que solo trabaja con archivos ordenados.