ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Documentos relacionados
ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

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 de sistemas Árboles

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

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

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

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Nombre-Apellidos:

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

EDA. Tema 8 Colas de Prioridad: Heaps

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

Programación de sistemas

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

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C)

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

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

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

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

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

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

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

Programación Estructuras Arborescentes

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

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

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

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

Listas enlazadas. Programación de Sistemas

PROGRAMACIÓN GENÉRICA

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Programación de sistemas

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

Estructuras de Datos. 14 de junio de Apellidos

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

Programación de sistemas Listas enlazadas

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

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

Ejercicio 1 (proyecto prlistas, paquete listas)

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

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

2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n).

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 80M, 2014/ de Marzo de

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

Segundo parcial de Programación 2

Fundamentos de Programación

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

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

LEA ATENTAMENTE ESTAS INSTRUCCIONES ANTES DE COMENZAR LA PRUEBA

Examen Teórico Convocatoria de Junio de 2012

Tema 2: Clases y Objetos

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Programación II Arboles Binarios(AB)

Examen escrito de Programación 1

Tema 7: Árbol Binario

Roberto Carlos Abreu Díaz. October 28, 2009

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

Tema: Métodos de Ordenamiento. Parte 3.

Estructuras de datos: Árboles binarios de

Tema: ARBOLES. Instructor: MC. Gerardo Gálvez Gámez Junio de 2018 INTRODUCCIÓN:

Segundo Parcial de Programación 2 7 de junio de 2017

La clase Grafo. 4 Algoritmos de recorrido de grafos. La clase Vertice. Tema 9: GRAFOS Segunda Parte Estructuras de Datos y Algoritmos Curso 2002/03

Tema 09: TAD Árbol binario

Implementación de las Clases Pila, Cola, Lista y Arbol

Examen Teórico. Convocatoria de Julio de 2015

Introducción a Árboles Árboles Binarios

SEGUNDO EXAMEN PARCIAL ESTRUCTURA DE DATOS Y ALGORITMOS 27 MARZO 2014 (Grupo 81M Leganés Mañana)

INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00924C)

Tema 4- Representación Enlazada

Estructuras dinámicas lineales (i)

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

95.12 Algoritmos y Programación II Práctica 7: árboles

Estructuras de datos y algoritmos

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

Introducción: una simple colección

Estructuras de Datos Clase 10 Árboles binarios

Nombre:... Apellidos:...

Tema 8- Implementación de Pila, Cola y. Tema 8- Implementación de Pila, Cola y Lista con Punto de Interés. Representación Eficaz de una EDA

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

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

ESTRUCTURAS DE DATOS Y ALGORITMOS

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

Fundamentos de Programación

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Programación de sistemas Pilas y Colas

Estructura de Datos. Índice

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

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

TEMA 4. Árboles CONSIDERACIONES GENERALES.

Programación de Sistemas GIT, GISC, GISA, GITT

Implementación de las Clases Pila, Cola, Lista y Arbol

Tema 4 Colecciones en Java. Programación Orientada a Objetos Curso 2013/2014

Entiendo los métodos de Java equals y hashcode

Transcripción:

Nombre y apellidos: Nota: NOTA FINAL: Nota Practica (1 punto) + Nota Examen (9 punto) Es indispensable aprobar el examen (4,5 puntos) para aprobar la asignatura (5 puntos) La práctica es opcional Duración: 3 horas No está permitido el uso de apuntes, libros o móviles Todos los alumnos implicados en una copia de un ejercicio tendrán una nota final de 0. El alumno es responsable de velar por su examen. Es decir tanto el que copia como el que se deja copiar (ya sea de manera activa o pasiva) recibirán el mismo castigo sin que exista atenuante alguno Publicación de las notas: 15-2-2009 Revisión del examen: 16-2-2009, 15:00-18:00 1. Ejercicio (2 puntos) a) Una función hash: A. Asigna a una clave una posición en una tabla B. Coloca el valor asociado a una clave dentro de una tabla C. Resuelve los conflictos provocados por claves idénticas D. Cambia el valor de una clave al de un índice dentro de la tabla b) Se han insertado un conjunto de datos en una estructura de datos para su procesamiento. Debido a la característica de la estructura de datos, después de la inserción los datos están siendo procesados en orden inverso al orden de inserción. Qué estructura de datos se está utilizando? Pila c) Si consideramos básica la operación vacíar sobre pilas que vacía completamente una pila y la implementamos en Java: A. La operación implementada con arrays requiere del recorrido de todo el array y mediante listas enlazadas de solo una operación. B. La operación implementada con arrays y mediante listas enlazadas requieren una sola operación. C. La operación implementada con arrays y mediante listas enlazadas requiere recorrer todo la estructura. D. No es válida ninguna de las anteriores. d) Explica cuando, como y donde se debe implementar el método equals. El método equals se suele utilizar para la comparación de dos objetos y se implementa en la clase del objeto que se quiere comparar. Para ello, recibe por parámetro el objeto a comparar con el objeto actual y se comparan aquellos atributos que son suficientes para decidir si un objeto es igual a otro. Dicho esto, en los programas complejos dónde normalmente se tienen que gestionar un conjunto de datos o información, es decir objetos, estas se organizan o almacenan en estructuras de datos. A menudo se realizan operaciones de búsqueda y/o eliminación en las estructuras de datos, los cuales requieren o delegan la comparación de dos objetos en el método equals. Por tanto, vuelvo a comentar que este método se implementaría en la clase que represente la información del problema en cuestión.

