SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Análisis y Diseño
      de Software
Tema 2c.
Diccionarios.
Tablas Hash

Carlos A. Iglesias <cif@gsi.dit.upm.es>
Departamento de Ingeniería de Sistemas Telemáticos
                            http://moodle.dit.upm.es
Leyenda
Teoría


Ejercicio práctico en el ordenador


Ampliación de conocimientos


Lectura / Vídeo / Podcast


Práctica libre / Experimentación


Explicación en pizarra


                  Diccionarios. Tablas Hash   2
Bibliografía
● Beginning Algorithms, Simon
Harris and James Ross, Wrox,
2005.
●   Capítulo 11

 http://proquest.safaribooksonline.com/book/software-e
ngineering-and-development/algorithms/9780764596742




                                      Diccionarios. Tablas Hash   3
Temario
●   Tablas Hash
●   Direccionamiento abierto y cerrado
●   Implementación de diccionario con Hash
●   Complejidad en tablas hash




                       Diccionarios. Tablas Hash   4
Objetivos
● Comprender cómo funciona la estructura
de datos tabla hash
●   Comprender qué es una función hash
● Saber evaluar la complejidad de una
tabla hash
● Aprender a implementar un diccionario
con una tabla hash


                      Diccionarios. Tablas Hash   5
Objetivo
● Hemos visto que
podíamos obtener
una complejidad
O(logn) de árboles
de búsqueda binaria
con diccionarios
● ¿Podemos reducir
aún más la
complejidad del
diccionario?
                      Diccionarios. Tablas Hash   6
Tabla Hash (I)
●   Guardamos valores en una tabla (array)
● A cada valor le asignamos una posición
única que se calcula mediante una fórmula
matemática (función hash)
–   No hace falta recorrer la tabla para
    encontrarlo, insertarlo o borrarlo → basta
    aplicar la fórmula → O(1)



                          Diccionarios. Tablas Hash   7
Tabla Hash (II)
●   Pero...
–   En el array habrá valores 'ocupados' y 'no
    ocupados' alternados → no están los sitios
    libres al final, hay que buscarlos
–   No guardamos de forma ordenada
–   Si hay claves duplicadas, se da una colisión
    (dos valores con la misma clave) → ¿qué
    hacemos?


                          Diccionarios. Tablas Hash   8
Función Hash
● Toma un objeto y devuelve un 'valor
hash', normalmente un entero


     Objeto                  Valor Hash

                   h




                       Diccionarios. Tablas Hash   9
Ej. Función Hash para String
● Suma de los valores de las letras
(ej. a = 1, o bien ASCII)
–   h('elvis') = 5 + 12 + 22 + 9 + 19 = 67
–   h('madonna') = 13 +1+ 4 +15+14 + 14 + 1 = 62
–   h('sting') = 19 + 20 + 9 + 14 + 7 = 69
● Cumple que asignamos una posición del
array a cada entrada


                           Diccionarios. Tablas Hash   10
Problemas función hash (I)
● No es eficiente almacenando → Dejamos
hasta el 67 todas las posiciones vacías
–   → Podemos poner valores hash en un rango
    con una función módulo, ej %10
    •   h('elvis') = 67 % 10 = 7
    •   h('madonna') = 62 % 10 = 2
    •   h('sting') = 69 % 10 = 9
● Hay muchas colisiones, palabras que dan
lo mismo. Ej. h('lives') = 67 % 10 = 7
                             Diccionarios. Tablas Hash   11
Problemas función hash (II)
● Intentamos que cuente la posición de la letra,
para que salgan cosas diferentes
● Multiplicamos  por un número primo (31) las
letras antes de sumarlas
● h('elvis')
          = (((e * 31 + l) * 31 + v) * 31 + i) * 31
+ s % 11 = 4996537 % 11 = 7
● h('madonna')   = 3; h('sting') = 5; h('lives') = 8
→ Se comporta como queremos

                          Diccionarios. Tablas Hash    12
