Árboles. Alonso Ramírez Manzanares Computación y Algoritmos Friday, March 17, 17

Documentos relacionados
Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

Árboles balanceados. Alonso Ramírez Manzanares Computación y Algoritmos Thursday, April 30, 15

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Definición 1.1 Sea G = (V, A) un grafo no dirigido. G se denomina árbol si es conexo y no contiene ciclos.

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Algoritmos y estructuras de datos

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

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

Estructuras de datos Árboles B

Estructuras de datos. Estructuras de datos

Grafos. Suponiendo que e = [u, v]. Entonces los nodos u y v se llaman extremos de e y u y v se dice que son nodos adyacentes o vecinos.

Unidad Nº V Listas Enlazadas

Tema 6. Gestión dinámica de memoria

Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:

Tema: Sobrecarga de Operadores.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

14. ÁRBOLES Fundamentos y terminología básica

GRAMATICAS LIBRES DEL CONTEXTO

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

VI Colas de prioridad


Tema: Los Grafos y su importancia para la optimización de redes.

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

árbol como un conjunto de nodos y líneas

Árboles Binarios Ordenados Árboles AVL

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

2007 Carmen Moreno Valencia

Solución - práctico 10

ELO320 Estructuras de Datos y Algoritmos. Arboles Binarios. Tomás Arredondo Vidal

Tema: Tipos Abstractos de Datos (TAD s) en C++.

Notación Asintótica 2

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Notas de Clase. Prof. Juan Andrés Colmenares, M.Sc. Instituto de Cálculo Aplicado Facultad de Ingeniería Universidad del Zulia. 21 de febrero de 2004

Grafos. Amalia Duch Brown Octubre de 2007

Clases y Objetos. Informática II Ingeniería Electrónica

Introducción a la Teoría de Grafos

Árboles binarios de búsqueda ( BST )

TEMA 8: Gestión dinámica de memoria

PRÁCTICA Nº 5: 2 sesiones (del 11 de Abril al 17 de Abril de 2003) Listas con punto de interés para la composición de melodías musicales

Propedéutico de Programación

Tabla de Símbolos. Programación II Margarita Álvarez

UNIDAD 9. DATOS COMPLEJOS PILAS

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Estructuras de datos abstractos (ADTs) Listas

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso

El TAD Grafo. El TAD Grafo

Un grafo G = (V, E) se dice finito si V es un conjunto finito.

PRÁCTICA No. 13 ÁRBOL BINARIO DE BÚSQUEDA

Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre

Prof. Dr. Paul Bustamante

APLICACIÓN DE ÁRBOLES BINARIOS

Teoría de grafos y optimización en redes

Álgebra Booleana y Simplificación Lógica

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

Binary Decision Diagrams

GRAFOS. Prof. Ing. M.Sc. Fulbia Torres

Alonso Ramirez Manzanares Computación y Algoritmos 03.05

Sistemas Operativos Practica 1: procesos y concurrencia.

A B MIN C D E F MAX x E.T.S.I. INFORMÁTICA 4º CURSO. INTELIGENCIA ARTIFICIAL E INGENIERÍA DEL CONOCIMIENTO

Árboles binarios de búsqueda

Procesadores de lenguaje Tema 6 La tabla de símbolos

TEORÍA DE GRAFOS Ingeniería de Sistemas

En la fig. 1 se representa el grafo, G=(V,A) donde: V = {1, 2, 3, 4, 5, 6} A = { {1,2}, {1,3}, {1,5}, {3}, {3,4}, {4,5}, {5,6} }

Estructuras de Datos. La pila es un objeto dinámico en constante cambio.

Estructuras de Datos Abstractas en Lenguaje Java

Estructura de Datos. Unidad de Aprendizaje: Unidad de Competencia II: Estructuras de Datos Lineales. M. en C. Edith Cristina Herrera Luna

ESTRUCTURA Y TECNOLOGÍA DE LOS COMPUTADORES I. TEMA 4 Algebra booleana y puertas lógicas

