metodos de búsqueda

13
Universidad Tecnológica de Chile Inacap Concepción- Talcahuano Función Hashing: Aritmética Modular Alumnos: Pedro Avaria Eliel Videla Docente: Pilar Pardo Concepción, 16 de abril del 2014

Upload: pedro-avaria

Post on 07-Aug-2015

109 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Metodos de Búsqueda

Universidad Tecnológica de Chile Inacap Concepción- Talcahuano

Función Hashing: Aritmética Modular

Alumnos: Pedro Avaria

Eliel Videla

Docente: Pilar Pardo

Concepción, 16 de abril del 2014

Page 2: Metodos de Búsqueda

Índice

Índice ................................................................................................................................ 2

Introducción ..................................................................................................................... 3

¿Qué es Hashing? ........................................................................................................... 4

Métodos de búsqueda ..................................................................................................... 5

Aritmética Modular .......................................................................................................... 6

Ejemplos ........................................................................................................................... 7

Colisiones ........................................................................................................................ 8

Resolución de colisiones ................................................................................................ 9

Mejor caso ...................................................................................................................... 11

Caso Promedio .............................................................................................................. 11

Peor caso ....................................................................................................................... 11

Ventajas .......................................................................................................................... 12

Desventajas .................................................................................................................... 12

Conclusión ..................................................................................................................... 13

Page 3: Metodos de Búsqueda

Introducción

Muchas actividades humanas requieren que en ellas las diferentes colecciones de elementos utilizados se coloquen en un orden específico. Las oficinas de correo por ejemplo ordenan cartas y los paquetes por códigos postales con el objeto de conseguir una entrega eficiente; los anuarios o guías telefónicas ordenan sus clientes por orden alfabético de apellidos con el fin último de encontrar fácilmente el número de teléfono deseado; los estudiantes de una clase en la universidad se ordenan por sus apellidos o por los números de rut, etc. Por esta circunstancia una de las tareas que realizan más frecuentemente las computadoras en el procesamiento de datos es la ordenación y la búsqueda.

El estudio de diferentes métodos de ordenación es una tarea intrínsecamente interesante desde un punto de vista teórico y, naturalmente, práctico. Con el presente informe se pretende entender los principales métodos de búsqueda para tener conocimiento a priori para su posterior aplicación en la informática.

Page 4: Metodos de Búsqueda

Funciones Hashing

4

¿Qué es Hashing?

Ahora bien en la búsqueda binaria (como ejemplo) proporciona un medio para reducir el tiempo requerido para buscar en una lista. Este método, sin embargo, exige que los dato estén ordenados. Existen otros métodos que pueden aumentar la velocidad de búsqueda en el que los datos no necesitan estar ordenados, este método se conoce como transformación de claves (clave – dirección) o Hashing1.

El método de transformación de claves consiste en convertir la clave dada (numérica o alfanumérica) e una dirección (índice) dentro del arreglo. La correspondencia entre las claves y la dirección en el medio de almacenamiento o en el arreglo se establece por una función de conversión (función o hash).

La imagen anterior muestra el ejemplo de registro (rut o dni) que pasa a través de un

proceso de Hashing para su asignación en la tabla pequeña.

1 Hash (Hashing): Su traducción refiere al hecho de hacer partes más pequeñas, o trozos a forma de

picadillo. Extraído mediante el sitio www.wordreference.com

Page 5: Metodos de Búsqueda

Funciones Hashing

5

Métodos de búsqueda

Búsqueda lineal

Consiste en buscar de manera secuencial un elemento, es decir, pregunta si el elemento buscado está en el primero luego el segundo el tercero y así sucesivamente hasta el final del vector.

La complejidad de este algoritmo es O(n).

Búsqueda binaria

Este método se utiliza cuando el vector esta previamente ordenado este algoritmo reduce considerablemente el tiempo de búsqueda ya que disminuye el número de iteraciones necesarias.

Este método se recomienda para Arreglos de gran tamaño. Por ejemplo en uno que contenga 50.000.000 elementos, realiza como máximo 26 comparaciones (En el peor de los casos).

Compara el elemento a buscar con un elemento del arreglo (casi siempre el central) compara si es mayor o menor al elemento a buscar. Si es mayor busca desde el inicio del arreglo hasta el elemento que toma, si es menor toma del último elemento hasta el elemento tomado.

