Está en la página 1de 7

En ciencias de la computaci�n y matem�ticas, la b�squeda binaria, tambi�n conocida

como b�squeda de intervalo medio1? o b�squeda logar�tmica,2? es un algoritmo de


b�squeda que encuentra la posici�n de un valor en un array ordenado.3?4? Compara el
valor con el elemento en el medio del array, si no son iguales, la mitad en la cual
el valor no puede estar es eliminada y la b�squeda contin�a en la mitad restante
hasta que el valor se encuentre.

La b�squeda binaria es computada en el peor de los casos en un tiempo logar�tmico,


realizando {\displaystyle O{\bigl (}\log n{\bigr )}} {\displaystyle O{\bigl (}\log
n{\bigr )}} comparaciones, donde n es el n�mero de elementos del arreglo y log es
el logaritmo. La b�squeda binaria requiere solamente O(1) en espacio, es decir, que
el espacio requerido por el algoritmo es el mismo para cualquier cantidad de
elementos en el array.5? Aunque estructuras de datos especializadas en la b�squeda
r�pidas como las tablas hash pueden ser m�s eficientes, la b�squeda binaria se
aplica a un amplio rango de problemas de b�squeda.

Aunque la idea es simple, implementar la b�squeda binaria correctamente requiere


atenci�n a algunos detalles como su condici�n de parada y el c�lculo del punto
medio de un intervalo.

Existen numerosas variaciones de la b�squeda binaria. Una variaci�n particular


(cascada fraccional) acelera la b�squeda binaria para un mismo valor en m�ltiples
arreglos.

�ndice
1 Algoritmo
1.1 Procedimiento
1.2 Coincidencias aproximadas
2 Rendimiento
3 Comparaci�n de la b�squeda binaria con otros esquemas
3.1 Hashing
3.2 �rboles
3.3 B�squeda lineal
3.4 Aproximaciones mixtas
3.5 Algoritmos de clasificaci�n
3.6 Otras estructuras de datos
4 Variaciones
4.1 B�squeda binaria uniforme
4.2 B�squeda Fibonacci
4.3 B�squeda exponencial
4.4 B�squeda de interpolaci�n
4.5 Cascada fraccional
5 Historia
6 Problemas de implementaci�n
7 Soporte de biblioteca
8 V�ase tambi�n
9 Notas y referencias
9.1 Notas y citas
9.2 Trabajos
10 Enlaces externos
Algoritmo
La b�squeda binaria funciona en arreglos ordenados. La b�squeda binaria comienza
por comparar el elemento del medio del arreglo con el valor buscado. Si el valor
buscado es igual al elemento del medio, su posici�n en el arreglo es retornada. Si
el valor buscado es menor o mayor que el elemento del medio, la b�squeda continua
en la primera o segunda mitad, respectivamente, dejando la otra mitad fuera de
consideraci�n.
Procedimiento
Dado un arreglo A de n elementos con valores A0 ... An-1, ordenados tal que A0
= ... = An-1, y un valor buscado T, el siguiente procedimiento usa b�squeda binaria
para encontrar el �ndice de T en A.

Asignar 0 a L y a R (n - 1).
Si L > R, la b�squeda termina sin encontrar el valor.
Sea m (la posici�n del elemento del medio) igual a la parte entera de (L + R)?/?2.
Si Am < T, igualar L a m + 1 e ir al paso 2.
Si Am > T, igualar R a m � 1 e ir al paso 2.
Si Am = T, la b�squeda termin�, retornar m.
Este procedimiento iterativo mantiene los l�mites de la b�squeda mediante dos
variables. Algunas implementaciones realizan la comparaci�n de igualdad al final
del algoritmo, como resultando se obtiene un ciclo m�s r�pido de comparaciones pero
se aumenta en uno la cantidad de iteraciones promedio.6?

