SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
Análisis y Diseño
      de Software
Tema 2b.
Diccionarios.
Arrays y Árboles
Carlos A. Iglesias <cif@gsi.dit.upm.es>
Departamento de Ingeniería de Sistemas Telemáticos
                            http://moodle.dit.upm.es
Legenda
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. Arrays y Árboles   2
Bibliografía
●   Beginning Algorithms, Simon
    Harris and James Ross, Wrox,
    2005.
●   Capítulos 1, 2, 9, 10, 11

http://proquest.safaribooksonline.com/book/software-engi
    neering-and-development/algorithms/9780764596742




                                      Diccionarios. Arrays y Árboles   3
Temario
●   Estructura de datos: diccionarios
●   Operaciones en diccionarios: interfaz
    diccionario
●   Implementación de diccionario
    –   Interfaz Comparable
    –   Array
    –   Array Ordenado
    –   Árbol binario para búsqueda
                              Diccionarios. Arrays y Árboles   4
Objetivos
●   Aprender nuevas estructuras de datos,
    ampliamente usadas para diccionarios
●   Saber calcular, evaluar y razonar sobre la
    complejidad de las operaciones de un
    diccionario
●    Practicar la programación de métodos
    recursivos e iterativos para recorrer estas
    estructuras

                         Diccionarios. Arrays y Árboles   5
El problema del diccionario
●   Tenemos pares clave-elemento
    –   Ej. Palabra y definición de la palabra
●   ¿Cómo insertar, borrar o buscar elementos
    dada su clave?              CLAVE ELEMENTO
                                                      1       Juan
                                        insertar      3       Ana
                   4       Marcos
                                                      5      Pedro
                                       buscar(1)      6     Fernando
                       1     Juan                     7      Marga


                                    Diccionarios. Arrays y Árboles     6
El problema diccionario
●   Un diccionario es un 'mapping' entre dos
    conjuntos de items, K y V, que debe
    soportar:
    –   Inserción de un elemento v dada una clave k
    –   Búsqueda de un elemento dada su clave k
    –   Borrado de un elemento dada una clave k
                                           K                 V

                                           1             Juan
                                           3            Ana
                                                        Pedro
                                            5
                            Diccionarios. Arrays y Árboles       7
Requisitos diccionario
●   Búsqueda rápida
●   Inserción rápida
●   Borrado rápido




                       Diccionarios. Arrays y Árboles   8
Interfaz Diccionario




          Diccionarios. Arrays y Árboles   9
Ordenar objetos en Java
● En    Java para ordenar, usamos al interfaz Comparable
● int   c = a.compareTo(b)
● Orden:                                interface Comparable<T> {
                                           int compareTo(T o);
   –    c<0→a<b                         }
   –    c == 0 → a == b
   –    c>0→a>b
● Al    implementar Comparable, tenemos que cumplir:
   –    x.compareTo(y) == 0 ↔ x.equals(y)
   –    Transitividad. Si x.compareTo(y) > 0 && y.compareTo(z) > 0 →
        x.compareTo(z) > 0
   –     Si x.compareTo(y) == 0 →
        signo(x.compareTo(z)) == signo(y.compareTo(z)), para todo z

                                        Diccionarios. Arrays y Árboles   10
Ejemplo

public class Persona implements Comparable {
    private String nombre;
    private String apellido;
    private int edad;

    public int compareTo(Persona otra) {
        int c1 = apellido.compareTo(otra.apellido);
        if (c1 != 0) { return c1;}
        int c2 = nombre.compareTo(otra.nombre);
        if (c2 !=0) {return c2;}
        return otra.edad – edad;
    }
}




                         Diccionarios. Arrays y Árboles   11
Problema
●   Programar DiccionarioArray
    –   Implementa Diccionario
    –   Usa arrays




                           Diccionarios. Arrays y Árboles   12
Caso de estudio (1)


  3     2     4      1



¿Cómo inserto, borro, y busco en este array?




                          Diccionarios. Arrays y Árboles   13
Caso de estudio (2)


