Metodos de Búsqueda
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Metodos de Búsqueda

on

  • 134 views

 

Statistics

Views

Total Views
134
Views on SlideShare
127
Embed Views
7

Actions

Likes
1
Downloads
1
Comments
0

1 Embed 7

http://pedroavaria.wordpress.com 7

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Metodos de Búsqueda Document Transcript

  • 1. 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
  • 2. Í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
  • 3. 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.
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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.
  • 8. 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.
  • 9. 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.
  • 10. 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.
  • 11. 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.
  • 12. 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.
  • 13. 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.