ESTRUCTURAS DE DATOS Y ALGORITMOS

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

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

Á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.

Algoritmos y estructuras de datos

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

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

Ampliación de Estructuras de Datos

Profesor(a): Ing. Miriam Cerón Brito

Instituto de Computación - Facultad de Ingeniería - Universidad de la República

Árboles Binarios Ordenados Árboles AVL

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

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

Capítulo 6. ÁRBOLES.

Elementos de un programa en C

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

Unidad II: Análisis semántico

Árboles AVL. Laboratorio de Programación II

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

El lenguaje C. 1. Identificadores, constantes y variables

Estructuras de datos. Estructuras de datos

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

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

CAPÍTULO II SISTEMAS NUMÉRICOS. Este método de representar los números se llama sistema de numeración decimal, donde 10 es la base del sistema.

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

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

Computación II. Introducción a Visual Basic

MatemáticaDiscreta&Lógica 1

Estructuras de datos Árboles B

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

TIPO DE DATO ABSTRACTO (TDA)

2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

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.

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

TEORÍA DE GRAFOS Ingeniería de Sistemas

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Arboles Binarios de Búsqueda

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Clase 32: Árbol balanceado AVL

Guía práctica de estudio 06: Lenguaje binario

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Proyecto 6. Árboles de decisión: Un árbol de decisión es un modelo de predicción utilizado en el ámbito de la inteligencia artificial.

Estructuras de datos: Árboles binarios de

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Programación en java. Estructuras algorítmicas

Expresiones y sentencias

Estructura. Elementos Elemento: Intereses Diagrama. Contenido. Complemento de Intereses

OPERADORES Y EXPRESIONES

Escuela Politécnica Superior de Elche

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

Estructuras de Datos Abstractas en Lenguaje Java

Nota: Se entiende que el usuario no introducirá un divisor igual a cero.

FUNDAMENTOS DE INFORMÁTICA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

UNIDAD 9. DATOS COMPLEJOS PILAS

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

(d) Puede haber estrategias que funcionan mejor que Minimax si el contrincante es

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

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

(b) Cuál es la desventaja principal de una heurística con aprendizaje? es más informada que otra función heurística optimista h 2 *?

Práctica 1 de Excel (Curso )

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

GRAMATICAS LIBRES DEL CONTEXTO

Un. VI. Generador de código intermedio.

Datos y tipos de datos

Lección 2 Introducción al lenguaje C

I. E. NORMAL SUPERIOR SANTIAGO DE CALI ASIGNATURA DE TECNOLOGÍA E INFORMÁTICA LIC. CARLOS ANDRÉS CASTAÑEDA HENAO GRADO 8º

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

EJERCICIOS DE ÁRBOLES BINARIOS

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Las clases como tipos de datos definidos por el usuario

CAPÍTULO 4: VARIABLES Y RAZONES

TAD: Pila. TALLER: TAD Pila

Guía práctica de estudio 06: Lenguaje binario

Computación I Representación Interna Curso 2011

árbol como un conjunto de nodos y líneas

ULADECH Escuela Profesional de Contabilidad

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1


PHP: Lenguaje de programación

1. (F, +) es un grupo abeliano, denominado el grupo aditivo del campo.

Elementos Diagramas de Clases Clase:

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Programación. Test Autoevaluación Tema 3

OPTIMIZACIÓN DE CÓDIGO

UNIVERSIDAD DE GUADALAJARA

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Algoritmos y programas. Algoritmos y Estructuras de Datos I

4. Operadores Operador asignación

Manejo de Filas, Columnas, Celdas y Rangos

Transcripción:

