Anlisis de algoritmos
Bsqueda de Informacin
Se asocia comnmente con tablas de consultas. Ejemplo:
Lista de estudiantes y sus notas. Funcionarios y sus remuneraciones, Animales y sus caractersticas, etc.
Es lgico entonces que resulte necesario realizar una bsqueda de un elemento en particular dentro de una lista.
Es por ello que se han creado mtodos y algoritmos que permiten realizar una bsqueda eficiente.
La operacin de bsqueda de un elemento X en un conjunto de elementos consiste en: 1. Determinar si X pertenece al conjunto y en ese caso, indicar su posicin dentro de l. 2. Determinar si X no pertenece al conjunto. Los Mtodos ms usuales de Bsqueda son: 1) Bsqueda secuencial o Lineal 2) Bsqueda Binaria 3) Bsqueda por Transformacin de Claves (hash)
No Lineales
Archivos
TIPOS DE BUSQUEDA
Bsqueda Lineal Bsqueda Binaria Bsqueda por transformacin de Claves(Hashing) Bsqueda en Textos Arboles de bsqueda.
BUSQUEDA LINEAL
Corresponde al mtodo de bsqueda de un elemento dentro de un vector; es sencillo, debido a que se explora secuencialmente el vector. Recorre el vector desde el primer elemento hasta el ltimo. Si encuentra el elemento se lee el mensaje: EXISTE EL ELEMENTO se le puede hasta entregar la posicin del elemento(ndice) y por lo tanto ha finalizado el proceso de bsqueda. En caso contrario el mensaje es: EL ELEMENTO NO EXISTE
La bsqueda secuencial compara cada elemento del vector con el valor deseado, hasta que este se encuentre o termina de leer el vector completo, lo que implica que no existe Esta bsqueda no requiere ningn requisito por parte del vector, por consiguiente no requiere que el vector este ordenado.
BUSQUEDA LINEAL
El mejor caso(la situacin ptima), es que el registro a buscar sea el primero en ser examinado. El peor caso, es cuando las claves de todos los registros son comparados con k(el dato a buscar) Caso promedio n/2 comparaciones.
BUSQUEDA BINARIA
El presente mtodo utiliza el concepto (mtodo), DIVIDE Y VENCERAS, para localizar el elemento.
8
ELEMENTO A BUSCAR
D(Derecho)
8 10 Central 12 14 16
I (izquierdo)
4 6
El em ento a buscar es m s pequeo que Central , por lo tanto la bsqueda se retoma por el s u b v e c t o r izquierdo
Con este mtodo se examina primero el elemento central de la lista; si ste es el elemento buscado, entonces la bsqueda ha terminado. En caso contrario, se determina si el elemento buscado est en la primera o la segunda mitad de la lista y a continuacin se repite este proceso, utilizando el elemento central de la sublista. Este mtodo requiere que el vector donde se va a buscar el elemento se encuentre en un orden determinado
4 8
8 8
11
ELEMENTO A BUSCAR
I(inferior) 4 6 8 10 Central 12 14 D(Derecho) 16
Elemento a buscar es mayor que Central , por lo tanto la bsqueda se retoma por el s u b v e c t o r derecho
12 11
14
16
12 11
I, C, D
BUSQUEDA BINARIA
En la bsqueda binaria se reduce sucesivamente la operacin eliminando repetidas veces la mitad de la lista restante. Para realizar una bsqueda Binaria la lista debe estar ordenada de acuerdo al valor de la clave. Se puede aplicar en listas lineales como en Arboles Binarios de Bsqueda Se debe conocer el nmero de registros.
BUSQUEDA BINARIA
El esfuerzo mximo para este algoritmo es log2n El mnimo esfuerzo es 1 El promedio1/2log2n
Existe una funcin de transformacin de clave, H(k) que convierte (k) en una direccin (d).
Dada una clave k: El primer paso en la operacin de bsqueda es calcular su ndice asociado d<--H(k). El segundo paso necesario es verificar si el elemento con la clave k es identificado verdaderamente por h en el vector T.
Si una empresa tiene 100 empleados , y si a cada empleado se le asigna un cdigo como nmero de identificacin de 1 a 100, evidentemente puede existir una correspondencia directa entre la clave y la direccin definida en un vector de 100 elementos. En otro caso si la empresa tiene 80.000 empleados ya no se puede utilizar la relacin entre la clave y la direccin. Este mtodo consiste en la transformacin de claves (dadas numricas o alfanumricas) en una direccin (ndice) dentro del vector. La correspondencia entre las claves y la direccin en el vector se establece por una direccin definida de conversin (funcin hash)
345678125
CLAVE=45126034
[J]
CLAVE=345678125
[98] [99]
CLAVE=4515896 CLAVE=5689235
TRUNCAMIENTO
Ignora parte de la clave y se utiliza la parte restante directamente como ndice (considerando campos no numricos y sus cdigos numricos. Ejemplo: Se tiene claves de tipo entero de 8 dgitos y para la tabla de transformacin tiene mil posiciones, entonces para la direccin(ndice) se considera: el primer, segundo y quinto dgito de derecha forman la funcin de conversin. clave:72588495 --> h(clave)=728
PLEGAMIENTO
Esta tcnica consiste en la particin de la clave en diferentes partes y la combinacin de las partes en un modo conveniente (a menudo utilizando suma o multiplicacin) para obtener el ndice. La clave x se divide en varias partes x1, x2, x3,....xn, donde cada parte (con la nica posibilidad de excepcin de la ltima parte, tiene el mismo nmero de dgitos que la direccin especificada) H(x)= x1 + x2 + x3 +...+ xn
Ejemplo 1:
Un entero de 8 dgitos se puede dividir en grupos de tres(3), tres(3) y dos(2) dgitos, los grupos se suman y se truncan si es necesario para que estn en el rango adecuado de ndices.
Ejemplo 2: El nmero de identificacin de los empleados es el campo clave de una empresa y consta de cuatro dgitos y las direcciones reales son 100. Se desea calcular las direcciones correspondientes por el mtodo de plegamiento. Claves: 4205, 3355, 8148 H(4205) = 42 + 05 = 47 H(3355) = 33 + 55 = 88 H(8148) = 81 + 48 = 129 --> 129-100 =29
ARITMETICA MODULAR
Este mtodo convierte la clave a un entero, se divide por el tamao del rango del ndice y toma el resto como resultado. La funcin que se utiliza es el MOD(mdulo o resto de la divisin entera). H(x)= x MOD m
Donde m es el tamao del arreglo. La mejor eleccin de los mdulos son los nmeros primos.
Un vector T tiene cien posiciones (0..100). Se tiene que las claves de bsqueda de los elementos de la tabla son enteros positivos.
La funcin de conversin H debe tomar un nmero arbitrario entero positivo x y convertirlo en un entero en el rango de (0..100)
H(x)= x MOD m
Si clave=234661234 MOD 101 = 56 234661234 MOD 101 = 56
Ejemplo:
Una empresa tiene ochenta empleados y cada uno de ellos tiene un nmero de identificacin de cuatro dgitos y el conjunto de direcciones de memoria vara en el rango de 0 a 100. Se pide calcular las direcciones que se obtendrn al aplicar la funcin de conversin por la mitad del cuadrado de los nmeros empleados: x --> 4205 7148 3350
COLISIONES
La funcin de conversin H(x) no siempre proporciona valores distintos puede suceder que para dos claves diferentes x1 y x2 se obtiene la misma ndice(direccin). Se deben encontrar mtodos para dar solucin a las colisiones que se pueden presentar. Ejemplo de Colisin: H(123445678) = 123445678 MOD 101 = 44 H(123445880) = 123445880 MOD 101 =44 Para dos claves distintas 123445678 y 123445880; al aplicar la funcin H la direccin es 44, por lo tanto ha ocurrido una colisin.
RESOLUCION DE COLISIONES
La funcin de conversin H(x) no siempre proporciona valores distintos puede suceder que para dos claves diferentes x1 y x2 se obtiene la misma ndice(direccin). Se deben encontrar mtodos para dar solucin a las colisiones que se pueden presentar.
Un mtodo comnmente utilizado para resolver una colisin es cambiar la estructura del arreglo de modo que pueda alojar ms de un elemento en la misma posicin. De modo que cada posicin i del vector sea por si mismo un vector capaz de contener N elementos.
El problema que se presenta, es como saber el tamao de N. Si N es muy pequeo, el problema de las colisiones aparecer cuando aparezcan N + 1 elementos.
RESOLUCION DE COLISIONES
Otra solucin corresponde a utilizar una lista enlazada o encadenada de elementos para formar a partir de cada posicin del arreglo. Cada entrada i del vector es un puntero que apunta al elemento del principio de la lista de elementos. La funcin de transformacin de la clave lo convierte en la posicin i.
0 1 2 3
... ...
...
H-1
...
Encadenamiento
Ventajas:
Se pueden usar los valores naturales de las claves. Se logra la independencia lgica y fsica, debido a que los valores de las claves son independientes de las direcciones. No se requiere espacio adicional para los ndices.
Desventajas:
No se pueden utilizar registros de longitud variable. No permite claves repetidas. Solo permite acceso por una clave.
FUNCIONES HASHING
Residuo de la Divisin:
H(k)=k mod m, donde m es un nmero primo no muy cercano a una potencia de 2
Mtodo de la Multiplicacin:
H(k)= mkAmod 1 en donde 0<A<1, m se utiliza como un valor potencia de 2, para facilitar el clculo computacional de la funcin.
FUNCIONES HASHING
Por medio del Cuadrado:
La clave es elevada al cuadrado, luego unos dgitos especficos son extraidos de la mitad del resultado, para constituir la direccin relativa. Si se desea una direccin de n dgitos entonces se trunca en los extremos, tomando los n dgitos.(potencia de 10)
Por Pliege:
La clave es particionada en varias partes, cada una de las cuales tienen el mismo tamao excepto la ltima, son plegadas y posteriormente sumadas(potencia de 10)
BUSQUEDA EN TEXTO
Consiste en la bsqueda de una palabra(patrn) dentro de un texto. Se considera las siguientes convenciones:
Sea n el tamao del texto a donde se realizar la bsqueda. Ejemplo Texto=a1,a2,a3,...an Texto=Anlisis de Algoritmos Patrn=b1,b2,b3,...bm Patrn=algo
n=22 ; m=4
ALGORITMO BOYER-MOORE
La comparacin se realiza de derecha a izquierda. Si hay una discrepancia en el ltimo carcter del patrn y el carcter del texto no aparece en todo el patrn, entonces este se puede deslizar m posiciones, sin realizar ninguna comparacin extra No fue necesario hacer m-1 comparaciones, lo cual se puede hacer una bsqueda con menos n comparaciones.