De esta forma se obtienen intervalos cada vez más pequeños, hasta que tenga un intervalo indivisible.

Funciones Hash

Truncamiento: Este método ignora parte de la clave o elemento y utiliza la parte restante como índice, dependiendo del tamaño de la clave y del Arreglo dependerá que elementos se toman de ella por ejemplo si tenemos un Arreglo de 8 dígitos y son mil posiciones se tomara el primero, segundo y el quinto.

25698542 = 258

Plegamiento: Consiste en dividir la clave en distintos grupos y la combinación de ellos en un modo conveniente resulta el índice (comúnmente suma o multiplicación) si el valor no se encuentra en el rango del Arreglo se trunca para que este en el rango adecuado de índices. Ejemplo: se tiene una clave de 8 dígitos y 300 posiciones.

25698542 = 256+985+42=1283 283

Mitad del cuadrado: Consiste en calcular el cuadrado de la clave después algunos dígitos específicos se extraen de la mitad del resultado y se utiliza como el índice de la clave, Si se desea una dirección de n dígitos, entonces los dígitos se truncan en ambos extremos de la llave elevada al cuadrado, tomando n dígitos intermedios. Las mismas posiciones de n dígitos deben extraerse para cada llave. Ejemplo: se tiene una clave de 4 dígitos y 100 posiciones

25692 = 6599761 99

Page 6: Metodos de Búsqueda

Funciones Hashing

6

Aritmética Modular

Este método convierte la clave a un entero, dividiendo el por el tamaño del rango del arreglo o índice y tomar el resto como resultado. La función de conversión utilizada es mod (modulo o resto de la división entera)

Donde m es el tamaño del arreglo con índices de 0 a m-1. Los valores de la función –Direcciones—(el resto) irán de 0 a m-1, ligeramente menor que el tamaño del arreglo. La mejor elección de los módulos son los números primos. Por ejemplo en un arreglo de 1.000 elementos se puede elegir 997 o 1.009. Otros ejemplos son:

Que proporcionan restos de 0,1 y 2 respectivamente.

Si se desea que las direcciones vayan de 0 hasta m, la función de conversión debe

H(x)= x MOD m

H(x)= x MOD (m+1)

19 mod 6 19 mod 6 20 mod 6

Page 7: Metodos de Búsqueda

Funciones Hashing

7

Ejemplos

Ejemplo N° 1

Un vector T tiene 100 posiciones, desde 0 a 100. Supongamos que las claves de

búsqueda de los elementos de la tabla son enteros positivos (por ejemplo, número de rut)

Una función de conversión h debe tomar un numero arbitrario entero positivo x y

convertirlo a un entero en el rango 0 a 100, esto es, h es una función tal que para un

entero positivo x.

h(x) = n, donde n es entero en el rango 0 a 100.

El método del modulo, tomando 101, será:

h(x) = x mod 101

Si se tiene el rut 234661234 (como un rut empresarial 23.466.123-4), por ejemplo, se

tendrá la posición 56:

234661234 mod 101= 56

Ejemplo N° 2

La clave de búsqueda es una cadena de caracteres (por ejemplo nombres). Obtener las

direcciones de conversión podría será:

El método más simple de asignar a cada carácter de la cadena un valor entero (por

ejemplo, A=1,B=2,…) y sumar los valores de los caracteres en la cadena. Al resultado se

le aplica entonces el módulo 101, por ejemplo:

Si el nombre fuese JONAS, esta clave se convertiría en el entero:

10 + 15 + 14 + 1 + 19 = 63

63 mod 101 = 63.

Page 8: Metodos de Búsqueda

Funciones Hashing

8

Colisiones

La función de conversión h(x) no siempre proporciona valores distintos, puede suceder que para dos claves diferentes y se obtenga la misma dirección. Esta situación se denomina COLISION y se deben encontrar métodos para su correcta resolución.

Tomando el ejemplo anterior para la asignación de índices a ruts podríamos encontrar:

Rut 1: 123445678 Rut 2: 123445880

Que proporcionarían las direcciones:

h (123445678) = 123445678 mod 101= 44

h (123445880) = 123445880 mod 101= 44

Es decir, se tienen dos elementos en la misma posición del vector o arreglo, [44]. En terminología de claves se dice que las claves 123445678 y 123445880 han colisionado.

