ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos Ejemplo simple •Se va a almacenar un...
Transcript of ISIS1206 - Uniandes...ISIS1206 –Estructuras de Datos Ejemplo simple •Se va a almacenar un...
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
NIVEL 14: ESTRUCTURAS DE ACCESO DIRECTO
Tablas de Hashing
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
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
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo simple
4
Llave de acceso = el número !!!
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?
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?
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
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
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
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
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
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
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
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.
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
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
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo
P: Cuál es el tamaño del espacio de llaves?
17
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
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
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
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
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
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
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
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Colisiones
• Posible implementación y soluciones a problemas de colisión
25
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
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
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
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
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
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
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
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
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
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