1     2      3     4



¿Cómo inserto, borro, y busco en este array?




                        Diccionarios. Arrays y Árboles   14
Adivina un número entre 0 y
            50 ...




                                          ¿Qué
                                    preguntaríamos?
             Diccionarios. Arrays y Árboles           15
Búsqueda binaria –
         Arrays.binarySearch()
● Si   sabemos que está ordenado,
  – Dividimos el array por su elemento medio.
  – Comparamos con el elemento del centro. Si
    coincide, terminamos. Si el elemento es menor,
    debe estar en el subarray de la izda, y si es mayor
    en el de la derecha. Seguimos haciendo esto hasta
    encontrarlo
       • Ej. [1,2,3,4,5,6,7,8,9] y busco el 3
       • [1,2,3,4]-5-[6,7,8,9] como 3 es menor que 5
       • [1]-2-[3 ,4] como 3 es menor que 2 → []-3-[4] →
         Encontrado
                                Diccionarios. Arrays y Árboles   16
Complejidad Búsqueda lineal
● Buscar     – search
  –   Recorremos → O(n)
● Insertar   - put
  –   Añadimos al final, sin detectar duplicados → O(1)
● Recuperar     - get
  –   Buscamos el elemento → O(n)
● Borrar    - remove
  –   Buscamos y lo borramos → O(n)

                             Diccionarios. Arrays y Árboles   17
Complejidad
                 Búsqueda binaria
● Buscar     - search
  –   O(logn)
● Insertar      - put
  –   Busco + reordeno hasta el final → O(n)
● Recuperar        - get
  –   Busco → O(logn)
● Borrar   - remove
  –   Busco + reordeno tras borrar → O(n)
  –   Si sólo marco como borrado: Busco + marco → O(logn)

                                Diccionarios. Arrays y Árboles   18
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 recursiva O(logn)        O(n)      O(logn)      O(n)


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)


                                        Diccionarios. Arrays y Árboles      19
Ahora, a programar...




          Diccionarios. Arrays y Árboles   20
Clases vistas
●   Diccionario.java
●   TestDiccionario.java
●   BancoPruebasDiccionarioOrdenado.java
●   DiccionarioArray.java
●   DiccionarioArrayOrdenado.java




                           Diccionarios. Arrays y Árboles   21
Medimos tiempos...




        Diccionarios. Arrays y Árboles   22
¿Cómo podría mejorar
          búsqueda binaria?
● ¿Qué    molesta?
  –   → REORDENAR al insertar o borrar
● “Ordeno    de forma perezosa” (lazy sorting)
  –   Sólo cuando me hace falta
● Alternativas:
  –   Inserción ordenada + búsqueda binaria
  –   Inserción no ordenada + búsqueda lineal
  –   Inserción + ordenación perezosa + búsq. Binaria
●¿Cuándo     cojo cada una?
                             Diccionarios. Arrays y Árboles   23
Ordenación perezosa
●   Insertar al final y marcar que no está
    ordenado           data[pos++] = nuevoDato;
                         ordenado = false;


●   Ordenamos antes de buscar con búsqueda
    binaria
                  if !ordenado {
                          Arrays.sort(data);
                          ordenado = true;
                  }
                  return busqueda(datos, dato);



                                 Diccionarios. Arrays y Árboles   24
Árboles binarios
●   Vamos a ver cómo evitar 'reordenar' con
    O(n)
●   Los árboles binarios nos facilitan esto




                         Diccionarios. Arrays y Árboles   25
¿Qué son los árboles binarios
       (binary trees)?
●“Árboles”->        estructura Tree
    –   con nodos
    –   Cada nodo tiene un padre
●   “Binarios”
    –   Cada padre tiene 2 hijos




                             Diccionarios. Arrays y Árboles   26
Árboles binarios
●   La altura de un nodo es el número de
    enlaces desde ese nodo hasta el nodo más
    profundo
●    La altura de un árbol es la altura del nodo
    raíz




                         Diccionarios. Arrays y Árboles   27
