Sie sind auf Seite 1von 17

S.E.P.

S.N.E.S.T.

D.G.E.S.T.

INSTITUTO TECNOLGICO
Del Istmo
ING. EN SISTEMAS COMPUTACIONALES

PRESENTAN: Noel Juarez Ramirez Eleazar Jimenez Garcia Javier de la Cruz martinez

GRUPO: 3X MATERIA: ESTRUCTURA DE DATOS

TEMAS A DESARROLLAR:
METODOS DE BUSQUEDA

LUGAR Y FECHA: H. CD. DE JUCHITAN DE ZARAGOZA OAXACA 24/NOVIEMBRE/2011

INDICE

pag BUSQUEDA SECUENCIAL. 3

BUSQUEDA BINARIA.

BUSQUEDA POR FUNCIONES DE HASH.

BSQUEDA
La bsqueda es una operacin que tiene por objeto la localizacin de un elemento dentro de la estructura de datos. A menudo un programador estar trabajando con grandes cantidades de datos almacenados en arreglos y pudiera resultar necesario determinar si un arreglo contiene un valor que coincide con algn valor clave o buscado. Siendo el arreglo de una dimensin o lista una estructura de acceso directo y a su vez de acceso secuencial, encontramos dos tcnicas que utilizan estos dos mtodos de acceso, para encontrar elementos dentro de un array: bsqueda lineal y bsqueda binaria

BSQUEDA SECUENCIAL
La bsqueda secuencial es la tcnica ms simple para buscar un elemento en un arreglo. Consiste en recorrer el arreglo elemento a elemento e ir comparando con el valor buscado (clave). Se empieza con la primera casilla del arreglo y se observa una casilla tras otra hasta que se encuentra el elemento buscado o se han visto todas las casillas. El resultado de la bsqueda es un solo valor, y ser la posicin del elemento buscado o cero. Dado que el arreglo no est en ningn orden en particular, existe la misma probabilidad de que el valor se encuentra ya sea en el primer elemento, como en el ltimo. Por lo tanto, en promedio, el programa tendr que comparar el valor buscado con la mitad de los elementos del arreglo. El mtodo de bsqueda lineal funciona bien con arreglos pequeos o para arreglos no ordenados. Si el arreglo est ordenado, se puede utilizar la tcnica de alta velocidad de bsqueda binaria, donde se reduce sucesivamente la operacin eliminando repetidas veces la mitad de la lista restante.

Algoritmo 1.- Empezar con el primer elemento de la lista e inicializar la variable que servir de bandera. 2.- Efectuar la bsqueda mientras hay elementos en la lista y el valor de la llave no se ha encontrado. 3.- Verificar si se encontr el elemento objeto de la bsqueda. 4.- fin
3

Cdigo void BusquedaSecuencial(int x, TVector v, int ini, int fin, int &pos, bool &encontrado) { pos = ini; encontrado=false; while ( (pos <=fin) && (!encontrado) ) { if (v[pos]==x) encontrado=true; else ++pos; } }

BUSQUEDA BINARIA
INTRODUCCION La bsqueda secuencial se aplica a cualquier lista. Si la lista est ordenada, la bsqueda binaria proporciona una tcnica de bsqueda mejorada. Una bsqueda binaria tpica es la bsqueda de una palabra en un diccionario. Dada la palabra, se abre el libro cerca del principio, del centro o del final dependiendo de la primera letra del primer apellido o de la palabra que busca. Se puede tener suerte y acertar con la pgina correcta; pero, normalmente, no ser as y se mueve el lector a la pgina anterior o posterior del libro. Por ejemplo, si la palabra comienza con J y se est en la L se mueve uno hacia atrs. El proceso contina hasta que se encuentra la pgina buscada o hasta que se descubre que la palabra no est en la lista.

CONDICIONES NECESARIAS
Se puede aplicar tanto a datos en listas lineales como en rboles binarios de bsqueda. Los prerrequisitos principales para la bsqueda binaria son: Que los elementos estn ordenados Conocer el tamao de la lista o vector Conocer el elemento a buscar