Coincidencias aproximadas
El procedimiento anterior solo realiza coincidencias exactas, encontrando la
posici�n del valor buscado. Sin embargo, dado el orden natural de los arreglos
ordenados, es trivial extender la b�squeda binaria para realizar coincidencias
aproximadas. Por ejemplo, la b�squeda binaria puede ser usada para computar, para
un valor dado, su rank(el n�mero de elementos menores), antecesor(pr�ximo elemento
menor), sucesor(pr�ximo elemento mayor), y vecinos cercanos. Las consultas en
intervalos, como por ejemplo, buscar el n�mero de elementos entre dos n�meros
pueden ser computadas con dos preguntas de rank.

Las consultas de rank pueden ser realizadas usando una modificaci�n de la b�squeda
binaria, retornando m en las b�squedas donde se encuentre el elemento, y L en donde
no se encuentre, correspondiendo este �ltimo al n�mero de elementos menores que el
valor buscado.
Las consultas de antecesor y sucesor pueden ser computadas con preguntas de rank
tambi�n. Una vez que el rank del valor buscado es conocido, su antecesor es el
elemento en la posici�n dado por su rank(el elemento mayor que es menor que el
valor buscado). Su sucesor es el elemento despu�s del (si �l est� presente en el
arreglo) o en la posici�n siguiente al antecesor (en otro caso). El vecino m�s
cercano del valor buscado es su antecesor o su sucesor, de los dos el m�s cercano.
Las consultas de rango son tambi�n f�ciles de manipular. Una vez que los rank de
ambos valores son conocidos, el n�mero de elementos mayores o iguales al primer
valor y menores que el segundo es la diferencia de los dos ranks. Esta cantidad
puede disminuir o aumentar de acuerdo si los extremos del intervalo deben ser
considerados parte de la pregunta en cuesti�n y cuando el arreglo contenga llaves
que coincidan con los extremos.
Rendimiento

Un �rbol que representa el algoritmo de b�squeda binaria. El arreglo en el cual se


usa el algoritmos es [20, 30, 40, 50, 90, 100], y el valor buscado es 40.
El rendimiento de la b�squeda binaria puede ser analizada reduciendo el algoritmo a
un �rbol binario de b�squeda, donde la ra�z es el elemento en el medio del arreglo,
el elemento en el medio de la primera parte del arreglo es el hijo izquierdo de la
ra�z y el elemento en el medio de la segunda parte es el hijo derecho de la ra�z.
El resto del �rbol se construye de forma similar. Este modelo representa a la
b�squeda binaria, comenzando desde la ra�z, el sub�rbol izquierdo o derecho son
recorridos de acuerdo a si el valor buscado es menor o mayor que el valor presente
en el nodo actual, representando la eliminaci�n sucesiva de los elementos.7?

En el peor de los casos se realizan {\displaystyle \lfloor \log _{2}n+1\rfloor }


{\displaystyle \lfloor \log _{2}n+1\rfloor }iteraciones (del ciclo de
comparaciones), donde la notaci�n {\displaystyle \lfloor \rfloor }
{\displaystyle \lfloor \rfloor } denota la parte entera por debajo de la funci�n.
Esta cantidad de iteraciones es alcanzada cuando la b�squeda alcanza el nivel m�s
profundo del �rbol, equivalente a una b�squeda binaria que se reduce a un solo
elemento, y en cada iteraci�n, siempre elimina el arreglo m�s peque�o de los dos si
no tienen la misma cantidad de elementos.

Como promedio, asumiendo que cada elemento es igualmente probable de ser buscado,
despu�s que la b�squeda termine, el valor buscado ser� m�s probable de ser
encontrado en el segundo nivel del �rbol. Esto es equivalente a una b�squeda
binaria que completa una iteraci�n antes del peor de los casos, alcanz�ndola
despu�s de {\displaystyle \log _{2}n-1} {\displaystyle \log _{2}n-1}iteraciones.
Sin embargo, el �rbol puede estar no balanceado, con el nivel m�s profundo
parcialmente completo, y equivalentemente, el arreglo pude no estar dividido
perfectamente por la b�squeda en algunas iteraciones, resultando que en la mitad de
las veces el menor subarreglo es eliminado. El promedio actual del n�mero de
iteraciones es ligeramente mayor {\displaystyle {\bigl (}\log _{2}n-{\frac {n-\log
_{2}n-1}{n}}{\bigr )}} {\displaystyle {\bigl (}\log _{2}n-{\frac {n-\log _{2}n-1}
{n}}{\bigr )}}.7? En el mejor de los casos, donde el elemento del medio del arreglo
es igual al valor buscado, su posici�n es retornada despu�s de una iteraci�n. En
t�rminos de iteraci�n, ning�n algoritmo basado solamente en comparaciones puede
exhibir mejores promedios en su n�mero de iteraciones que la b�squeda binaria.

