ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos Ejemplo simple •Se va a almacenar un...

35
ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co NIVEL 14: ESTRUCTURAS DE ACCESO DIRECTO Tablas de Hashing

Transcript of ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos Ejemplo simple •Se va a almacenar un...

Page 1: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

NIVEL 14: ESTRUCTURAS DE ACCESO DIRECTO

Tablas de Hashing

Page 2: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Tablas de hashing

• Motivación y definiciones

• Posibles estructuras de implementación

• Área primaria y área de desbordamiento

• Funciones de hashing

2

Page 3: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Qué es una tabla de hashing

• Estructura (contenedora) de datos de acceso directo, en la cual cada elemento tiene asociada una llave por medio de la cual se consulta.

• Permite el rápido acceso a la información en O(1).

3

Page 4: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo simple

4

Llave de acceso = el número !!!

Page 5: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo simple

• Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves de acceso son valores entre 0 y 9999 (Ej: el código del empleado).

5

0 9999

código = 387

nombre = “pepe”

:Empleado

… 387

- Complejidad en

espacio?

- Complejidad de una

consulta dada la llave?

Page 6: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿Qué pasa si … ?

• La llave de acceso es ahora la cédula del empleado (valores entre 0 y 99.999.999).

6

0 99.999.999

cedula = 51.974.283

nombre = “pepe”

:Empleado

… 51.974.283

- Complejidad en

espacio?

- Complejidad de una

consulta dada la llave?

Page 7: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿Qué pasa si … ?

• La llave de acceso es ahora la cédula del empleado (valores entre 0 y 99.999.999).

7

0 99.999.999

cedula = 51.974.283

nombre = “pepe”

:Empleado

… 51.974.283

Page 8: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Solución

• Usar una estructura de acceso DIRECTO

• El objetivo es:

• Retomar la idea del vector, definiendo una manera rápida de proyectar el valor de una llave a una posición del vector, de manera que se tenga un acceso MUY EFICIENTE de la información.

8

Page 9: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ésta es la idea

9

Aplicar una función matemática sobre la llave que devuelva directamente el lugar en el que se encuentra dentro del vector.

Esto es O(1).

23.453.114

51.974.283

79.214.890

0

9999

.

.

.

cedula = 51.974.283

nombre = “pepe”

:Empleado

cedula = 79.214.890

nombre = “luis”

:Empleado

cedula = 23.453.114

nombre = “maría”

:Empleado

Page 10: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Algunas definiciones

10

llave

0

M-1

Espacio de llaves

Area primaria

dirección

capacidad: M

Información

Factor de carga =

# tamaño =

tamaño

capacidad

= tabla vacía (tamaño = 0)

Función de hashing

Page 11: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Algunas definiciones: Llave

11

llave

Espacio de llaves

Información

•Cadena de caracteres alfanuméricos

•Tiene un significado especial en el mundo del problema

•Es única al interior de la tabla

•Único medio para tener acceso a la información asociada

Área primaria

Page 12: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Algunas definiciones: Función de hashing

12

llave

•Función h que proyecta un valor del espacio de llaves a una dirección del área

primaria.

•Es la base del esquema de acceso a la información

•No preserva el orden de las llaves. Si llave1 < llave2 no necesariamente se cumple

que h( llave1 ) < h( llave2 )

Función de hashing

Espacio de llaves

Información

Área primaria

Page 13: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

13

23.453.114

51.974.283

79.214.890

0

9999

.

.

.

cedula = 51.974.283

nombre = “pepe”

:Empleado

cedula = 79.214.890

nombre = “luis”

:Empleado

cedula = 23.453.114

nombre = “maría”

:Empleado

335

4567

9997

Page 14: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿Cuándo es útil una tabla de hashing ?

14

llave

Espacio de llaves

Area primaria

Información

Función de hashing

Cuando el espacio de llaves es MUCHO MAYOR que el área primaria.

Cuando las llaves que se deben almacenar en la estructura tienen una distribución altamente no uniforme.

Page 15: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿Cuándo NO es útil una tabla de hashing ?

15

llave

Espacio de llaves

Area primaria

Información

Función de hashing

Bajo desempeño en:

Procesamiento secuencial de un rango de llaves

Recorridos ordenados por llave

Búsquedas con llaves incompletas

SOLUCION:

Utilizar varias estructuras de datos simultáneas

Page 16: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

• Se desea almacenar la información de los estudiantes de la universidad:

• Hay aproximadamente 3000 estudiantes

• Las búsquedas se hacen por código de estudiante:

• Inicial nombre + inicial apellido + año de entrada + semestre + consecutivo de 4 dígitos

16

Page 17: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

P: Cuál es el tamaño del espacio de llaves?

17

Page 18: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

P: Cuál es el tamaño del espacio de llaves?

27 * 27 * 100 * 2 * 10.000

18

Inicial nombre + inicial apellido + año de entrada + semestre + consecutivo de 4 dígitos

Page 19: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

¿Cuál es el tamaño del espacio de llaves?

R// 27 * 27 * 100 * 2 * 10.000

¿Cuál debería ser la capacidad del área primaria?

19

Page 20: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

¿Cuál es el tamaño del espacio de llaves?

R// 27 * 27 * 100 * 2 * 10.000

¿Cuál debería ser la capacidad del área primaria?

R// Superior a 3000 ( 20% mas)

20

Page 21: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

¿Cuál es el tamaño del espacio de llaves?

R// 27 * 27 * 100 * 2 * 10.000

¿Cuál debería ser la capacidad del área primaria?

R// Superior a 3000 ( 20% mas)

