Saltar al contenido

Modelo por capas

El intervalo y su invariante

Buscas x en un array ordenado a de n valores. Guardas dos índices, bajo y alto, que delimitan la zona donde x todavía podría estar. Al principio, todo el array: bajo = 0, alto = n. El intervalo [bajo, alto) incluye bajo y excluye alto: con alto = n, se mira de la posición 0 a la n − 1.

El invariante (lo que es cierto antes de cada paso):

Texto
todo lo que está antes de bajo es menor que xtodo lo que está desde alto en adelante es mayor o igual que x

En la figura, la búsqueda de x = 20 ya avanzó: bajo = 2, alto = 3 y medio = 2. Las posiciones atenuadas, a cada lado, cumplen el invariante.

El intervalo de una búsqueda binaria y sus dos zonas descartadasArray ordenado con 3, 8, 15, 21, 30, 42 y 57 en las posiciones 0 a 6, buscando el 20. bajo vale 2 y alto vale 3, así que el intervalo [2, 3) contiene solo la posición 2, con el 15, que es también el medio y tiene borde grueso. Las posiciones 0 y 1 (3 y 8, menores que 20) y de la 3 a la 6 (21, 30, 42 y 57, mayores o iguales que 20) están atenuadas: ya no pueden contener la respuesta.medio = 23815213042570123456bajo = 2alto = 3menores que 20[2, 3)mayores o iguales que 20
Buscando 20: bajo = 2, alto = 3, medio = 2. Atenuado: lo descartado, que cumple el invariante a cada lado.

En cada paso miras el valor del medio del intervalo. Si es menor que x, x no puede estar a su izquierda: bajo pasa a medio + 1. Si no, alto pasa a medio. El intervalo se reduce a la mitad.

Cuando bajo = alto, el intervalo está vacío y bajo es la posición de la primera aparición de x, o donde iría si no está.

En [4, 9, 14, 22, 35, 41, 58, 63, 70] buscas 41. Al empezar, bajo = 0 y alto = 9. ¿Qué valor está en el medio en el primer paso y qué cambia?