Programación de sistemas Árboles

Documentos relacionados
Programación de sistemas

Carlos Delgado Kloos Mª Carmen Fernández Panadero Raquel M. Crespo García Ingeniería Telemática Univ. Carlos III de Madrid

Algoritmos y Estructuras de Datos. Guillermo Román Díez

Árbol ABB equilibrado. Lección: Árboles. Algorítmica II (Tema 4) Lenguajes y Sistemas Informáticos, Universidad Pablo de Olavide 1/ 58

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Grados Ing. Inf. y Mat. Inf. Noviembre 2011 Algoritmos y Estructura de Datos Página 1 de 6

Programación II Arboles Binarios(AB)

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Introducción a Árboles Árboles Binarios

INGENIERIA DE SISTEMAS 19 ESTRUCTURAS DE DATOS (Listas simples) ARBOLES

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Tema 09: TAD Árbol binario

Introducción a Árboles Árboles Binarios

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Árboles binarios. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

EDA. Tema 8 Colas de Prioridad: Heaps

Estructura de Datos Unidad 6: ARBOLES

Estructuras de datos: Árboles binarios de

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

El método main de la clase PruebaArbol, empieza creando una instancia de un objeto Árbol vacío y asigna su referencia a la variable árbol

Introducción a los árboles. Lección 11

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Programación de sistemas Pilas y Colas

Estructuras de datos y algoritmos

Programación de sistemas Listas enlazadas

Estructura de Datos. Índice

Tema 10: Árbol binario de búsqueda

Estructuras de Datos Clase 14 Árboles binarios de búsqueda

Estructuras de Datos Clase 10 Árboles binarios

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Listas enlazadas. Programación de Sistemas

Tema: Métodos de Ordenamiento. Parte 3.

Definición recursiva de los árboles

Algoritmos y Estructuras de Datos: Ordenación y Colas con Prioridad. Guillermo Román Díez

1. Árbol Binario de Búsqueda: Las clases Java NodoABB y ABB. 1. Definición y representación en Java 2. Operaciones y su coste estimado

Programación de sistemas

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Para la resolución de los ejercicios, se dispone de una implementación de árbol binario a través de la clase BinTree con la siguiente especificación.

Programación Estructuras Arborescentes

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Estructura de datos y de la información Boletín de problemas - Tema 10

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

Tema: Métodos de Ordenamiento. Parte 3.

Árboles binarios de búsqueda

Algoritmos y Programación II Curso 2006

1. Leer el primer número y almacenarlo en la raíz del árbol. 2. Repetir hasta encontrar un duplicado o el árbol esté vacío.

Estructuras de Datos. Clase 10 Árboles binarios

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios

Estructuras de Datos Clase 10 Árboles binarios

La máxima distancia entre dos nodos de un árbol está dada por alguna de las 3 siguientes: La máxima distancia entre dos nodos del subárbol izquierdo.

Aprender los conceptos, manejo, usos y aplicación de heaps a fin de utilizarlos para el desarrollo de aplicaciones

Sólo una opción es correcta en cada pregunta. Cada respuesta correcta suma 1 4. puntos. Cada respuesta incorrecta resta 1 12

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

Pilas Motivación

Tema 14: ÁRBOLES Algoritmos y estructuras de datos I - Tema 14 1

Programación II Árboles binarios de búsqueda (ABB)

Estructura de Datos Tema 6. Árboles. Contenido 14/06/2018