Cada iteraci�n de la b�squeda binaria definida anteriormente realiza una o dos


comparaciones, comprobando si el elemento en el medio es igual al valor buscado en
cada iteraci�n. Asumiendo nuevamente que cada elemento es igualmente probable de
ser buscado, cada iteraci�n realiza como promedio 1.5 de comparaciones. Una
variaci�n del algoritmo comprueba por la igualdad en el final de cada b�squeda,
eliminando como promedio la mitad de las comparaciones en cada iteraci�n. En la
mayor�a de las computadoras el procedimiento anterior reduce el tiempo de cada
iteraci�n muy poco, mientras que garantiza que la b�squeda realice el mayor n�mero
de iteraciones posibles y como promedio adiciona una iteraci�n m�s a la b�squeda.
Dado que el ciclo de comparaciones se realiza solamente {\displaystyle \lfloor \log
_{2}n+1\rfloor } {\displaystyle \lfloor \log _{2}n+1\rfloor }veces en el peor de
los casos, para un n suficientemente grande, el peque�o incremento de la eficiencia
producto de las comparaciones en el ciclo no compensa la iteraci�n extra. Knuth
1998 propuso un valor de {\displaystyle 2^{66}} {\displaystyle 2^{66}}(m�s de 76
trillones) elementos para que esta variaci�n fuese m�s r�pida.8?9?

Cascada fraccional puede ser usada para acelerar la b�squeda del mismo valor en
m�ltiples arreglos. Se requiere {\displaystyle O(k\log n)} {\displaystyle O(k\log
n)} para buscar en cada arreglo el elemento seleccionado, cascada fraacional lo
reduce a {\displaystyle O(k+\log n)} {\displaystyle O(k+\log n)}, donde k es el
n�mero de arreglos.10?

Comparaci�n de la b�squeda binaria con otros esquemas


La t�cnica de usar arreglos ordenados con b�squeda binaria es una soluci�n muy
ineficiente cuando la inserci�n y la eliminaci�n son necesarias, tomando un tiempo
de

Otros algoritmos soportan m�s eficientemente la inserci�n y la eliminaci�n, y


tambi�n un macheo m�s r�pido y exacto.

Hashing
Para implementar arreglos asociativos, tablas hash, una estructura que mapea llaves
contra valores usando una funci�n de hash, son generalmente m�s r�pidas que la
b�squeda binaria en arreglos ordenados de valores; la mayor�a de las
implementaciones requiere como promedio un tiempo amortizado constante. Sin
embargo, hashing no es muy �til para comparaciones aproximadas, tales como
antecesor, sucesor, y vecino m�s cercano, dado que la informaci�n que nos presenta
en la b�squeda es si el valor est� presente o no. La b�squeda binaria es ideal para
este tipo de comparaciones, realiz�ndolas en tiempo logar�tmico.11?

�rboles
Un �rbol binario de b�squeda es una estructura de datos que funciona basado en el
principio de la b�squeda binaria: los valores del �rbol est�n colocados en forma
ordenada, y el recorrido del �rbol es realizado usando un algoritmo muy parecido a
la b�squeda binaria. La inserci�n y eliminaci�n requieren al igual que el recorrido
un tiempo logar�tmico. Este costo es mucho mejor que el costo lineal de la
inserci�n y eliminaci�n en los arreglos ordenados, y los �rboles de b�squeda
binaria poseen la habilidad de realizar todas las operaciones posibles en los
arreglos ordenados, incluyendo consultas en rangos y comparaciones aproximadas.

Sin embargo, la b�squeda binaria es usualmente m�s eficiente para realizar


b�squedas puesto que los �rboles binarios de b�squeda estar�n probablemente
desbalanceados, dando como consecuencia un costo computacional superior a la
b�squeda binaria.