ESTRUCTURAS DE DATOS Y ALGORITMOS CURSO 2009 PRÁCTICO 8 Nota: al igual que en los prácticos 6 y 7, en los problemas que siguen se usarán los tipos lista y árbol binario, como tipos abstractos, cada uno de ellos definido por un conjunto mínimo de funciones (constructoras, predicados y selectoras). Pruebe estos ejercicios en máquina, importando los módulos de lista y árbol binario, luego pruébelos con las diferentes implementaciones de los tipos abstractos. 1-2- 3- a) Escribir en C/C++ un módulo de definición para el Tipo Abstracto de Datos Árbol Binario de Naturales. Dar una especificación funcional mínima de constructores, predicados y selectores. b) Escribir en C/C++ un módulo de implementación para el TAD Árbol Binario de Naturales. Utilice la representación clásica de punteros para Árboles Binarios e implemente las operaciones. a) Demostrar que un árbol binario con todos los niveles completos y con n nodos internos (nodos que no son hojas) tiene n+1 nodos externos (nodos que son hojas). b) Demostrar que un árbol de n nodos tiene exactamente n-1 aristas. a) Si cada nodo de un Árbol Binario de Caracteres contiene una letra, la concatenación de las mismas en cada camino que va desde la raíz a una hoja representa una palabra. Escribir una función que devuelva una lista con todas las palabras almacenadas en un árbol binario. b) Escribir una función que dados: un Árbol Binario de Caracteres y un camino expresado en forma de Lista de Caracteres, determine si existe dicho camino en el árbol teniendo en cuenta que el camino debe comenzar en la raíz y terminar en una hoja. Por ejemplo, para el árbol que sigue existen los caminos m-q-t y m-d-k, pero no existen los caminos m-d, r-q-t ni d-k: m / \ q d / \ \ s t k 4- a) Escribir en C/C++ un módulo de definición para el Tipo Abstracto de Datos Expresiones Aritméticas de números enteros. Las operaciones permitidas son: el producto, la división, la suma y la resta. La especificación funcional mínima de constructores, predicados y selectores debe constar de las siguientes operaciones: TECNÓLOGO EN INFORMÁTICA 1