Bsqueda Binaria Mtodo ms eficiente si el vector se encuentra ordenado. Comienzo del proceso Bsqueda-Binaria: Comparacin del elemento central del vector con la clave

Si hay coincidencia FIN Si es mayor Bsqueda-Binaria en el sub-vector superior Si es menor Bsqueda-Binaria en el sub-vector inferior FIN cuando se encuentra la clave o cuando el subvector correspondiente no tiene elementos

ALGORITMO DE LA BUSQUEDA BINARIA


Suponiendo que la lista est almacenada como un arreglo, los ndices de la lista son: bajo = 0 y alto = n-1 y n es el nmero de elementos del arreglo, los pasos a seguir: 1. Calcular el ndice del punto central del arreglo central = (bajo + alto)/2 (divisin entera)

2. Comparar el valor de este elemento central con la clave:

Clave

Bajo

central
5

alto

Clave encontrada

Clave Bajo central alto

Bsqueda lista inferior


Clave Bajo central alto

Bsqueda lista superior


Si clave > [central] , la nueva sublista de bsqueda tiene por valores extremos de su rango bajo = central+1..alto. Si clave < [central], la nueva sublista de bsqueda tiene por valores extremos de su rango bajo..central-1.

Clave Bajo = central + 1 alto Clave Bajo


6

central 1 = alto

Ventajas de la tcnica.
La bsqueda binaria es un mtodo eficiente siempre que el vector est ordenado. En la prctica, esto suele suceder, pero no siempre. Por esta razn la bsqueda binaria exige una ordenacin previa del archivo. La bsqueda binaria proporciona un medio para reducir el tiempo requerido para buscar en una lista. Este mtodo, sin embargo, exige que los datos estn ordenados. Es mas rpido por su recursividad, su mayor ventaja es con los archivos extensos. El cdigo del procedimiento de esta bsqueda es corto en comparacin con las dems tcnicas de bsqueda. En esencia, con una sola comparacin eliminamos la mitad de la tabla; este es el mtodo mas eficiente de buscar en una lista ordenada sin emplear tablas o ndices adicionales.

Desventajas de la tcnica. La bsqueda binaria tiene, sin embargo, inconvenientes a resaltar: El archivo debe estar ordenado y el almacenamiento de un archivo ordenado suele plantear problemas en las inserciones y eliminaciones de elementos. No revisa todos los elementos del archivo, requiere que todos los elementos estn ordenados

Comparacin de la bsqueda binaria y secuencial

La codificacin del algoritmo de bsqueda binaria: /* bsqueda binaria. devuelve el ndice del elemento buscado, o bien -1 caso de fallo */ int busquedaBin(int lista[], int n, int clave) { int central, bajo, alto; int valorCentral; bajo = 0; alto = n-1; while (bajo <= alto) { central = (bajo + alto)/2; /* ndice de elemento central */ valorCentral = lista[central]; /* valor del ndice central */ if (clave == valorCentral) return central; /* encontrado, devuelve posicin */ else if (clave < valorCentral) alto = central -1; /* ir a sublista inferior */ else bajo = central + 1; /* ir a sublista superior */ } return -1; /* elemento no encontrado */ }

EJEMPLO:
Se desea buscar el elemento 225 y ver si se encuentra en el conjunto de datos siguiente: a[0] a[1] a[2] a[3] 13, 44, 75, a[4] a[5] a[6] a[7] 120, 275, 325, 510

100,

El punto central de la lista es el elemento a[3] (100). El valor que se busca es 225, mayor que 100; por consiguiente, la bsqueda contina en la mitad superior del conjunto de datos de la lista, es decir, en la sublista,

a[4]

a[5] a[6] a[7]


8

120,

275,

325, 510

