Sunteți pe pagina 1din 11

Repblica Bolivariana De Venezuela

Universidad de Oriente
Ncleo Anzotegui
Taller De Anlisis Y Diseo De Algoritmos

Profesor: Claudio A. Cortinez.


Bachiller: Christian Ynez.
C.I. 18.099.810.

Pgina

Marzo de 2014

INTRODUCCIN
Los algoritmos de bsqueda permiten encontrar un registro luego de que a estos se les haya
suministrado un argumento (clave o llave). El algoritmo arroja como resultado el ndice entero del
registro o un apuntador a dicho registro.
La bsqueda de datos implica el determinar si un valor (conocido como la clave de bsqueda) est
presente en los datos y, de ser as, hay que encontrar su ubicacin. Dos algoritmos populares de
bsqueda son la bsqueda secuencial (lineal simple) y la bsqueda binaria, que es ms rpida pero
a la vez ms compleja. El ordenamiento coloca los datos en orden ascendente o descendente, con
base en una o ms claves de ordenamiento. Una lista de nombres se podra ordenar en forma
alfabtica, las cuentas bancarias podran ordenarse por nmero de cuenta, los registros de nminas
de empleados podran ordenarse por nmero de seguro social, etctera.
Buscar un nmero telefnico, buscar un sitio Web a travs de un motor de bsqueda y comprobar
la denicin de una palabra en un diccionario son acciones que implican buscar entre grandes
cantidades de datos. En las siguientes dos secciones hablaremos sobre dos algoritmos de bsqueda
comunes: uno que es fcil de programar, pero relativamente ineciente, y uno que es relativamente
eciente pero un poco ms complejo y difcil de programar.
Si la bsqueda es infructuosa, con mucha frecuencia, es deseable agregar un nuevo registro con
dicho argumento como llave. Un algoritmo que haga esto se le llama tabla bsqueda o diccionario.

Pgina

En este informe nos enfocaremos a estudiar en detalle los tiempos de ejecucin de ambos
algoritmos cuando se someten a diferentes cantidades de datos.

OBJETIVOS
Realizar un generador de entradas. Las entradas deben ser matrices nxn de nmeros enteros, cuyas
matrices deben ser de diferentes tamaos.
Realizar una evaluacin del tiempo de ejecucin de cada uno de los algoritmos de bsqueda
(secuencial y binaria) y tabular los resultados en el formato adecuado, en este caso nanosegundos,
y a partir de all de esa base realizar conversiones entre escalas.
Obtener una grfica de los tiempos obtenidos versus el tamao de las entradas.

Pgina

Realizar un anlisis personal que incluya las impresiones del comportamiento de los algoritmos
respecto al tamao de las entradas y el tipo de escenario (mejor caso, caso promedio, peor caso).

BASES TERICAS

El algoritmo de bsqueda lineal busca por cada elemento de un arreglo en forma secuencial. Si la
clave de bsqueda no coincide con un elemento en el arreglo, el algoritmo evala cada elemento y,
cuando se llega al final del arreglo, informa al usuario que la clave de bsqueda no est presente. Si
la clave de bsqueda se encuentra en el arreglo, el algoritmo evala cada elemento hasta encontrar
uno que coincida con la clave de bsqueda y devuelve el ndice de ese elemento.

El algoritmo de bsqueda lineal se ejecuta en un tiempo O(n). El peor caso en este algoritmo es que
se debe comprobar cada elemento para determinar si el elemento que se busca existe en el arreglo.
Si el tamao del arreglo se duplica, el nmero de comparaciones que el algoritmo debe realizar
tambin se duplica. Observe que la bsqueda lineal puede proporcionar un rendimiento
sorprendente, si el elemento que coincide con la clave de bsqueda se encuentra en (o cerca de) la
parte frontal del arreglo. Pero buscamos algoritmos que tengan un buen desempeo, en promedio,
en todas las bsquedas, incluyendo aquellas en las que el elemento que coincide con la clave de
bsqueda se encuentra cerca del final del arreglo.