Apuntadores en C y C++

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Algoritmos de Ordenamiento

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R.

Grafos. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Grafos 1 / 30

Registro (record): es la unidad básica de acceso y manipulación de la base de datos.

Tema 5. Estructura de datos Pila

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Grafos. Algoritmos y Estructuras de Datos III

Capítulo 6. ÁRBOLES.

Francis Guthrie Planteo el problema de los cuatro colores, después de colorear el mapa de Inglaterra 9/15/2015 3

Métodos de Ordenamiento. Unidad VI: Estructura de datos

TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013

Caminos y Flujos optimales. Introducción a la Investigación de Operaciones 2007

CONTENIDO. Programación orientada a objetos - POO. Clases. Constructores y destructores. Definiciones. Entrada y salida

3. Indicar la salida por pantalla (2 puntos-15 minutos)

Estructuras de datos: Árboles binarios de

Búsqueda en e.e. --> reglas para elegir entre las ramas que con más probabilidad lleven a la solución.

Problema - Sumando Digitos

Estructuras de Datos. Montículos. Montículos. Montículos. Tema 3. Montículos. Definiciones básicas: Definiciones básicas:

Elementos de un programa en C

Figura 3.1. Grafo orientado.

Propedéutico de Programación

Programación Lineal. Modelo de Redes. Alcance de las aplicaciones. Curso: Investigación de Operaciones Ing. Javier Villatoro

STL: Standard Template Library

Introducción a C++ y Code::Blocks

Transcripción:

Árboles 1

Grafos Un grafo es un conjunto de nodos atados por un conjunto de ejes que conectan pares de nodos distintos (con un eje conectando un par de nodos.)

Árboles Un árbol es una colección no-vacía de vértices y ejes. Un vértice o nodo es un objeto simple que puede tener un nombre y información asociada. Un eje es una conexión entre dos vértices o nodos. Un camino en un árbol es una lista de vértices distintos sucesivos conectados por ejes. En un árbol hay solamente un camino conectando dos nodos. Si hay más de un camino conectando dos nodos, la estructura se llama grafo. Un conjunto disjunto de árboles se llama bosque. 2

Árboles como grafos Si empezamos en un nodo cualquiera, seguimos un eje hacia otro nodo, luego otro eje, etc, se dice que tenemos un camino simple. Un camino en que el nodo inicial y el nodo final son el mismo, se llama ciclo. Todo árbol es un grafo, pero cuáles grafos son árboles? Un grafo es un árbol ssi: G tiene N-1 ejes y no tiene ciclos. G tiene N-1 ejes y está conectado. Exactamente un camino simple conecta cada par de vértices en G. G está conectado, pero no permanece conectado al borrar un eje. 3

ejemplos

Árboles enraizados Es un nodo (llamado raíz) conectado a un conjunto de árboles enraizados El tipo más general de árboles es aquel en que no se distingue nodo raíz. 5

Árboles 6

Árboles ordenados Un árbol ordenado es un árbol con raíz en el cual el orden de todos los nodos hijos es especificado. Si cada nodo debe tener un número específico de hijos, se llama árbol M-nario. El más común entre estos es el árbol binario. Un árbol binario es un árbol ordenado con nodos internos con dos hijos. 8

Árboles binarios Un árbol binario es un nodo externo, o uno interno conectado a un par de árboles binarios, llamados el sub-árbol derecho y el sub-árbol izquierdo. Representación concreta para implementar árboles binarios: estructura con un link hacia el nodo derecho y un link hacia el nodo izquierdo. Similar a las listas ligadas. dos links en lugar de uno. link a NULL en nodos externos. 9

Árboles binarios Estructura parecida a una lista doblemente ligada. Operaciones simples con un árbol binario: insertar un nodo al final del árbol eliminar una hoja combinar dos árboles creando una nueva raíz 10