Árbol binario lleno y completo
●   Un árbol binario lleno es aquel en que
    cada nodo tiene 0 ó 2 hijos (no 1)
●   Un árbol binario completo es un árbol
    binario completamente lleno, con la posible
    excepción del último nivel




                        Diccionarios. Arrays y Árboles   28
Árbol binario completo
●   Un árbol binario completo proporciona la
    mejor relación entre número de nodos y la
    altura
●   La altura h de un árbol binario completo de
    N nodos es h = O(log n) ya que
               n=1+2+ 4+...+2 h−1 +2 h =2 h+1−1




                           Diccionarios. Arrays y Árboles   29
Árboles binarios de búsqueda
    (Binary search trees)
●   “Árboles binarios” en que además
    –    La rama izquierda de un nodo sólo tiene
        valores menores que dicho nodo
    –    La rama derecha de un nodo sólo tiene
        valores mayores que dicho nodo
    –   No hay duplicados




                            Diccionarios. Arrays y Árboles   30
Inserción




    Diccionarios. Arrays y Árboles   31
Ej. Inserción




      Diccionarios. Arrays y Árboles   32
Ejemplo




   Diccionarios. Arrays y Árboles   33
Ejercicio
●   Crear un árbol binario con los siguientes
    números (insertar en este orden):
●   11, 6, 8, 19, 4, 10, 5, 17, 43, 49, 31




                          Diccionarios. Arrays y Árboles   34
Complejidad T(n)
●    En árboles completos, lo peor sería que
    tengamos que dar tantos saltos como la
    altura del árbol → O(log n)
