Arboles Binarios de expresiones

Slides:



Advertisements
Presentaciones similares
5. Estructuras no lineales estáticas y dinámicas
Advertisements

Equipo #3 Unidad III: ALU Efraín Corral Eduardo Castillo Elías Alarcón
ESTRUCTURA DE DATOS Unidad 03 PILAS.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
Clase 2 Tipos de datos Asignación de valores Estructura IF Ejercicios
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
Elementos de Pascal Escribir un programa en Pascal que lea los valores de los catetos de un triángulo rectángulo y calcule y muestre la hipotenusa. program.
Estructuras de Control
Técnico en programación de Software
Operaciones sobre un árbol
PROGRAMACION DE ESTRUCTURAS DE DATOS
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
Teoría de lenguajes y compiladores
ÁRBOLES DE EXPRESION.
Programación.
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
Teoría de lenguajes y compiladores
Tema Nº4.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
APLICACIONES DE PILAS Estructuras de Datos.
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Programación de Computadores
EXPONENTES Y RADICALES
ÁRBOLES BINARIOS DE BÚSQUEDA
Sistemas de Numeración
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Estructuras de Datos MC Beatriz Beltrán Martínez.
Programación en Matlab
Unidad III Elementos del lenguaje C++
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Estructura de Datos y Algoritmos
ARBOLES ESTRUCTURAS DE DATOS.
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
ESTRUCTURA DE DATOS ESD-243
Material de apoyo Unidad 4 Estructura de datos
Aplicación de estructuras de datos
Radicales y sus operaciones
Árboles Binarios Estructuras de Datos.
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Numeración Decimal..
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
NÚMEROS REALES.
Departamento de Informática Universidad Técnica Federico Santa María Temas 2,3,4: Estructura de un Programa Pascal Declaraciones Tipos de Datos Simples.
Elementos básicos para el desarrollo de algoritmos
Punteros Recomendado: 1. Nivelación Funciones
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
Punteros, referencias Listas enlazadas Arboles
Introducción a Excel Fórmulas
INSTITUTO TECNOLOGICO DE APIZACO
Presente un cuestionario con los aspectos mas importantes sobre los
Estructura: COLA Profesor: Ing. Erick López Ch. M.R.I.
Estructuras de Decisión
Lic. Carla Aguirre Montalvo
Conceptos Generales Programación I Docente: Ing. Marleny Soria M.
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.
Programación I Docente: Ing. Marleny Soria M..  Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar.
Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación ENSAMBLADOR MC BEATRIZ BELTRÁN MARTÍNEZ.
Algorítmica y Programación
Conceptos Generales PROGRAMACIÓN I DOCENTE: ING. MARLENY SORIA M. 1.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Listas Dinámicas.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Estructuras de Decisión en Visual Basic 6.0
1 Índice del libro Números naturales 1.Números naturalesNúmeros naturales 2.Sistema de numeración decimalSistema de numeración decimal 3.Operaciones.
Ing. Barros Rodriguez D. Ronald Introducción a la Programacón.
Transcripción de la presentación:

Arboles Binarios de expresiones

Estructuras de Datos y Algoritmos Observemos cómo las expresiones binario y árbol sugieren que los árboles binarios tienen algo en común con las expresiones aritméticas: ¿Por qué? Las expresiones aritméticas están formadas por valores, sobre los que pueden ejecutarse operaciones binarias (suma, resta, multiplicación y división). Cada nodo de un árbol binarios puede tener a lo sumo dos hijos, con lo que podemos representar una expresión binaria simple como un árbol binario de dos niveles. La raiz contiene el operador, y los dos hijos contienen los operandos: = 8 + 6 = 5 - 2 = 3 * 7 = 9 / 3 Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Cuando escribimos una expresión en notación infija, debemos utilizar paréntesis y un orden de precedencia para resolver su cálculo. Por ejemplo, si tenemos D= A+B*C, sabemos por jerarquía de operadores que primero calcula B*C, y ese resultado lo suma a A. Pero si lo que queremos es multiplicar la suma de A y B, por C, debemos escribir D=(A+B) *C. Si utilizamos un árbol binario, esto no es necesario, porque los niveles determinan la precedencia, así, en nuestro caso será: Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Veamos en el pizarrón cómo se evalúa cada uno de los siguientes árboles Valor2 / 69 + * 3 8 5 Valor1 + 9 4 * 78 - 27 Estructuras de Datos y Algoritmos

