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
...-----------------------.......--------.......--------.......
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.
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.