SlideShare una empresa de Scribd logo
1 de 23
Hashing María Luisa Velasco Ramírez
El origen de los algoritmos de hash es la ambición de los científicos por encontrar una forma más rápida de encontrar la información: O(1) Las técnicas de búsqueda basadas en comparaciones, tal como los enfoques secuénciales no son muy eficientes en velocidad y recuperación de información.
En ese caso HASHING (también conocido como método de dispersión) es una metodología altamente eficiente para estas operaciones.  Hashing consiste en una transformación matemática de una clave k con una función h(k) que da como resultado la posición de k en una tabla (llamado también transformación key-to-address o KAT).
El verbo en inglés 'to hash' significa cortar o mezclar, analógicamente en recuperación de la información hashing significa cortar una parte de la clave y utilizarla como base de la búsqueda.  La función hash h(k) toma como entrada una clave k y produce como resultado un valor entero distribuido uniformemente en un rango determinado. Este valor se usa como índice para la búsqueda o inserción de un dato en un arreglo llamado también ' tabla de hash ' o también 'tablas dispersas'.
Por ejemplo:  Para un número 31, su transformación de clave por medio de sumas (tipo de técnica de transformación de claves) nos genera una dirección 4, por lo tanto se va a colocar el número 31 en la Posición 4.
Una importante desventaja de hashing es que el conjunto de posibles claves es siempre mayor al número de espacios disponibles. Es decir, dos o más claves pueden asignarse a la misma dirección en la tabla de hash.  Cuando dos claves se direccionan a la misma dirección o bucket se dice que hay una colisión, y a las claves se les denomina sinónimos.
Cuando hay colisiones se requiere de un proceso adicional para encontrar una posición disponible para la clave. Esto obviamente degrada la eficiencia del método, por lo que se trata de evitar al máximo esta situación.  Una función de hashing que logra evitar al 100% las colisiones es conocida como hashing perfecto.
Ahora bien, cuando se tienen dos números que generan la misma dirección se tiene una colisión. Por lo tanto se necesita solucionar la colisión, y tenemos dos tipos de direccionamiento:     1) Direccionamiento Abierto.  Este tipo de solución de colisiones consiste en colocar en la siguiente posición vacía el número que generó la colisión.
Números a insertar: 31, 41, 13:
Direccionamiento cerrado.  Este tipo de solución de colisiones no se tiene ningún problema con que se repita la misma dirección, utilizando el uso de listas.  null   0 null   1 null   2 null   3   4 45 null   5   6
Función Modulo(por división) Consiste en tomar el residuo de la clave entre el número de componentes del arreglo. Si se tiene un arreglo de N elementos y sea K la clave del dato a buscar o a almacenar. La función hash queda definida como:    H(k) = (K % N) +1  Para tener una mejor uniformidad en la distribución, N debe ser un número primo o divisible por muy pocos números. Por lo tanto dato N, si éste no es un número primo se tomará el valor primo más cercano.
Truncamiento: Ignora parte de la clave y se utiliza la parte restante directamente como índice (considerando campos no numéricos y sus códigos numéricos).  Si las claves, por ejemplo; son enteros de ocho dígitos y la tabla de transformación tiene mil posiciones, entonces el primero, segundo y quinto dígitos desde la derecha pueden formar la función de conversión. Ejemplo: 72588495 se convierte en 895. El truncamiento es un método muy rápido, pero falla para distribuir las claves de modo uniforme.
Plegamiento: La técnica de plegamiento consiste en la partición de la clave en diferentes partes y la combinación de las partes en un modo conveniente (a menudo utilizando suma o multiplicación) para obtener el índice. Ejemplo: 13000000 --> 130=130+000+0012345678 --> 657=123+456+7871140205 --> 118 --> 1118=711+402+0513602499 --> 259=136+024+9925000009 --> 259=250+000+09
Métodos de tratamiento de colisiones Ejemplo, aplicando la función módulo para determinar la dirección de  la clave: H(k) = (K % N) +1
Prueba cuadrática
Doble hash Lo que se hace es aplicar una segunda función de dispersión a la clave, y luego se prueba a distancias h2(x), 2h2(x), ...   Usar una segunda función de hash,  diferente de la primera, para determinar el incremento que usar para repartir las llaves Es muy importante la buena elección de h2(x) y, además, nunca debe ser cero. Si  se  elige la función:  h2(x) = R - (x MOD R)  con R un número primo menor que MAX_T, funcionará bien. Utilizando como segunda función hash  7-(clave%7) el ejemplo quedaría de la siguiente manera:
[object Object],[object Object]
Prueba o Exploración Lineal: La primera colisión se presenta con el número 23, la segunda colisión con el número 34 , tercera colisión con el elemento 50, cuarta con el 27 y quinta con el 14.
Doble hash La primera colisión se presenta con el 23, con la segunda función hash, le corresponde la posición 5, no hay problema por que se encuentra desocupada, la segunda colisión se presenta con el número 50, con la segunda función hash le corresponde la posición 6,  la tercera colisión sucede con el elemento 27, con la 2ª función hash le corresponde la dirección 1, la cuarta colisión sucede con el número 14, con la 2ª función le corresponde la dirección 7, que se encuentra ocupada, de esa posición debe incrementar 7 posiciones más y así sucesivamente hasta que encuentre una posición vacía. Realizar la
Ejercicio: Dado un arreglo de tamaño  13; inserta los siguientes datos:  19, 24, 15, 28, 37, 26, 52, 27, 40, 50 Indicando qué datos tienen colisión Teniendo como función hash (dato % tamañoArreglo) Manejando las colisiones por: Exploración lineal. Exploración cuadrática Doble hash. Teniendo como segunda función hash : 7-(dato%7).
Fuentes Bibliográficas Métodos de tratamiento de colisiones, consultado el 20 de febrero de 2009, disponible en:http://www.itnuevolaredo.edu.mx/maestros/sis_com/takeyas/Apuntes/Administracion_Archivos/Apuntes/Colisiones.PDF Hayet,J.B(2008)Tablas Hash, consultado el día 20 de febrero 2009Disponible en: http://www.cimat.mx/~jbhayet/CLASES/PROGRAMACIONII/clase19.pdf Capítulo 7. Tablas de Hash, consultado el día 20 de febrero de 2009, disponible en:http://profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos/c7.pdf Algoritmos Computacionales: Introducción al análisis y diseño  Sara Baase, Allen Van Gelder.  Editorial Addison Wesley ISBN 9702601428
Hashing

