SlideShare una empresa de Scribd logo
1 de 27
Dispersión


Estructuras de Datos

         Vicente García Díaz – garciavicente@uniovi.es
                           Universidad de Oviedo, 2011
2


Tabla de contenidos

1.   Conceptos básicos
2.   Protección activa
3.   Protección pasiva
4.   Redispersión
5.   Ejercicios
6.   Bibliografía
3




Conceptos básicos
4

Conceptos básicos

    La idea…
     • Tener una estructura de datos con una
       complejidad temporal de O(1) en el acceso a
       los datos
        ▫ Insertar                 Tablas Hash
        ▫ Buscar
        ▫ Borrar
     • Las demás operaciones pueden ser O(n)
        ▫ Recorrer
        ▫ Comparar
        ▫…
5

Conceptos básicos

    Función hash
     • Es una operación que consiste en transformar
       una clave en una posición dentro de la tabla
       Hash
        ▫ Enteros                                     0    elemento1

        ▫ Cadenas de texto                            1    elemento2
                                                      2    elemento3
                          f(clave):
                                                      3    elemento4

                                                      4    elemento5
                        ¿Cuál es el problema?
                Que es posible que diferentes claves apunten a la
                misma posición de la tabla provocando COLISIONES
6




Protección activa
Cuando se evitan las colisiones
diseñando buenas funciones hash
7

Protección activa. Función hash básica

    Función hash para claves enteras
      • Buena opción: f(c) = c % B, siendo c la clave y B el
        tamaño de la tabla

      • Colisiones: n / B, siendo n el número de elementos y B el tamaño de la
        tabla

    Ejercicio 1: ¿Cuál podría ser un buen tamaño para una tabla hash cuyos
    elementos van a tener las siguientes claves?
    2, 3, 1, 0
8

Protección activa. Función hash para cadenas I

    Función hash básica para claves cadena
      • Hay que convertir la cadena a un valor numérico
        y luego aplicarle la función hash para claves
        enteras
         ▫ P.e., utilizando el código ASCII de cada carácter
    Ejercicio 2: Si la clave utilizada en una tabla hash tiene una longitud de 10
    caracteres codificados en código ASCII extendido, ¿cuál es el rango de
    valores que puede tener la clave numérica de la función f?




                               ¿Cuál es el problema?
9

Protección activa. Función hash para cadenas I

    Función hash básica para claves cadena




   Ejercicio 3: Si se introduce una clave “Puerta”, utilizando la tabla de
   códigos ASCII anterior, ¿cuál sería la clave numérica correspondiente?



   Ejercicio 4: Para una tabla hash de tamaño 8009 (nº primo), ¿en qué
   posición de la tabla se colocaría el elemento de clave “Puerta”?
10

Protección activa. Función hash para cadenas II

 Asignación de pesos para incrementar el rango
      • Una ponderación típica es 272                    i

      • siendo i la posición del carácter en la cadena
                                                             Letra    Código ASCII   Código ponderado
                                                             P        80             80 * 272 = 58320
                                                             u        117            117 * 271 = 3159
              ¿Cuál es el problema?
                                                             e        101            101 * 270 = 101
                                                             r        114
                                                             t        116
                                                             a        97
                                                             TOTAL:   625            61580
11

Protección activa. Función hash para cadenas III

 Asignación de pesos para incrementar el rango
      • Se puede optimizar la multiplicación utilizando como peso 32

                    Letra    Código ASCII   Código ponderado   Código ponderado (32)
                    P        80             80 * 272 = 58320   80 * 325 = 2684354560
                    u        117            117 * 271 = 3159   117 * 324 = 122683392
                    e        101            101 * 270 = 101    101 * 323 = 3309568
                    r        114                               114 * 322 = 116736
                    t        116                               116 * 321 = 3712
                    a        97                                97 * 320 = 97
                    TOTAL:   625            61580              2810468065
12

Protección activa. Función hash para cadenas IV

 Asignación de pesos para incrementar el rango
      • Se puede minimizar el nº de multiplicaciones utilizando la
        Regla de Horner




                       P*325 + u*324 + e*323 + r*322 + t*321 + a*320
   Ejercicio 5: ¿Cómo se representaría el polinomio correspondiente al
   código ponderado con peso 32 para convertir la clave “Puerta” mediante la
   Regla de Horner?