Nombre y apellidos: Nota: NOTA FINAL: Nota Practica (1 punto) + Nota Examen (9 punto) Es indispensable aprobar el examen (4,5 puntos) para aprobar la asignatura (5 puntos) La práctica es opcional Duración: 3 horas No está permitido el uso de apuntes, libros o móviles Todos los alumnos implicados en una copia de un ejercicio tendrán una nota final de 0. El alumno es responsable de velar por su examen. Es decir tanto el que copia como el que se deja copiar (ya sea de manera activa o pasiva) recibirán el mismo castigo sin que exista atenuante alguno Publicación de las notas: 15-2-2009 Revisión del examen: 16-2-2009, 15:00-18:00 1. Ejercicio (2 puntos) a) Si consideramos básica la operación vacíar sobre pilas que vacía completamente una pila y la implementamos en Java: A. La operación implementada con arrays requiere del recorrido de todo el array y mediante listas enlazadas de solo una operación. B. La operación implementada con arrays y mediante listas enlazadas requieren una sola operación. C. La operación implementada con arrays y mediante listas enlazadas requiere recorrer todo la estructura. D. No es válida ninguna de las anteriores. b) Se han insertado un conjunto de datos en una estructura de datos para su procesamiento. Debido a la característica de la estructura de datos, después de la inserción los datos están siendo procesados en orden inverso al orden de inserción. Qué estructura de datos se está utilizando? Pila c) Una función hash: A. Asigna a una clave una posición en una tabla B. Coloca el valor asociado a una clave dentro de una tabla C. Resuelve los conflictos provocados por claves idénticas D. Cambia el valor de una clave al de un índice dentro de la tabla d) Explica cuando, como y donde se debe implementar el método equals. El método equals se suele utilizar para la comparación de dos objetos y se implementa en la clase del objeto que se quiere comparar. Para ello, recibe por parámetro el objeto a comparar con el objeto actual y se comparan aquellos atributos que son suficientes para decidir si un objeto es igual a otro. Dicho esto, en los programas complejos dónde normalmente se tienen que gestionar un conjunto de datos o información, es decir objetos, estas se organizan o almacenan en estructuras de datos. A menudo se realizan operaciones de búsqueda y/o eliminación en las estructuras de datos, los cuales requieren o delegan la comparación de dos objetos en el método equals. Por tanto, vuelvo a comentar que este método se implementaría en la clase que represente la información del problema en cuestión.

