R1 R2 R3 Rm Rn-2 Rn-1 Rn
........------------------.......--------.......------------------.......
| K1 | K2 | K3 | | Km | |Kn-2|Kn-1| Kn | n slots
........------------------.......--------.......------------------.......
|<---------------------->| |<---------------------->|
Subarchivo menor Subarchivo mayor
Busca en el archivo F, secuencial, con registros R1, R2, ..., Rn y claves
K1 =< K2 =< ... =< Kn, por el registro Ri, tal que Ki = K.
Si i devuelve 0, no existe un registro en el archivo con la clave buscada.
Si i es distinto de 0, es la posición del registro con la clave igual a K.
La variable n es la cantidad de registros del archivo.
Las variables F, n y K son variables de entrada.
La variable i es de salida.
Veamos ejemplos del c lculo de la posici¢n media.
Observar que si n = 6, ( 6 + 1 ) / 2 = 3,5 ----> piso de 3,5 = 3.
Observar que si n = 9, ( 9 + 1 ) / 2 = 5 ----> piso de 5 = 5.
Observar que si l = u, m = ( l + u ) / 2 = ( 2 * l ) / 2 = l, por lo tanto
l = u = m.
R1 R2 R3 Rm-1 Rm Rm+1 Rn-2 Rn-1 Rn Rm-1 Rm Rm+1
...------------------.......------------------.......------------------....... .......------------------.......
| K1 | K2 | K3 | |Km-1| Km |Km+1| |Kn-2|Kn-1| Kn | n slots |Km-1| Km |Km+1|
...------------------.......------------------.......------------------....... .......------------------.......
l ....>
l m l u u
. . m
..................>.................
|<--------------------------->|
Nuevo subarchivo de busqueda
R1 R2 R3 Rm-1 Rm Rm+1 Rn-2 Rn-1 Rn Rm-1 Rm Rm+1
...------------------.......------------------.......------------------....... .......------------------.......
| K1 | K2 | K3 | |Km-1| Km |Km+1| |Kn-2|Kn-1| Kn | n slots |Km-1| Km |Km+1|
...------------------.......------------------.......------------------....... .......------------------.......
l
l u m u <....u
. . m
.................<..................
|<--------------------------->|
Nuevo subarchivo de busqueda
Observar que cuando el subarchivo se reduce a 1 registro, en la proxima
vuelta del while se d que u < l y termina el loop.
Observar que en este algoritmo siempre se usa la clave del registro del
medio de un subarchivo como la clave de comparación.
Interpretemos la búsqueda binaria como un árbol binario donde el valor de
sus nodos es la posición de la clave que se compara.
Veamos el siguiente ejemplo :
lo que nos lleva a construir el siguiente árbol binario :
*---*
|1 6| Primera comparacion
*---*
| |
+----------------------+ +----------------------+
| |
*---* *---*
| 8 | |2 4| Segunda comparacion
*---* *---*
| | | |
+----------+ +----------+ +----------+ +----------+
| | | |
*---* *---* *---* *---*
| 4 | |1 2| |2 0| |2 8| Tercera comparacion
*---* *---* *---* *---*
| | | | | | | |
+----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+
| | | | | | | |
*---* *---* *---* *---* *---* *---* *---* *---*
| 2 | | 6 | |1 0| |1 4| |1 8| |2 2| |2 6| |3 0| Cuarta comparacion
*---* *---* *---* *---* *---* *---* *---* *---*
| | | | | | | | | | | | | | | |
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
| | | | | | | | | | | | | | | |
*---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---*
| 1 | | 3 | | 5 | | 7 | | 9 | |1 1| |1 3| |1 5| |1 7| |1 9| |2 1| |2 3| |2 5| |2 7| |2 9| |3 1| Quinta comparacion ----> u, l y m en la misma posicion
*---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---* *---*
Luego de la quinta comparacion se sale del loop. No hay mas comparaciones.
El paso del raíz a cualquier nodo representa la secuencia de nodos recorridos
por el algoritmo para encontrar la clave K o determinar que dicha clave no
existe en el archivo.
Viendo la altura del árbol, se vé que en el peor caso, se hacen no más
de O(log2 n) comparaciones.
Observar que estan en el arbol todas las posiciones del archivo.
Consideremos el siguiente ejemplo, el que busca una clave no existente en
el archivo, pero que nos lleva al nodo de la posicion 29.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
l m l m l m l m u
u
m