Vous êtes sur la page 1sur 4

Algoritmos iterativos de bsqueda

La operacin de bsqueda es una de las ms utilizadas por cualquier sistema de cmputo. Es una operacin sencilla, aunque si el algoritmo que se utilice no est propiamente diseado, el resultado puede ser desastroso. Podemos distinguir al menos dos situaciones respecto a elementos en donde haremos la bsqueda: que estn desordenados y que estn ordenados respecto a alguna regla. Para hacer la bsqueda en cada una de estas situaciones, a continuacin estudiaremos dos tipos de algoritmos iterativos.

Bsqueda secuencial
Si tenemos un arreglo de enteros a y ningn tipo de informacin adicional respecto al mismo, para decidir si un elemento x est en a, slo tenemos que buscar a travs de l, elemento por elemento. Tan pronto como nos encontramos con un elemento que es igual a x devolvemos la posicin del arreglo en donde se encontr y 0 si ninguno de los elementos igual a x. El siguiente algoritmo muestra el pseudocdigo de esta operacin: f u n c i nb u s c a r( e n t e r oa [ ] ,e n t e r on ,e n t e r ox ) e n t e r oi c o m i e n z a p a r ai1h a s t anh a c e r s ia [ i ]=xe n t o n c e s r e g r e s a ri f i ns i f i np a r a r e g r e s a r0 f i n Generalmente se considera que, adicional al elemento x que se busca, tanto el arreglo a como su tamao n son parmetros de entrada para esta funcin. Ejemplo: Hacer una prueba de escritorio para el arreglo a = 21, 3, 7, 6, 8, 19, 14, 26, 23, n = 9 y x = 13. i 1 2 i = n? No No a[i] 21 3 a[i] = x? No No Regresa

3 4 5 6 7 8 9

No No No No No No Si

7 6 8 19 14 26 23

No No No No No No No 0

Por otro lado, si adems de contar con el arreglo y su tamao sabemos que los nmeros contenidos en el arreglo estn ordenados en forma ascendente, por decir algn orden, podramos aprovechar esta propiedad para detener el algoritmo en cuanto descubramos que x no puede estar en el arreglo. f u n c i nb u s c a r( e n t e r oa [ ] ,e n t e r on ,e n t e r ox ) e n t e r oi c o m i e n z a i1 m i e n t r a sin a [ i ]xh a c e r s ia [ i ]=xe n t o n c e s r e g r e s a ri f i ns i i=i+1 f i nm i e n t r a s r e g r e s a r0 f i n Ejemplo: Hacer una prueba de escritorio para el arreglo a = 3, 6, 7, 8, 14, 19, 21, 23, 26, n = 9 y x = 13. i 1 2 3 4 i n? Si Si Si Si a[i] 3 6 7 8 a[i] x? Si Si Si Si a[i] =x? No No No No Regresa

Si

14

No

No

Como podemos ver, en este caso el algoritmo aprovech el orden de los elementos y detect cuando ya no tena caso seguir buscando a x en el arreglo, pues bast con identificar un elemento del arreglo (en este caso 14) para saber que el resto de los elementos son mayores que x (13 en el ejemplo). Si buscamos un nmero que sea mayor al ltimo elemento del arreglo, es claro que cualquiera de los dos algoritmos anteriores har una nmero total de n comparaciones (a[i] =x). La pregunta es, entonces, Existe un algoritmo que, adems de aprovechar el hecho de que el arreglo est ordenado, realice un nmero menor a n comparaciones en el peor caso? La respuesta es si y ese algoritmo lo estudiaremos enseguida.

Bsqueda binaria
Dada la propiedad de orden del arreglo, podramos aprovechar an ms el orden de los elementos para decidir anticipadamente si x existe o no como parte del arreglo. La idea bsica de la bsqueda binaria es buscar a x siempre en la posicin media del arreglo, que est dada por medio = (primero + ltimo) / 2. Si x = a[medio], entonces el algoritmo termina. En caso contrario, el arreglo se divide en dos partes, la primera desde a[primero] hasta a[medio] y la segunda desde a[medio + 1] hasta a[ltimo] y se realiza ahora la bsqueda sobre la mitad del arreglo en donde debera estar ubicada x. Esta bsqueda se repite hasta encontrar a x o hasta que el subarreglo sobre el cual se est realizando la bsqueda tiene solamente un elemento. El algoritmo de la bsqueda binaria se presenta a continuacin. f u n c i nb u s c a r( e n t e r oa [ ] ,e n t e r on ,e n t e r ox ) e n t e r op r i m e r o ,m e d i o , l t i m o c o m i e n z a p r i m e r o1 l t i m on m i e n t r a sp r i m e r o l t i m oh a c e r m e d i o( p r i m e r o+ l t i m o )/2 s ia [ m e d i o ]=xe n t o n c e s r e g r e s a rm e d i o f i ns i s ia [ m e d i o ]>xe n t o n c e s l t i m om e d i o-1 s in o p r i m e r om e d i o+1 f i ns i f i nm i e n t r a s

r e g r e s a r0 f i n Ejemplo: Hacer una prueba de escritorio para el arreglo a = 3, 6, 7, 8, 14, 19, 21, 23, 26, n = 9 y x = 13. It. 1 2 3 4 5 3 4 5 primero 1 ltimo 9 4 medio 5 2 3 4 primero ltimo? Si Si Si Si No a[medio] = x? No No No No a[medio] >x? Si No No No 0 Regresa

En este caso, despus de cada iteracin, la bsqueda se hace sobre un arreglo cuyo tamao es la mitad del tamao del arreglo en la iteracin anterior. Es decir que, en el peor de los casos, cuando x no est contenido en el arreglo a, en la primera iteracin el tamao es n, en la segunda es n/2, en la tercera n/4, en la cuarta n/8 y as sucesivamente hasta la iteracin n-1 cuando el tamao sea 2 y en la ltima iteracin ser de 1. Analizando este comportamiento, vemos que el nmero de comparaciones realizadas por este algoritmo es de log2 n, que es menor que el nmero de comparaciones n que hace la bsqueda secuencial..

Vous aimerez peut-être aussi