Más contenido relacionado

La actualidad más candente (17)

Hashing
HashingHashing
Hashing
 
BúSqueda Por Hash
BúSqueda Por HashBúSqueda Por Hash
BúSqueda Por Hash
 
Unidad 8 metodos_de_busqueda
Unidad 8 metodos_de_busquedaUnidad 8 metodos_de_busqueda
Unidad 8 metodos_de_busqueda
 
Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.
 
Slideshare Serie de Taylor
Slideshare Serie de TaylorSlideshare Serie de Taylor
Slideshare Serie de Taylor
 
Funciones (parte ii) 1
Funciones (parte ii) 1Funciones (parte ii) 1
Funciones (parte ii) 1
 
Funciones (parte ii)
Funciones (parte ii)Funciones (parte ii)
Funciones (parte ii)
 
2.algoritmos
2.algoritmos2.algoritmos
2.algoritmos
 
Refuerzo calculo
Refuerzo calculoRefuerzo calculo
Refuerzo calculo
 
Matematicas expo funciones
Matematicas expo funcionesMatematicas expo funciones
Matematicas expo funciones
 
Dominio y rango de una función
Dominio y rango de una funciónDominio y rango de una función
Dominio y rango de una función
 
FUNCIONES LINEALES
FUNCIONES LINEALESFUNCIONES LINEALES
FUNCIONES LINEALES
 
Funciones
FuncionesFunciones
Funciones
 
El algoritmo a (asterisco)
El algoritmo a (asterisco)El algoritmo a (asterisco)
El algoritmo a (asterisco)
 
Funciones. Sección E - UNESR
Funciones. Sección E - UNESRFunciones. Sección E - UNESR
Funciones. Sección E - UNESR
 
Algebra
AlgebraAlgebra
Algebra
 
Dominio de una función
Dominio de una funciónDominio de una función
Dominio de una función
 

Similar a Hashing (20)

Hashing
HashingHashing
Hashing
 
Hash Mª del Mar LLorente- Jueves a las 16:00
Hash Mª del Mar LLorente- Jueves a las 16:00Hash Mª del Mar LLorente- Jueves a las 16:00
Hash Mª del Mar LLorente- Jueves a las 16:00
 
hashing y colisiones
hashing y colisioneshashing y colisiones
hashing y colisiones
 
Hashing
HashingHashing
Hashing
 
Metodos de Búsqueda
Metodos de BúsquedaMetodos de Búsqueda
Metodos de Búsqueda
 
