programación 3: tablas de dispersión
TRANSCRIPT
![Page 1: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/1.jpg)
Universidad de CuencaFacultad de Ingeniería
Escuela de Ingeniería de SistemasProgramación III
Tema: Tablas de Dispersión
Por: Jonnathan Peñaranda
![Page 2: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/2.jpg)
CONTENIDO• Tablas de dispersión.• Funciones de dispersión.• Colisiones y resolución de colisiones.• Problema planteado.• Conclusión.
![Page 3: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/3.jpg)
TABLAS DE DISPERSIÓN (TABLAS HASH)Son estructuras
de datos
Se usan en secuencia de
elementosValor clave
Complejidad constante: O(1)
Su finalidad
Inserción
Búsqueda
Eliminación
![Page 4: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/4.jpg)
• La tabla de dispersión es un vector de tamaño fijo m,• Contiene las claves de los elementos, • Consta de una función hash, que transforma el campo clave elegido,
en un valor entero dentro del rango del vector. pos Elemento
0
1
2
4
.
m-2
m-1
FUNCION_HASH( clave)
Elemento 1
Elemento 2
Elemento 3
clave1
clave2
clave3
Elemento 1
Elemento 2
Elemento 3
![Page 5: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/5.jpg)
IMPLEMENTACIÓN EN JAVA
![Page 6: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/6.jpg)
FUNCIONES DE DISPERSIÓN
Convierte el dato considerado campo clave en un índice dentro
del rango de definición del vector.
Lo ideal es determinar
posición en un almacenamiento
secuencial sin desperdiciar
mucho espacio.
![Page 7: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/7.jpg)
FUNCIONES DE DISPERSIÓN
tamTabla = mHash(x): [0,m-1]
String clave = “a01”;
int clave = ASCII(a) + ASCII(0)+
ASCII(1);
![Page 8: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/8.jpg)
CRITERIOS PARA SELECCIONAR UNA FUNCIÓN. • Fácil de evaluar y complejidad O(1)
• h(x) debe distribuir uniformemente las posiciones de los elementos sobre el conjunto de direcciones de memoria , de modo que minimice el numero de colisiones
• Preparar siempre resolución de colisiones para cuando éstas se produzcan.
![Page 9: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/9.jpg)
TIPOS DE FUNCIONES HASH• Aritmética modular.• Plegamiento.•Mitad del cuadrado.•Método de la multiplicación
![Page 10: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/10.jpg)
ARITMÉTICA MODULAR• La función hash mas simple
utiliza el operador.• Genera valores calculando el
resto de la división entera entre la clave x y el tamaño de la tabla m.
h(x)= x % m
• Implementación en Java
![Page 11: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/11.jpg)
Ejemplo:m= 1000Elm1 = 245643Elm2 = 245221Elm3 = 257135
![Page 12: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/12.jpg)
PLEGAMIENTO• Clave demasiado grande.
• Consiste en partir la clave x en varias partes ()
h(x) = x1 + x2 + x3 + x4 + ……..+ xr;h)x) = valor entero ;
• Implementación en Java
![Page 13: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/13.jpg)
Ejemplo:m= 1000Elm1 = 245643Elm2 = 245221Elm3 = 257135
![Page 14: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/14.jpg)
MITAD DEL CUADRADOtamTabla = 51;clave = 45;
clave^2 = 2025;
2 0 2 5
h(x) = 25;
• Implementación en Java
![Page 15: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/15.jpg)
Ejemplo:m= 1000Elm1 = 245643Elm2 = 245221Elm3 = 257135
![Page 16: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/16.jpg)
MÉTODO DE LA MULTIPLICACIÓN • La dispersión genera direcciones
en tres pasos:
1. A*clave (0 < A < 1).
2. d = A*x – ParteEntera(A*x).
3. h(x) = ParteEntera(m*d).
• Implementación en Java
Donald E. Knuth sugiere que A ≈ ( √ 5 − 1)/2 = 0.61680339887...
![Page 17: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/17.jpg)
Ejemplo:m= 1000Elm1 = 245643Elm2 = 245221Elm3 = 257135
![Page 18: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/18.jpg)
OPERACIONES DE LAS TABLAS DE DISPERSIÓN
![Page 19: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/19.jpg)
Además• Dos claves diferentes, c1 y c2, den la misma dirección, h1(c1) =
h2(c2). Se produce una colisión.
• Direccionamiento hash implica: la elección de la función hash y resolución de colisiones.
![Page 20: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/20.jpg)
COLISIONES Y RESOLUCIÓN DE COLISIONES
pos Elemento
0
1
2
4
.
m-2
m-1
FUNCION_HASH (clave)
Elemento 1
Elemento 2
clave1
clave2
Elemento1 Elemento 2
COLISIÓN
![Page 21: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/21.jpg)
MODELOS PARA RESOLVER COLISIONES.• La exploración de direcciones• Exploración lineal• Exploración cuadrática
• Direccionamiento enlazado.
![Page 22: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/22.jpg)
EXPLORACIÓN DE DIRECCIONES.• Las colisiones se resuelven explorando consecutivamente en una
secuencia de direcciones hasta que se encuentra una posición libre(hueco).
• Importante, inicializar todas las posiciones de la tabla con un valor que indique vacío. Por ejemplo null.
• Al insertar un elemento, si se produce una colisión, la secuencia de exploración termina cuando se encuentra una dirección vacía.
![Page 23: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/23.jpg)
EXPLORACIÓN LINEAL• Forma mas simple y primitiva de resolver una colisión entre claves.• La forma de resolver la colisión consiste en buscar la primera posición
disponible que siga a la posición que retorna la función hash.pos Elemento
0
1 OCUPADO
2 OCUPADO
4
. OCUPADO
m-2
m-1
FUNCION_HASH (Elemento)
Elemento
EXP_LINEAL( pos)
¿Está ocupado?
SI
![Page 24: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/24.jpg)
EXPLORACIÓN LINEAL• Forma mas simple y primitiva de resolver una colisión entre claves.• La forma de resolver la colisión consiste en buscar la primera posición
disponible que siga a la posición que retorna la función hash.pos Elemento
0
1 OCUPADO
2 OCUPADO
4
. OCUPADO
m-2
m-1
FUNCION_HASH (Elemento)
Elemento
EXP_LINEAL( pos)
¿Está ocupado?
SI
![Page 25: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/25.jpg)
EXPLORACIÓN LINEAL• Forma mas simple y primitiva de resolver una colisión entre claves.• La forma de resolver la colisión consiste en buscar la primera posición
disponible que siga a la posición que retorna la función hash.pos Elemento
0
1 OCUPADO
2 OCUPADO
4
. OCUPADO
m-2
m-1
FUNCION_HASH (Elemento)
EXP_LINEAL( pos)
¿Está ocupado?
NO
Elemento
Elemento
![Page 26: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/26.jpg)
IMPLEMENTACIÓN EN JAVA
![Page 27: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/27.jpg)
EXPLORACIÓN CUADRÁTICA
FUNCION_HASH (clave)
EXP_CUADRATICA( POS)
¿Está ocupado? SI
ELEMENTO
POS ELEMENTOS
0 OCUPADO
1 OCUPADO
2
3 OCUPADO
4 OCUPADO
5
6 OCUPADO
7
8
9
10 OCUPADO
p
clave
![Page 28: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/28.jpg)
EXPLORACIÓN CUADRÁTICA
FUNCION_HASH (clave)
EXP_CUADRATICA( POS)
¿Está ocupado? SI
ELEMENTO
POS ELEMENTOS
0 OCUPADO
1 OCUPADO
2
3 OCUPADO
4 OCUPADO
5
6 OCUPADO
7
8
9
10 OCUPADO
clavep+1
p
![Page 29: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/29.jpg)
EXPLORACIÓN CUADRÁTICA
FUNCION_HASH (clave) EXP_CUADRATICA( POS)
¿Está ocupado? SI
ELEMENTO
POS ELEMENTOS
0 OCUPADO
1 OCUPADO
2
3 OCUPADO
4 OCUPADO
5
6 OCUPADO
7
8
9
10 OCUPADO
p+4
clavep+1
p
![Page 30: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/30.jpg)
EXPLORACIÓN CUADRÁTICA
FUNCION_HASH (clave)
EXP_CUADRATICA( POS)
¿Está ocupado? NO
ELEMENTO
POS ELEMENTOS
0 OCUPADO
1 OCUPADO
2
3 OCUPADO
4 OCUPADO
5
6 OCUPADO
7
8
9
10 OCUPADOp+9
clave
ELEMENTO
Recorrido
p + i^2
i = 0, 1, 2, …
p+4
p+1p
![Page 31: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/31.jpg)
IMPLEMENTACIÓN EN JAVA
![Page 32: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/32.jpg)
DIRECCIONAMIENTO ENLAZADO.• Se basa en utilizar listas enlazadas, de tal forma que en cada lista se
colocan los elementos que tienen la misma dirección hash.• Todos los elementos que colisionan: h(x1) = h(x2) = h(x3) … van a
estar ubicados en la misma lista enlazada.pos Elemento *0124 . 11
12
FUNCION_HASH (clave)
Elemento 1clave
Elemento 2
![Page 33: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/33.jpg)
DIRECCIONAMIENTO ENLAZADO.• Se basa en utilizar listas enlazadas, de tal forma que en cada lista se
colocan los elementos que tienen la misma dirección hash.• Todos los elementos que colisionan: h(x1) = h(x2) = h(x3) … van a
estar ubicados en la misma lista enlazada.pos Elemento *0124 . 11
12
FUNCION_HASH (clave) Elemento 1
clave
clave
null
Elemento 2
Elemento 1
![Page 34: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/34.jpg)
DIRECCIONAMIENTO ENLAZADO.• Se basa en utilizar listas enlazadas, de tal forma que en cada lista se
colocan los elementos que tienen la misma dirección hash.• Todos los elementos que colisionan: h(x1) = h(x2) = h(x3) … van a
estar ubicados en la misma lista enlazada.pos Elemento *0124 . 11
12
FUNCION_HASH (clave) Elemento 1
clave
Elemento 2 nullnull
Elemento 2
![Page 35: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/35.jpg)
TABLAS DE DISPERSIÓN ENLAZADAS EN JAVA
![Page 36: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/36.jpg)
OPERACIONES DE TABLAS DE DISPERSIÓN ENLAZADAS
INSERTAR
![Page 37: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/37.jpg)
OPERACIONES DE TABLAS DE DISPERSIÓN ENLAZADAS
INSERTAR
![Page 38: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/38.jpg)
OPERACIONES DE TABLAS DE DISPERSIÓN ENLAZADAS
BUSCAR
![Page 39: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/39.jpg)
OPERACIONES DE TABLAS DE DISPERSIÓN ENLAZADAS
BUSCAR
![Page 40: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/40.jpg)
OPERACIONES DE TABLAS DE DISPERSIÓN ENLAZADAS
ELIMINAR
![Page 41: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/41.jpg)
OPERACIONES DE TABLAS DE DISPERSIÓN ENLAZADAS
ELIMINAR
![Page 42: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/42.jpg)
PROBLEMA.
![Page 43: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/43.jpg)
PROBLEMA.
![Page 44: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/44.jpg)
PROBLEMA.
![Page 45: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/45.jpg)
PROBLEMA.
![Page 46: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/46.jpg)
PROBLEMA.
![Page 47: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/47.jpg)
PROBLEMA.
![Page 48: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/48.jpg)
PROBLEMA.
![Page 49: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/49.jpg)
PROBLEMA.
![Page 50: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/50.jpg)
CONCLUSIÓN.
• tamTabla = numero_primo mayor, aunque cercano al numero de elementos que se tiene previsto almacenar en la tabla.• Para resolver una colisión, lo mejor seria que se utilizara el
direccionamiento enlazado, y de este modo el tamaño de la tabla sería irrelevante puesto que la estructura podrá almacenar los elementos de forma dinámica.
![Page 51: Programación 3: tablas de dispersión](https://reader033.vdocuments.site/reader033/viewer/2022061608/5889d5ef1a28ab83478b54fd/html5/thumbnails/51.jpg)
REFERENCIA.• Joyanes Aguilar, L., & Zohonero Martínez, I. (2008).
Estructura de datos en Java. McGraw-Hill España.