Ahora el elemento mitad de esta sublista a[5] (275). El valor buscado, 225, es menor que 275 y, por consiguiente, la bsqueda contina en la mitad inferior del conjunto de datos de la lista actual; es decir, en la sublista de un nico elemento:

a[4] 120 El elemento mitad de esta sublista es el propio elemento a[4] (120). Al ser 225 mayor que 120, la bsqueda debe continuar en una sublista vaca. Se concluye indicando que no se ha encontrado la clave en la lista.

BUSQUEDA POR FUNCIONES de HASH


QUE ES HASH? Se refiere a una funcin o mtodo para generar claves o llaves que representen de manera casi *unvoca a un documento, registro, archivo, etc. * unvoco(a): preciso,claro.

Algunos generadores Hash: CRCs(comprobacin de redundancia cclica) MD2(acrnimo ingls de Message-Digest Algorithm 2, Algoritmo de Resumen del Mensaje 2) MD4 (Algoritmo de Resumen del Mensaje 4) MD5 (Algoritmo de Resumen del Mensaje 5) SHA1 (Secure Hash Algorithm, Algoritmo de Hash Seguro) Tiger Snefru RipeMD (acrnimo de RACE Integrity Primitives Evaluation Message Digest, primitivas de integridad del resumen del mensaje) Whirlpool
9

Haval,entre otros

FUNCION DE HASH
Es una funcin para resumir o identificar probabilsticamente un gran conjunto de informacin, dando como resultado un conjunto imagen finito generalmente menor (un subconjunto de los nmeros naturales por ejemplo). Varan en los conjuntos de partida y de llegada y en cmo afectan a la salida similitudes o patrones de la entrada. Una propiedad fundamental del hashing es que si dos resultados de una misma funcin son diferentes, entonces las dos entradas que generaron dichos resultados tambin lo son. Son usadas en mltiples aplicaciones, como los arrays asociativos, criptografa, procesamiento de datos y firmas digitales, entre otros. Una buena funcin de hash es una que experimenta pocas colisiones en el conjunto esperado de entrada; es decir que se podrn identificar unvocamente las entradas Muchos sistemas relacionados con la seguridad informtica usan funciones o tablas hash.

TABLA DE HASH
Es una estructura de datos que asocia llaves o claves con valores. La operacin principal que soporta de manera eficiente es la bsqueda: Permite el acceso a los elementos (telfono y direccin) almacenados a partir de una clave generada (usando el nombre o nmero de cuenta). Funciona transformando la clave con una funcin hash en un hash, un nmero que la tabla hash utiliza para localizar el valor deseado La funcin de hash ideal debera ser biyectiva, esto es, que a cada elemento le corresponda un ndice, y que a cada ndice le corresponda un elemento, pero no siempre es fcil encontrar esa funcin, e incluso a veces es intil, ya que puedes no saber el nmero de elementos a almacenar. La funcin de hash depende de cada problema y de cada finalidad, y se pueden utilizar con nmeros o cadenas, pero las ms utilizadas son:
10

1.- Restas sucesivas


Esta funcin se emplea con claves numricas entre las que existen huecos de tamao conocido, obtenindose direcciones consecutivas. Un ejemplo serian los alumnos de ingeniera en sistemas que entraron en el ao 2005 sus nmeros de control son consecutivos y esta definido el numero de alumnos. 05210800 05210800>>>> 0 05210801 05210800>>>> 1 05210802 05210800>>>> 2 05210899 05210800>>>> 99

2.- Aritmtica modular


El ndice de un nmero es resto de la divisin de ese nmero entre un nmero N prefijado, preferentemente primo. Los nmeros se guardarn en las direcciones de memoria de 0 a N-1.Este mtodo tiene el problema de que dos o ms elementos pueden producir el mismo residuo y un ndice puede ser sealado por varios elementos. A este fenmeno se le llama colisin. Mientras mas grande sea nmero de elementos es mejor escoger un nmero primo mayor para seccionar el arreglo en ms partes. El nmero elegido da el nmero de partes en que se secciona el arreglo, y las cada seccin esta compuesta por todos los elementos que arrojen el mismo residuo, y mientras mas pequeas sean las secciones la bsqueda se agilizara mas que es lo que nos interesa. Si el nmero N es el 7, los nmeros siguientes quedan transformados en: 1679 %7>>> 6 4567 %7>>> 3 8471 %7>>> 1 0435 %7>>> 1 5033 %7>>> 0