Tablas de dispersion
Tablas de dispersionTablas de dispersion
Tablas de dispersion
 
hashing.ppt
hashing.ppthashing.ppt
hashing.ppt
 
Aritmética Modular
Aritmética ModularAritmética Modular
Aritmética Modular
 
Informe aritmetica modular
Informe aritmetica modularInforme aritmetica modular
Informe aritmetica modular
 
Tabla HASH
Tabla HASHTabla HASH
Tabla HASH
 
Hash
HashHash
Hash
 
15 Tablas Hash
15 Tablas Hash15 Tablas Hash
15 Tablas Hash
 
Busqueda por HASH
Busqueda por HASHBusqueda por HASH
Busqueda por HASH
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Tablas Hash Fash Vmaa
Tablas Hash Fash VmaaTablas Hash Fash Vmaa
Tablas Hash Fash Vmaa
 
EXPOSICION HASH
EXPOSICION HASHEXPOSICION HASH
EXPOSICION HASH
 
tablahash(marialuisa)
tablahash(marialuisa)tablahash(marialuisa)
tablahash(marialuisa)
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
COMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de SimbolosCOMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de Simbolos
 

Más de María Luisa Velasco (20)

Respaldando bd
Respaldando bdRespaldando bd
Respaldando bd
 
Sql
SqlSql
Sql
 
Sql
SqlSql
Sql
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Ejercicios normalización
Ejercicios normalizaciónEjercicios normalización
Ejercicios normalización
 
Normalizacion
NormalizacionNormalizacion
Normalizacion
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Modulos sgbd
Modulos sgbdModulos sgbd
Modulos sgbd
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Induccion fundbd2012
Induccion fundbd2012Induccion fundbd2012
Induccion fundbd2012
 
Induccion fundbd2012
Induccion fundbd2012Induccion fundbd2012
Induccion fundbd2012
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Proyecto final de algoritmica
Proyecto final de algoritmicaProyecto final de algoritmica
Proyecto final de algoritmica
 
Ejercicios arreglos4
Ejercicios arreglos4Ejercicios arreglos4
Ejercicios arreglos4
 
Ejercicios arreglos2
Ejercicios arreglos2Ejercicios arreglos2
Ejercicios arreglos2
 
Seguridad bd
Seguridad bdSeguridad bd
Seguridad bd
 
Ejercicios3parte
Ejercicios3parteEjercicios3parte
Ejercicios3parte
 