Ejemplo:
El siguiente ejemplo esta realizado en el lenguaje de programacin C++.

Pgina

int LinearSearch(int* ipArray, int iSize, int iTarget) {


for (int iIndex = 0; iIndex < iSize; ++iIndex) {
if (ipArray[iIndex] == iTarget) {
return iIndex;
}
}
return -1;
}

El algoritmo de bsqueda binaria es ms eficiente que el algoritmo de bsqueda lineal, pero


requiere que el arreglo se ordene. La primera iteracin de este algoritmo evala el elemento medio
del arreglo. Si ste coincide con la clave de bsqueda, el algoritmo termina. Suponiendo que el
arreglo se ordene en forma ascendente, entonces si la clave de bsqueda es menor que el elemento
de en medio, no puede coincidir con ningn elemento en la segunda mitad del arreglo, y el algoritmo
contina slo con la primera mitad (es decir, el primer elemento hasta, pero sin incluir, el elemento
de en medio). Si la clave de bsqueda es mayor que el elemento de en medio, no puede coincidir
con ninguno de los elementos de la primera mitad del arreglo, y el algoritmo contina slo con la
segunda mitad del arreglo (es decir, desde el elemento despus del elemento de en medio, hasta el
ltimo elemento).
Cada iteracin evala el valor medio de la porcin restante del arreglo. Si la clave de bsqueda no
coincide con el elemento, el algoritmo elimina la mitad de los elementos restantes. Para terminar,
el algoritmo encuentra un elemento que coincide con la clave de bsqueda o reduce el subarreglo
hasta un tamao de cero.

Pgina

En el peor de los casos, el proceso de buscar en un arreglo ordenado de 1023 elementos slo
requiere 10 comparaciones cuando se utiliza una bsqueda binaria. Al dividir 1023 entre 2 en forma
repetida (ya que despus de cada comparacin podemos eliminar la mitad del arreglo) y redondear
(porque tambin eliminamos el elemento medio), se producen los valores 511, 255, 127, 63, 31, 15,
7, 3, 1 y 0. El nmero 1023 (210 1) se divide entre 2 slo 10 veces para obtener el valor 0, que
indica que no hay ms elementos para probar. La divisin entre 2 equivale a una comparacin en el
algoritmo de bsqueda binaria. Por ende, un arreglo de 1,048,575 (220 1) elementos requiere un
mximo de 20 comparaciones para encontrar la clave, y un arreglo de ms de mil millones de
elementos requiere un mximo de 30 comparaciones para encontrar la clave. sta es una enorme
mejora en el rendimiento, en comparacin con la bsqueda lineal. Para un arreglo de mil millones
de elementos, sta es una diferencia entre un promedio de 500 millones de comparaciones para la
bsqueda lineal, y un mximo de slo 30 comparaciones para la bsqueda binaria! El nmero
mximo de comparaciones necesarias para la bsqueda binaria de cualquier arreglo ordenado es el
exponente de la primera potencia de 2 mayor que el nmero de elementos en el arreglo, que se
representa como log2n. Todos los logaritmos crecen aproximadamente a la misma proporcin, por
lo que en notacin Big O se puede omitir la base. Esto produce un valor Big O de O(log2n) para una
bsqueda binaria, que tambin se conoce como tiempo de ejecucin logartmico.

Ejemplos:

Pgina

int BinarySearch(int* ipArray, int iSize, int iTarget) {


int iLow = 0;
int iHigh = iSize;
while (iLow + 1 < iHigh) {
// Take the average as the test value
int iCheck = ((iLow + iHigh) >> 1);
if (ipArray[iCheck] > iTarget) {
iHigh = iCheck;
} else {
iLow = iCheck;
}
}
if (ipArray[iLow] == iTarget) {
return iLow;
} else {
return -1;
}
}

PROCEDIMIENTO