Los �rboles binarios de b�squeda se utilizan para realizar b�squedas r�pidas en


dispositivos de almacenamientos externos, donde los datos necesitan ser buscados y
colocados en la memoria principal. Dividiendo el �rbol en p�ginas con una cantidad
determinada de elementos resultado que la b�squeda en el �rbol binario tenga un
menor costo computacional que los buscadores convencionales de los discos. Note que
este proceso crea un �rbol multiprop�sito, puesto que cada p�gina est� conectada
una con otra. El �rbol-B generaliza este m�todo de la organizaci�n en el �rbol, los
Arbol-B son frecuentemente utilizados para organizar largos conjuntos de datos como
las bases de datos o los sistemas de ficheros.

B�squeda lineal
La b�squeda lineal es un simple algoritmo de b�squeda que comprueba cada elemento
hasta que encuentre el valor buscado. La b�squeda lineal puede ser implementada en
una lista enlazada, que nos permite inserciones y eliminaciones m�s eficientes que
un arreglo. La b�squeda binaria es m�s eficiente que la b�squeda lineal en los
arreglos ordenados, exceptuando los arreglos que contenga pocos elementos. Si el
arreglo debe ser ordenado primero, ese costo debe ser amortizado sobre cualquier
b�squeda. Ordenar el arreglo tambi�n nos permite comparaciones aproximadas m�s
eficientes, entre otras operaciones.

Aproximaciones mixtas
El arreglo de Judy usa un conjunto de ideas para lograr una soluci�n m�s eficiente.

Algoritmos de clasificaci�n
Un problema relacionado con la b�squeda es la clasificaci�n. Cualquier algoritmo
que realice b�squedas, como la b�squeda binaria, puede ser usado para clasificar
tambi�n. Existen otros algoritmos m�s espec�ficos para la clasificaci�n, un arreglo
de bit es el m�s simple, usado cuando el rango de los elementos es limitado, es muy
r�pido ya que requiere un tiempo constante.

Para resultados aproximados, los filtros de Bloom, otra estructura de dato


probabilista basada en hashing, guarda un conjunto de valores codificando los
valores con arreglos de bits y m�ltiples fucnciones de hash. Los filtros de
Bloomson mucho m�s eficaces que los arreglos de bits en cuanto a espacio en la
mayor�a de los casos y mucho m�s lentos.12?

Otras estructuras de datos


Existen estructuras de datos que pueden realizar b�squeda binaria en arreglos
ordenados. Por ejemplo, las b�squedas, las comparaciones parciales y todas las
operaciones permitidas en arreglos ordenados pueden ser realizadas de manera m�s
eficiente que con la b�squeda binaria con estructuras como los �rboles de van Emde
Boas, �rboles de fusi�n, tries, y arreglos de bits. Sin embargo, mientras que estas
operaciones pueden ser realizadas eficientemente en los arreglos ordenados sin
importancia de cual sea el tipo de los elementos, este tipo de estructura de datos
son usualmente m�s eficientes porque explotan las propiedades del conjunto de
elementos del arreglo.11?

Variaciones
B�squeda binaria uniforme
La b�squeda binaria uniforme guarda el �ndice del elemento del medio y el n�mero de
elementos alrededor del elemento del medio que no hemos eliminado todav�a. Cada
paso reduce el tama�o del arreglo aproximadamente en la mitad. Esta variaci�n es
uniforme porque la diferencia entre los �ndices de los elementos del medio y el
elemento escogido en la iteraci�n anterior permanece constante para arreglos del
mismo tama�o.

B�squeda Fibonacci