Problemas Función Hash (III)
●  Pero... si añadimos 'fred', F(hfred') = 7, que colisiona con
'elvis'
●  Podríamos ampliar el tamaño de la tabla (en vez de % 11,
p. ej. % 17) o incluso disminuir el tamaño, pero no parece
una solución buena, puede que haya colisiones
●→    Hay que ver cómo tratar estas colisiones.
● Dos   métodos
–   Direccionamiento abierto (o hashing cerrado): prueba lineal
–   Direccionamiento cerrado (o hashing abierto): lista de valores




                                  Diccionarios. Tablas Hash          13
Direccionamiento abierto (I)
                ● Busco sitio de
                forma lineal
                ● h('fred') = 7 →
                colisión con 'elvis'
                ● Busco siguiente
                → ocupado 'lives'
                ● Busco siguiente
                → meto 'fred' en 9

              Diccionarios. Tablas Hash   14
Direccionamiento abierto (II)
                ● Sup.  ya he metido
                'mary', h('mary') = 10
                ● Meto 'tim', h('tim') = 9
                → colisión con 'fred'
                ● Siguiente → colisión
                con 'mary'
                ● Siguiente (inicio) →
                meto en posición 0



               Diccionarios. Tablas Hash     15
Variantes
    direccionamiento abierto
● Podemos definir varias formas de prueba,
siendo i el número de intento de inserción de
la clave
●   Prueba lineal     hi ( x)=(h( x)+i) mod M

●   Prueba cuadrática      hi ( x)=( h( x)+i 2 ) mod M

● Hashing doble hi ( x)=( h( x)+i∗h' ( x )) mod M
siendo h' una función hash secundaria, que
no tome el valor 0, p.ej. siendo q un número
primo menor que M
                        h' ( x )=q−( x mod q)
                          Diccionarios. Tablas Hash      16
Análisis
● Con la lineal conseguiremos ocupar los huecos de
forma consecutiva, y se forman ristras de valores y
si caemos en una, hay que recorrerla hasta el final
● Con la cuadrática, los valores están menos
aglomerados y hay huecos entre ellos, y es menos
probable caer en una 'ristra'
● Con la doble función hash, aún habrá más huecos,
y habrá menos ristras que recorrer




                          Diccionarios. Tablas Hash   17
Ej. Prueba lineal hashCode()
●   Implementación hashCode() de String




● Debemos implementar hashCode() si
sobreescribimos equals() para colecciones
como java.util.HashMap

                      Diccionarios. Tablas Hash   18
Direccionamiento cerrado
              ●  Tenemos en una
              lista los que tienen
              la misma clave
              ● Búsqueda lineal
              en la lista.
              ● Podemos
              aumentar el tamaño
              de la tabla para
              reducir colisiones
            Diccionarios. Tablas Hash   19
Factor de carga y rehashing
● Factorde carga: número de valores almacenados /
tamaño de la tabla
● Ej.   anterior 16 / 11 = 1.45 → 145%
● Un    factor de carga razonable:
 –   0.75, 75%, buen compromiso tiempo-espacio
 –   Debe ser < 1.0 siempre, lo normal < 0.8
● Cuando  superamos el factor de carga hacemos
'rehashing' (calcular otra vez la función hash)
 –   Ampliamos el tamaño de la tabla
 –   Seleccionamos otro valor de M, que será el primo más grande
     inferior al tamaño de la tabla

                                   Diccionarios. Tablas Hash       20
Complejidad
● Direccionamiento       abierto, sondeo
–   Si hay pocas colisiones → O(1)
–   Si hay más, tenemos que recorrer → O(n)
● Direccionamiento       cerrado, listas de valores
–   Insertar, buscar, borrar: O(1) + O(lista)
–   Si la tabla tiene pocas colisiones, lista.size() = 1 → O(1)
● Esdecir, o gastamos más espacio, o gastamos
más tiempo. Si la tabla tiene tamaño h
–   T(n) → O(n/h); si h → n, O(1)
–   E(n) → O(h); si h → n, O(n)
                                  Diccionarios. Tablas Hash       21
Complejidad T(n)

Algoritmo                   search          put     get       remove
Búsqueda lineal             O(n)            O(1)    O(n)      O(n)

Búsqueda binaria iterativa O(logn)          O(n)    O(logn)   O(n)
Búsqueda binaria            O(logn)         O(n)    O(logn)   O(n)
recursiva

Árbol binario de búsqueda   O(logn)         O(logn O(logn)    O(logn)
                                            )
Hash con listas             O(1) k > N; O(N) k << N
Hash abierto con prueba     O(1) si carga << 1




                                      Diccionarios. Tablas Hash         22
Complejidad E(n)

Algoritmo                    search               put       get       remove
Búsqueda lineal              O(1)                 O(1)      O(1)      O(1)
Búsqueda binaria iterativa   O(1)                 O(1)      O(1)      O(1)
Búsqueda binaria recursiva   O(logn)              O(logn)   O(logn)   O(logn)
Árbol binario de búsqueda    O(n)                 O(n)      O(n)      O(n)
Hash abierto con prueba      O(n)                 O(n)      O(n)      O(n)
Hash con listas              O(n) + O(n) = O(n)   O(n)      O(n)      O(n)




                                         Diccionarios. Tablas Hash              23
Tiempos tabla hash




Factor de carga = 60%


                        Diccionarios. Tablas Hash   26
Tiempo tabla hash según
    factor de carga




            Diccionarios. Tablas Hash   27
Ahora, a programar...




           Diccionarios. Tablas Hash   28
Clases vistas
●   DiccionarioHashMap.java
●   DiccionarioTreeMap.java
●   DiccionarioTablaHashAbierta.java
●   DiccionarioTablaHashListas.java
●   BancoPruebasHash1.java
●   BancoPruebasHash2.java


                       Diccionarios. Tablas Hash   29
Tabla Hash en Java
● En   Java tenemos la interfaz java.utilMap<K,V>
–   void clear()
–   boolean containsKey(Object key)
–   boolean containsValue(Object value)
–   Collection<V> values()
–   Set<K> keySet()
–   V put(K key, V value)
–   V get(Object key)
–   V remove(Object key)
–   boolean isEmpty()
–   int size()
                                 Diccionarios. Tablas Hash   30
Algunas implementaciones de
         Map<K,V>
● HashMap
 –   Usa tabla hash con listas para colisiones
 –   Hace un rehashing duplicando el tamaño de la tabla cuando se llena
 –   No está sincronizada para cuando veamos concurrencia
 –   Ofrece O(1)
● TreeMap
 –   Es un árbol de búsqueda, mantiene los datos ordenados
 –   No está sincronizada para cuando veamos concurrencia
 –   Complejidad: garantiza log(n)




                                       Diccionarios. Tablas Hash          31
Resumen
● Las tablas hash permiten obtener tiempos de
O(1), si están bien dimensionadas
● Las tablas hash actúan quitan el sentido el orden
en los datos
● Una    función hash 'perfecta' sin colisiones es
difícil de conseguir
● El compromiso tiempo / espacio es ampliar la
tabla para reducir colisiones
● Las tablas hash con listas dan muy buenas
prestaciones O(1)
                            Diccionarios. Tablas Hash   32
Ejemplo Hash - prueba




           Diccionarios. Tablas Hash   33
Insertar




    Diccionarios. Tablas Hash   34
Insertar (I)




      Diccionarios. Tablas Hash   35
Insertar (II)




       Diccionarios. Tablas Hash   36
Recuperar




     Diccionarios. Tablas Hash   37
Recuperar (get)




        Diccionarios. Tablas Hash   38
Borrar




   Diccionarios. Tablas Hash   39
Borrar (I)




     Diccionarios. Tablas Hash   40
Borrar (II)




      Diccionarios. Tablas Hash   41
Tabla Hash con Listas




           Diccionarios. Tablas Hash   42

Más contenido relacionado

La actualidad más candente

Ejercicios resueltos- de metodos
Ejercicios resueltos- de metodosEjercicios resueltos- de metodos
Ejercicios resueltos- de metodosMichael Dhgfhr
 
2.1 metodo de intervalo
2.1 metodo de intervalo2.1 metodo de intervalo
2.1 metodo de intervalomorenito9001
 
Mapa conceptual unidad 1 benita
Mapa conceptual unidad 1 benitaMapa conceptual unidad 1 benita
Mapa conceptual unidad 1 benitaTAtiizz Villalobos
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadenaTensor
 
Método Burbuja y Búsqueda binaria (explicación)
Método Burbuja y Búsqueda binaria (explicación)Método Burbuja y Búsqueda binaria (explicación)
Método Burbuja y Búsqueda binaria (explicación)Jorge Samaniego
 
Algoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamientoAlgoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamientoLutzo Guzmán
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Programacion estructura de arboles en c
Programacion estructura de arboles en cProgramacion estructura de arboles en c
Programacion estructura de arboles en cJessica Suarez
 
BúSqueda Por Hash
BúSqueda Por HashBúSqueda Por Hash
BúSqueda Por HashAngie Suarez
 
Programación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 ExcepcionesProgramación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 ExcepcionesJosé Antonio Sandoval Acosta
 
Arboles mate discreta
Arboles mate discretaArboles mate discreta
Arboles mate discretaJunior Soto
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 

La actualidad más candente (20)

Ejercicios resueltos- de metodos
Ejercicios resueltos- de metodosEjercicios resueltos- de metodos
Ejercicios resueltos- de metodos
 
Logica difusa grupo 2
Logica difusa grupo 2Logica difusa grupo 2
Logica difusa grupo 2
 
2.1 metodo de intervalo
2.1 metodo de intervalo2.1 metodo de intervalo
2.1 metodo de intervalo
 
Mapa conceptual unidad 1 benita
Mapa conceptual unidad 1 benitaMapa conceptual unidad 1 benita
Mapa conceptual unidad 1 benita
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Hash mitad al cuadrado pdf
Hash mitad al cuadrado pdfHash mitad al cuadrado pdf
Hash mitad al cuadrado pdf
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadena
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Método Burbuja y Búsqueda binaria (explicación)
Método Burbuja y Búsqueda binaria (explicación)Método Burbuja y Búsqueda binaria (explicación)
Método Burbuja y Búsqueda binaria (explicación)
 
Algoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamientoAlgoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamiento
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
 
Programacion estructura de arboles en c
Programacion estructura de arboles en cProgramacion estructura de arboles en c
Programacion estructura de arboles en c
 
BúSqueda Por Hash
BúSqueda Por HashBúSqueda Por Hash
BúSqueda Por Hash
 
Programación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 ExcepcionesProgramación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 Excepciones
 
Arboles mate discreta
Arboles mate discretaArboles mate discreta
Arboles mate discreta
 
Dispersión y tablas hash
Dispersión y tablas hashDispersión y tablas hash
Dispersión y tablas hash
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
Clase Diagramas de Karnaugh
Clase Diagramas de KarnaughClase Diagramas de Karnaugh
Clase Diagramas de Karnaugh
 

Destacado

Analisis y disenio de algoritmos
Analisis y disenio de algoritmosAnalisis y disenio de algoritmos
Analisis y disenio de algoritmosMayte dena
 
Tablas hash - Pablo Herreruela Fuentes
Tablas hash - Pablo Herreruela FuentesTablas hash - Pablo Herreruela Fuentes
Tablas hash - Pablo Herreruela Fuentesedi.euitio
 
15 Tablas Hash
15 Tablas Hash15 Tablas Hash
15 Tablas HashUVM
 
T A B L A D E D I S P E R S I O N (Hash Table)
T A B L A  D E  D I S P E R S I O N (Hash Table)T A B L A  D E  D I S P E R S I O N (Hash Table)
T A B L A D E D I S P E R S I O N (Hash Table)Angie Suarez
 
Tablas Hash (Joel Díaz Pousada)
Tablas Hash (Joel Díaz Pousada)Tablas Hash (Joel Díaz Pousada)
Tablas Hash (Joel Díaz Pousada)edi.euitio
 
Tablas Hash (María Macías Alonso)
Tablas Hash (María Macías Alonso)Tablas Hash (María Macías Alonso)
Tablas Hash (María Macías Alonso)edi.euitio
 

Destacado (11)

Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Analisis y disenio de algoritmos
Analisis y disenio de algoritmosAnalisis y disenio de algoritmos
Analisis y disenio de algoritmos
 
Tablas hash - Pablo Herreruela Fuentes
Tablas hash - Pablo Herreruela FuentesTablas hash - Pablo Herreruela Fuentes
Tablas hash - Pablo Herreruela Fuentes
 
15 Tablas Hash
15 Tablas Hash15 Tablas Hash
15 Tablas Hash
 
Pseudocódigo Tabla Hash Abierta
Pseudocódigo Tabla Hash AbiertaPseudocódigo Tabla Hash Abierta
Pseudocódigo Tabla Hash Abierta
 
T A B L A D E D I S P E R S I O N (Hash Table)
T A B L A  D E  D I S P E R S I O N (Hash Table)T A B L A  D E  D I S P E R S I O N (Hash Table)
T A B L A D E D I S P E R S I O N (Hash Table)
 
Analisis de algoritmos - Introduccion
Analisis de algoritmos - IntroduccionAnalisis de algoritmos - Introduccion
Analisis de algoritmos - Introduccion
 
Tablas Hash (Joel Díaz Pousada)
Tablas Hash (Joel Díaz Pousada)Tablas Hash (Joel Díaz Pousada)
Tablas Hash (Joel Díaz Pousada)
 
Tablas Hash (María Macías Alonso)
Tablas Hash (María Macías Alonso)Tablas Hash (María Macías Alonso)
Tablas Hash (María Macías Alonso)
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Tablas hash en java
Tablas hash en javaTablas hash en java
Tablas hash en java
 

Similar a Tema 2 Diccionarios. Tablas Hash. (20)

hashing.ppt
hashing.ppthashing.ppt
hashing.ppt
 
Hashing
HashingHashing
Hashing
 
Hashing
HashingHashing
Hashing
 
Hashing
HashingHashing
Hashing
 
Tablas de dispersion
Tablas de dispersionTablas de dispersion
Tablas de dispersion
 
Hashing
HashingHashing
Hashing
 
Hashing
HashingHashing
Hashing
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Tablas Hash Fash Vmaa
Tablas Hash Fash VmaaTablas Hash Fash Vmaa
Tablas Hash Fash Vmaa
 
Hashing
HashingHashing
Hashing
 
Hash Mª del Mar LLorente- Jueves a las 16:00
Hash Mª del Mar LLorente- Jueves a las 16:00Hash Mª del Mar LLorente- Jueves a las 16:00
Hash Mª del Mar LLorente- Jueves a las 16:00
 
Hash
HashHash
Hash
 
Tablas Hash (Pablo Fernández Díaz)
Tablas Hash (Pablo Fernández Díaz)Tablas Hash (Pablo Fernández Díaz)
Tablas Hash (Pablo Fernández Díaz)
 
Back Tracking
Back TrackingBack Tracking
Back Tracking
 
Hashing
HashingHashing
Hashing
 
BACHILLERATO - ÁLGEBRA
BACHILLERATO - ÁLGEBRABACHILLERATO - ÁLGEBRA
BACHILLERATO - ÁLGEBRA
 
Edi Tablas Hash
Edi Tablas HashEdi Tablas Hash
Edi Tablas Hash
 
COMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de SimbolosCOMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de Simbolos
 
Dipersion hash
Dipersion hashDipersion hash
Dipersion hash
 
Tablas hash
Tablas hashTablas hash
Tablas hash
 

Más de Carlos A. Iglesias (20)

GSI Research Group Presentation
GSI Research Group PresentationGSI Research Group Presentation
GSI Research Group Presentation
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Bootstrap 3.
Bootstrap 3.Bootstrap 3.
Bootstrap 3.
 
Introducción CSS
Introducción CSSIntroducción CSS
Introducción CSS
 
Introducción HTML
Introducción HTMLIntroducción HTML
Introducción HTML
 
Presentación TEWC
Presentación TEWCPresentación TEWC
Presentación TEWC
 
UPM GSI Presentation
UPM GSI PresentationUPM GSI Presentation
UPM GSI Presentation
 
Introducción Análisis y Diseño
Introducción Análisis y DiseñoIntroducción Análisis y Diseño
Introducción Análisis y Diseño
 
PHP. Bases de Datos
PHP. Bases de DatosPHP. Bases de Datos
PHP. Bases de Datos
 
PHP. Tecnologías Web.
PHP. Tecnologías Web.PHP. Tecnologías Web.
PHP. Tecnologías Web.
 
1 intro php
1 intro php1 intro php
1 intro php
 
0 entorno php
0 entorno php0 entorno php
0 entorno php
 
Introducción TEWC
Introducción TEWCIntroducción TEWC
Introducción TEWC
 
Tema 4.1 Introduccion Android
Tema 4.1 Introduccion AndroidTema 4.1 Introduccion Android
Tema 4.1 Introduccion Android
 
Tema 4.2 Desarrollo Android e instalacion
Tema 4.2 Desarrollo Android e instalacionTema 4.2 Desarrollo Android e instalacion
Tema 4.2 Desarrollo Android e instalacion
 
Tema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre telecoTema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre teleco
 
Tema 4.4 Actividades
Tema 4.4 ActividadesTema 4.4 Actividades
Tema 4.4 Actividades
 
Tema 4.5 interfaces
Tema 4.5 interfacesTema 4.5 interfaces
Tema 4.5 interfaces
 
Tema 4.6 Intenciones
Tema 4.6 IntencionesTema 4.6 Intenciones
Tema 4.6 Intenciones
 
Tema 4.7 Acceso a datos
Tema 4.7 Acceso a datosTema 4.7 Acceso a datos
Tema 4.7 Acceso a datos
 

Último

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Último (15)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Tema 2 Diccionarios. Tablas Hash.

  • 1. Análisis y Diseño de Software Tema 2c. Diccionarios. Tablas Hash Carlos A. Iglesias <cif@gsi.dit.upm.es> Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es
  • 2. Leyenda Teoría Ejercicio práctico en el ordenador Ampliación de conocimientos Lectura / Vídeo / Podcast Práctica libre / Experimentación Explicación en pizarra Diccionarios. Tablas Hash 2
  • 3. Bibliografía ● Beginning Algorithms, Simon Harris and James Ross, Wrox, 2005. ● Capítulo 11 http://proquest.safaribooksonline.com/book/software-e ngineering-and-development/algorithms/9780764596742 Diccionarios. Tablas Hash 3
  • 4. Temario ● Tablas Hash ● Direccionamiento abierto y cerrado ● Implementación de diccionario con Hash ● Complejidad en tablas hash Diccionarios. Tablas Hash 4
  • 5. Objetivos ● Comprender cómo funciona la estructura de datos tabla hash ● Comprender qué es una función hash ● Saber evaluar la complejidad de una tabla hash ● Aprender a implementar un diccionario con una tabla hash Diccionarios. Tablas Hash 5
  • 6. Objetivo ● Hemos visto que podíamos obtener una complejidad O(logn) de árboles de búsqueda binaria con diccionarios ● ¿Podemos reducir aún más la complejidad del diccionario? Diccionarios. Tablas Hash 6
  • 7. Tabla Hash (I) ● Guardamos valores en una tabla (array) ● A cada valor le asignamos una posición única que se calcula mediante una fórmula matemática (función hash) – No hace falta recorrer la tabla para encontrarlo, insertarlo o borrarlo → basta aplicar la fórmula → O(1) Diccionarios. Tablas Hash 7
  • 8. Tabla Hash (II) ● Pero... – En el array habrá valores 'ocupados' y 'no ocupados' alternados → no están los sitios libres al final, hay que buscarlos – No guardamos de forma ordenada – Si hay claves duplicadas, se da una colisión (dos valores con la misma clave) → ¿qué hacemos? Diccionarios. Tablas Hash 8
  • 9. Función Hash ● Toma un objeto y devuelve un 'valor hash', normalmente un entero Objeto Valor Hash h Diccionarios. Tablas Hash 9
  • 10. Ej. Función Hash para String ● Suma de los valores de las letras (ej. a = 1, o bien ASCII) – h('elvis') = 5 + 12 + 22 + 9 + 19 = 67 – h('madonna') = 13 +1+ 4 +15+14 + 14 + 1 = 62 – h('sting') = 19 + 20 + 9 + 14 + 7 = 69 ● Cumple que asignamos una posición del array a cada entrada Diccionarios. Tablas Hash 10
  • 11. Problemas función hash (I) ● No es eficiente almacenando → Dejamos hasta el 67 todas las posiciones vacías – → Podemos poner valores hash en un rango con una función módulo, ej %10 • h('elvis') = 67 % 10 = 7 • h('madonna') = 62 % 10 = 2 • h('sting') = 69 % 10 = 9 ● Hay muchas colisiones, palabras que dan lo mismo. Ej. h('lives') = 67 % 10 = 7 Diccionarios. Tablas Hash 11
  • 12. Problemas función hash (II) ● Intentamos que cuente la posición de la letra, para que salgan cosas diferentes ● Multiplicamos por un número primo (31) las letras antes de sumarlas ● h('elvis') = (((e * 31 + l) * 31 + v) * 31 + i) * 31 + s % 11 = 4996537 % 11 = 7 ● h('madonna') = 3; h('sting') = 5; h('lives') = 8 → Se comporta como queremos Diccionarios. Tablas Hash 12
  • 13. Problemas Función Hash (III) ● Pero... si añadimos 'fred', F(hfred') = 7, que colisiona con 'elvis' ● Podríamos ampliar el tamaño de la tabla (en vez de % 11, p. ej. % 17) o incluso disminuir el tamaño, pero no parece una solución buena, puede que haya colisiones ●→ Hay que ver cómo tratar estas colisiones. ● Dos métodos – Direccionamiento abierto (o hashing cerrado): prueba lineal – Direccionamiento cerrado (o hashing abierto): lista de valores Diccionarios. Tablas Hash 13
  • 14. Direccionamiento abierto (I) ● Busco sitio de forma lineal ● h('fred') = 7 → colisión con 'elvis' ● Busco siguiente → ocupado 'lives' ● Busco siguiente → meto 'fred' en 9 Diccionarios. Tablas Hash 14
  • 15. Direccionamiento abierto (II) ● Sup. ya he metido 'mary', h('mary') = 10 ● Meto 'tim', h('tim') = 9 → colisión con 'fred' ● Siguiente → colisión con 'mary' ● Siguiente (inicio) → meto en posición 0 Diccionarios. Tablas Hash 15
  • 16. Variantes direccionamiento abierto ● Podemos definir varias formas de prueba, siendo i el número de intento de inserción de la clave ● Prueba lineal hi ( x)=(h( x)+i) mod M ● Prueba cuadrática hi ( x)=( h( x)+i 2 ) mod M ● Hashing doble hi ( x)=( h( x)+i∗h' ( x )) mod M siendo h' una función hash secundaria, que no tome el valor 0, p.ej. siendo q un número primo menor que M h' ( x )=q−( x mod q) Diccionarios. Tablas Hash 16
  • 17. Análisis ● Con la lineal conseguiremos ocupar los huecos de forma consecutiva, y se forman ristras de valores y si caemos en una, hay que recorrerla hasta el final ● Con la cuadrática, los valores están menos aglomerados y hay huecos entre ellos, y es menos probable caer en una 'ristra' ● Con la doble función hash, aún habrá más huecos, y habrá menos ristras que recorrer Diccionarios. Tablas Hash 17
  • 18. Ej. Prueba lineal hashCode() ● Implementación hashCode() de String ● Debemos implementar hashCode() si sobreescribimos equals() para colecciones como java.util.HashMap Diccionarios. Tablas Hash 18
  • 19. Direccionamiento cerrado ● Tenemos en una lista los que tienen la misma clave ● Búsqueda lineal en la lista. ● Podemos aumentar el tamaño de la tabla para reducir colisiones Diccionarios. Tablas Hash 19
  • 20. Factor de carga y rehashing ● Factorde carga: número de valores almacenados / tamaño de la tabla ● Ej. anterior 16 / 11 = 1.45 → 145% ● Un factor de carga razonable: – 0.75, 75%, buen compromiso tiempo-espacio – Debe ser < 1.0 siempre, lo normal < 0.8 ● Cuando superamos el factor de carga hacemos 'rehashing' (calcular otra vez la función hash) – Ampliamos el tamaño de la tabla – Seleccionamos otro valor de M, que será el primo más grande inferior al tamaño de la tabla Diccionarios. Tablas Hash 20
  • 21. Complejidad ● Direccionamiento abierto, sondeo – Si hay pocas colisiones → O(1) – Si hay más, tenemos que recorrer → O(n) ● Direccionamiento cerrado, listas de valores – Insertar, buscar, borrar: O(1) + O(lista) – Si la tabla tiene pocas colisiones, lista.size() = 1 → O(1) ● Esdecir, o gastamos más espacio, o gastamos más tiempo. Si la tabla tiene tamaño h – T(n) → O(n/h); si h → n, O(1) – E(n) → O(h); si h → n, O(n) Diccionarios. Tablas Hash 21
  • 22. Complejidad T(n) Algoritmo search put get remove Búsqueda lineal O(n) O(1) O(n) O(n) Búsqueda binaria iterativa O(logn) O(n) O(logn) O(n) Búsqueda binaria O(logn) O(n) O(logn) O(n) recursiva Árbol binario de búsqueda O(logn) O(logn O(logn) O(logn) ) Hash con listas O(1) k > N; O(N) k << N Hash abierto con prueba O(1) si carga << 1 Diccionarios. Tablas Hash 22
  • 23. Complejidad E(n) Algoritmo search put get remove Búsqueda lineal O(1) O(1) O(1) O(1) Búsqueda binaria iterativa O(1) O(1) O(1) O(1) Búsqueda binaria recursiva O(logn) O(logn) O(logn) O(logn) Árbol binario de búsqueda O(n) O(n) O(n) O(n) Hash abierto con prueba O(n) O(n) O(n) O(n) Hash con listas O(n) + O(n) = O(n) O(n) O(n) O(n) Diccionarios. Tablas Hash 23
  • 24. Tiempos tabla hash Factor de carga = 60% Diccionarios. Tablas Hash 26
  • 25. Tiempo tabla hash según factor de carga Diccionarios. Tablas Hash 27
  • 26. Ahora, a programar... Diccionarios. Tablas Hash 28
  • 27. Clases vistas ● DiccionarioHashMap.java ● DiccionarioTreeMap.java ● DiccionarioTablaHashAbierta.java ● DiccionarioTablaHashListas.java ● BancoPruebasHash1.java ● BancoPruebasHash2.java Diccionarios. Tablas Hash 29
  • 28. Tabla Hash en Java ● En Java tenemos la interfaz java.utilMap<K,V> – void clear() – boolean containsKey(Object key) – boolean containsValue(Object value) – Collection<V> values() – Set<K> keySet() – V put(K key, V value) – V get(Object key) – V remove(Object key) – boolean isEmpty() – int size() Diccionarios. Tablas Hash 30
  • 29. Algunas implementaciones de Map<K,V> ● HashMap – Usa tabla hash con listas para colisiones – Hace un rehashing duplicando el tamaño de la tabla cuando se llena – No está sincronizada para cuando veamos concurrencia – Ofrece O(1) ● TreeMap – Es un árbol de búsqueda, mantiene los datos ordenados – No está sincronizada para cuando veamos concurrencia – Complejidad: garantiza log(n) Diccionarios. Tablas Hash 31
  • 30. Resumen ● Las tablas hash permiten obtener tiempos de O(1), si están bien dimensionadas ● Las tablas hash actúan quitan el sentido el orden en los datos ● Una función hash 'perfecta' sin colisiones es difícil de conseguir ● El compromiso tiempo / espacio es ampliar la tabla para reducir colisiones ● Las tablas hash con listas dan muy buenas prestaciones O(1) Diccionarios. Tablas Hash 32
  • 31. Ejemplo Hash - prueba Diccionarios. Tablas Hash 33
  • 32. Insertar Diccionarios. Tablas Hash 34
  • 33. Insertar (I) Diccionarios. Tablas Hash 35
  • 34. Insertar (II) Diccionarios. Tablas Hash 36
  • 35. Recuperar Diccionarios. Tablas Hash 37
  • 36. Recuperar (get) Diccionarios. Tablas Hash 38
  • 37. Borrar Diccionarios. Tablas Hash 39
  • 38. Borrar (I) Diccionarios. Tablas Hash 40
  • 39. Borrar (II) Diccionarios. Tablas Hash 41
  • 40. Tabla Hash con Listas Diccionarios. Tablas Hash 42