Dispersión y tablas hash

27
Dispersió n Vicente García Díaz – [email protected] Universidad de Oviedo, 2011 Estructuras de Datos

description

Estructuras de datos: dispersión y tablas hash.

Transcript of Dispersión y tablas hash

Page 1: Dispersión y tablas hash

Dispersión

Vicente García Díaz – [email protected] Universidad de Oviedo, 2011

Estructuras de Datos

Page 2: Dispersión y tablas hash

2

Tabla de contenidos

1. Conceptos básicos2. Protección activa3. Protección pasiva4. Redispersión5. Ejercicios6. Bibliografía

Page 3: Dispersión y tablas hash

3

Conceptos básicos

Page 4: Dispersión y tablas hash

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

Page 5: Dispersión y 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

Page 6: Dispersión y tablas hash

6

Protección activaCuando se evitan las colisiones diseñando buenas funciones hash

Page 7: Dispersión y tablas 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

Page 8: Dispersión y tablas hash

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?

Page 9: Dispersión y tablas hash

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”?

Page 10: Dispersión y tablas hash

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

Page 11: Dispersión y tablas hash

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

Page 12: Dispersión y tablas hash

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

Page 13: Dispersión y tablas hash

13

Protección pasivaCuando varios elementos necesitan compartir la misma posición dentro de la tabla

Page 14: Dispersión y tablas hash

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?

Page 15: Dispersión y tablas 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?

Page 16: Dispersión y tablas hash

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

Page 17: Dispersión y tablas hash

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

Page 18: Dispersión y tablas hash

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?

Page 19: Dispersión y tablas hash

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

Page 20: Dispersión y tablas hash

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

Page 21: Dispersión y tablas hash

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

Page 22: Dispersión y tablas hash

22

RedispersiónCuando se aumenta o disminuye el tamaño de la tabla dinámicamente en función de los elementos que existen

Page 23: Dispersión y tablas hash

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

Page 24: Dispersión y tablas hash

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

Page 25: Dispersión y tablas hash

25

Ejercicios

Page 26: Dispersión y tablas hash

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

Page 27: Dispersión y tablas hash

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.