B�squeda Fibonacci en la funci�n {\displaystyle f{\bigl (}x{\bigr )}=\sin {\bigl (}


{\bigl (}x+{\frac {1}{10}}{\bigr )}\pi {\bigr )}} {\displaystyle f{\bigl
(}x{\bigr )}=\sin {\bigl (}{\bigl (}x+{\frac {1}{10}}{\bigr )}\pi {\bigr )}}en el
intervalo {\displaystyle [0,1]} {\displaystyle [0,1]}. En el ejemplo anterior el
algoritmo encuentra un intervalo que contiene el m�ximo de {\displaystyle f} f con
una longitud menor o igual a {\displaystyle {\frac {1}{10}}} {\displaystyle {\frac
{1}{10}}}. En tres iteraciones, devuelve el intervalo {\displaystyle [{\frac {5}
{13}},{\frac {6}{13}}]} {\displaystyle [{\frac {5}{13}},{\frac {6}{13}}]}, con una
longitud de {\displaystyle {\frac {1}{13}}} {\displaystyle {\frac {1}{13}}}.
La b�squeda Fibonacci es un m�todo similar a la b�squeda binaria que sucesivamente
reduce el tama�o del intervalo al cual el m�ximo de una funci�n unimodal pertenece.
Dado un intervalo finito, una funci�n unimodal, y la m�xima longitud del intervalo
resultante, la b�squeda Fibonacci encuentra un n�mero de Fibonacci tal que si el
intervalo se divide en esta cantidad de subintervalos de igual longitud, los
subintervalos ser�n menores que la m�xima longitud. Despu�s de dividido el
intervalo, elimina los subintervalos a los cuales el m�ximo no pertenece hasta que
permanezcan uno o m�s subintervalos continuos.13?14?

B�squeda exponencial
La b�squeda exponencial es un algoritmo para buscar principalmente en listas
infinitas, pero puede ser aplicada para seleccionar el l�mite superior de la
b�squeda binaria. Comienza encontrando el primer elemento que cumple que es una
potencia de dos y mayor que el valor buscado, despu�s, fija este �ndice como el
l�mite superior de la b�squeda binaria, y cambia hacia la b�squeda binaria. La
b�squeda realiza {\displaystyle \lfloor \log _{2}x+1\rfloor } {\displaystyle
\lfloor \log _{2}x+1\rfloor }iteraciones de la b�squeda exponencial y a lo sumo
{\displaystyle \lfloor \log _{2}x\rfloor } {\displaystyle \lfloor \log _{2}x\rfloor
}iteraciones de la b�squeda binaria, donde {\displaystyle x} x es la posici�n del
valor buscado. Solamente si el valor buscado est� cerca del principio del arreglo
es que esta variaci�n es m�s eficiente que seleccionar el mayor elemento como el
l�mite superior.

B�squeda de interpolaci�n
Al contrario de la b�squeda binaria, la b�squeda de interpolaci�n no calcula el
punto medio sino que realiza varios intentos en busca del valor requerido, tomando
en cuenta el menor y mayor elemento del arreglo as� como su longitud. Este
procedimiento es solamente posible si los elementos del arreglo son n�meros. Se
basa en la hip�tesis de que el elemento del medio no es la mejor opci�n en muchos
casos; por ejemplo, si el elemento buscado esta pr�ximo al mayor elemento del
arreglo, es muy probable que este ubicado en el final del arreglo. Cuando la
distribuci�n de los elementos en el arreglo es uniforme o cercanamente, se realizan
{\displaystyle O{\bigl (}\log \log n{\bigr )}} {\displaystyle O{\bigl (}\log \log
n{\bigr )}}comparaciones.15?
En la pr�ctica, la b�squeda de interpolaci�n es m�s ineficiente que la b�squeda
binaria para arreglos peque�os, dado que la b�squeda por interpolaci�n requiere un
conjunto de c�mputos extras, y la tasa de crecimiento de su complejidad solo se
compensa para arreglos grandes.

Cascada fraccional
Cascada fraccionaria es una t�cnica que acelera la b�squeda binaria del mismo
elemento en arreglos ordenados. La b�squeda en cada arreglo toma {\displaystyle
O{\bigl (}k\log n{\bigr )}} {\displaystyle O{\bigl (}k\log n{\bigr )}}, donde
{\displaystyle k} k es el n�mero de arreglos. Cascada fraccionaria reduce este
costo a {\displaystyle O{\bigl (}k+\log n{\bigr )}} {\displaystyle O{\bigl (}k+\log
n{\bigr )}}almacenando informaci�n espec�fica en cada arreglo acerca de los otros
arreglos.10?