Hashing

  • 1. Hashing María Luisa Velasco Ramírez
  • 2. El origen de los algoritmos de hash es la ambición de los científicos por encontrar una forma más rápida de encontrar la información: O(1) Las técnicas de búsqueda basadas en comparaciones, tal como los enfoques secuénciales no son muy eficientes en velocidad y recuperación de información.
  • 3. En ese caso HASHING (también conocido como método de dispersión) es una metodología altamente eficiente para estas operaciones. Hashing consiste en una transformación matemática de una clave k con una función h(k) que da como resultado la posición de k en una tabla (llamado también transformación key-to-address o KAT).
  • 4. El verbo en inglés 'to hash' significa cortar o mezclar, analógicamente en recuperación de la información hashing significa cortar una parte de la clave y utilizarla como base de la búsqueda. La función hash h(k) toma como entrada una clave k y produce como resultado un valor entero distribuido uniformemente en un rango determinado. Este valor se usa como índice para la búsqueda o inserción de un dato en un arreglo llamado también ' tabla de hash ' o también 'tablas dispersas'.
  • 5. Por ejemplo: Para un número 31, su transformación de clave por medio de sumas (tipo de técnica de transformación de claves) nos genera una dirección 4, por lo tanto se va a colocar el número 31 en la Posición 4.
  • 6. Una importante desventaja de hashing es que el conjunto de posibles claves es siempre mayor al número de espacios disponibles. Es decir, dos o más claves pueden asignarse a la misma dirección en la tabla de hash. Cuando dos claves se direccionan a la misma dirección o bucket se dice que hay una colisión, y a las claves se les denomina sinónimos.
  • 7. Cuando hay colisiones se requiere de un proceso adicional para encontrar una posición disponible para la clave. Esto obviamente degrada la eficiencia del método, por lo que se trata de evitar al máximo esta situación. Una función de hashing que logra evitar al 100% las colisiones es conocida como hashing perfecto.
  • 8.
  • 9. Ahora bien, cuando se tienen dos números que generan la misma dirección se tiene una colisión. Por lo tanto se necesita solucionar la colisión, y tenemos dos tipos de direccionamiento:    1) Direccionamiento Abierto. Este tipo de solución de colisiones consiste en colocar en la siguiente posición vacía el número que generó la colisión.
  • 10. Números a insertar: 31, 41, 13:
  • 11. Direccionamiento cerrado. Este tipo de solución de colisiones no se tiene ningún problema con que se repita la misma dirección, utilizando el uso de listas. null 0 null 1 null 2 null 3 4 45 null 5 6
  • 12. Función Modulo(por división) Consiste en tomar el residuo de la clave entre el número de componentes del arreglo. Si se tiene un arreglo de N elementos y sea K la clave del dato a buscar o a almacenar. La función hash queda definida como:   H(k) = (K % N) +1 Para tener una mejor uniformidad en la distribución, N debe ser un número primo o divisible por muy pocos números. Por lo tanto dato N, si éste no es un número primo se tomará el valor primo más cercano.
  • 13. Truncamiento: Ignora parte de la clave y se utiliza la parte restante directamente como índice (considerando campos no numéricos y sus códigos numéricos). Si las claves, por ejemplo; son enteros de ocho dígitos y la tabla de transformación tiene mil posiciones, entonces el primero, segundo y quinto dígitos desde la derecha pueden formar la función de conversión. Ejemplo: 72588495 se convierte en 895. El truncamiento es un método muy rápido, pero falla para distribuir las claves de modo uniforme.
  • 14. Plegamiento: La técnica de plegamiento consiste en la partición de la clave en diferentes partes y la combinación de las partes en un modo conveniente (a menudo utilizando suma o multiplicación) para obtener el índice. Ejemplo: 13000000 --> 130=130+000+0012345678 --> 657=123+456+7871140205 --> 118 --> 1118=711+402+0513602499 --> 259=136+024+9925000009 --> 259=250+000+09
  • 15. Métodos de tratamiento de colisiones Ejemplo, aplicando la función módulo para determinar la dirección de la clave: H(k) = (K % N) +1
  • 17. Doble hash Lo que se hace es aplicar una segunda función de dispersión a la clave, y luego se prueba a distancias h2(x), 2h2(x), ... Usar una segunda función de hash, diferente de la primera, para determinar el incremento que usar para repartir las llaves Es muy importante la buena elección de h2(x) y, además, nunca debe ser cero. Si se elige la función: h2(x) = R - (x MOD R) con R un número primo menor que MAX_T, funcionará bien. Utilizando como segunda función hash 7-(clave%7) el ejemplo quedaría de la siguiente manera:
  • 18.
  • 19. Prueba o Exploración Lineal: La primera colisión se presenta con el número 23, la segunda colisión con el número 34 , tercera colisión con el elemento 50, cuarta con el 27 y quinta con el 14.
  • 20. Doble hash La primera colisión se presenta con el 23, con la segunda función hash, le corresponde la posición 5, no hay problema por que se encuentra desocupada, la segunda colisión se presenta con el número 50, con la segunda función hash le corresponde la posición 6, la tercera colisión sucede con el elemento 27, con la 2ª función hash le corresponde la dirección 1, la cuarta colisión sucede con el número 14, con la 2ª función le corresponde la dirección 7, que se encuentra ocupada, de esa posición debe incrementar 7 posiciones más y así sucesivamente hasta que encuentre una posición vacía. Realizar la
  • 21. Ejercicio: Dado un arreglo de tamaño 13; inserta los siguientes datos: 19, 24, 15, 28, 37, 26, 52, 27, 40, 50 Indicando qué datos tienen colisión Teniendo como función hash (dato % tamañoArreglo) Manejando las colisiones por: Exploración lineal. Exploración cuadrática Doble hash. Teniendo como segunda función hash : 7-(dato%7).
  • 22. Fuentes Bibliográficas Métodos de tratamiento de colisiones, consultado el 20 de febrero de 2009, disponible en:http://www.itnuevolaredo.edu.mx/maestros/sis_com/takeyas/Apuntes/Administracion_Archivos/Apuntes/Colisiones.PDF Hayet,J.B(2008)Tablas Hash, consultado el día 20 de febrero 2009Disponible en: http://www.cimat.mx/~jbhayet/CLASES/PROGRAMACIONII/clase19.pdf Capítulo 7. Tablas de Hash, consultado el día 20 de febrero de 2009, disponible en:http://profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos/c7.pdf Algoritmos Computacionales: Introducción al análisis y diseño Sara Baase, Allen Van Gelder. Editorial Addison Wesley ISBN 9702601428