Versión Iterativa de recuperar en un. Soluciones Ejercicios Tema 11. protected NodoABB<E> recuperarmax(nodoabb<e> n) { while (n.der!= null) n = n.

Versión Iterativa de recuperar en un. Ejercicios Tema 11. Implementa una versión del método recuperar iterativa con la siguiente especificación:

Estructuras de Datos y Algoritmos. Curso 2004/05 Tema 6. Árboles y Árboles Binarios

Estructuras de Datos y Algoritmos

Clase 26. Introducción a los árboles. Árboles

Estructura de Datos. Estructuras de Datos no lineales : Árboles

Árboles Binarios Ordenados Árboles AVL

Francisco J. Hernández López

Tema 7: Árbol Binario

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Estructura de Datos. Temario Unidad VI. Árboles Árboles AVL

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Colas deprioridad y heaps

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Transcripción:

Programación de sistemas Árboles Departamento de Ingeniería Telemática 1

Contenidos Concepto de árbol Terminología Implementación Casos especiales Árboles binarios de búsqueda Montículos (heaps) 2

Concepto de árbol Un árbol es una estructura de datos no lineal que almacena los elementos jerárquicamente 3

Ejemplos 1. Clasificación de la información en una enciclopedia 4

Ejemplos 2. Sistema de ficheros 5

Ejemplos 3. Estructura organizativa de una empresa 4. Estructura de rangos del ejército 5. Estructura de un libro 6

Definición no recursiva Un árbol consiste en un conjunto de nodos y un conjunto de aristas, de forma que: o o o o Se distingue un nodo llamado raíz A cada nodo h (hijo), excepto la raíz, le llega una arista de otro nodo p (padre) Para cada nodo hay un camino (secuencia de aristas) único desde la raíz. Los nodos que no tienen hijos se denominan hojas 7

Definición no recursiva 8

Definición recursiva Un árbol es: o o Vacío Un nodo y cero o más árboles conectados al nodo mediante una arista * A los árboles que se conectan al nodo raíz los denominaremos también subárboles 9

Definición recursiva 10

Definición recursiva 11

Definición recursiva 12

Definición recursiva 13

Definición recursiva 14

Terminología Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados a ese nodo están vacíos Un nodo es interno, si tiene uno o más hijos o Según la definición recursiva: si alguno de los subárboles conectados a ese nodo no está vacío Un nodo es ascendiente de otro, si es padre de él o ascendiente de su padre. Un nodo es descendiente de otro, si este último es ascendiente del primero o Los descendientes de un nodo forman un subárbol en el que ese nodo hace de raíz 15

Terminología Un camino de un nodo a otro, es una secuencia de aristas consecutivas que llevan del primero al segundo o La longitud del camino es el número de aristas La profundidad de un nodo es la longitud del camino de la raíz a ese nodo La altura de un árbol es el valor de la profundidad del nodo más profundo El tamaño de un árbol es el número de nodos que contiene 16

Ejemplo Nodo Altura Profundidad Tamaño Int./Ext. a 2 0 7 Interno b 1 1 3 Interno c 0 1 1 Externo d 0 1 1 Externo e 0 1 1 Externo f 0 2 1 Externo g 0 2 1 Externo 17

Ejercicio 1 Completa la tabla para el siguiente árbol Nodo Altura Profundidad Tamaño Int./Ext. a 3 0 11 Interno b 1 1 3 Interno c 0 1 1 Externo d 1 1 2 Interno e 2 1 4 Interno f 0 2 1 Externo g 0 2 1 Externo h 0 2 1 Externo i 0 2 1 Externo j 1 2 2 Interno k 0 3 1 Externo

Terminología: Árbol ordenado Un árbol es ordenado, si para cada nodo existe un orden lineal para todos sus hijos 19

Terminología: Árbol binario Un árbol binario es un árbol ordenado en el que cada nodo tiene 2 árboles (izquierdo y derecho). o o Árbol binario según la definición recursiva de árbol Los árboles izquierdo y/o derecho pueden estar vacíos * En general, suponemos árboles binarios para simplificar la implementación de los árboles 20

La interfaz BTree public interface BTree<E> { static final int LEFT = 0; static final int RIGHT = 1; boolean isempty(); E getinfo() throws BTreeException; BTree<E> getleft() throws BTreeException; BTree<E> getright() throws BTreeException; void insert(btree<e> tree, int side) throws BTreeException; BTree<E> extract(int side) throws BTreeException; String tostringpreorder(); String tostringinorder(); String tostringpostorder(); String tostring(); // preorder int size(); int height(); } boolean equals(btree<e> tree); boolean find(btree<e> tree); 21

Una interfaz varias implementaciones Implementación basada en arrays Subárbol izquierdo Posición nodo raíz * 2 Subárbol derecho Posición nodo raíz * 2 +1 22

Una interfaz varias implementaciones Implementación basada en enlaces Linked Binary Node (LBNode) Linked Binary Tree (LBTree) Cada árbol (LBTree) tiene un nodo raíz (atributo LBNode) Cada nodo raíz LBNode apunta a dos árboles (atributos LBTree), los cuales pueden estar vacíos (null) 23

La clase LBNode public class LBNode<E> { private E info; private BTree<E> left; private BTree<E> right; } public LBNode(E info, BTree<E> left, BTree<E> right) { } public E getinfo() { } public void setinfo(e info) { } public BTree<E> getleft() { } public void setleft(btree<e> left) { } public BTree<E> getright() { } public void setright(btree<e> right){ } 24

Ejercicio 2 Completa la implementación de la clase LBNode. 25

La clase LBTree public class LBTree<E> implements BTree<E> { private LBNode<E> root; public LBTree() { root = null; } public LBTree(E info) { root = new LBNode<E>(info, new LBTree<E>(), new LBTree<E>()); } public boolean isempty() { return (root == null); } 26

La clase LBTree public E getinfo() throws BTreeException { if (isempty()) { throw new BTreeException("empty trees do not have info"); } return root.getinfo(); } public BTree<E> getleft() throws BTreeException { if (isempty()) { throw new BTreeException("empty trees do not have a left child"); } return root.getleft(); } public BTree<E> getright() throws BTreeException { if (isempty()) { throw new BTreeException("empty trees do not have a right child"); } return root.getright(); } 27

Algoritmos básicos Tamaño: size() Altura: height() Recorridos o o o Pre-orden: tostringpreorder() In-orden: tostringinorder() Post-orden: tostringpostorder() 28

La clase LBTree: size() public int size() { if (isempty()) { return 0; } else { return 1 + root.getleft().size() + root.getright().size(); } } 29

La clase LBTree: height() public int height() { if (isempty()) { return -1; } else { int leftheight = root.getleft().height(); int rightheight = root.getright().height(); if (leftheight > rightheight) { return 1 + leftheight; } else { return 1 + rightheight; } } } 30

Recorrido de Euler 31

Recorrido Pre-orden Primero el nodo raíz Después sus hijos (recursivamente) 32

La clase LBTree: tostringpreorder() public String tostringpreorder() { if (isempty()) { return ""; } else { return root.getinfo().tostring() + " " + root.getleft().tostringpreorder() + root.getright().tostringpreorder(); } } 33

Recorrido Post-orden Primero los hijos (recursivamente) Después el nodo raíz 34

La clase LBTree: tostringpostorder() public String tostringpostorder() { if (isempty()) { return ""; } else { return root.getleft().tostringpostorder() + root.getright().tostringpostorder() + root.getinfo().tostring() + " "; } } 35

Recorrido In-orden (simétrico) Primero el hijo izquierdo (recursivamente) Después el nodo raíz Después el hijo derecho (recursivamente) 36

La clase LBTree: tostringinorder() public String tostringinorder() { if (isempty()) { return ""; } else { return root.getleft().tostringinorder() + root.getinfo().tostring() + " " + root.getright().tostringinorder(); } } 37

Ejercicio 3 Dado el siguiente árbol binario, indica qué recorrido (pre-orden, in-orden, post-orden) produce el resultado (A+B)*(C-D). 38

Programación de sistemas Árboles (II) Departamento de Ingeniería Telemática

Contenidos Concepto de árbol Terminología Implementación Casos especiales Árboles binarios de búsqueda Montículos (heaps) 40

Notación Hasta ahora: o o Un nodo, tres atributos: información almacenada, subárbol izquierdo y subárbol derecho Un árbol, un atributo: nodo raíz Al pintar un árbol representamos la información almacenada como el contenido de cada nodo 41

Notación A partir de ahora: o Añadimos un atributo más: la clave (key) Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación Dependiendo de la implementación, la clave puede añadirse como atributo del nodo o como atributo del árbol * 4 Al pintar el árbol Color oscuro: Clave Color claro: Información + 2-8 A 1 B 3 C 6 D 9 42

Ejemplo de uso de claves Colas con prioridad o Estructura de datos lineal que devuelve los elementos de acuerdo con el valor de una clave que determina la prioridad y no al orden en que fueron insertados E U U Q E 3 2 4 1 5 COLA CON PRIORIDAD *1 Valor de prioridad máximo Q U E U E 43

Ejemplo de uso de claves Colas con prioridad o Implementación 1: Comparar al insertar Facilita la extracción o Implementación 2: Comparar al extraer Facilita la inserción 44

Árboles binarios de búsqueda Concepto de árbol binario de búsqueda Operaciones Búsqueda Inserción Eliminación 45

Árboles binarios de búsqueda: Concepto Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que la clave de n (o iguales) y todas las del subárbol derecho mayores (o iguales). 46

Ejemplo (I) 4 2 8 1 3 6 9 3 5 7 Representación únicamente de las claves (no se incluye la información almacenada) Implementación errónea (en el subárbol izquierdo de 2 hay una clave mayor que 2) 47

Ejemplo (II) 8 6 9 4 7 2 5 1 3 Implementación correcta de árbol binario de búsqueda 48

Operación: Búsqueda Buscamos el 3 : 3<4: Subárbol izquierdo 3>2: Subárbol derecho 3=3: Elemento encontrado 4 2 8 1 3 6 9 5 7 http://www.cosc.canterbury.ac.nz/mukundan/dsal/bst.html 49

Operación: Inserción Insertar 6 : 6<7: Subárbol izquierdo 6>2: Subárbol derecho 6>5: Subárbol derecho Hueco libre: insertar 2 7 9 1 5 3 6 50

Ejercicio 4 Dado el siguiente árbol binario de búsqueda, inserta en orden tres elementos que contienen las siguientes claves: 4, 8 y 5 7 2 9 1 5 3 6 51

Operación: Eliminar (I) Si los subárboles izquierdo y derecho están vacíos ( hoja ) Eliminar directamente Por ejemplo, eliminar 3 7 2 9 1 5 3 6 52

Operación: Eliminar (II) Si uno de los dos subárboles está vacío Reemplazar por el nodo raíz del subárbol no vacío Por ejemplo, eliminar 5 7 2 9 1 56 6 53

Operación: Eliminar (III) Si ninguno de los subárboles está vacío Reemplazar por el mayor del subárbol izquierdo o el menor del subárbol derecho Por ejemplo, eliminar 2 o Reemplazar por 1 o por 3 23 7 9 1 5 3 6 http://www.ibr.cs.tu-bs.de/courses/ss98/audii/applets/bst/bst-example.html 54

Ejercicio 5 Dado el siguiente árbol binario de búsqueda, elimina el elemento cuya clave es 7. Propón dos formas de realizar dicha operación 7 2 9 1 5 3 55

Montículos (heaps) Un montículo (binario) es un árbol binario completo en el que cada nodo tiene una clave mayor(*) o igual que la de su padre. Normalmente, un montículo se refiere a montículo binario * También podría definirse como menor o igual (el orden es arbitrario) Aplicaciones: Colas con prioridad Ordenación 56

Montículos: propiedades 1. Para cada nodo n (excepto para el raíz), su clave es mayor o igual que la de su padre. 2. Completo Para una profundidad K, todos los subárboles hasta K-1 están no vacíos y en K los árboles no vacíos están colocados de izquierda a derecha No Completo Completo No Completo 57

Ejemplo (I) 1 2 4 3 5 6 9 8 7 No es un montículo. Cumple la propiedad 1 pero no la 2 58

Ejemplo (II) 7 5 6 2 8 4 3 9 1 No es un montículo. Cumple la propiedad 2 pero no la 1 59

Ejemplo (III) 1 2 4 3 5 6 9 8 7 Sí es un montículo 60

Implementación basada en secuencias 1 p(root)=1 p(x.left)=2*p(x) p(x.right)=2*p(x)+1 2 3 4 5 6 7 1 2 3 4 5 6 7 61

Insertar Insertar elemento con clave 2 4 5 6 15 9 7 20 16 25 14 12 11 8 62

Insertar Insertar elemento con clave 2 4 5 6 15 9 7 20 16 25 14 12 11 8 2 63

Insertar Insertar elemento con clave 2 4 5 6 15 9 7 2 16 25 14 12 11 8 20 64

Insertar Insertar elemento con clave 2 4 5 2 15 9 7 6 16 25 14 12 11 8 20 65

Insertar Insertar elemento con clave 2 2 5 4 15 9 7 6 16 25 14 12 11 8 20 66

Ejercicio 6 Dado el siguiente montículo, inserta tres elementos con claves 3, 8 y 1. 2 5 4 15 9 7 6 25 16 12 14 8 11 20 67

Eliminar Eliminar elemento con clave 4 4 5 6 15 9 7 20 16 25 14 12 11 8 68

Eliminar 4 8 5 6 15 9 7 20 16 25 14 12 11 69

Eliminar Eliminar elemento con clave 4 5 8 6 15 9 7 20 16 25 14 12 11 70

Ejercicio 7 Dado el siguiente montículo, elimina tres elementos con claves 15, 5 y 7. 5 8 6 15 9 7 20 16 25 14 12 11 71

Ejemplo Montículo - Cola con prioridad http://www.csse.monash.edu.au/~lloyd/tildealgds/priority-q/

Ejemplo Montículo - Cola con prioridad http://www.cosc.canterbury.ac.nz/mukundan/dsal/minheapappl.html