Para realizar las pruebas y mediciones de los algoritmos utilizamos como herramientas principales
lo siguiente:
Como lenguaje de programacin, C++.
o http://www.cplusplus.com/
Como framework para C++ y librera grafica para la interfaz, Qt5.
o http://qt-project.org/
Como librera para crear grficos comparativos, QCustomplot.
o http://www.qcustomplot.com/
Como IDE, QtCreator.
o http://qt-project.org/

Pgina

1. Lo primero que se necesitaba era crear las entradas, cada una de ellas formadas en su
primera lnea por un entero que indica el tamao de la matriz, en la segunda lnea con un
entero indicando la clave a buscar segn el caso y desde la tercera lnea hasta el final la
matriz de tamao nxn. Debido a que realizar la configuracin de la entrada de forma
manual era muy tediosa, se procedi a realizar un generador de entradas que realizara las
siguientes matrices:
100, 500, 1000, 2550, 3750, 5250, 6500, 7250, 8000, 10000.
2. Se dise el sistema de seleccin para los escenarios de Peor Caso cuando la clave a
buscar es igual al ltimo elemento de la matriz (nxn), para el Caso Promedio cuando la
clave va a ser el valor central de la matriz (n/2xn/2) y para el Mejor Caso cuando la clave
es el primer elemento de la matriz (0). Luego de realizar la seleccin este valor se escribe
en la segunda lnea del archivo de entrada.
3. Luego codeamos una Clase CargadorDeEntradaAArreglo en memoria. Lo que permite
cargar cada entrada en un arreglo dinmico, aparte que este permite extraer otros datos
como la clave a buscar.
4. Se implement una clase para que esta contenga los algoritmos de busqueda.
5. Para unir la Clase Principal, la Clase CargadorDeEntradasAArreglo, la Clase de
AlgoritmosDeBusqueda e implementar las mediciones de tiempo de ejecucin de los
algoritmos se codifico la Clase EvaluadorDeAlgoritmos.
6. Se implement un QtTabletview para mostrar los resultados comparativos entre los dos
algoritmos.
7. Se procedi en crear la grfica con los resultados obtenidos de esta tabla.

Pgina

RESULTADOS

Pgina

Pgina

10

ANLISIS

La bsqueda lineal es el algoritmo ms fcil de programar, pero puede ser lento si se le compara
con el algoritmo de bsqueda binaria.
Como podemos observar en el cada uno de los casos, este algoritmo solo es efectivo para arreglos
con pocos elementos, pero cuando se tratada de arreglo de muchos elementos solo es efectivo si la
clave buscada se encuentra dentro de los primeros elementos del arreglo, por lo que si un programa
necesita realizar muchas bsquedas en arreglos grandes, puede ser mejor implementar un
algoritmo ms eficiente.
Segn los resultados para el Peor Caso el algoritmo de bsqueda secuencial es nueve veces ms
lento que su contendor, lo que demuestra claramente la ineficiencia incluso cuando se trata de
arreglos de 1000 elementos.
Para el Caso Promedio ya el algoritmo de bsqueda binaria sigue siendo el ganador, en la grfica
nos muestra un algoritmo que mantiene casi en constante su tiempo de ejecucin sin importar el
tamao de la entrada, hablando muy bien de los algoritmos poseedores etiqueta logartmica de la
Big O.
Para el Mejor Caso tanto el algoritmo de bsqueda lineal como el binario tienen tiempos de
ejecucin similares para las entradas pequeas, sin embargo para las entradas de mayor tamao la
curva del tiempo de ejecucin del algoritmo binario se alarga, pero aun sucediendo esto, no significa
que el consumo de tiempo sea demasiado alto.

Pgina

11

Como conclusin aseveramos que el algoritmo de bsqueda binara es el que tienen un


comportamiento ms eficiente en cualquiera de los casos, y esto nos revela la importancia que tiene
disear bien los algoritmos y adaptarlos para darle una mejor solucin al problema. De esta forma
podemos asegurarnos tener eficacia y eficiencia en la respuesta.

S-ar putea să vă placă și