Árboles M-arios Un árbol M-ario es un nodo externo o interno conectado a una secuencia de árboles que también son M-arios. Estructura con M número de links a sus hijos y uno a su padre. Se puede usar un arreglo para almacenar los links ya que el valor de M es fijo. 11

Otra nomenclatura Un árbol binario lleno es un árbol en el que cada nodo tiene cero o dos hijos. Un árbol binario perfecto es un árbol binario lleno en el que todas las hojas (vértices con cero hijos) están a la misma profundidad (distancia desde la raíz, también llamada altura) 12

Árboles ordenados (árboles) 13

Árboles ordenados (árboles) Es un nodo (llamado raíz) conectado a una secuencia de árboles disjuntos (bósque). La diferencia con un árbol M- ario es que no tiene que tener un número definido de hijos. Se conocen también como árboles generalizados. Para definirlos se usan listas de links: una lista que guarda a sus hijos, otra que guarda a sus hermanos. 13

Arbol Ordenado link izquierdo apunta al hijo de la izquierda. link derecho apunta a su hermano derecho. Arbol Binario 12

Propiedades de los árboles binarios llenos (1) Propiedad 1: Un árbol binario con N nodos internos, tiene N+1 nodos externos. Prueba por inducción. para N=0 : un árbol binario sin nodos internos tiene un nodo externo. para N>0 : un árbol binario con N nodos internos tiene k nodos internos en el sub-árbol izquierdo y N-1-k nodos internos en el sub-arbol derecho. Entonces tiene k+1 nodos externos a la izquierda y N-k nodos externos a la derecha, por un total de N+1 nodos externos. 13

Propiedades de los árboles binarios llenos (2) Propiedad 2: Un árbol binario con N nodos internos, tiene 2N ligas o ejes: N-1 links a nodos internos y N+1 a nodos externos. En un árbol enraizado, todos los nodos, excepto la raíz, tienen un padre único y cada eje les conecta a su padre, entonces hay N-1 links conectando a padres de nodos internos. Cada uno de los N+1 nodos externos (de la propiedad anterior) tiene un link, a su padre. Por lo tanto hay 2N ligas. 14

Árboles binarios DEFINICIONES: El nivel de un nodo en un árbol es uno arriba del nivel de su padre (con la raíz en el nivel 0 por convención). La altura de un árbol es el máximo de niveles de los nodos del árbol. La longitud del camino es la suma de los niveles de todos los nodos del árbol. La longitud de camino interno es la suma de todos los niveles de todos los nodos internos del árbol. La longitud del camino externo es la suma de los niveles de todos los nodos externos. 15

Longitud de camino como descriptor de estructura de los árboles binarios 16

Propiedades de los árboles binarios llenos (3) Propiedad 3: Prueba: La longitud del camino externo de un árbol binario con N nodos internos es 2N mayor que la longitud del camino interno. Empezar con el árbol que consta de un nodo externo (cero nodos internos), repetir el siguiente proceso N veces: Tomar un nodo externo y reemplazarlo por un nuevo nodo interno con dos nodos externos como hijos. Si tomamos un nodo externo al nivel k, el largo del camino interno aumenta por k pero el camino externo aumenta por k+2 (es decir aumenta 2(k+1)-k). Como se hace N veces, el externo aumenta 2N. 17

Árboles binarios Aparecen en muchas aplicaciones dentro de las ciencias de la computación. Su desempeño es mejor cuando están balanceados. Ej. búsqueda binaria. Las propiedades nos dan la información necesaria para determinar algoritmos eficientes. 18

Jerarquía de un árbol nivel (depth) = 0 nivel (depth) = 1 nivel (depth) = 2 nivel (depth) = 3 19

Ejemplos de aplicación Sistemas de archivos 20

Ejemplos de aplicación árboles de decisión S/N 21

Ejemplo de interfase ADT de un árbol 22

Ejemplo de interfase ADT de un árbol 23

Ejemplo de interfase ADT de un árbol 24

