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

Métodos de ordenación externa
Métodos de ordenación externaMétodos de ordenación externa
Métodos de ordenación externaEdwin Narváez
 
Clase 05-expresiones-regulares
Clase 05-expresiones-regularesClase 05-expresiones-regulares
Clase 05-expresiones-regularesDanielMrquez25
 
Ecuaciones Diferenciales Ordinarias.pptx
Ecuaciones Diferenciales Ordinarias.pptxEcuaciones Diferenciales Ordinarias.pptx
Ecuaciones Diferenciales Ordinarias.pptxAUGUSTOBOURGEAT
 
Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4LuiS YmAY
 
Precedencia De Operadores Y Asociatividad En Lenguaje Visual Basic
Precedencia De Operadores Y Asociatividad En Lenguaje Visual BasicPrecedencia De Operadores Y Asociatividad En Lenguaje Visual Basic
Precedencia De Operadores Y Asociatividad En Lenguaje Visual BasicJonatan Alfredo Diaz Cano
 
MÉTODO DE TRANSPORTE
MÉTODO DE TRANSPORTEMÉTODO DE TRANSPORTE
MÉTODO DE TRANSPORTERubí Parra
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesJosé Antonio Sandoval Acosta
 
Pruebas de Uniformidad
Pruebas de UniformidadPruebas de Uniformidad
Pruebas de UniformidadEwing Ma
 
Teoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formalesTeoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formalesUniversidad del Valle
 

La actualidad más candente (20)

Prueba de corridas arriba y abajo de la media
Prueba de corridas arriba y abajo de la mediaPrueba de corridas arriba y abajo de la media
Prueba de corridas arriba y abajo de la media
 
Métodos de ordenación externa
Métodos de ordenación externaMétodos de ordenación externa
Métodos de ordenación externa
 
Aritmetica Modular
Aritmetica ModularAritmetica Modular
Aritmetica Modular
 
Clase 05-expresiones-regulares
Clase 05-expresiones-regularesClase 05-expresiones-regulares
Clase 05-expresiones-regulares
 
SIMULACION UNIDAD II
SIMULACION UNIDAD IISIMULACION UNIDAD II
SIMULACION UNIDAD II
 
Tablas hash en java
Tablas hash en javaTablas hash en java
Tablas hash en java
 
Ecuaciones Diferenciales Ordinarias.pptx
Ecuaciones Diferenciales Ordinarias.pptxEcuaciones Diferenciales Ordinarias.pptx
Ecuaciones Diferenciales Ordinarias.pptx
 
Vbtora98
Vbtora98Vbtora98
Vbtora98
 
Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4
 
Arboles multicamino
Arboles  multicaminoArboles  multicamino
Arboles multicamino
 
Pseudocódigo Tabla Hash Abierta
Pseudocódigo Tabla Hash AbiertaPseudocódigo Tabla Hash Abierta
Pseudocódigo Tabla Hash Abierta
 
Ordenamiento por arbol binario
Ordenamiento por arbol binarioOrdenamiento por arbol binario
Ordenamiento por arbol binario
 
Precedencia De Operadores Y Asociatividad En Lenguaje Visual Basic
Precedencia De Operadores Y Asociatividad En Lenguaje Visual BasicPrecedencia De Operadores Y Asociatividad En Lenguaje Visual Basic
Precedencia De Operadores Y Asociatividad En Lenguaje Visual Basic
 
MÉTODO DE TRANSPORTE
MÉTODO DE TRANSPORTEMÉTODO DE TRANSPORTE
MÉTODO DE TRANSPORTE
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
Pruebas de Uniformidad
Pruebas de UniformidadPruebas de Uniformidad
Pruebas de Uniformidad
 
Varianza y covarianza
Varianza y covarianzaVarianza y covarianza
Varianza y covarianza
 
Problema de las jarras
Problema de las jarrasProblema de las jarras
Problema de las jarras
 
Técnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrásTécnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrás
 
Teoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formalesTeoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formales
 

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
 
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 (9)

Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Dispersión y tablas hash
Dispersión y tablas hashDispersión y tablas hash
Dispersión y 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
 
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
 

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

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
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
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 

Último (11)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.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
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

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