Sie sind auf Seite 1von 34

ALGORITMOS DE BUSQUEDA Y ORDENAMIENTO

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.

Definicin Formal de Bsqueda

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)

Cmo se estructuran los datos ?


- Vectores Estticas Internas Lineales Dinmicas Estructura de Datos - rboles - Grafos - Matriz - Pilas - Listas - Colas

No Lineales

Bases de Datos Externas

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

BUSQUEDA BINARIA CON EXITO

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 SIN EXITO

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

PROGRAMA DE BUSQUEDA BINARIA


#include<stdio.h> #include<conio.h> #include<stdlib.h> #define fila 5 void busqueda_binaria(int vec[fila]); void main() { int vec[fila]; int i,j,x; clrscr(); for(i=0; i<5 ;i++) //Ingreso de los datos al vector { printf("\nIngrese el elemento %d:",i); scanf("%d",&vec[i]); } busqueda_binaria(vec); for (i=0 ;i<fila; i++){ printf("\n el elemento %d del vector es %d ",i,vec[i]);} }

PROGRAMA DE BUSQUEDA BINARIA


void busqueda_bianria(int vect[fila]) { int alto, bajo, centro; int j,valor,v; printf("\nProceso de Busqueda\n"); printf("\nIngrese el elemento a buscar"); scanf("%d",&valor); alto=4; bajo=0; centro=(bajo + alto)/2; printf("el indice centro es:%d",centro); while(bajo <= alto && (vect[centro] != valor)) { if(valor < vect[centro]) alto = centro - 1; else bajo = centro + 1; centro=(bajo+alto)/2; } if (valor == vect[centro]) printf("el elemento no existe"); else printf("el elemento existe"); }

BUSQUEDA MEDIANTE TRANSFORMACIN DE CLAVES (HASHING)


Los elementos o registros del campo clave no es necesario que estn ordenados de acuerdo a los valores del campo clave, como se requiere en la bsqueda binaria.

Existe una funcin de transformacin de clave, H(k) que convierte (k) en una direccin (d).

La funcin H es la funcin de paso o conversin de mltiples claves a direcciones.

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.

BUSQUEDA MEDIANTE TRANSFORMACIN DE CLAVES (HASHING)

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)

METODOS DE TRANSFORMACION DE CLAVES


Existen numerosos mtodos de transformacin de claves:

TRUNCAMIENTO PLEGAMIENTO ARITMETICA MODULAR MITAD DEL CUADRADO

345678125

TABLA DE TRANSFORMACION DE CLAVES [0] FUNCION DE CONVERSION DE CLAVES [1]

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.

Se considera la clave 62538194 y el nmero de direcciones es 100:

H(clave)=625 + 381 + 94 =1100 se trunca


H(clave)=100

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

MITAD DEL CUADRADO


Este mtodo consiste en calcular el cuadrado de la clave x. La funcin de conversin se define como: H(x)=c Donde c se obtiene eliminando dgitos a ambos lados de x2.

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

x2 --> 17682025 51093904 11222500


Por lo tanto H(x) =82 93 22

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

BUSQUEDA POR TRANSFORMACION DE CLAVES


Este mtodo permite hacer una bsqueda directa. La idea bsica corresponde a aplicar una funcin que traduce un conjunto de posibles valores claves en un rango de direcciones relativas. El problema que se presenta corresponde a las colisiones. Sea clave1<>clave2=>f(clave1)=f(clave2) A dos claves distintas les corresponde la misma direccin, se les denomina sinnimos

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)

METODOS PARA RESOLVER LAS COLISIONES


Area de Desborde: La direccin para k2 se encuentra fuera del rea principal, rea especial donde se almacenan los registros que no pueden ser almacenados en el rea principal. Sondeo Lineal:Bsqueda secuencial desde la direccin de origen hasta encontrar la siguiente direccin vaca. Doble Hashing: Se aplica una segunda hash a la clave. Encadenamiento de Sinnimos: Mantener una lista ligada de registros. Direccionamiento por Cubetas: Asignacin de bloques de espacios.

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 DE FUERZA BRUTA


Se alinea la primera posicin del patrn con la primera posicin del texto, y se comparan los caracteres hasta finalizar el patrn; se encontr una ocurrencia del patrn en el texto o hasta que se encuentra una discrepancia. Si se detiene el algoritmo por una discrepancia, se desliza el patrn en una posicin hacia la derecha y se intenta de nuevo En el peor de los casos realiza O(m-n) comparaciones de caracteres

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.

Das könnte Ihnen auch gefallen