¿Posible función de hashing ?

21

Page 22: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplo

¿Cuál es el tamaño del espacio de llaves?R// 27 * 27 * 100 * 2 * 10.000

¿Cuál debería ser la capacidad del área primaria?R// Superior a 3000 ( 20% mas)

¿Posible función de hashing ?R// Sumar todos los dígitos del carnet, multiplicar el

resultado por el código ASCII de las iniciales, módulo M (siempre entre 0 y 2999 para M= 3000)

22

Page 23: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Ejemplos de la función de hashing

• h(“VD9113984”) = 86 * 68 * 35 = 204.680 % 3000 = 680

• h(“CM9113578”) = 67 * 77 * 34 = 175.406 % 3000 = 1406

23

Direcciones válidas del área primaria

Page 24: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Colisiones: ¿Cuando se habla de colisión?

• Cuando dos llaves distintas son proyectadas sobre la misma dirección del área primaria.

colisión (llv1, llv2) ssi llv1 llv2 h(llv1) = h(llv2)

24

23.453.114

51.974.283

0

9999

.

.

.

335

4567

9998

•El desempeño de una tabla de

hashing comienza a disminuir a

medida que aumenta el factor de

carga, puesto que crece el

número de colisiones.

•Se debe recurrir a estructuras

auxiliares de datos sobre las

cuales se hace una búsqueda

mas lenta

Page 25: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Colisiones

• Posible implementación y soluciones a problemas de colisión

25

Page 26: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Posible implementación

0

1

.

.

.

M-1

• Vector de parejas llave:objeto.

• Para insertar un elemento para el cual no existe conflicto, se pone la llave y la información asociada en la posición del vector definida por la función de hashing.

26

llave

objeto

Área primaria

llave

objeto

llave

objeto

Page 27: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Posible implementación

0

1

.

.

.

M-1

• Vector de parejas llave:objeto.

• Para insertar un elemento para el cual no existe conflicto, se pone la llave y la información asociada en la posición del vector definida por la función de hashing.

• ¿Qué pasa si hay colisión?

27

llave

objeto

Área primaria

llave

objeto

llave

objeto

Page 28: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Primera Solución: Inserción Secuencial

• La información de la segunda llave (llave:objeto) se pone en la siguiente posición libre del área primaria, recorriéndola secuencialmente posición por posición.

• ¿Cómo se busca un elemento en la tabla? Cuál es la complejidad?

• ¿Cómo se elimina un elemento?

28

0

1

.

.

.

M-1

llave

objeto

Área primaria

llave

objeto

llave

objeto

Page 29: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Segunda Opción: Clases de Equivalencia

0

1

.

.

.

M-1

• Cada posición del área primaria está constituida por un vector de parejas llave:objeto, ordenada ascendentemente por llave, con los elementos que pertenecen a la clase de equivalencia respectiva (aquellos que colisionaron)

• ¿Cómo se busca un elemento en la tabla? ¿Cuál es la complejidad?

• ¿Cómo se elimina un elemento?

29

llave

objeto

Área primaria

llave

objeto

Page 30: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Tercera Opción: Bloques de Desbordamiento

0

1

.

.

.

M-1

• Cada posición del área primaria tiene un espacio fijo asociado para poner ahí un número limitado de elementos que colisionan.

• Espacio es insuficiente es: desbordamiento del bloque.

• Solución: utilizar un bloque del mismo tamaño y se encadena con el bloque original.

• Al interior de los bloques los elementos no tienen un orden específico.

• ¿Cómo se busca un elemento en la tabla? ¿Cuál es la complejidad?

• ¿Cómo se elimina un elemento?

30

llave

objeto

Área primaria

llave

objeto

Page 31: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Funciones de hashing: Tips

• No perder demasiado tiempo en estudios teóricos para escogerla.

• Utilizar una función que distribuya razonablemente las llaves y no tratar de encontrar un óptimo.

• Importante: hacer un manejo eficiente de las colisiones.

31

Page 32: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Definición en 2 etapasConversión a un espacio

intermedio

32

Proyecto CUPI2 http://cupi2.uniandes.edu.co

Conversión a una dirección

válida

Page 33: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Definición en 2 etapasConversión a un espacio

intermedio

33

Conversión a una dirección

válida

Objetivos:

• Pasar de un espacio

alfanumérico a un espacio

puramente numérico.

• Lograr una mejor distribución de

las llaves

Page 34: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Definición en 2 etapasConversión a un espacio

intermedio

34

Conversión a una dirección

válida

Objetivos:

• Pasar de un espacio

alfanumérico a un espacio

puramente numérico.

• Lograr una mejor distribución de

las llaves

Ejemplos sobre el valor 38.998:

• La llave es multiplicada por si

misma: 1.520.844.004

• Se multiplica cada uno de los

dígitos de la llave, incluido el valor

ascii de los caracteres no

numéricos: 15.552.

• Se toma la llave como si se

encontrara en otra base y se

convierte a base 10.

• Se suman cada par de dígitos

adyacentes módulo 10: 188.

• Unir las cifras que representan los

caracteres ascii de la llave, si son

alfabéticos. Ej: CASA = 67.658.465

Page 35: ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos  Ejemplo simple •Se va a almacenar un conjunto de empleados de una empresa (máx.10.000) cuyas llaves ...

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Definición en 2 etapas

Conversión a un espacio intermedio

35

Conversión a una dirección

válida

Función de división: típicamente modulo M

Función de truncamiento: toma un

valor numérico y suprime dígitos o

bits hasta que queda como una

dirección válida