13




Protección pasiva
Cuando varios elementos necesitan
compartir la misma posición dentro
de la tabla
14

Protección pasiva. Tablas hash abiertas

    Concepto
      • Varios elementos comparten la misma posición de la tabla
        hash
         ▫ P.e., cada posición de la tabla es a su vez una lista o un árbol
      • Factor de carga (Load Factor) = n / B, siendo n el número
        de elementos y B el tamaño de la tabla
         ▫ Lo recomendable es que FC <= 1
    Ejercicio 6: ¿Cuál es el factor de carga de la siguiente tabla hash?
15

Protección pasiva. Tablas hash abiertas




   Ejercicio 7: Suponiendo que tenemos una tabla hash abierta (cada
   posición de la tabla es una lista) de 13 elementos, muestra gráficamente
   cómo evolucionaría la tabla si se introducen en ella elementos con las
   siguientes claves:
   1, 10, 15, 20, 7, 13, 3, 2, 4, 6, 8, 18, 11, 12, 14, 26, 65, 39, 40
   ¿Cuál es el factor de carga de la tabla? ¿Es bueno?
16

Protección pasiva. Tablas hash cerradas

    Concepto
      • Cada posición sólo tiene cabida para un
        elemento
         ▫ Si se detecta una colisión, se buscan posiciones
           próximas
      • Técnicas de búsqueda de posiciones próximas
         ▫ Exploración lineal
         ▫ Exploración cuadrática
         ▫ Dispersión doble
17

Protección pasiva. Tablas hash cerradas

    Exploración lineal
      • Se modifica la función de dispersión
         ▫ f(c) = c % B           pasa a ser f(c) = (c + i) % B, siendo i = 0, 1,
           2, 3, 4,…


    Ejercicio 8: Suponiendo que tenemos una tabla hash cerrada de 7
    elementos, muestra gráficamente cómo evolucionaría la tabla si se
    introducen en ella elementos con las siguientes claves:
    4, 10, 12, 3, 17, 15, 14




         ▫ Lo recomendable es que FC <= 0,5 debido a los agrupamientos
18

Protección pasiva. Tablas hash cerradas

    Exploración lineal
      • La existencia de agrupamientos provoca problemas
         ▫ Cuando se busca un elemento que está en un agrupamiento hay que
           recorrer todos los elementos del agrupamiento hasta que se encuentra
         ▫ Lógicamente, cuando se encuentra una posición vacía no se sigue
           buscando (podría ser una complejidad O(n)) y se detiene el algoritmo
                                     Buscando elemento con clave 17
               0          17
               1          15         (17 + 0) % 7 = 3
               2          14         (17 + 1) % 7 = 4
               3          10         (17 + 2) % 7 = 5
               4           4
                                     (17 + 3) % 7 = 6
               5          12
               6           3         (17 + 4) % 7 = 0

        …pero, ¿y si se hubiera borrado algún elemento del agrupamiento?
19

Protección pasiva. Tablas hash cerradas

    Exploración lineal – borrado perezoso
      • No eliminar un elemento hasta que se introduce otro
      • Simplemente, se marca
         ▫ Para insertar se considera que la posición está libre
         ▫ Para buscar se considera que la posición está ocupada
20

Protección pasiva. Tablas hash cerradas

    Exploración cuadrática
      • Se modifica la función de dispersión
         ▫ f(c) = (c + i) % B             pasa a ser f(c) = (c + i2) % B,
           siendo i = 0, 1, 2, 3, 4,…

     Ejercicio 9: Suponiendo que tenemos una tabla hash cerrada de 7
     elementos, muestra gráficamente cómo evolucionaría la tabla si se
     introducen en ella elementos con las siguientes claves (exploración
     cuadrática):
     4, 10, 12, 17, 3




         ▫ Soluciona el problema de los agrupamientos primarios pero…
21

Protección pasiva. Tablas hash cerradas

    Dispersión doble
      • Se modifica la función de dispersión
         ▫ f(c) = (c + i2) % B pasa a f(c) = (c + i * h2(c)) % B, siendo i = 0, 1, 2,
            3, 4,…
         ▫ h2(c) es la función de cálculo de salto. Se recomienda h2(c) = R – c % R, siendo R el número
            primo antecesor de B

 Ejercicio 10:        Suponiendo que tenemos una
 tabla hash cerrada de 7 elementos, muestra
 gráficamente cómo evolucionaría la tabla si se
 introducen en ella elementos con las siguientes
 claves (dispersión doble):
 4, 10, 12, 17, 3, 5, 7




         ▫ Soluciona los agrupamientos y el nº
         de intentos es bajo pero…