Cascada fraccionaria fue desarrollada originalmente para resolver eficientemente


varios problemas de geometr�a computacional, pero tambi�n ha sido aplicada en
dominios como el ruteo de los protocolos de internet.10?

Historia
En 1946, John Mauchly mencion� por primera vez la b�squeda binaria como parte de
Moore School Lectures, el primer conjunto de conferencias relacionado con las
computadoras. Las siguientes publicaciones mencionaban que la b�squeda binaria solo
funcionaba en arreglos cuya longitud fuese de uno menos que una potencia de dos
hasta 1960, cuando Derrick Henry Lehmer p�blico un algoritmo de b�squeda binaria
que funcionaba en todos los arreglos ordenados. En 1962, Hermann Bottenbruch
present� en ALGOL 60 una implementaci�n del algoritmo de b�squeda binaria en el
cual colocaba la comparaci�n de igualdad en el final del algoritmo, incrementando
el n�mero promedio de iteraciones por uno, pero reduciendo a uno el n�mero de
comparaciones por iteraci�n. La b�squeda binaria uniforme fue presentada a Donald
Knuth en 1971 por A. K. Chandra de la universidad de Stanford y publicado en el
libro de Knuth: The Art of Computer Programming. En 1986, Bernard Chazelle y
Leonidas J. Guibas introdujeron cascada fraccional, una t�cnica usada para acelerar
la b�squeda binaria en m�ltiples arreglos.10?16?17?

Problemas de implementaci�n
A pesar de que la idea b�sica de b�squeda binaria es realtivamente sencilla, los
detalles pueden ser sorprendentemente complicados...�Donald Knuth [2]

Cuando Jon Bentley asigno la b�squeda binaria como un problema en un curso de


programadores profesionales, se percat� que el noventa por ciento fallo en
desarrollar una soluci�n correcta despu�s de varias horas de trabajo y otro estudio
publicado en 1988 muestra que el c�digo correcto solo se encuentra en cinco de cada
veinte muestras tomadas. Adem�s la propia implementaci�n de b�squeda binaria de
Bentley, publicada en su libro de 1986 Programming Pearls, conten�a un error de
desbordamiento (overflow) que permaneci� sin ser detectado por m�s de veinte a�os,
adem�s la implementaci�n de la biblioteca del lenguaje de programaci�n Java de la
b�suqeda binaria tuvo el mismo error durante m�s de nueve a�os.18?

En una implementaci�n pr�ctica, las variables utilizadas para representar los


�ndices a menudo ser�n de tama�o fijo, y esto puede dar lugar a un desbordamiento
aritm�tico para arreglos muy grandes. Si el punto medio del intervalo se calcula
como (L + R) / 2, entonces el valor de L + R puede exceder el rango de enteros del
tipo de datos usado para almacenar el punto medio, incluso si L y R est�n dentro
del rango. Si L y R no son negativos, esto se puede evitar calculando el punto
medio como L + (R - L) / 2.19?

Si el valor buscado es mayor que el valor m�ximo del arreglo y el �ltimo �ndice del
arreglo es el valor m�ximo representable de L, el valor de L eventualmente se
convertir� en demasiado grande y ocurrir� un desbordamiento. Un problema similar
ocurrir� si el valor buscado es menor que el menor valor en el arreglo y el primer
�ndice del arreglo es el valor representable m�s peque�o de R. En particular, esto
significa que R no debe ser un tipo sin signo si el arreglo empieza con �ndice 0..

Un bucle infinito puede ocurrir si las condiciones de salida para el bucle no est�n
definidas correctamente. Una vez L supera R, la b�squeda ha fallado y debe
transmitir el fracaso de la b�squeda. Adem�s, el bucle debe salir cuando se
encuentra el elemento de destino, o en el caso de una implementaci�n donde este
control se mueve al final, comprueba si la b�squeda tuvo �xito o fall� al final
debe estar en su lugar. Bentley encontr� que, en su asignaci�n de b�squeda binaria,
este error fue realizado por la mayor�a de los programadores que no implementaron
correctamente una b�squeda binaria.

También podría gustarte