●   PERO si el árbol no es completo, y es
    degenerado, p.ej. Si los datos son
    ordenados: (1 (2 (3 ( 4 (5)) → O(n)
     1
         2
             3
                 4
                     5

                         Diccionarios. Arrays y Árboles   36
Borrado
●   Casos
    –   Nodo sin hijos → lo borramos
    –   Nodo con 1 hijo → lo borramos y lo
        reemplazamos por el hijo
    –   Nodo con 2 hijos →buscamos el mayor hijo
        izado o el menor hijo derecho y reemplazamos
        por el que queremos borrar



                            Diccionarios. Arrays y Árboles   37
Borrado sin hijos

Borrar 74




                    Diccionarios. Arrays y Árboles   38
Borrado nodo con 1 hijo

Borrar 70




                 Diccionarios. Arrays y Árboles   39
Borrado con 2 hijos

Borrar 59




                     Diccionarios. Arrays y Árboles   40
Ej. Borrado con 2 hijos

Borrar I




                      Diccionarios. Arrays y Árboles   41
Borrado perezoso
●   En vez de borrar físicamente, marcamos
    para borrado
    –   Más simple
    –   Podemos hacer los borrados físicos 'de golpe'
        (y en batch)
    –   Pero, necesitaremos más memoria para los
        nodos marcados como borrados, y se tardará
        más en otras operaciones


                            Diccionarios. Arrays y Árboles   42
Complejidad
● Buscar     - search
  –   Si es completo y balanceado, O(h) → O(logn)
  –   Si degenera, O(n)
● Insertar   - put
  –   Buscar + insertar en ese nodo → O(logn)
● Recuperar     – get
  –   Buscar → O(logn)
● Borrar   - delete
  –   Buscar nodo + buscar reemplazo + insertar reemplazo en
      nodo original → O(logn)+O(logn)+1 → O(logn)
                               Diccionarios. Arrays y Árboles   43
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 recursiva O(logn)        O(n)      O(logn)      O(n)
 Árbol binario de búsqueda    O(logn)      O(logn)   O(logn)      O(logn)
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)
                                        Diccionarios. Arrays y Árboles      44
Clases vistas
● DiccionarioArbol.java
●TestDiccionarioArbol.java




                     Diccionarios. Arrays y Árboles   45
Conclusiones - Búsqueda
“La búsqueda es una
 herramienta básica que
 cada programador
 debería conocer para
 utilizar en un gran número
 de ocasiones”

Donald Knuth, “El Arte de
Programación de
Ordenadores”, Vol. 3, 1973.




                              Diccionarios. Arrays y Árboles   46
Resumen
●    Tenemos diferentes algoritmos para
    ordenar y buscar
●   Las pruebas de prestaciones nos permiten
    medirlos
    –   Es difícil (elementos externos como la máquina
        o GC en Java)
●    Hemos visto dos algoritmos de búsqueda:
    lineal y binaria (para arrays ordenados)

                            Diccionarios. Arrays y Árboles   47

Mais conteúdo relacionado

Destaque (11)

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
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores Java
 
Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.Tema 2 Diccionarios. Tablas Hash.
Tema 2 Diccionarios. Tablas Hash.
 
Hash mitad al cuadrado pdf
Hash mitad al cuadrado pdfHash mitad al cuadrado pdf
Hash mitad al cuadrado pdf
 
0 entorno php
0 entorno php0 entorno php
0 entorno php
 
Tema 4.4 Actividades
Tema 4.4 ActividadesTema 4.4 Actividades
Tema 4.4 Actividades
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en Java
 
Bootstrap 3.
Bootstrap 3.Bootstrap 3.
Bootstrap 3.
 
Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.
 

Semelhante a Tema 2 diccionarios_grupo_23 (20)

Tema 2 busqueda_ordenacion_grupo_21
Tema 2 busqueda_ordenacion_grupo_21Tema 2 busqueda_ordenacion_grupo_21
Tema 2 busqueda_ordenacion_grupo_21
 
Estructura de datos unidad 4 y 5
Estructura de datos unidad 4 y 5Estructura de datos unidad 4 y 5
Estructura de datos unidad 4 y 5
 
3 estructuras no lineales estáticas y dinámicas
3  estructuras no lineales estáticas y dinámicas3  estructuras no lineales estáticas y dinámicas
3 estructuras no lineales estáticas y dinámicas
 
GRAFOS
GRAFOSGRAFOS
GRAFOS
 
Arboles02
Arboles02Arboles02
Arboles02
 
Arboles
Arboles Arboles
Arboles
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Arboles.pdf
Arboles.pdfArboles.pdf
Arboles.pdf
 
5. Guía de aprendizaje radicación
5. Guía  de aprendizaje  radicación5. Guía  de aprendizaje  radicación
5. Guía de aprendizaje radicación
 
Arboles ppt
Arboles pptArboles ppt
Arboles ppt
 
Ejercicios con Python parte 05
Ejercicios con Python parte 05Ejercicios con Python parte 05
Ejercicios con Python parte 05
 
Practica i prolog
Practica i prologPractica i prolog
Practica i prolog
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
 
Sustentacion arboles
Sustentacion arbolesSustentacion arboles
Sustentacion arboles
 
Números Naturales
Números NaturalesNúmeros Naturales
Números Naturales
 
POO1501 - Composición java
POO1501 - Composición javaPOO1501 - Composición java
POO1501 - Composición java
 
Recursividad
RecursividadRecursividad
Recursividad
 
Linked data con R
Linked data con RLinked data con R
Linked data con R
 
tema4.pdf
tema4.pdftema4.pdf
tema4.pdf
 
Algoritmo por seleccion
Algoritmo por seleccionAlgoritmo por seleccion
Algoritmo por seleccion
 

Mais de Carlos A. Iglesias

Mais de Carlos A. Iglesias (14)

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
 
PHP. Bases de Datos
PHP. Bases de DatosPHP. Bases de Datos
PHP. Bases de Datos
 
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.6 Intenciones
Tema 4.6 IntencionesTema 4.6 Intenciones
Tema 4.6 Intenciones
 
Tema 4.8 Preferencias
Tema 4.8 PreferenciasTema 4.8 Preferencias
Tema 4.8 Preferencias
 
Tema 4.9 Hebras
Tema 4.9 HebrasTema 4.9 Hebras
Tema 4.9 Hebras
 
Idea Relationship Analysis in Open Innovation CrowdSourcing systems
Idea Relationship Analysis in Open Innovation CrowdSourcing systemsIdea Relationship Analysis in Open Innovation CrowdSourcing systems
Idea Relationship Analysis in Open Innovation CrowdSourcing systems
 
UPM GSI Corporate Presentation
UPM GSI Corporate PresentationUPM GSI Corporate Presentation
UPM GSI Corporate Presentation
 

Último

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
 
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
 
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
 
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
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
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
 
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
 
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
 
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
 
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
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
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
 
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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 

Último (15)

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
 
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
 
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
 
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
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
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
 
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
 
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
 
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
 
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
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
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
 
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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 

Tema 2 diccionarios_grupo_23

  • 1. Análisis y Diseño de Software Tema 2b. Diccionarios. Arrays y Árboles Carlos A. Iglesias <cif@gsi.dit.upm.es> Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es
  • 2. Legenda 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. Arrays y Árboles 2
  • 3. Bibliografía ● Beginning Algorithms, Simon Harris and James Ross, Wrox, 2005. ● Capítulos 1, 2, 9, 10, 11 http://proquest.safaribooksonline.com/book/software-engi neering-and-development/algorithms/9780764596742 Diccionarios. Arrays y Árboles 3
  • 4. Temario ● Estructura de datos: diccionarios ● Operaciones en diccionarios: interfaz diccionario ● Implementación de diccionario – Interfaz Comparable – Array – Array Ordenado – Árbol binario para búsqueda Diccionarios. Arrays y Árboles 4
  • 5. Objetivos ● Aprender nuevas estructuras de datos, ampliamente usadas para diccionarios ● Saber calcular, evaluar y razonar sobre la complejidad de las operaciones de un diccionario ● Practicar la programación de métodos recursivos e iterativos para recorrer estas estructuras Diccionarios. Arrays y Árboles 5
  • 6. El problema del diccionario ● Tenemos pares clave-elemento – Ej. Palabra y definición de la palabra ● ¿Cómo insertar, borrar o buscar elementos dada su clave? CLAVE ELEMENTO 1 Juan insertar 3 Ana 4 Marcos 5 Pedro buscar(1) 6 Fernando 1 Juan 7 Marga Diccionarios. Arrays y Árboles 6
  • 7. El problema diccionario ● Un diccionario es un 'mapping' entre dos conjuntos de items, K y V, que debe soportar: – Inserción de un elemento v dada una clave k – Búsqueda de un elemento dada su clave k – Borrado de un elemento dada una clave k K V 1 Juan 3 Ana Pedro 5 Diccionarios. Arrays y Árboles 7
  • 8. Requisitos diccionario ● Búsqueda rápida ● Inserción rápida ● Borrado rápido Diccionarios. Arrays y Árboles 8
  • 9. Interfaz Diccionario Diccionarios. Arrays y Árboles 9
  • 10. Ordenar objetos en Java ● En Java para ordenar, usamos al interfaz Comparable ● int c = a.compareTo(b) ● Orden: interface Comparable<T> { int compareTo(T o); – c<0→a<b } – c == 0 → a == b – c>0→a>b ● Al implementar Comparable, tenemos que cumplir: – x.compareTo(y) == 0 ↔ x.equals(y) – Transitividad. Si x.compareTo(y) > 0 && y.compareTo(z) > 0 → x.compareTo(z) > 0 – Si x.compareTo(y) == 0 → signo(x.compareTo(z)) == signo(y.compareTo(z)), para todo z Diccionarios. Arrays y Árboles 10
  • 11. Ejemplo public class Persona implements Comparable { private String nombre; private String apellido; private int edad; public int compareTo(Persona otra) { int c1 = apellido.compareTo(otra.apellido); if (c1 != 0) { return c1;} int c2 = nombre.compareTo(otra.nombre); if (c2 !=0) {return c2;} return otra.edad – edad; } } Diccionarios. Arrays y Árboles 11
  • 12. Problema ● Programar DiccionarioArray – Implementa Diccionario – Usa arrays Diccionarios. Arrays y Árboles 12
  • 13. Caso de estudio (1) 3 2 4 1 ¿Cómo inserto, borro, y busco en este array? Diccionarios. Arrays y Árboles 13
  • 14. Caso de estudio (2) 1 2 3 4 ¿Cómo inserto, borro, y busco en este array? Diccionarios. Arrays y Árboles 14
  • 15. Adivina un número entre 0 y 50 ... ¿Qué preguntaríamos? Diccionarios. Arrays y Árboles 15
  • 16. Búsqueda binaria – Arrays.binarySearch() ● Si sabemos que está ordenado, – Dividimos el array por su elemento medio. – Comparamos con el elemento del centro. Si coincide, terminamos. Si el elemento es menor, debe estar en el subarray de la izda, y si es mayor en el de la derecha. Seguimos haciendo esto hasta encontrarlo • Ej. [1,2,3,4,5,6,7,8,9] y busco el 3 • [1,2,3,4]-5-[6,7,8,9] como 3 es menor que 5 • [1]-2-[3 ,4] como 3 es menor que 2 → []-3-[4] → Encontrado Diccionarios. Arrays y Árboles 16
  • 17. Complejidad Búsqueda lineal ● Buscar – search – Recorremos → O(n) ● Insertar - put – Añadimos al final, sin detectar duplicados → O(1) ● Recuperar - get – Buscamos el elemento → O(n) ● Borrar - remove – Buscamos y lo borramos → O(n) Diccionarios. Arrays y Árboles 17
  • 18. Complejidad Búsqueda binaria ● Buscar - search – O(logn) ● Insertar - put – Busco + reordeno hasta el final → O(n) ● Recuperar - get – Busco → O(logn) ● Borrar - remove – Busco + reordeno tras borrar → O(n) – Si sólo marco como borrado: Busco + marco → O(logn) Diccionarios. Arrays y Árboles 18
  • 19. 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 recursiva O(logn) O(n) O(logn) O(n) 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) Diccionarios. Arrays y Árboles 19
  • 20. Ahora, a programar... Diccionarios. Arrays y Árboles 20
  • 21. Clases vistas ● Diccionario.java ● TestDiccionario.java ● BancoPruebasDiccionarioOrdenado.java ● DiccionarioArray.java ● DiccionarioArrayOrdenado.java Diccionarios. Arrays y Árboles 21
  • 22. Medimos tiempos... Diccionarios. Arrays y Árboles 22
  • 23. ¿Cómo podría mejorar búsqueda binaria? ● ¿Qué molesta? – → REORDENAR al insertar o borrar ● “Ordeno de forma perezosa” (lazy sorting) – Sólo cuando me hace falta ● Alternativas: – Inserción ordenada + búsqueda binaria – Inserción no ordenada + búsqueda lineal – Inserción + ordenación perezosa + búsq. Binaria ●¿Cuándo cojo cada una? Diccionarios. Arrays y Árboles 23
  • 24. Ordenación perezosa ● Insertar al final y marcar que no está ordenado data[pos++] = nuevoDato; ordenado = false; ● Ordenamos antes de buscar con búsqueda binaria if !ordenado { Arrays.sort(data); ordenado = true; } return busqueda(datos, dato); Diccionarios. Arrays y Árboles 24
  • 25. Árboles binarios ● Vamos a ver cómo evitar 'reordenar' con O(n) ● Los árboles binarios nos facilitan esto Diccionarios. Arrays y Árboles 25
  • 26. ¿Qué son los árboles binarios (binary trees)? ●“Árboles”-> estructura Tree – con nodos – Cada nodo tiene un padre ● “Binarios” – Cada padre tiene 2 hijos Diccionarios. Arrays y Árboles 26
  • 27. Árboles binarios ● La altura de un nodo es el número de enlaces desde ese nodo hasta el nodo más profundo ● La altura de un árbol es la altura del nodo raíz Diccionarios. Arrays y Árboles 27
  • 28. Árbol binario lleno y completo ● Un árbol binario lleno es aquel en que cada nodo tiene 0 ó 2 hijos (no 1) ● Un árbol binario completo es un árbol binario completamente lleno, con la posible excepción del último nivel Diccionarios. Arrays y Árboles 28
  • 29. Árbol binario completo ● Un árbol binario completo proporciona la mejor relación entre número de nodos y la altura ● La altura h de un árbol binario completo de N nodos es h = O(log n) ya que n=1+2+ 4+...+2 h−1 +2 h =2 h+1−1 Diccionarios. Arrays y Árboles 29
  • 30. Árboles binarios de búsqueda (Binary search trees) ● “Árboles binarios” en que además – La rama izquierda de un nodo sólo tiene valores menores que dicho nodo – La rama derecha de un nodo sólo tiene valores mayores que dicho nodo – No hay duplicados Diccionarios. Arrays y Árboles 30
  • 31. Inserción Diccionarios. Arrays y Árboles 31
  • 32. Ej. Inserción Diccionarios. Arrays y Árboles 32
  • 33. Ejemplo Diccionarios. Arrays y Árboles 33
  • 34. Ejercicio ● Crear un árbol binario con los siguientes números (insertar en este orden): ● 11, 6, 8, 19, 4, 10, 5, 17, 43, 49, 31 Diccionarios. Arrays y Árboles 34
  • 35. Complejidad T(n) ● En árboles completos, lo peor sería que tengamos que dar tantos saltos como la altura del árbol → O(log n) ● PERO si el árbol no es completo, y es degenerado, p.ej. Si los datos son ordenados: (1 (2 (3 ( 4 (5)) → O(n) 1 2 3 4 5 Diccionarios. Arrays y Árboles 36
  • 36. Borrado ● Casos – Nodo sin hijos → lo borramos – Nodo con 1 hijo → lo borramos y lo reemplazamos por el hijo – Nodo con 2 hijos →buscamos el mayor hijo izado o el menor hijo derecho y reemplazamos por el que queremos borrar Diccionarios. Arrays y Árboles 37
  • 37. Borrado sin hijos Borrar 74 Diccionarios. Arrays y Árboles 38
  • 38. Borrado nodo con 1 hijo Borrar 70 Diccionarios. Arrays y Árboles 39
  • 39. Borrado con 2 hijos Borrar 59 Diccionarios. Arrays y Árboles 40
  • 40. Ej. Borrado con 2 hijos Borrar I Diccionarios. Arrays y Árboles 41
  • 41. Borrado perezoso ● En vez de borrar físicamente, marcamos para borrado – Más simple – Podemos hacer los borrados físicos 'de golpe' (y en batch) – Pero, necesitaremos más memoria para los nodos marcados como borrados, y se tardará más en otras operaciones Diccionarios. Arrays y Árboles 42
  • 42. Complejidad ● Buscar - search – Si es completo y balanceado, O(h) → O(logn) – Si degenera, O(n) ● Insertar - put – Buscar + insertar en ese nodo → O(logn) ● Recuperar – get – Buscar → O(logn) ● Borrar - delete – Buscar nodo + buscar reemplazo + insertar reemplazo en nodo original → O(logn)+O(logn)+1 → O(logn) Diccionarios. Arrays y Árboles 43
  • 43. 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 recursiva O(logn) O(n) O(logn) O(n) Árbol binario de búsqueda O(logn) O(logn) O(logn) O(logn) 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) Diccionarios. Arrays y Árboles 44
  • 45. Conclusiones - Búsqueda “La búsqueda es una herramienta básica que cada programador debería conocer para utilizar en un gran número de ocasiones” Donald Knuth, “El Arte de Programación de Ordenadores”, Vol. 3, 1973. Diccionarios. Arrays y Árboles 46
  • 46. Resumen ● Tenemos diferentes algoritmos para ordenar y buscar ● Las pruebas de prestaciones nos permiten medirlos – Es difícil (elementos externos como la máquina o GC en Java) ● Hemos visto dos algoritmos de búsqueda: lineal y binaria (para arrays ordenados) Diccionarios. Arrays y Árboles 47