Expre* Constante(int x); /* Devuelve una expresión constante, es decir, que sólo contiene un valor * numérico Expre* ConsExpre(char o, Expre *l, Expre *r); /* Crea una expresión con el operador o y las subexpresiones l y r bool EsConstante(Expre *e); /* Determina si una expresión es constante char OperadorExpre(Expre *e); /* Devuelve el operador de una expresión que no es constante int ValorExpre(Expre *e); /* Devuelve el valor de una expresión constante Expre* IzquierdaExpre(Expre *e); /* Devuelve la subexpresión izquierda de una expresión que no es constante Expre* DerechaExpre(Expre *e); /*Devuelve la subexpresión derecha de una expresión que no es constante b) Escribir en C/C++ un módulo de implementación para el TAD Expresiones Aritméticas. Utilice la representación clásica de punteros para Árboles Binarios e implemente las operaciones. c) Implementar la operación de evaluación de Expresiones Aritméticas, usando sólo las operaciones definidas en la parte a): int EvaluarExpre(Expre *e); /* Devuelve el valor de una expresión aritmética 5-6- a) Escribir en C/C++ un módulo de definición para el Tipo Abstracto de Datos Árbol Binario de Búsqueda de Naturales. Dar una especificación funcional mínima de constructores, predicados y selectores. b) Escribir en C/C++ un módulo de implementación para el TAD Árbol Binario de Búsqueda de Naturales. Utilice la representación clásica de punteros de Árbol Binario de Búsqueda e implemente las operaciones. a) Agregar a la especificación de Árbol Binario de Búsqueda de Naturales del ejercicio 5 la siguiente operación: kmenor, que dado un natural k retorna el subárbol que tiene al k-ésimo menor elemento del árbol como raíz, si éste existe. Si no hay al menos k elementos en el árbol o k es cero, la función debe retornar el árbol vacío. Si k es 1, nos referimos al menor elemento del árbol, si k es 2 al segundo elemento más pequeño del árbol y así sucesivamente. TECNÓLOGO EN INFORMÁTICA 2

b) Implementar el TAD Árbol Binario de Búsqueda extendido de tal manera que la operación de inserción y la función kmenor recorran a lo sumo un camino del árbol (desde la raíz a una hoja). Para esto considere una representación donde cada nodo del árbol almacene adicionalmente al dato la cantidad de elementos en su subárbol izquierdo más 1. Ejemplo: 7- a) Definir una función que dado un Árbol Binario retorne TRUE si, y solamente si, el árbol es un Árbol Binario de Búsqueda. b) Un Árbol Binario de Búsqueda es un AVL si para cada nodo del árbol se cumple que las alturas de sus subárboles izquierdo y derecho difieren a lo sumo en uno. El árbol vacío es un AVL. Definir una función que dado un Árbol Binario de Búsqueda de Naturales retorne TRUE si, y solamente si, el árbol es un AVL. 8- a) Escribir en C/C++ un módulo de definición para el Tipo Abstracto de Datos Árbol Finitario de Naturales. La especificación funcional mínima de constructores, predicados y selectores debe constar de las siguientes operaciones: FTree* NullFTree(); /* Devuelve el árbol vacío FTree* ConsFTree(unsigned int k, ListFTree* l); /* Crea un árbol no vacío a partir de un natural y una lista de hijos * (subárboles) TECNÓLOGO EN INFORMÁTICA 3

bool IsEmptyFTree(FTree *t); /* Determina si un árbol dado es o no vacío unsigned int RootFTree(FTree *t); /* Devuelve el valor en la raíz de un árbol no vacío ListFTree* OffspringFTree(FTree *t); /* Devuelve la lista de hijos de un árbol no vacío ListFTree* SiblingsFTree(FTree *t); /* Devuelve la lista de hermanos de un árbol no vacío Nota: se puede considerar que el TAD ListFTree está definido e implementado. b) Escribir en C/C++ un módulo de implementación para el TAD Árbol Finitario de Naturales e implementar las operaciones. Utilice la representación de Lista de hijos, Lista de hermanos donde cada nodo tiene 2 punteros uno de los cuales indica el siguiente hermano en la lista de hermanos y otro que indica el comienzo de la lista de hijos, esta representación es similar a la representación clásica de punteros de Árbol Binario (debido a que cada nodo tiene información y 2 punteros) pero difiere en el uso que se les da a los punteros. c) Agregar las siguientes operaciones al TAD Árbol Finitario de Naturales: FTree* CreateFTree(unsigned inr x ) ; /* Crea un árbol no vacío, que no tiene hijos, con x en la raiz FTree* AddOffspringFTree( FTree *t, FTree *s); /* Agrega a t un hijo s FTree* DeleteOffspringFTree( FTree *t,unsigned int x); /* Elimina de t el único hijo que contiene en la raíz a x Nota: implementar estas operaciones, basándose en la representación dada en la parte b. Considerar que no se repite la información de los nodos. 9- Se definen las recorridas en InOrden, PreOrden y PostOrden para Árboles Finitarios como sigue: InOrden: visita el hijo más a la izquierda, luego a la raíz y luego al resto de los hijos de izquierda a derecha. PreOrden: visita primero la raíz y luego los hijos de izquierda a derecha. PostOrden: visita de izquierda a derecha a los hijos y luego a la raíz. TECNÓLOGO EN INFORMÁTICA 4

a) Mostrar los resultados de las tres recorridas sobre el siguiente árbol: b) Escribir un procedimiento que realice la recorrida en InOrden de un Árbol Finitario. c) Escribir un procedimiento que realice la recorrida en PreOrden de un Árbol Finitario. d) Escribir un procedimiento que realice la recorrida en PostOrden de un Árbol Finitario. 10- Se quiere representar los descendientes de una persona. Esto es, los hijos de la persona, los descendientes de sus hijos (nietos) y así sucesivamente. Cada persona está identificada por su nombre, es decir que los nombres no se repiten. a) Justificar porque un Árbol Binario no modela adecuadamente este tipo de información y un Árbol Finitario sí lo hace. Explicar que dato o datos debe contener dicho Árbol. b) Dada la estructura que representa los descendientes de una persona implementar las siguientes operaciones: i. Dado el nombre de un descendiente indicar cuantas generaciones los separan. ii. Imprimir los nombres de sus descendientes por generaciones. iii. Indicar la cantidad de generaciones máxima que lo separan de un descendiente. iv. Devolver la cantidad de descendientes que no tienen descendencia propia. Nota: para la parte b. debe utilizar el TAD auxiliar Cola de Árboles Finitarios especificando sus operaciones. Puede suponerlo implementado. TECNÓLOGO EN INFORMÁTICA 5