SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
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

Más contenido relacionado

Destacado (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.
 

Similar 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
 

Más de Carlos A. Iglesias

Más 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

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
 
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
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
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
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
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
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
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
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 

Último (15)

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
 
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
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
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
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
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
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
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
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 

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