11

3.- Mitad del cuadrado


Consiste en elevar al cuadrado la clave y tomar las cifras centrales. Este mtodo tambin presenta problemas de colisin: 709^2=502681 26 456^2=207936 79 105^2=11025 10 879^2=772641 26 619^2=383161 31 Nota:en caso de que la cifra resultante sea impar se toma el valor nmero y el anterior.

4.- Truncamiento
Consiste en ignorar parte del nmero y utilizar los elementos restantes como ndice. Tambin se produce colisin. Por ejemplo, si un nmero de 7 cifras se debe ordenar en un arreglo de elementos, se pueden tomar el segundo, el cuarto y el sexto para formar un nuevo nmero:

12

5.- Plegamiento

Consiste en dividir el nmero en diferentes partes, y operar con ellas(normalmente con suma o multiplicacin). Tambin se produce colisin. Por ejemplo, si dividimos el nmero de 7 cifras en 2, 2 y 3 cifras y se suman, dar otro nmero de tres cifras (y si no, se toman las tres ltimas cifras):

Nota: Estas solo son sugerencias y que con cada problema se pude implementar una nueva funcin hash que incluso tu puedes inventar o formular.

COMPARACIN ENTRE LAS FUNCIONES HASH


Aunque alguna otra tcnica pueda desempearse mejor en situaciones particulares, la tcnica del residuo de la divisin proporciona el mejor desempeo. Ninguna funcin hash se desempea siempre mejor que las otras. El mtodo del medio del cuadrado puede aplicarse en archivos con factores de cargas bastantes bajas para dar generalmente un buen desempeo. El mtodo de pliegues puede ser la tcnica mas fcil de calcular pero produce resultados bastante errticos, a menos que la longitud de la llave se aproximadamente igual a la longitud de la direccin.

13

Si la distribucin de los valores de llaves no es conocida, entonces el mtodo del residuo de la divisin es preferible. Note que el hashing puede ser aplicado a llaves no numricas. Las posiciones de ordenamiento de secuencia de los caracteres en un valor de llave pueden ser utilizadas como sus equivalentes "numricos". Alternativamente, el algoritmo hash acta sobre las representaciones binarias de los caracteres. Todas las funciones hash presentadas tienen destinado un espacio de tamao fijo. Aumentar el tamao del archivo relativo creado al usar una de estas funciones, implica cambiar la funcin hash, para que se refiera a un espacio mayor y volver a cargar el nuevo archivo.

LOS MTODOS MS CONOCIDOS PARA RESOLVER COLISIONES SON: Sondeo lineal Doble hashing 1.- Encadenamiento de sinnimos 2.- Direccionamiento por cubetas Sondeo lineal Que es una tcnica de direccionamiento abierto. Este es un proceso de bsqueda secuencial desde la direccin de origen para encontrar la siguiente localidad vaca. Esta tcnica es tambin conocida como mtodo de desbordamiento consecutivo. Para almacenar un registro por hashing con sondeo lineal, la direccin no debe caer fuera del limite del archivo, En lugar de terminar cuando el limite del espacio de direccin se alcanza, se regresa al inicio del espacio y sondeamos desde ah. Por lo que debe ser posible detectar si la direccin base ha sido encontrada de nuevo, lo cual indica que el archivo esta lleno y no hay espacio para la llave. Para la bsqueda de un registro por hashing con sondeo lineal, los valores de llave de los registros encontrados en la direccin de origen, y en las direcciones alcanzadas con el sondeo lineal, deber compararse con el valor de la llave buscada, para determinar si el registro objetivo ha sido localizado o no.