Evaluación de una expresión Operando1 OperadorBin Operando2 Desarrollaremos una función para evaluar un árbol binario de una expresión. Sabemos que el valor del árbol completo es igual a: Operando1 OperadorBin Operando2 Siendo OperadorBin uno de los operadores binarios (+, -, *, /) en el nodo raiz, Operando1 es el valor del subárbol izquierdo, y Operando2 es el valor del subárbol derecho. Y cuál es el valor del subárbol izquierdo? O es un simple valor, o es una expresión que debemos evaluarla, y así seguiremos descubriendo que nuestra función será recursiva. Lo mismo para el subárbol derecho. Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Función Eval Objetivo: Evaluar la expresión representada por el árbol binario. Tamaño: El árbol completo apuntado por Arbol Caso base: Si el contenido del nodo es un operando, entonces Eval ←el valor del operando Caso general: Si el contenido del nodo es un operador entonces eval ← eval(subarbol izquierdo) OperadorBin eval(subarbol derecho) Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Esa descripción nos conduce al siguiente algoritmo para la función Eval: Función Eval if info(Arbol) es un operando then Eval← Info(Arbol) else -- es un operador case Info(Arbol) is when '+' => Eval ← Eval(Izquierda(Arbol)) + Eval(Derecha(Arbol)); when '*‘ => Eval ← Eval(Izquierda(Arbol)) * Eval(Derecha(Arbol)); when '-' => Eval ← Eval(Izquierda(Arbol)) - Eval(Derecha(Arbol)); when '/' => Eval ← Eval(Izquierda(Arbol)) / Eval(Derecha(Arbol)); when others =>-- no hacer nada; end case; Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Una implementación en ADA, para evaluar una expresión almacenada en un árbol binario de expresiones en el que cada nodo contiene un carácter es: function Eval(Arbol:T_Arbol) return Integer is X: Integer; begin if Is_Digit(Arbol.Info) then X:=Character'Pos(Arbol.Info) - 48; else case Arbol.Info is when '+' => X:=Eval(Arbol.Izquierdo)+Eval(Arbol.Derecho); when '*'=> X:=Eval(Arbol.Izquierdo)*Eval(Arbol.Derecho); when '-' => X:=Eval(Arbol.Izquierdo)-Eval(Arbol.Derecho); when '/' => X:=Eval(Arbol.Izquierdo)/Eval(Arbol.Derecho); when others =>null; end case; end if; return X; end; Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Pero si queremos generalizar el campo info, de manera que pueda almacenar un operando (valor numérico entero o real) o un operador (carácter), podemos representar esa información utilizando un registro con campo variante, de la siguiente manera: type T_Info is (Operador, Operando); type Tipo_Elemento is (Contenido:T_Info) is record Izquierdo, Derecho: T_Arbol; case Contenido is when Operador => Oper:Character; when Operando => Val:Float; -- o Integer, según sea el tipo de los -- operandos when others => null; end case; end record; Estructuras de Datos y Algoritmos