22




Redispersión
Cuando se aumenta o disminuye el
tamaño de la tabla dinámicamente en
función de los elementos que existen
23

Redispersión

    Concepto
     • Aumentar el tamaño en función del FC
        ▫ Tablas hash abiertas  rendimiento decrece si FC > 1
        ▫ Tablas hash cerradas  se paraliza si FC > 0,5
     • Se busca un nuevo valor B
        ▫ El primo inmediatamente superior al tamaño doble del original
        ▫ Se recorren los elementos y se añaden a la nueva tabla



   Ejercicio 11: Suponiendo que tenemos una tabla hash cerrada de 5
   elementos, muestra gráficamente cómo evolucionaría la tabla si se
   introducen en ella elementos con las siguientes claves:
   4, 10, 21, 9, 15, 3, 17, 1, 8, 26

   Utiliza dispersión doble para insertar elementos y exploración cuadrática
   en caso que sea necesario redispersar elementos en función del FC
24

Redispersión inversa
    Ejercicio 12: Suponiendo que tenemos una tabla hash cerrada de 23 elementos, y que
    Concepto
    inicialmente en la tabla hay los elementos con clave: 1, 2, 10, 11, 12, 13, 15, 16, 17, 19, muestra
    gráficamente cómo evolucionaría la tabla (y el FC) si se produce lo siguiente:
    -Se saca el elemento con clave: 2
      • Reducir el tamaño en función del FC para ahorrar memoria
    -Se saca el elemento con clave: 13
    -Se saca el elemento con clave: 19
           ▫ el elemento con clave: 16
    -Se saca Tablas hash abiertas  si FC < 0,33
    -Se saca el elemento con clave: 10
           ▫ Tablas hash cerradas 
    -Se introduce el elemento con clave: 21 si FC < 0,16
    -Se introduce el elemento con clave: 9
      • Se busca un nuevo valor B
    -Se introduce el elemento con clave: 33
    -Se saca El elemento con clave: 1
           ▫ el primo inmediatamente superior la mitad del tamaño del original
    -Se saca el elemento con clave: 33
           ▫ el recorren secuencialmente los elementos y se añaden a la nueva
    -Se saca Seelemento con clave: 21
    -Se saca tabla
              el elemento con clave: 9
    -Se saca el elemento con clave: 11
    -Se introduce el elemento con clave: 3
    -Se introduce el elemento con clave: 9
    -Se introduce el elemento con clave: 4
    -Se saca el elemento con clave: 12
    -Se saca el elemento con clave: 17
    -Se saca el elemento con clave: 15
    -Se saca el elemento con clave: 4

    Utiliza dispersión doble para insertar elementos y exploración cuadrática en caso que sea
    necesario redispersar elementos en función del FC
25




Ejercicios
26

Ejercicios



      Ejercicio 13: Realiza el pseudocódigo de una clase “TablaHash” que:

      1) Ofrezca una buena protección activa

      2) Permita elegir entre trabajar con la aproximación abierta o cerrada
      como protección pasiva

      3) Cuando se trabaja con la aproximación cerrada deberá permitir elegir
      entre exploración lineal con borrado perezoso, exploración cuadrática, o
      dispersión doble

      4) Realice redispersión y redispersión inversa en función del factor de
      carga que se tenga en un determinado momento
27


Bibliografía
 • WEISS, Mark Allen; (2000) Data Estructures & Problem Solving Using Java.
   Addison Wesley. ISBN 03-2154-140-5.

 • JAIME SISA, Alberto; (2002) Estructuras de Datos y Algoritmos con énfasis en
   programación orientada a objetos. Pearson Educación. ISBN 958-699-044-3.

 • JOYANES AGUILAR, LUIS (2007) Estructuras de Datos en Java. McGraw Hill. ISBN:
   9788448156312.

 • STANDISH, Thomas A (1998). Data structures in Java. Addison Wesley ISBN 0-201-
   30564-X.

 • WEISS, Mark Allen; (2000) Estructuras de Datos en Java. Addison Wesley. ISBN 84-
   7829-035-4.

 • WIRTH, Niklaus (1992). Algoritmos + Estructuras de Datos = Programas. Prentice-
   Hall. ISBN: 84-219-0172-9.

