You are on page 1of 3

Algoritmos implementados mediante la tcnica Divide y Vencers

Autor: Jos Len


Algoritmo de Bsqueda binaria
El problema de partida es verificar si existe un elemento x en un vector ordenado
ascendentemente, ste hecho permite plantear un algoritmo con la siguiente estrategia:
comprese el elemento dado x con el que ocupa la posicin central del vector. En caso de
que coincida con l, hemos solucionado el problema. Pero si son distintos, pueden darse
dos situaciones: que x sea mayor que el elemento en posicin central, o que sea menor.
En cualquiera de los dos casos podemos descartar una de las dos mitades del vector
Para implementar recursivamente el algoritmo su caso base se produce cuando el vector
tiene slo un elemento. Como el nmero de elementos del vector se va dividiendo en cada
iteracin para dos, tenemos asegurada la convergencia al caso base.
Implementacin del algoritmo de bsqueda binaria
La siguiente funcin devuelve la posicin del elemento buscado, en el caso que el
elemento est en el vector, caso contrario devuelve un valor de 1.
Cdigo en lenguaje C
Clculo de operaciones elementales

1 int busqueda_binaria(int vector[], int izq, int der, int clave){


2 int centro;
3 if( izq > der ){ 1 OE
4 return -1; 1 OE
5 }else{
6 centro=( izq + der )/2; 3 OE
7 if(vector[centro] == clave){ 2 OE
8 return centro; 1 OE
9 }else if (vector[centro] > clave){ 2 OE
10 return busqueda_binaria(vector, izq, centro-1, clave); 3 OE + T(n/2)
11 }else{
12 return busqueda_binaria(vector, centro+1, der, clave); 3 OE + T(n/2)
13 }
14 }
15 }

Anlisis de complejidad del algoritmo


El caso mejor
Se presenta cuando una el elemento buscado se encuentra en el punto central de la lista y
por lo tanto se ejecutan las operaciones hasta la lnea 8.
En este caso la el tiempo de ejecucin es:
() = 1 + 3 + 2 + 1
() = 7 ()
La complejidad es constante ().
El caso peor
Se realizar todas las operaciones elementales presentes hasta la lnea 9 (excepto las
operaciones elementales return), despus solo podr realizar las operaciones de la lnea
10 o bien las operaciones de la lnea 12.
Se representa de la siguiente manera:

T(n) = 1 + 3 + 2 + 2 + 3 + ( )
2

() = ( ) + 11
2
= 2 (2 ) = 1 = 11 1
= 1 + 2
() = 1 + 2 log 2 (log 2 )
La complejidad es logartmica (log 2 ).
Tambin se puede deducir intuitivamente esta complejidad. El caso peor se produce
cuando se debe continuar la bsqueda y llegar a una sublista de longitud de 1. Cada
iteracin que falla debe continuar disminuyendo la longitud de la sublista por un factor
de 2. El tamao de las sublistas es:

1
2 4 8
La divisin de sublistas requiere , en cada iteracin el tamao de la
sublista se reduce a la mitad. La sucesin de tamaos de las sublistas llega hasta una de
longitud 1.


1
20 21 22 23 2

= 1 = 21 log 2 = log 2 21
21
= log 2 + 1 (log 2 )
Por esa razn la complejidad del caso peor es (log 2 ). Cada iteracin requiere una
operacin de comparacin:
() 1 + log 2 (log 2 )