Dispersión y tablas hash
-
Upload
vicente-garcia-diaz -
Category
Documents
-
view
4.702 -
download
4
description
Transcript of Dispersión y tablas hash
2
Tabla de contenidos
1. Conceptos básicos2. Protección activa3. Protección pasiva4. Redispersión5. Ejercicios6. Bibliografía
3
Conceptos básicos
4
La idea…Conceptos básicos
•Tener una estructura de datos con una complejidad temporal de O(1) en el acceso a los datos▫Insertar▫Buscar▫Borrar
•Las demás operaciones pueden ser O(n)▫Recorrer▫Comparar▫…
Tablas Hash
5
Función hashConceptos básicos
•Es una operación que consiste en transformar una clave en una posición dentro de la tabla Hash▫Enteros▫Cadenas de texto
elemento1
elemento2
elemento3
elemento4
elemento5
0
1
2
3
4
f(clave):
¿Cuál es el problema?
Que es posible que diferentes claves apunten a la misma posición de la tabla provocando COLISIONES
6
Protección activaCuando se evitan las colisiones diseñando buenas funciones hash
7
Función hash para claves enterasProtección activa. Función hash básica
•Buena opción: f(c) = c % B, siendo c la clave y B el tamaño de la tabla
•Colisiones: n / B, siendo n el número de elementos y B el tamaño de la tabla
Ejercicio 1: ¿Cuál podría ser un buen tamaño para una tabla hash cuyos elementos van a tener las siguientes claves?2, 3, 1, 0
8
Función hash básica para claves cadenaProtección activa. Función hash para cadenas I
•Hay que convertir la cadena a un valor numérico y luego aplicarle la función hash para claves enteras▫P.e., utilizando el código ASCII de cada carácter
Ejercicio 2: Si la clave utilizada en una tabla hash tiene una longitud de 10 caracteres codificados en código ASCII extendido, ¿cuál es el rango de valores que puede tener la clave numérica de la función f?
¿Cuál es el problema?
9
Función hash básica para claves cadenaProtección activa. Función hash para cadenas I
Ejercicio 3: Si se introduce una clave “Puerta”, utilizando la tabla de códigos ASCII anterior, ¿cuál sería la clave numérica correspondiente?
Ejercicio 4: Para una tabla hash de tamaño 8009 (nº primo), ¿en qué posición de la tabla se colocaría el elemento de clave “Puerta”?
10
Asignación de pesos para incrementar el rangoProtección activa. Función hash para cadenas II
• Una ponderación típica es • siendo i la posición del carácter en la cadena
¿Cuál es el problema?
i227
Letra Código ASCII Código ponderado
P 80 80 * 272 = 58320
u 117 117 * 271 = 3159
e 101 101 * 270 = 101
r 114
t 116
a 97
TOTAL: 625 61580
11
Asignación de pesos para incrementar el rangoProtección activa. Función hash para cadenas III
• Se puede optimizar la multiplicación utilizando como peso 32
Letra Código ASCII Código ponderado Código ponderado (32)
P 80 80 * 272 = 58320 80 * 325 = 2684354560
u 117 117 * 271 = 3159 117 * 324 = 122683392
e 101 101 * 270 = 101 101 * 323 = 3309568
r 114 114 * 322 = 116736
t 116 116 * 321 = 3712
a 97 97 * 320 = 97
TOTAL: 625 61580 2810468065
12
Asignación de pesos para incrementar el rangoProtección activa. Función hash para cadenas IV
• Se puede minimizar el nº de multiplicaciones utilizando la Regla de Horner
Ejercicio 5: ¿Cómo se representaría el polinomio correspondiente al código ponderado con peso 32 para convertir la clave “Puerta” mediante la Regla de Horner?
P*325 + u*324 + e*323 + r*322 + t*321 + a*320
13
Protección pasivaCuando varios elementos necesitan compartir la misma posición dentro de la tabla
14
ConceptoProtección pasiva. Tablas hash abiertas
• Varios elementos comparten la misma posición de la tabla hash▫ P.e., cada posición de la tabla es a su vez una lista o un árbol
• Factor de carga (Load Factor) = n / B, siendo n el número de elementos y B el tamaño de la tabla
▫ Lo recomendable es que FC <= 1
Ejercicio 6: ¿Cuál es el factor de carga de la siguiente tabla hash?
15
Protección pasiva. Tablas hash abiertas
Ejercicio 7: Suponiendo que tenemos una tabla hash abierta (cada posición de la tabla es una lista) de 13 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves:1, 10, 15, 20, 7, 13, 3, 2, 4, 6, 8, 18, 11, 12, 14, 26, 65, 39, 40¿Cuál es el factor de carga de la tabla? ¿Es bueno?
16
ConceptoProtección pasiva. Tablas hash cerradas
•Cada posición sólo tiene cabida para un elemento▫Si se detecta una colisión, se buscan posiciones
próximas•Técnicas de búsqueda de posiciones próximas▫Exploración lineal▫Exploración cuadrática▫Dispersión doble
17
Exploración linealProtección pasiva. Tablas hash cerradas
•Se modifica la función de dispersión▫ f(c) = c % B pasa a ser f(c) = (c + i) % B, siendo i = 0, 1, 2, 3,
4,…
▫ Lo recomendable es que FC <= 0,5 debido a los agrupamientos
Ejercicio 8: Suponiendo que tenemos una tabla hash cerrada de 7 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves:4, 10, 12, 3, 17, 15, 14
18
Exploración linealProtección pasiva. Tablas hash cerradas
• La existencia de agrupamientos provoca problemas▫ Cuando se busca un elemento que está en un agrupamiento hay que
recorrer todos los elementos del agrupamiento hasta que se encuentra▫ Lógicamente, cuando se encuentra una posición vacía no se sigue
buscando (podría ser una complejidad O(n)) y se detiene el algoritmo
0123
654 4
10
123
171514
Buscando elemento con clave 17(17 + 0) % 7 = 3(17 + 1) % 7 = 4(17 + 2) % 7 = 5(17 + 3) % 7 = 6(17 + 4) % 7 = 0
…pero, ¿y si se hubiera borrado algún elemento del agrupamiento?
19
Exploración lineal – borrado perezosoProtección pasiva. Tablas hash cerradas
•No eliminar un elemento hasta que se introduce otro•Simplemente, se marca▫ Para insertar se considera que la posición está libre▫ Para buscar se considera que la posición está ocupada
20
Exploración cuadráticaProtección pasiva. Tablas hash cerradas
•Se modifica la función de dispersión▫ f(c) = (c + i) % B pasa a ser f(c) = (c + i2) % B, siendo i =
0, 1, 2, 3, 4,…
▫ Soluciona el problema de los agrupamientos primarios pero…
Ejercicio 9: Suponiendo que tenemos una tabla hash cerrada de 7 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves (exploración cuadrática):4, 10, 12, 17, 3
21
Dispersión dobleProtección pasiva. Tablas hash cerradas
• Se modifica la función de dispersión▫ f(c) = (c + i2) % B pasa a f(c) = (c + i * h2(c)) % B, siendo i = 0, 1, 2, 3, 4,…
▫ h2(c) es la función de cálculo de salto. Se recomienda h2(c) = R – c % R, siendo R el número primo antecesor de B
▫ Soluciona los agrupamientos y el nº de intentos es bajo pero…
Ejercicio 10: Suponiendo que tenemos una tabla hash cerrada de 7 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves (dispersión doble):4, 10, 12, 17, 3, 5, 7
22
RedispersiónCuando se aumenta o disminuye el tamaño de la tabla dinámicamente en función de los elementos que existen
23
ConceptoRedispersión
• Aumentar el tamaño en función del FC▫ Tablas hash abiertas rendimiento decrece si FC > 1▫ Tablas hash cerradas se paraliza si FC > 0,5
• Se busca un nuevo valor B▫ El primo inmediatamente superior al tamaño doble del original▫ Se recorren los elementos y se añaden a la nueva tabla
Ejercicio 11: Suponiendo que tenemos una tabla hash cerrada de 5 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves: 4, 10, 21, 9, 15, 3, 17, 1, 8, 26
Utiliza dispersión doble para insertar elementos y exploración cuadrática en caso que sea necesario redispersar elementos en función del FC
24
ConceptoRedispersión inversa
• Reducir el tamaño en función del FC para ahorrar memoria▫ Tablas hash abiertas si FC < 0,33▫ Tablas hash cerradas si FC < 0,16
• Se busca un nuevo valor B▫ El primo inmediatamente superior la mitad del tamaño del original▫ Se recorren secuencialmente los elementos y se añaden a la nueva
tabla
Ejercicio 12: Suponiendo que tenemos una tabla hash cerrada de 23 elementos, y que inicialmente en la tabla hay los elementos con clave: 1, 2, 10, 11, 12, 13, 15, 16, 17, 19, muestra gráficamente cómo evolucionaría la tabla (y el FC) si se produce lo siguiente: -Se saca el elemento con clave: 2-Se saca el elemento con clave: 13-Se saca el elemento con clave: 19-Se saca el elemento con clave: 16-Se saca el elemento con clave: 10-Se introduce el elemento con clave: 21-Se introduce el elemento con clave: 9-Se introduce el elemento con clave: 33-Se saca el elemento con clave: 1-Se saca el elemento con clave: 33-Se saca el elemento con clave: 21-Se saca el elemento con clave: 9-Se saca el elemento con clave: 11-Se introduce el elemento con clave: 3-Se introduce el elemento con clave: 9-Se introduce el elemento con clave: 4-Se saca el elemento con clave: 12-Se saca el elemento con clave: 17-Se saca el elemento con clave: 15-Se saca el elemento con clave: 4
Utiliza dispersión doble para insertar elementos y exploración cuadrática en caso que sea necesario redispersar elementos en función del FC
25
Ejercicios
26
Ejercicios
Ejercicio 13: Realiza el pseudocódigo de una clase “TablaHash” que:
1) Ofrezca una buena protección activa
2) Permita elegir entre trabajar con la aproximación abierta o cerrada como protección pasiva
3) Cuando se trabaja con la aproximación cerrada deberá permitir elegir entre exploración lineal con borrado perezoso, exploración cuadrática, o dispersión doble
4) Realice redispersión y redispersión inversa en función del factor de carga que se tenga en un determinado momento
27
Bibliografía
• WEISS, Mark Allen; (2000) Data Estructures & Problem Solving Using Java. Addison Wesley. ISBN 03-2154-140-5.
• JAIME SISA, Alberto; (2002) Estructuras de Datos y Algoritmos con énfasis en programación orientada a objetos. Pearson Educación. ISBN 958-699-044-3.
• JOYANES AGUILAR, LUIS (2007) Estructuras de Datos en Java. McGraw Hill. ISBN: 9788448156312.
• STANDISH, Thomas A (1998). Data structures in Java. Addison Wesley ISBN 0-201-30564-X.
• WEISS, Mark Allen; (2000) Estructuras de Datos en Java. Addison Wesley. ISBN 84-7829-035-4.
• WIRTH, Niklaus (1992). Algoritmos + Estructuras de Datos = Programas. Prentice-Hall. ISBN: 84-219-0172-9.