Más contenido relacionado

La actualidad más candente

Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..NANO-06
 
Arbol binario de busqueda java
Arbol binario de busqueda   javaArbol binario de busqueda   java
Arbol binario de busqueda javaFranco Guamán
 
Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.Carlos A. Iglesias
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesAngel Vázquez Patiño
 
4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externoFernando Solis
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busquedaJohnfornerod
 
Programacion 3. Arboles B+
Programacion 3. Arboles B+Programacion 3. Arboles B+
Programacion 3. Arboles B+Emmanuel Pineda
 
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)Fuerza Auriazul
 
Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacenciaFrank Doria
 

La actualidad más candente (20)

Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..
 
Arbol binario de busqueda java
Arbol binario de busqueda   javaArbol binario de busqueda   java
Arbol binario de busqueda java
 
Ordenamiento parte 2
Ordenamiento parte 2Ordenamiento parte 2
Ordenamiento parte 2
 
Listas
ListasListas
Listas
 
Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operaciones
 
Arboles b
Arboles bArboles b
Arboles b
 
4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Programacion 3. Arboles B+
Programacion 3. Arboles B+Programacion 3. Arboles B+
Programacion 3. Arboles B+
 
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
 
Hash mitad al cuadrado pdf
Hash mitad al cuadrado pdfHash mitad al cuadrado pdf
Hash mitad al cuadrado pdf
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
Trees, Binary Search Tree, AVL Tree in Data Structures
Trees, Binary Search Tree, AVL Tree in Data Structures Trees, Binary Search Tree, AVL Tree in Data Structures
Trees, Binary Search Tree, AVL Tree in Data Structures
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
Arbol B
Arbol BArbol B
Arbol B
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacencia
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 

Similar a Dispersión y tablas hash

Similar a Dispersión y tablas hash (12)

hashing.ppt
hashing.ppthashing.ppt
hashing.ppt
 
Tablas hash
Tablas hashTablas hash
Tablas hash
 
Tabla Hash ( Andrea Bedia Suarez )
Tabla Hash ( Andrea Bedia Suarez )Tabla Hash ( Andrea Bedia Suarez )
Tabla Hash ( Andrea Bedia Suarez )
 
COMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de SimbolosCOMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de Simbolos
 
Tablas de disperción
Tablas de disperciónTablas de disperción
Tablas de disperción
 
Tablas hash
Tablas hashTablas hash
Tablas hash
 
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)
 
Unidad 8 metodos_de_busqueda
Unidad 8 metodos_de_busquedaUnidad 8 metodos_de_busqueda
Unidad 8 metodos_de_busqueda
 
12 Arreglos
12 Arreglos12 Arreglos
12 Arreglos
 
TablaHash
TablaHashTablaHash
TablaHash
 
Código Huffman
Código HuffmanCódigo Huffman
Código Huffman
 
Tablas Hash (Eva Martín Álvarez)
Tablas Hash (Eva Martín Álvarez)Tablas Hash (Eva Martín Álvarez)
Tablas Hash (Eva Martín Álvarez)
 

Más de Vicente García Díaz (16)

Creating a textual domain specific language
Creating a textual domain specific languageCreating a textual domain specific language
Creating a textual domain specific language
 
Introduction to architectures based on models, models and metamodels. model d...
Introduction to architectures based on models, models and metamodels. model d...Introduction to architectures based on models, models and metamodels. model d...
Introduction to architectures based on models, models and metamodels. model d...
 
jBPM
jBPMjBPM
jBPM
 
Wikitude. KML y ARML
Wikitude. KML y ARMLWikitude. KML y ARML
Wikitude. KML y ARML
 
Wikitude. ARchiect
Wikitude. ARchiectWikitude. ARchiect
Wikitude. ARchiect
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Introducción a la ingeniería dirigida por modelos
Introducción a la ingeniería dirigida por modelosIntroducción a la ingeniería dirigida por modelos
Introducción a la ingeniería dirigida por modelos
 
Iniciación a OpenGL
Iniciación a OpenGLIniciación a OpenGL
Iniciación a OpenGL
 
