0% encontró este documento útil (0 votos)
90 vistas14 páginas

12 Hash

Este documento describe las tablas hash, una estructura de datos que permite búsquedas, inserciones y eliminaciones rápidas. Las tablas hash mapean claves únicas a valores mediante una función hash. Debido a posibles colisiones, se utilizan técnicas como hashing abierto y cerrado. El método de división y multiplicación son comunes para la función hash.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
90 vistas14 páginas

12 Hash

Este documento describe las tablas hash, una estructura de datos que permite búsquedas, inserciones y eliminaciones rápidas. Las tablas hash mapean claves únicas a valores mediante una función hash. Debido a posibles colisiones, se utilizan técnicas como hashing abierto y cerrado. El método de división y multiplicación son comunes para la función hash.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 14

ELO320 - Estructuras de Datos y Algoritmos

Tipos de Datos Abstractos


Tablas Hash

Dr. Nicolás Gálvez R.


[email protected]

Ing. Civil Telemática - Departamento de Electrónica

1er Semestre 2022

1/1
Tablas Hash
Las tablas hash son una estructura de datos en la que las operaciones de
inserción, búsqueda y eliminación son muy rápidas, independientemente
del tamaño de los datos.
Arreglo Asociativo.
Pares llave-valor.
Llaves únicas.
Función hash.

2/1
Tablas Hash
Diseñadas originalmente para resovler el problema de búsqueda, las
Tablas Hash es una estructura basada en arreglos, pero sin trabajar
directamente con el ı́ndice de ellos. Algunos usos:
Diccionarios en Python.
Map en C++.
Sistemas de contraseñas (encriptación).
Memoria Caché.

En promedio, la complejidad de los métodos de Tablas Hash es O(1). Lo


veremos en la próxima clase.
3/1
Tablas Hash
Las tablas hash se componen de un conjunto de datos D formado por
tuplas de información llave-valor (k.v ), y un arreglo A en donde se
almacenan los valores.
D = {(k1 , v1 ), (k2 , v2 ), . . . (kn , vn )}
El ı́ndice del arreglo asociado a un par se obtiene aplicando una función
de transformación H(k), llamada función hash.
H : Dk → {1, 2, 3, . . . , m}
A[H(ki )] = vi ; ∀i ∈ {1, 2, 3, . . . , n}

4/1
Tabla Hash: Métodos

Métodos
i n t s e a r c h ( i n t a r r a y [ 1 0 ] , c h a r ∗ k e y ){
r e t u r n a r r a y [ hash ( key ) ] ;
}

v o i d i n s e r t ( i n t a r r a y [ 1 0 ] , c h a r ∗ key , i n t v a l u e ){
a r r a y [ hash ( key ) ] = v a l u e ;
}

v o i d remove ( i n t a r r a y [ 1 0 ] , c h a r ∗ k e y ){
a r r a y [ h a s h ( k e y ) ] = NULL ;
}

5/1
Tablas Hash: Conflicto

Las tablas hash, al trabajar con un arreglo fijo, poseen un gran problema.
Dos llaves pueden ser asignadas a un mismo indice por la tabla hash.
Esto es lo que se llama conflicto.

Existen variadas técnicas para su resolución, que veremos a continuación.

6/1
Tablas Hash: Hashing Abierto

Una de las formas de resolver los conflictos es el Hashing Abierto. El


arreglo fijo, pasa a ser un arreglo de punteros, los cuales establecen una
lista para almacenar los nodos en conflicto.

La búsqueda entonces es doble, en el arreglo y en la lista. Para evitar


confusiones, en los nodos de las lista se guarda el par (llave, valor).

7/1
Tablas Hash: Hashing Cerrado
Otra for de resolución es el Hashing Cerrado. En donde existen
corrimientos de la posición de inserción si hay un conflicto. Esto evita el
uso de estructuras de datos adiciones, pero habrá que tener cuidados son
los overflow de memoria.

8/1
Tablas Hash: Hashing Cerrado
La primera técnica de Hashing Cerrado, busca insertar el dato en el
casillero disponible más cercano.

La búsqueda, por lo tanto, sigue un proceso similar: parte de la posición


entregada por la función hash, avanzando hasta encontrar el dato
correcto.
9/1
Tablas Hash: Hashing Cerrado
Un problema de lo anterior es que los datos tienen a agruparse alrederor
de las inserciones limpias. Para evitar esto, la misma técnica se aplica
pero buscando cada C casilleros.

La búsqueda, por lo tanto, sigue un proceso similar: parte de la posición


entregada por la función hash, avanzando en C casilleros hasta encontrar
el dato correcto.
10/1
Tablas Hash: Funciones Hash

Uno de los grandes desafı́os en la implementación de tablas hash, es la


creación de una función idonea para la transformación llave a ı́ndice del
arreglo.
Se busca que sea:
Simple → facil implementación.
Uniforme → que las claves tengan la misma chance de ser mapeado
a cualquier ı́ndice.
Técnicas heurı́sticas:
Método de la División.
Método de la Multiplicación.

11/1
Tablas Hash: Método de la División

En este método las claves son transformadas en ı́ndices del arreglo


mediante el uso de resto aritmético o módulo sobre

h(k) = k mod m
La recomendación general, es usar un largo de arreglo m que no esté
relacionado con la distribución de llaves. Por lo general, un número primo.

12/1
Tablas Hash: Método de la Multiplicación

Este método se compone de los siguientes pasos:


1 Multiplicar la llave por una constante α ∈]0, 1[.
2 Obtener la parte fraccional del resultado de la multiplicación.
3 Multiplicar dicha parte por el tamaño del arreglo m
4 Truncar el resultado final.

h(k) = ⌊m × ((k × α) mod 1)⌋


En este caso el tamaño de m, no es crı́tico. Esto permite que
comunmente se use una potencia de dos para el tamaño del arreglo:
m = 2p .

13/1
Tablas Hash: Uso de Strings

En general las funciones de hash trabajan con valores numéricos enteros.


¿Cómo se puede trabajar con strings? Utilizamos los valores ASCII de los
caracteres para generar un valor numérico.
String = ”hash”
Valores ASCII:
h = 104, a = 97, s = 115
Suma de valores:
104 + 97 + 115 + 104 = 420
Radix-128:

(104 × 1283 ) + (97 × 1282 ) + (115 × 1281 ) + (104 × 1280 ) = 219707880

14/1

También podría gustarte