Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAgustín Gutiérrez Muñoz Modificado hace 7 años
1
Diccionarios y Mapeos Estructuras de Datos 2017
2
Mapeos Mapeo K es una clave V es el valor del elemento cuya clave es k
Es un conjunto de pares (k,v) K es una clave V es el valor del elemento cuya clave es k Cada uno de los pares se define como una entrada en el Mapeo e = (k,v)
3
Operaciones Básicas: Mapeo
Tamaño() Es Vacío() Recuperar(k) Insertar(k,v) Tamaño(): Retorna la cardinalidad del conjunto, la cantidad de entradas en el Mapeo. EsVacio(): Testea si el Mapeo está vacío y devuelve el valor booleano correspondiente. Recuperar(k): Si existe una entrada en el Mapeo con clave k (k,v) entonces retorna el valor de la entrada (v), sino retorna en valor nulo. Insertar(k,v): Si un mapeo no tiene una entrada con clave k, entonces inserta la entrada (k,v) y retorna Nulo, sino reemplaza el elemento existente con la misma clave y retorna el elemento viejo.
4
Operaciones Básicas Tamaño() Es Vacío() Recuperar(k) Insertar(k,v) Eliminar(k) Claves(k) Valores() Entradas() Eliminar(k): Elimina del mapeo la entrada con clave igual a k y devuelve su valor. Si la entrada no existe, entonces devuelve nulo. Claves(): Retorna una colección iterable conteniendo todas las claves de las entradas del mapeo. Valores(): Retorna una colección iterable conteniendo los valores asociados a todas las claves presentes en el mapeo. Entradas(): Retorna una colección iterable conteniendo todas las entradas e=(k,v) presentes en el mapeo.
5
Antes de declarar la interface del TDA MAPEO recordamos…
public interface Entry <K,V> //Devuelve la clave almacenada en la entrada public K getKey() //Devuelve el valor almacenado en la entrada public V getValue()
6
Antes de declarar la interface del TDA MAPEO recordamos…
public interface Iterator <E> // Testea si quedan elementos por visitar. Boolear hasNext() //Retorna el prox. Elemento a visitar en la secuencia E Next() public interface Iterable <E> // Devuelve un iterador de los elementos en la colección Iterator<e> iterator()
7
INTERFACE MAPEO public Interface Mapeo <K,V> public int Size()
public int Size() public boolean isEmpty(); public V get(K key) throws InvalidKeyException public V put(K key,V value) throws InvalidKeyException public V remove(K key) throws InvalidKeyException public Iterable<K> keys() public Iterable<V> values() public Iterable<Entry<K,V>> entries() INTERFACE MAPEO
8
Implementación del TDAMapeo
Listas Enlazadas ( Ordenadas, no Ordenadas) Tablas Hash Árbol Binario de Búsqueda. etc.
9
Diccionario Diccionario K es una clave
Es un conjunto de pares (k,v) K es una clave V es el valor del elemento cuya clave es k Puede haber diferentes entradas con la misma clave Cada uno de los pares se define como una entrada en el Diccionario e = (k,v)
10
Diccionario Diccionario K es una clave
Es un conjunto de pares (k,v) K es una clave V es el valor del elemento cuya clave es k Puede haber diferentes entradas con la misma clave Cada uno de los pares se define como una entrada en el Diccionario e = (k,v)
11
TDA Diccionario Modelo: relación: Claves → Elemento Operaciones:
tamaño() esVacío() encontrar(k) encontrarTodas(k) insertar(k,v) eliminar(e) entradas(k,v)
12
INTERFACE DICCIONARIO
public Interface Diccionario <K,V> public int size() public boolean isEmpty() public V find(K key) throws InvalidKeyException public Iterable<Entry<K,V>> findAll(K key) throws InvalidKeyException public Entry<K,V> insert(K key, V value) throws InvalidKeyException; public Entry<K,V> remove(Entry<K,V> e) throws InvalidEntryException; public Iterable<Entry<K,V>> entries(); INTERFACE DICCIONARIO
13
Implementación de TDADiccionario
Listas Enlazadas (Ordenadas, No Ordenadas) Tablas Hash Árbol Binario de Búsqueda.
14
Hash ¿Qué significa hashing? Desmenuzar – picar Idea:
Particionar el conjunto a representar en k clases Acceder a cada una de las clases en un tiempo constante ¿Cuál es el objetivo? Tener acceso para las consultas y las actualizaciones en “buen tiempo”
15
Hash Entonces la idea: Particionar el conjunto a representar en k Clases. Acceder a cada una de las clases en un tiempo constante. Lograr clases de baja cardinalidad Transformar el conjunto de llaves x pertenecientes a un conjunto U en un conjunto de llaves x´ pertenecientes a un conjunto escalar reducido U´
16
TABLA HASH Una tabla Hash consiste en dos componentes principales:
Un Arreglo de Contenedores Una Función Hash Hash Code Función de Compresión Método de la División MAD etc…
17
TABLA HASH - Colisiones
Si dos o más claves tienen el mismo valor hash, entonces serán mapeadas al mismo contenedor en A. En estos casos decimos que ha ocurrido una colisión Existen diversas alternativas para tratar colisiones, intentaremos evitarlas desde el primer momento implementando una función HASH que minimice las colisiones.
18
TABLA HASH - Colisiones
Esquemas de manejos de Colisiones: Hash Abierto: Mantener por cada componente del arreglo una lista de entradas. Las colisiones determinan un elemento más en cada lista. Hash Cerrado: Almacenar directamente los elementos en cada contenedor. Esta estrategia lleva a un manejo de colisiones más complejo.
19
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7>
20
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(66554)= mod 10 H(66554)= 4
21
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(66554)= mod 10 H(66554)= 4
22
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <66554,6> H(66554)= mod 10 H(66554)= 4
23
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <66554,6>
24
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <66554,6> H(34523)= mod 10 H(34523)= 3
25
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <66554,6> H(34523)= mod 10 H(34523)= 3
26
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> H(34523)= mod 10 H(34523)= 3
27
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6>
28
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> H(34230)= mod 10 H(34230)= 0
29
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> H(34230)= mod 10 H(34230)= 0
30
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> H(34230)= mod 10 H(34230)= 0
31
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6>
32
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61140, 7> <34523,8> <66554,6> H(45434)= mod 10 H(45434)= 4
33
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61140, 7> <34523,8> <66554,6> H(45434)= mod 10 H(45434)= 4
34
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61140, 7> <34523,8> <66554,6> Ocupado!!! H(45434)= mod 10 H(45434)= 4
35
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> H(45434)= mod 10 H(45434)= 4
36
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> <45434,9> H(45434)= mod 10 H(45434)= 4
37
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> <45434,9>
38
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> <45434,9> H(53420)= mod 10 H(53420)= 0
39
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M Ocupado!!! 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> <45434,9> H(53420)= mod 10 H(53420)= 0
40
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <34523,8> <66554,6> <45434,9> H(53420)= mod 10 H(53420)= 0
41
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <53420,10> <34523,8> <66554,6> <45434,9> H(53420)= mod 10 H(53420)= 0
42
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <53420,10> <34523,8> <66554,6> <45434,9>
43
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <53420,10> <34523,8> <66554,6> <45434,9> H(61148)= mod 10 H(61148)= 8
44
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <53420,10> <34523,8> <66554,6> <45434,9> H(61148)= mod 10 H(61148)= 8
45
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <53420,10> <34523,8> <66554,6> <45434,9> <61148,7>
46
Ejemplo Manejo de Colisiones Hash Cerrado
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N Resolución lineal de colisiones I M 1 2 3 4 5 6 7 8 9 <34230,3> Insertar: <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <53420,10> <34523,8> <66554,6> <45434,9> <61148,7>
47
Implementación TDAMapeo con HASH Cerrado
public class MapHashCerrado<K,V> implements Mapeo<K,V> { protected Entry<K,V> DISPONIBLE= new Entrada<k,V>(null, null) protected Entry<K,V> [] contenedor; protected int size; protected int Capacidad; public MapHashCerrado( int cap) { Capacidad=cap; contenedor= (Entry<K,V> []) new Entry[Capacidad]; size=0; } protected int funcionHash (K clave) {…} //Operaciones de Mapeo Interface Map<K,V> class MapHashCerrado<K,V>
48
Tablas Hash: Manejo de Colisiones
Dos Alternativas: Hash Cerrado Hash Abierto: Una alternativa simple y eficiente es mantener en cada componente una lista de entradas Las colisiones determinan más de un elemento en cada lista.
49
Hash Abierto
50
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <66554, 6> <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7>
51
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <66554, 6> H(66554)=4 <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> <66554, 6>
52
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <66554, 6> H(66554)=4 <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(34523)=3 <34523, 8> <66554, 6>
53
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <34230, 3> <66554, 6> H(66554)=4 <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(34523)=3 <34523, 8> <66554, 6> H(34230)=0
54
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <34230, 3> <66554, 6> H(66554)=4 <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(34523)=3 <34523, 8> <66554, 6> <45434, 9> H(34230)=0 H(45434)=4
55
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <34230, 3> <53420, 10> <66554, 6> H(66554)=4 <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(34523)=3 <34523, 8> <66554, 6> <45434, 9> H(34230)=0 H(45434)=4 H(53420)=0
56
Ejemplo Función Hash Abierto
Arreglo de 10 componentes (N=10) Entradas=<n°libreta, Nota> H(x)= x mod N I 1 2 3 4 5 6 7 8 9 <34230, 3> <53420, 10> <66554, 6> H(66554)=4 <34523, 8> <34230, 3> <45434, 9> <53420,10> <61148, 7> H(34523)=3 <34523, 8> <66554, 6> <45434, 9> H(34230)=0 H(45434)=4 H(53420)=0 <61148, 7> H(61148)=8
57
Implementación TDAMapeo con HASH Abierto
public class MapeoHashAbierto<K,V> implements Map<K,V> { protected PositionList<Entrada<K,V>> [] map; protected int cant; // cantidad de entradas protected int tam; // tamaño del arreglo protected final float factor = 0.9F; public MapeoHashAbierto() { tam = 11; map = (PositionList<Entrada<K,V>> []) new ListaDoblementeEnlazada[tam]; for(int i = 0; i < tam; i++) { map[i] = new ListaDoblementeEnlazada<Entrada<K,V>>();} cant = 0; } protected int funcionHash (K clave) {…} //Operaciones de Mapeo Interface Map<K,V> class MapHashAbierto<K,V>
58
¿Preguntas?
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.