Iniciación a la realidad aumentada
Iniciación a la realidad aumentadaIniciación a la realidad aumentada
Iniciación a la realidad aumentada
 
Iniciación a ARToolKit
Iniciación a ARToolKitIniciación a ARToolKit
Iniciación a ARToolKit
 
Desarrollo robótico - Robot Operating System (ROS)
Desarrollo robótico - Robot Operating System (ROS)Desarrollo robótico - Robot Operating System (ROS)
Desarrollo robótico - Robot Operating System (ROS)
 
Wikitude. Servicios Seb
Wikitude. Servicios SebWikitude. Servicios Seb
Wikitude. Servicios Seb
 
LaTeX
LaTeXLaTeX
LaTeX
 
Automatización y Microsoft Word
Automatización y Microsoft WordAutomatización y Microsoft Word
Automatización y Microsoft Word
 
Árboles
ÁrbolesÁrboles
Árboles
 
Grafos
GrafosGrafos
Grafos
 

Dispersión y tablas hash

  • 1. Dispersión Estructuras de Datos Vicente García Díaz – garciavicente@uniovi.es Universidad de Oviedo, 2011
  • 2. 2 Tabla de contenidos 1. Conceptos básicos 2. Protección activa 3. Protección pasiva 4. Redispersión 5. Ejercicios 6. Bibliografía
  • 4. 4 Conceptos básicos La idea… • Tener una estructura de datos con una complejidad temporal de O(1) en el acceso a los datos ▫ Insertar Tablas Hash ▫ Buscar ▫ Borrar • Las demás operaciones pueden ser O(n) ▫ Recorrer ▫ Comparar ▫…
  • 5. 5 Conceptos básicos Función hash • Es una operación que consiste en transformar una clave en una posición dentro de la tabla Hash ▫ Enteros 0 elemento1 ▫ Cadenas de texto 1 elemento2 2 elemento3 f(clave): 3 elemento4 4 elemento5 ¿Cuál es el problema? Que es posible que diferentes claves apunten a la misma posición de la tabla provocando COLISIONES
  • 6. 6 Protección activa Cuando se evitan las colisiones diseñando buenas funciones hash
  • 7. 7 Protección activa. Función hash básica Función hash para claves enteras • Buena opción: f(c) = c % B, siendo c la clave y B el tamaño de la tabla • Colisiones: n / B, siendo n el número de elementos y B el tamaño de la tabla Ejercicio 1: ¿Cuál podría ser un buen tamaño para una tabla hash cuyos elementos van a tener las siguientes claves? 2, 3, 1, 0
  • 8. 8 Protección activa. Función hash para cadenas I Función hash básica para claves cadena • Hay que convertir la cadena a un valor numérico y luego aplicarle la función hash para claves enteras ▫ P.e., utilizando el código ASCII de cada carácter Ejercicio 2: Si la clave utilizada en una tabla hash tiene una longitud de 10 caracteres codificados en código ASCII extendido, ¿cuál es el rango de valores que puede tener la clave numérica de la función f? ¿Cuál es el problema?
  • 9. 9 Protección activa. Función hash para cadenas I Función hash básica para claves cadena Ejercicio 3: Si se introduce una clave “Puerta”, utilizando la tabla de códigos ASCII anterior, ¿cuál sería la clave numérica correspondiente? Ejercicio 4: Para una tabla hash de tamaño 8009 (nº primo), ¿en qué posición de la tabla se colocaría el elemento de clave “Puerta”?
  • 10. 10 Protección activa. Función hash para cadenas II Asignación de pesos para incrementar el rango • Una ponderación típica es 272 i • siendo i la posición del carácter en la cadena Letra Código ASCII Código ponderado P 80 80 * 272 = 58320 u 117 117 * 271 = 3159 ¿Cuál es el problema? e 101 101 * 270 = 101 r 114 t 116 a 97 TOTAL: 625 61580
  • 11. 11 Protección activa. Función hash para cadenas III Asignación de pesos para incrementar el rango • Se puede optimizar la multiplicación utilizando como peso 32 Letra Código ASCII Código ponderado Código ponderado (32) P 80 80 * 272 = 58320 80 * 325 = 2684354560 u 117 117 * 271 = 3159 117 * 324 = 122683392 e 101 101 * 270 = 101 101 * 323 = 3309568 r 114 114 * 322 = 116736 t 116 116 * 321 = 3712 a 97 97 * 320 = 97 TOTAL: 625 61580 2810468065
  • 12. 12 Protección activa. Función hash para cadenas IV Asignación de pesos para incrementar el rango • Se puede minimizar el nº de multiplicaciones utilizando la Regla de Horner P*325 + u*324 + e*323 + r*322 + t*321 + a*320 Ejercicio 5: ¿Cómo se representaría el polinomio correspondiente al código ponderado con peso 32 para convertir la clave “Puerta” mediante la Regla de Horner?
  • 13. 13 Protección pasiva Cuando varios elementos necesitan compartir la misma posición dentro de la tabla
  • 14. 14 Protección pasiva. Tablas hash abiertas Concepto • Varios elementos comparten la misma posición de la tabla hash ▫ P.e., cada posición de la tabla es a su vez una lista o un árbol • Factor de carga (Load Factor) = n / B, siendo n el número de elementos y B el tamaño de la tabla ▫ Lo recomendable es que FC <= 1 Ejercicio 6: ¿Cuál es el factor de carga de la siguiente tabla hash?
  • 15. 15 Protección pasiva. Tablas hash abiertas Ejercicio 7: Suponiendo que tenemos una tabla hash abierta (cada posición de la tabla es una lista) de 13 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves: 1, 10, 15, 20, 7, 13, 3, 2, 4, 6, 8, 18, 11, 12, 14, 26, 65, 39, 40 ¿Cuál es el factor de carga de la tabla? ¿Es bueno?
  • 16. 16 Protección pasiva. Tablas hash cerradas Concepto • Cada posición sólo tiene cabida para un elemento ▫ Si se detecta una colisión, se buscan posiciones próximas • Técnicas de búsqueda de posiciones próximas ▫ Exploración lineal ▫ Exploración cuadrática ▫ Dispersión doble
  • 17. 17 Protección pasiva. Tablas hash cerradas Exploración lineal • Se modifica la función de dispersión ▫ f(c) = c % B pasa a ser f(c) = (c + i) % B, siendo i = 0, 1, 2, 3, 4,… Ejercicio 8: Suponiendo que tenemos una tabla hash cerrada de 7 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves: 4, 10, 12, 3, 17, 15, 14 ▫ Lo recomendable es que FC <= 0,5 debido a los agrupamientos
  • 18. 18 Protección pasiva. Tablas hash cerradas Exploración lineal • La existencia de agrupamientos provoca problemas ▫ Cuando se busca un elemento que está en un agrupamiento hay que recorrer todos los elementos del agrupamiento hasta que se encuentra ▫ Lógicamente, cuando se encuentra una posición vacía no se sigue buscando (podría ser una complejidad O(n)) y se detiene el algoritmo Buscando elemento con clave 17 0 17 1 15 (17 + 0) % 7 = 3 2 14 (17 + 1) % 7 = 4 3 10 (17 + 2) % 7 = 5 4 4 (17 + 3) % 7 = 6 5 12 6 3 (17 + 4) % 7 = 0 …pero, ¿y si se hubiera borrado algún elemento del agrupamiento?
  • 19. 19 Protección pasiva. Tablas hash cerradas Exploración lineal – borrado perezoso • No eliminar un elemento hasta que se introduce otro • Simplemente, se marca ▫ Para insertar se considera que la posición está libre ▫ Para buscar se considera que la posición está ocupada
  • 20. 20 Protección pasiva. Tablas hash cerradas Exploración cuadrática • Se modifica la función de dispersión ▫ f(c) = (c + i) % B pasa a ser f(c) = (c + i2) % B, siendo i = 0, 1, 2, 3, 4,… Ejercicio 9: Suponiendo que tenemos una tabla hash cerrada de 7 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves (exploración cuadrática): 4, 10, 12, 17, 3 ▫ Soluciona el problema de los agrupamientos primarios pero…
  • 21. 21 Protección pasiva. Tablas hash cerradas Dispersión doble • Se modifica la función de dispersión ▫ f(c) = (c + i2) % B pasa a f(c) = (c + i * h2(c)) % B, siendo i = 0, 1, 2, 3, 4,… ▫ h2(c) es la función de cálculo de salto. Se recomienda h2(c) = R – c % R, siendo R el número primo antecesor de B Ejercicio 10: Suponiendo que tenemos una tabla hash cerrada de 7 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves (dispersión doble): 4, 10, 12, 17, 3, 5, 7 ▫ Soluciona los agrupamientos y el nº de intentos es bajo pero…
  • 22. 22 Redispersión Cuando se aumenta o disminuye el tamaño de la tabla dinámicamente en función de los elementos que existen
  • 23. 23 Redispersión Concepto • Aumentar el tamaño en función del FC ▫ Tablas hash abiertas  rendimiento decrece si FC > 1 ▫ Tablas hash cerradas  se paraliza si FC > 0,5 • Se busca un nuevo valor B ▫ El primo inmediatamente superior al tamaño doble del original ▫ Se recorren los elementos y se añaden a la nueva tabla Ejercicio 11: Suponiendo que tenemos una tabla hash cerrada de 5 elementos, muestra gráficamente cómo evolucionaría la tabla si se introducen en ella elementos con las siguientes claves: 4, 10, 21, 9, 15, 3, 17, 1, 8, 26 Utiliza dispersión doble para insertar elementos y exploración cuadrática en caso que sea necesario redispersar elementos en función del FC
  • 24. 24 Redispersión inversa Ejercicio 12: Suponiendo que tenemos una tabla hash cerrada de 23 elementos, y que Concepto inicialmente en la tabla hay los elementos con clave: 1, 2, 10, 11, 12, 13, 15, 16, 17, 19, muestra gráficamente cómo evolucionaría la tabla (y el FC) si se produce lo siguiente: -Se saca el elemento con clave: 2 • Reducir el tamaño en función del FC para ahorrar memoria -Se saca el elemento con clave: 13 -Se saca el elemento con clave: 19 ▫ el elemento con clave: 16 -Se saca Tablas hash abiertas  si FC < 0,33 -Se saca el elemento con clave: 10 ▫ Tablas hash cerradas  -Se introduce el elemento con clave: 21 si FC < 0,16 -Se introduce el elemento con clave: 9 • Se busca un nuevo valor B -Se introduce el elemento con clave: 33 -Se saca El elemento con clave: 1 ▫ el primo inmediatamente superior la mitad del tamaño del original -Se saca el elemento con clave: 33 ▫ el recorren secuencialmente los elementos y se añaden a la nueva -Se saca Seelemento con clave: 21 -Se saca tabla el elemento con clave: 9 -Se saca el elemento con clave: 11 -Se introduce el elemento con clave: 3 -Se introduce el elemento con clave: 9 -Se introduce el elemento con clave: 4 -Se saca el elemento con clave: 12 -Se saca el elemento con clave: 17 -Se saca el elemento con clave: 15 -Se saca el elemento con clave: 4 Utiliza dispersión doble para insertar elementos y exploración cuadrática en caso que sea necesario redispersar elementos en función del FC
  • 26. 26 Ejercicios Ejercicio 13: Realiza el pseudocódigo de una clase “TablaHash” que: 1) Ofrezca una buena protección activa 2) Permita elegir entre trabajar con la aproximación abierta o cerrada como protección pasiva 3) Cuando se trabaja con la aproximación cerrada deberá permitir elegir entre exploración lineal con borrado perezoso, exploración cuadrática, o dispersión doble 4) Realice redispersión y redispersión inversa en función del factor de carga que se tenga en un determinado momento
  • 27. 27 Bibliografía • WEISS, Mark Allen; (2000) Data Estructures & Problem Solving Using Java. Addison Wesley. ISBN 03-2154-140-5. • JAIME SISA, Alberto; (2002) Estructuras de Datos y Algoritmos con énfasis en programación orientada a objetos. Pearson Educación. ISBN 958-699-044-3. • JOYANES AGUILAR, LUIS (2007) Estructuras de Datos en Java. McGraw Hill. ISBN: 9788448156312. • STANDISH, Thomas A (1998). Data structures in Java. Addison Wesley ISBN 0-201- 30564-X. • WEISS, Mark Allen; (2000) Estructuras de Datos en Java. Addison Wesley. ISBN 84- 7829-035-4. • WIRTH, Niklaus (1992). Algoritmos + Estructuras de Datos = Programas. Prentice- Hall. ISBN: 84-219-0172-9.