Nombre y apellidos: NOTA FINAL: Nota Practica (1 punto) + Nota Examen (9 punto) Es indispensable aprobar el examen (4,5 puntos) para aprobar la asignatura (5 puntos) La práctica es opcional Duración: 3 horas No está permitido el uso de apuntes, libros o móviles Todos los alumnos implicados en una copia de un ejercicio tendrán una nota final de 0. El alumno es responsable de velar por su examen. Es decir tanto el que copia como el que se deja copiar (ya sea de manera activa o pasiva) recibirán el mismo castigo sin que exista atenuante alguno Publicación de las notas: 15-2-2009 Revisión del examen: 16-2-2009, 15:00-18:00 2. Ejercicio (3 puntos) Dada la siguiente especificación de las clases BTNode, BinTree y BinTreeItr: public class BinTreeItr{ BTNode current; BinTree btree; public class BinTree{ BTNode root; public class BTNode{ Object content; BTNode left; BTNode right; Nota: Todo método necesario tendrá que ser implementado. Especificar, diseñar e implementar un método recursivo que dado un árbol binario de enteros, calcule y devuelva cual es la longitud del camino que mayor coste supone recorrerla. En caso de que haya más de un camino con el mismo coste, entonces devolver el de menor longitud. Un camino es la secuencia de arcos que une dos nodos de un árbol una secuencia de nodos en la que cada nodo es adyacente al siguiente. Mientras, la longitud de un camino entre dos nodos es el número de arcos presentes entre ambs nodos. Cada nodo del árbol puede ser alcanzado (se llega a él) siguiendo un único camino que comienza en el nodo raíz y su contenido (el entero) representa el coste de visitarlo. Además, visitar los nodos derechos cuesta el doble que visitar los izquierdos, mientras el coste del nodo raíz siempre es 0. int longitudcaminocostemaximo(); Ejemplos: 0 0 0 1 2 1 2 2 2 2 1 2 2 2 1 Longitud = 1 Longitud = 2 Longitud = 1

1. Especificar / Parametrizar Entrada: A, un arbol binario. Salida: un entero, que representa la longitud del camino de mayor coste public int longitudcaminocostemaximo(); A la hora de tratar un nodo del árbol y poder calcular la longitud del camino de mayor coste, debemos de conocer tres cosas: 1) si el nodo actual es izquierdo o derecho, para poder calcular el coste total que supone visitar dicho nodo; 2) el coste máximo de recorrer uno de los caminos de los subárboles izquierdo y/o derecho; y 3) la longitud minima de los caminos de los subárboles izquierdo y/o derecho cuyo recorrido suponga el coste máximo INMERSION Entrada: A, un arbol binario y esizquierdo, un booleano que representa si la raíz de A es izquierdo o derecho. Salida: dos enteros. El primero representa el coste máximo de recorrer uno de los caminos del árbol A y el segundo representa la longitud minima de los caminos cuyo recorrido suponga el coste máximo. Se necesita una clase Contexto para poder devolver dos valores: public class Contexto { int coste; int longitud; private Contexto longitudcaminocostemaximo1(btnode A,boolean esderecho); 2. Diseño Casos triviales Si esvacio (A) devolver new Contexto(0,0) Si eshoja (A) y no(esderecho) devolver new Contexto(raiz(A), 0) Si eshoja (A) y esderecho devolver new Contexto(2*raiz(A), 0) Caso General Si No Hoja (A) costea = (esderecho? 2 : 1) * raiz(a); contextoizq = longitudcaminocostemaximo1 (subarbolizq(a), true); contextodch = longitudcaminocostemaximo1 (subarboldch(a), false); Si (contextoizq. coste > contextodch.coste) entonces coste = contextoizq.coste + costea; longitud = contextoizq.longitud + 1; si no (contextoizq. coste < contextodch.coste) entonces coste = contextodch. coste + costea; longitud = contextodch.longitud + 1; si no coste = contextodch. coste + costea; longitud = minimo(contextoizq.longitud, contextodch.longitud) + 1; fin si contexto = new Contexto(coste, longitud); devolver contexto;

3-Implementación public int longitudcaminocostemaximo() { Contexto contexto = longitudcaminocostemaximo1 (btree.root, false); return contexto.longitud; private Contexto longitudcaminocostemaximo1(btnode A, boolean esizquierdo) { int coste, longitud; if (A==null) return new Contexto(0, 0); else if ((A.left==null) && (A.right==null) ) { coste = (esizquierdo? 2 : 1) * A.content; return new Contexto(coste, 0); else { int costea = (esizquierdo? 2 : 1) * ((Integer)A.content).intValue(); Contexto contextoizq = longitudcaminocostemaximo1(a.left, true); Contexto contextodch = longitudcaminocostemaximo1(a.right, false); if (contextoizq.coste > contextodch.coste){ coste = contextoizq.coste + costea; longitud = contextoizq.longitud + 1; else if (contextoizq.coste < contextodch.coste){ coste = contextodch.coste + costea; longitud = contextodch.longitud + 1; else { //el coste maximo es el mismo coste = contextodch.coste + costea; longitud = Math.min(contextoIzq.longitud,contextoDch.longitud)+1; Contexto contexto = new Contexto(coste, longitud); return contexto; public class Contexto { int coste, longitud; public Contexto(int coste, int longitud) { this. altura = altura; this.es_lleno = es_lleno;

3. Ejercicio (4 puntos) Desarrollar un sistema informático que modele el comportamiento de un mercado de trabajo simplificado, donde las personas pueden ser contratadas y despedidas por empresas de forma muy fácil y a menudo. Una persona puede estar trabajando en una empresa o no, y una empresa, como es lógico, tiene contratado a varias personas. Comentar que todas las personas tienen distinto dni, lo mismo que, todas las empresas tienen distinto nif. Para ello suponemos disponibles la implementación de las siguientes clases, todas ellas equipadas con operaciones de acceso, igualdad (equals) y orden (implementan la interfaz Comparable, es decir, el método compareto): Persona que sirve para almacenar y gestionar la información sobre una persona (dni, nombre, dirección, edad) Empresa que sirve para almacenar y gestionar la información sobre una empresa (nif, nombre, dirección). Se pide: a) Diseña e implementa la estructura de la clase Mercado, cuya misión es gestionar la información sobre el mercado de trabajo, teniendo en cuenta as características del problema y las estructuras de datos vistas en clase. También implementa las clases necesarias para representar las relaciones entre la información a gestionar. Nota: no implementes ni modifiques las clases Persona y Empresa. b) Implementa las siguientes operaciones públicas de la clase Mercado: Constructor: Genera un mercado vacío, sin ninguna información. contrata: Altera un mercado, efectuando la contratación de cierta persona como empleado de cierta empresa. despide: Altera un mercado, efectuando el despido de cierta persona que era antes empleado de cierta empresa. empleados: Consulta los empleados de una empresa, devolviendo como resultado un array ordenado de personas. esempleado: Averigua si es cierto o no que una persona dada es empleado de una empresa dada. Nota: No es necesario implementar los métodos típicos de cualquier estructura de datos que hayamos visto en clase, siempre que se utilicen los nombres habituales.

a) Por un lado voy a necesitar dos nuevas clases (Empleado, EmpresaEmpleados) para representar las relaciones entre objetos Empresa y Persona. La primera clase (Empleado) representará que una persona es empleada de una determinada empresa. LA segunda clase (EmpresaEmpleados) representará cuales son los empleados (objetos de tipo Persona) de una determinada empresa. Public class Empleado implements Entry{ private Persona empleado; private Empresa empresa; Public class EmpresaEmpleados implements Entry{ private Empresa empresa; private Hashtable empleados; // Se van a almacenar objetos de tipo Persona, el cual requiere implementar la interfaz Entry Por otro lado, estas relaciones son básicamente la información que va a gestionar la clase Mercado. Para la organización de dicha información, utilizaremos dos tablas hash (empresas y empleados) porque las contrataciones y despidos que se van a producir en un mercado van a ser frecuentes y esto requiere que las operaciones de la clase Mercado sean lo más eficientes posibles. Public class Mercado{ Private Hashtable empresas; // se van a almacenar objetos de tipo EmpresaEmpleados y // en ella se requiere implementar la interfaz Entry Private Hashtable empleados; //se van a almacenar objetos de tipo Empleado y // en ella se requiere implementar la interfaz Entry b) /** * PRE: la persona p no es empleada de la empresa e */ public void contrata(persona persona, Empresa empresa) { //implementado en la clase Mercado Empleado empleado = new Empleado(persona, empresa); empleados.put(empleado.getkey(), empleado.getvalue()); EmpresaEmpleados empresaempleados = null; //verificar si la empresa existe If (empresas.exist(empresa.getkey())) empresaempleados = (EmpresaEmpleados) empresas.get(empresa.getkey()); else empresaempleados = new EmpresaEmpleados(empresa); empresaempleados.contrata(persona); public void contrata(persona persona){ // implementado en la clase EmpresaEmpleados empleados.put(persona.getkey(), persona.getvalue()); /** * PRE: la persona p es empleada de alguna empresa */ public void despide(persona persona){ //implementado en la clase Mercado Empleado empleado = (Empleado) empleados.get(persona.getkey()); EmpresaEmpleados empresaempleados = (EmpresaEmpleados) empresas.get(empleado.getempresa().getkey()); empresaempleados.despide(persona); empleados.remove(persona.getkey()); public void despide(persona persona){ // implementado en la clase EmpresaEmpleados empleados.remove(persona.getkey());

public Persona[] empleados(empresa empresa){ //verificar si la empresa existe If (empresas.exist(empresa)) { empresaempleados = (EmpresaEmpleados) empresas.get(empresa); Persona[] personas = empresaempleados.getarrayempleados(); //no están ordenados selectionsort(personas) // usar cualquier otro algoritmo de ordenación es valido return personas; else return new Persona[0]; public Persona[] getarrayempleados (){ //implementado en la clase EmpresaEmpleados Persona[] personas = new Persona[empleados.size()]; Enumeration valores = empleados.getvalues(); int pos = 0; while (valores.hasmoreelements()) { Personas[pos] = valores.nextelement(); pos++; return personas; public void selectionsort(comparable[] datos) //implementar un algoritmo de ordenación genérico public boolean esempleado(persona persona, Empresa empresa){ if (empleados.exist(persona)){ Empleado empleado = (Empleado) empleados.get(persona.getkey()); return empleado.getempresa().equals(empresa); else false;