Construcción del Arbol Binario de una expresión Recordamos que en la aplicación de pilas vimos cómo evaluar una expresión en notación infija . El mismo esquema algorítmico se utiliza para convertir una expresión de infija a prefija. Esto lo destacamos porque vamos a partir de una expresión prefija para la construcción del árbol binario de expresiones. El formato básico de la expresión prefija es: OperadorBin Operando1 Operando2 Por ejemplo, si tenemos * A B , el operador * irá en el nodo raiz, y de los operandos , A irá a la izquierda y B a la derecha. ¿Qué pasa si uno de los operandos es una expresión? Por ejemplo * + A F G. [Equivalente a (A+F) * G ] Otra vez el operador * irá en el nodo raíz, luego el Operador + irá a su izquierda, como raiz de la expresión A+F, por lo que A y F serán sus hijos, y luego G será el hijo derecho del operador *. Para hacer este enlace con * deberemos volver atrás, en orden. Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos El método general que utilizaremos para poner nodos en el árbol es el siguiente: Insertaremos nuevos nodos, cada vez moviéndonos hacia la izquierda hasta que pongamos un operando. Volvemos atrás hasta el último operador insertado Poner el siguiente nodo a su derecha Repetir de la misma forma desde el paso 1, hasta que se ingrese el último operando. Obviamente que necesitaremos una pila para almacenar los punteros a los operadores, y una marca para controlar los movimientos. A ésta la llamaremos sigMovimiento, denotando a izquierda cuando el nodo actual es un operador, y a derecha cuando es un operando Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos procedure Construirarbol(Cadenapref: in out Tipoprefija;Raizarbol : in out Tipoarbol) is Ultimosimbolo : constant Character:=';'; type Movimiento is (Izquierdo,Derecho); Ptrpila:Tipopila; Sigmov:Movimiento; Ultimo,Nuevonodo: Tipoarbol; Simbolo:Character; procedure Obtenersimbolo(Cadenapref: in out Tipoprefija;Simbolo:in out Character) is begin Simbolo:=Cadenapref(1); Delete(Cadenapref,1,1); end; Obtenersimbolo(Cadenapref,Simbolo); Nuevonodo:= new Tiponodo'(Simbolo,null,null); Raizarbol:=Nuevonodo; Sigmov:=Izquierdo; while Simbolo/= Ultimosimbolo loop Ultimo:=Nuevonodo; if Sigmov=Izquierdo then Ultimo.Izquierdo:=Nuevonodo; Insertar(Ptrpila,Ultimo); else Suprimir(Ptrpila,Ultimo); Ultimo.Derecho:=Nuevonodo; end if; case Simbolo is when '*'|'+'|'-'|'/'=> Sigmov:=Izquierdo; when others =>Nuevonodo.Izquierdo:=null; Nuevonodo.Derecho:=null; Sigmov:=Derecho; end case; end loop; end Construirarbol; Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Seguiremos el algoritmo con una expresión sencilla: * + A – B C D El primer símbolo es el * y con él construimos el nodo raíz. En ese momento, antes del bucle, cuando obtenemos el siguiente símbolo nuestro árbol y todas las variables involucradas quedan así: Antes de la primera iteración del bucle: PtrPila Raiz * NuevoNodo * + A – B C D ; sigMovimiento=Izquierdo simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Siguiendo la secuencia del bucle: Raiz * UltimoNodo PtrPila UltimoNodo + NuevoNodo * + A – B C D ; sigMovimiento=Izquierdo simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Sigue el bucle porque simbolo /= ‘;’ Raiz * UltimoNodo0 + UltimoNodo1 UltimoNodo0 PtrPila UltimoNodo1 A NuevoNodo * + A – B C D ; sigMovimiento=Derecho simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Sigue el bucle porque simbolo /= ‘;’ Raiz * UltimoNodo0 + UltimoNodo0 PtrPila UltimoNodo1 A - NuevoNodo * + A – B C D ; sigMovimiento=Izquierdo simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Al final de la cuarta iteración del bucle: Raiz * UltimoNodo0 + UltimoNodo2 UltimoNodo0 PtrPila A - UltimoNodo2 B NuevoNodo * + A – B C D ; sigMovimiento=Derecho simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos El siguiente nodo será añadido a la derecha del UltimoNodo2 Raiz * UltimoNodo0 + UltimoNodo0 PtrPila A - UltimoNodo2 B C NuevoNodo * + A – B C D ; sigMovimiento=Derecho simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos El siguiente nodo será añadido a la derecha del UltimoNodo0 Raiz * UltimoNodo0 D + PtrPila NuevoNodo A - B C * + A – B C D ; sigMovimiento=Derecho simbolo Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos El siguiente símbolo es el carácter de último símbolo, por lo que se sale del proceso. Veamos un programa en ejecución: Estructuras de Datos y Algoritmos