Agregar nodos a un árbol Encontrar al padre deseado del nodo que queremos insertar Agregar el nodo a la lista de hijos de este padre. Se puede agregar un nodo a la vez o hacer un nuevo árbol con el número de nodos a insertar y agregar el sub-árbol. 25

Quitar nodos de un árbol Encontrar el nodo a remover y borrarlo de la lista. Esto borra el sub-árbol En caso de no querer borrar los hijos hay que re-agregarlos 26

Templates Simplificacion en código int max(int x, int y) { return (x < y)? y : x; } float max(float x, float y) { return (x < y)? y : x; } // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% template <typename T> T max(t x, T y) { return (x < y)? y : x; } Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates Simplificacion en código int max(int x, int y) { return (x < y)? y : x; } float max(float x, float y) { return (x < y)? y : x; } // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% template <typename T> T max(t x, T y) { return (x < y)? y : x; } Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates como lo usamos template <typename T> T max(t x, T y) {!T resultado = (x < y)? y : x; return resultado; }... int a,b,c; c = max <int> (a,b); float d,e,f; f = max <float> (d,e);... Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates como lo usamos template <typename T> T max(t x, T y) {!T resultado = (x < y)? y : x; return resultado; }... int a,b,c; c = max <int> (a,b); float d,e,f; f = max <float> (d,e);... Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates Mas ejemplos template <class T> class mypair { T values [2]; public: mypair (T first, T second) {!! values[0]=first; values[1]=second; }! T returnfirst(void){ return values[0]; } };... mypair<int> myobject (115, 36); mypair<double> myfloats (3.0, 2.18); Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates Mas ejemplos template <class T> class mypair { T values [2]; public: mypair (T first, T second) {!! values[0]=first; values[1]=second; }! T returnfirst(void){ return values[0]; } };... mypair<int> myobject (115, 36); mypair<double> myfloats (3.0, 2.18); Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates Funciones fuera de la clase template <class T> class mypair { T a, b; public: mypair (T first, T second)! {a=first; b=second;} T getmax (); }; template <class T> T mypair<t>::getmax () {! T retval;! retval = a>b? a : b;! return retval; } int main () {! mypair <int> myobject (100, 75);! cout << myobject.getmax();! return 0; } Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Templates Funciones fuera de la clase template <class T> class mypair { T a, b; public: mypair (T first, T second)! {a=first; b=second;} T getmax (); }; template <class T> T mypair<t>::getmax () {! T retval;! retval = a>b? a : b;! return retval; } int main () {! mypair <int> myobject (100, 75);! cout << myobject.getmax();! return 0; } Alonso Ramirez Manzanares Computación y Algoritmos 16.03

Nodo y lista template (1) template <class tipo> class node{! public:! typedef node<tipo>* link; private:! tipo* items;! link next; public:!! node(tipo itemarg1,tipo itemarg2,link nextarg){!! items = new tipo[2];!! items[0] = itemarg1;!! items[1] = itemarg2;!! next = nextarg;!! cout << "constructor" << items[0]<< items[1] << endl;! };! ~node(){!! cout << "destructor" << items[0]<< items[1] <<endl;!! delete items;! };!! }; Alonso Ramirez Manzanares Computación y Algoritmos 16.03 2

Nodo y lista template (2) template <class tipo> class lista{! typedef typename node<tipo>::link link;! link nodeptr;! public: void insert(link arg){!! link unomas; unomas = arg; nodeptr = arg; }!! }; Alonso Ramirez Manzanares Computación y Algoritmos 16.03 3

Nodo y lista template (2) int main(void){! node<int> a(1,2,null);! node<int> a2(3,4,&a);! node<int> a3(5,6,&a2);! node<int> a4(6,7,&a3);!! lista<int> lint;! lint.insert(&a);!!!! node<char> b('a','b',null);! node<char> b2('c','d',&b);!! lista<char> lchar;! lchar.insert(&b);!!! node<int>* unl = &a; } Alonso Ramirez Manzanares Computación y Algoritmos 16.03 4