El único medio para evitar el problema de las colisiones totalmente es tener una posición del arreglo para cada posible número del rut. Si por ejemplo, los números del rut son claves el rut se representa con 10 dígitos, se necesitaría una posición del arreglo para cada entero en el rango 0000000000 a 9999999999. Evidentemente, sería necesario una gran cantidad de almacenamiento. En general, el único método para evitar colisiones totalmente es que el arreglo sea lo bastante grande para que cada posible valor de la clave de búsqueda pueda tener su propia posición. Ya que esto normalmente no es practico ni posible, se necesitara un medio para tratar o resolver las colisiones cuando sucedan.

Page 9: Metodos de Búsqueda

Funciones Hashing

9

Resolución de colisiones

Consideremos el problema producido por una colisión. Supongamos que desea insertar un

elemento de un rut 12345678, en un arreglo T. Se aplica la función de conversión del MODULO y

se determina que el nuevo elemento se situara en la posición T[44].Sin embargo, se observa que

T[44] ya contiene un elemento con rut 123445779.

En la imagen anterior se puede apreciar la colisión en el arreglo T

La pregunta que se plantea inmediatamente es ¿Qué hacer con el nuevo elemento?

Un método comúnmente utilizado para resolver una colisión es cambiar la estructura del arreglo T

de modo que pueda alojar más de un elemento en la misma posición. Se puede, por ejemplo,

modificar T de modo que cada posición T[i] sea por sí misma un arreglo capaz de contener N

elementos. El problema, evidentemente, será saber la magnitud de N. Si N es muy pequeño, el

problema de las colisiones aparecerá cuando aparezca N +1 elementos.

Una solución mejor es permitir una lista enlazada o encadenada de elementos para formar a partir

de cada posición del arreglo. En este método de resolución de colisiones, conocido como

encadenamiento, cada entrada T[i] es un puntero que apunta al elemento del principio de la lista

de elementos, de modo que la función de transformación de clave lo convierte en la posición i.

Page 10: Metodos de Búsqueda

Funciones Hashing

10

En esta imagen podemos apreciar un diagrama de como trabajaría la resolución de colisiones

mediante encadenamiento por punteros o encadenamiento de sinónimos.

En general podemos describir otros métodos para la resolución tales como:

Búsqueda lineal: A partir de la colisión se busca el primer espacio vacío para guardar la clave.

Doble hashing: Se aplica una segunda hash a la clave, no necesariamente el mismo método.

Área de Desborde: La dirección para k2 se encuentra fuera del área principal, área especial donde se almacenan los registros que no pueden ser almacenados en el área principal.

Page 11: Metodos de Búsqueda

Funciones Hashing

11

Mejor caso

Para este método el mejor caso es que no ocurra ninguna colisión dentro del Arreglo esto disminuye el tiempo de ejecución y que no sea necesaria un método de resolución de colisiones.

Caso Promedio

Que surjan muy pocas colisiones para que no aumente mucho el tiempo de ejecución y se escoja el mejor método de resolución de colisiones.

Peor caso

Todas las claves realicen colisiones dentro del arreglo y además se elija un mal método de resolución de colisiones.

Page 12: Metodos de Búsqueda

Funciones Hashing

12

Ventajas

Es una búsqueda directa del elemento.

Al realizar una sola operación el tiempo de ejecución disminuye en el caso de que no existan colisiones al momento de buscar o insertar.

Como se menciona anteriormente al realizar una operación utiliza menos espacio en memoria.

Desventajas

En este método de hash hay muchas posibilidades de colisiones lo que aumenta el tiempo de búsqueda del elemento.

No permite claves repetidas.

En este método el arreglo queda con espacios vacíos.

Page 13: Metodos de Búsqueda

Funciones Hashing

13

Conclusión

El método Hashing para la asignación de índices y de búsqueda para claves, ha demostrado ser una herramienta potente para la utilización de recursos en lo que respecta al manejo de información. Podemos inferir además que en gran parte de sus cualidades se nos entrega un gran rango de posibilidades para desarrollar cada vez mejores funciones, muchas de las que entrega por ejemplo la búsqueda binaria.

Teniendo tales conocimientos podemos aplicar métodos a sistemas propios de estudiantes para poder analizar y visualizar la eficacia y eficiencia de dichas funciones.