14

El sondeo lineal puede usarse para cualquier tcnica de hashing. Si se emplea sondeo lineal para almacenar registros, tambin deber emplearse para recuperarlos.

Doble hashing En esta tcnica se aplica una segunda funcin hash para combinar la llave original con el resultado del primer hash. El resultado del segundo hash puede situarse dentro del mismo archivo o en un archivo de sobreflujo independiente; de cualquier modo, ser necesario algn mtodo de solucin si ocurren colisiones durante el segundo hash. La ventaja del mtodo de separacin de desborde es que reduce la situacin de una doble colisin, la cual puede ocurrir con el mtodo de direccionamiento abierto, en el cual un registro que no esta almacenado en su direccin de origen desplazara a otro registro, el que despus buscar su direccin de origen. Esto puede evitarse con direccionamiento abierto, simplemente moviendo el registro extrao a otra localidad y almacenando al nuevo registro en la direccin de origen ahora vaca.
15

Puede ser aplicado como cualquier direccionamiento abierto o tcnica de separacin de desborde. Para ambas mtodos para la solucin de colisiones existen tcnicas para mejorar su desempeo como:

1.- Encadenamiento de sinnimos Una buena manera de mejorar la eficiencia de un archivo que utiliza el calculo de direcciones, sin directorio auxiliar para guiar la recuperacin de registros, es el encadenamiento de sinnimos. Mantener una lista ligada de registros, con la misma direccin de origen, no reduce el nmero de colisiones, pero reduce los tiempos de acceso para recuperar los registros que no se encuentran en su localidad de origen. El encadenamiento de sinnimos puede emplearse con cualquier tcnica de solucin de colisiones. Cuando un registro debe ser recuperado del archivo, solo los sinnimos de la llave objetivo son accesados. 2.- Direccionamiento por cubetas Otro enfoque para resolver el problema de las colisiones es asignar bloques de espacio (cubetas), que pueden acomodar ocurrencias mltiples de registros, en lugar de asignar celdas individuales a registros. Cuando una cubeta es desbordada, alguna nueva localizacin deber ser encontrada para el registro. Los mtodos para el problema de sobrecupo son bsicamente los mismos que los mtodos para resolver colisiones.

COMPARACIN ENTRE SONDEO LINEAL Y DOBLE HASHING De ambos mtodos resultan distribuciones diferentes de sinnimos en un archivo relativo. Para aquellos casos en que el factor de carga es bajo (< 0.5), el sondeo lineal tiende a agrupar los sinnimos, mientras que el doble hashing tiende a dispersar los sinnimos mas ampliamente a travz del espacio de direcciones. El doble hashing tiende a comportarse casi tambin como el sondeo lineal con factores de carga pequeos (< 0.5), pero acta un poco mejor para factores de carga mayores. Con un factor de carga > 80 %, el sondeo lineal por lo general resulta tener un comportamiento terrible, mientras que el doble hashing es bastante tolerable para bsquedas exitosas pero no as en bsquedas no exitosas. Ventaja 1. Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fciles de localizar 2. Se logra independencia lgica y fsica, debido a que los valores de las llaves son independientes del espacio de direcciones 3. No se requiere almacenamiento adicional para los ndices.
16

Desventajas 1. No pueden usarse registros de longitud variable 2. El archivo no esta clasificado 3. No permite llaves repetidas 4. Solo permite acceso por una sola llave

Costos Tiempo de procesamiento requerido para la aplicacin de la funcin hash Tiempo de procesamiento y los accesos E/S requeridos para solucionar las colisiones. La eficiencia de una funcin hash depende de: 1. La distribucin de los valores de llave que realmente se usan 2. El numero de valores de llave que realmente estn en uso con respecto al tamao del espacio de direcciones 3. El numero de registros que pueden almacenarse en una direccin dad sin causar una colisin 4. La tcnica usada para resolver el problema de las colisiones

17

Das könnte Ihnen auch gefallen