Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Numeros Binarios
Numeros Binarios
�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
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.
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?
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.
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.
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 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?
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]
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.