Академический Документы
Профессиональный Документы
Культура Документы
y Estructuras de Datos
Grado en Ingeniera Informtica
Grado en Tecnologas de la Informacin
ndice
1. Presentacin del problema................................................................................................................3
2. Diseo...............................................................................................................................................4
2.1 Tipos de datos de referencia.......................................................................................................4
2.2 Primer escenario: Academia con rbol Genealgico Simplificado..........................................6
Preguntas tericas (trabajo del estudiante)..................................................................................7
2.3 Segundo escenario: Academia con rbol Genealgico Completo............................................7
Preguntas tericas (trabajo del estudiante)..................................................................................9
3. Implementacin................................................................................................................................9
3.1 Parmetros de entrada..............................................................................................................10
3.2 Estructura del fichero de datos.................................................................................................10
3.3 Estructura del fichero de operaciones......................................................................................10
3.4 Medicin de tiempos................................................................................................................12
Estudio emprico del coste temporal (trabajo del estudiante)...................................................12
3.5 Salida del programa.................................................................................................................12
4. Ejecucin y juegos de prueba.........................................................................................................13
5. Documentacin y plazos de entrega...............................................................................................13
2. Diseo.
En esta prctica trabajaremos con dos escenarios diferentes que condicionarn la eleccin (y, por
tanto, el manejo) de las estructuras de datos para almacenar la informacin de una Academia.
Siguiendo las instrucciones de este enunciado de prcticas, los estudiantes debern (i) razonar sobre
el coste de las soluciones a cada uno de los escenarios propuestos, de forma comparada; (ii)
implementar ambas soluciones; y (iii) realizar un estudio emprico de su eficiencia respecto al juego
de pruebas proporcionado por el equipo docente, al menos.
/*RepresentacindeunaAcademiaformadaporunacoleccindeDoctores*/
publicinterfaceAcademiaIFextendsCollectionIF<DoctorIF>{
/*ConsultaelDoctorquefundlaAcademia*/
/*@returnselDoctorfundadordelaAcademia*/
publicDoctorIFgetFounder();
/*BuscaunDoctordentrodelaAcademiaapartirdesuidentificador*/
/*@preeldoctorpertenecealaAcademia&&id>0*/
/*@paramelidentificadordelDoctorabuscar*/
/*@returnselDoctorbuscado*/
publicDoctorIFgetDoctor(intid);
/*ConsultaelnmerodeDoctoresquepertenecenalaAcademia*/
/*@returnselnmerodeDoctorespertenecientesalaAcademia*/
publicintsize();
/*AadeunnuevoDoctoralaAcademiaapartirdelalecturadesuTesis*/
/*@paramelnuevoDoctorysuprimerdirectordeTesis*/
/*@preelnuevodoctornodebeperteneceralaAcademia&&*/
/*elsupervisorsdebeperteneceralaAcademia*/
publicvoidaddDoctor(DoctorIFnewDoctor,DoctorIFsupervisor);
/*AadeunarelacindedireccinalrbolGenealgicodelaAcademia*/
/*@paramelnuevoDoctoryunodesuscodirectoresdeTesis*/
/*@preambosdoctoresdebenperteneceralaAcademia&&*/
/*noexisteunarelacindesupervisinpreviaentreambos*/
publicvoidaddSupervision(DoctorIFstudent,DoctorIFsupervisor);
}
Esta interfaz hace uso de una interfaz DoctorIF, que se detalla a continuacin:
/*RepresentacindeunDoctorpertenecienteaunaAcademia*/
PublicinterfaceDoctorIF{
/*Consultalosancestrosacadmicosdeldoctor,limitndosealnmerode*/
/*generacionesindicadoporelparmetro.*/
/*@returnslacoleccindeancestrosacadmicosdeldoctorlimitadaal*/
/*nmerodegeneracionesindicadoohastallegaralfundadordela*/
/*Academia.Nodebercontenerrepeticiones.*/
/*@paramnmerodegeneracionesaconsiderar*/
/*@pregenerations>0*/
publicCollectionIF<DoctorIF>getAncestors(intgenerations);
/*ConsultalosdoctoresaquieneseldoctorhadirigidosusTesis.*/
/*@returnslacoleccindedoctorescuyodirectordetesiseseldoctor.*/
publicCollectionIF<DoctorIF>getStudents();
/*Consultalosdescendientesacadmicosdeldoctor,limitndosealnmero*/
/*degeneracionesindicadoporelparmetro.*/
/*@returnslacoleccindedescendientesacadmicosdeldoctorlimitada*/
/*alnmerodegeneracionesindicadoohastallegaraDoctoresqueno*/
/*hayandirigidoningunaTesis.Nodebercontenerrepeticiones.*/
/*@paramnmerodegeneracionesaconsiderar*/
/*@pregenerations>0*/
publicCollectionIF<DoctorIF>getDescendants(intgenerations);
/*Consultalosdoctoresquecompartendirectordetesisconeldoctor.*/
/*@returnslacoleccindehermanosacadmicosdeldoctor.Nodeber*/
/*contenerrepeticionesnialdoctorllamante*/
publicCollectionIF<DoctorIF>getSiblings();
}
Todas estas operaciones de consulta devuelven colecciones de Doctores en las que no podr haber
repeticiones (es decir, cada Doctor slo podr aparecer una nica vez). Adems, dado que los
mtodos devuelven colecciones de objetos DoctorIF, el orden de los diferentes objetos es
irrelevante.
Para poder identificar de manera unvoca a los diferentes Doctores de una Academia, cada uno de
ellos tendr asociado un nmero entero positivo nico dentro de la Academia. Es decir, no podrn
existir dos Doctores en la misma Academia que tengan el mismo identificador.
Para ambos atributos se implementarn los getters correspondientes, pero no ser necesario
implementar setters, ya que, como esos datos no se vern modificados tras la creacin del nuevo
Doctor, delegaremos en el constructor de la clase la tarea de instanciarlos al ser creado.
Para ver un ejemplo de este escenario supongamos que los nmeros 17 representan los objetos de
la clase DoctorS y que la informacin sobre la cual se ha construido la Academia es la siguiente:
1.getSupervisor()
6.getSupervisor()
7.getAncestors(2)
7.getAncestors(3)
7.getAncestors(4)
1.getStudents()
2.getStudents()
1.getDescendants(2)
3.getSiblings()
null(eselfundadordelaAcademia)
2
[2,3]
[1,2,3]
[1,2,3](nohaymsgeneraciones)
[2]
[3,4,6]
[2,3,4,6]
[4,6]
En este segundo escenario eliminaremos esa restriccin. Para lo cual consideraremos una clase
AcademiaC que implementar la interfaz AcademiaIF y que permita almacenar y gestionar la
informacin de una Academia con rbol Genealgico Completo.
Ntese que, cuando se permiten codirectores, un acadmico puede asociarse a ms de una
generacin. En la figura de la pgina 3 se puede ver el caso de Jan Van Mill, que sera Descendiente
Acadmico de Johannes de Groot de segunda generacin por parte de su codirector Pieter Cornelis
Baayen y de tercera generacin por parte de su codirector Eric van Douwen.
Anlogamente, existir una clase DoctorC que implemente la interfaz DoctorIF y que permita
gestionar la informacin de un Doctor dentro de una Academia con rbol Genealgico Completo. A
continuacin se detallan los atributos y nuevos mtodos que deber tener dicha clase:
publicclassDoctorCimplementsDoctorIF{
privateintid;/*Identificadorunvoco*/
privateAcademiaCacademia;/*Academiaalaquepertenece*/
privateCollectionIF<DoctorC>students;/*Aquieneshadirigidolatesis*/
/*ConsultalosdirectoresdeTesisdeldoctor.*/
/*@returnsunalistaconlosDoctoresquefueronsusdirectoresdeTesis.*/
publicCollectionIF<DoctorC>getSupervisors();
/*Inclyaseaqutodoloquehagafaltaparaunacorrectaimplementacin.*/
...
}
Al igual que en el primer escenario, implementaremos los getters correspondientes a todos sus
atributos y delegaremos en el constructor de la clase la tarea de instanciarlos al ser creado un nuevo
objeto.
Veamos un ejemplo que ilustre este escenario. En esta ocasin, los nmeros 17 representan los
objetos de la clase DoctorC y la informacin sobre la cual se ha construido la Academia es la
siguiente:
Entonces, las siguientes llamadas produciran el resultado indicado (recuerde que el orden en las
colecciones no es relevante):
1.getSupervisors()
6.getSupervisors()
7.getAncestors(2)
7.getAncestors(3)
1.getStudents()
[](eselfundadordelaAcademia)
[4,5]
[1,2,3]
[1,2,3](nohaymsgeneraciones)
[2,3,5]
2.getStudents()
1.getDescendants(2)
3.getSiblings()
[3,4]
[2,3,4,5,6,7]
[2,4,5]
3. Implementacin.
Se deber realizar un diseo en Java que contenga las siguientes clases:
La accin esperada por el programa ser construir la Academia con rbol Genealgico Acadmico
Simplificado (utilizando para ello un objeto de la clase AcademiaS).
Un ejemplo de fichero de datos para el segundo escenario (basado en el ejemplo de la seccin 2.3)
sera el siguiente:
LaAcademiafueFundadapor1
Tesisde2dirigidapor1
Tesisde3codirigidapor1y2
Tesisde4dirigidapor2
Tesisde5codirigidapor1y3
Tesisde6codirigidapor4y5
Tesisde7dirigidapor3
La accin esperada por el programa ser construir la Academia con rbol Genealgico Acadmico
Completo (utilizando para ello un objeto de la clase AcademiaC).
(paraelprimerescenario)
(paraelsegundoescenario)
3. Operacin de consulta de estudiantes. Los dos primeros caracteres de la lnea sern ST, a
continuacin un espacio y el nombre del doctor del cual se desea conocer aquellos
estudiantes a quienes ha dirigido sus Tesis Doctorales encerrado entre comillas. Por ejemplo:
ST3
(paraelprimerescenario)
(paraelsegundoescenario)
11
SI3
(paraelprimerescenario)
(paraelsegundoescenario)
Hay que recordar que el orden de las coleccions no es relevante, por lo que las respuestas aqu
mostradas han de tomarse como una posible de entre todas las correctas.
Si consideramos las consultas utilizadas en el apartado 3.3 de este enunciado, la salida esperada
para el primer escenario (y teniendo en cuenta que el coste indicado es ficticio a modo de ejemplo y
que el orden en las colecciones no es relevante) sera:
DoctoresenlaAcademia:7.
Tesisde3dirigidapor2
Tiempo:6
Losancestrosde4hasta2generacionesson1y2
Tiempo:20
3hadirigidolaTesisde7
Tiempo:10
Losdescendientesde2hasta2generacionesson3,4,5,6y7
Tiempo:25
Loshermanosde3son4y6
Tiempo:11
DoctoresenlaAcademia:7.
Tesisde3codirigidapor1y2
Tiempo:6
Losancestrosde4hasta2generacionesson1y2
Tiempo:20
3hadirigidolasTesisde5,y7
Tiempo:10
Losdescendientesde2hasta2generacionesson3,4,5,6y7
Tiempo:25
Loshermanosde3son2,4y5
Tiempo:11
<escenario>
<datos>
<operaciones>
El Equipo Docente proporcionar, a travs del curso virtual, juegos de prueba consistentes en un
fichero de datos, un fichero de operaciones y una salida esperada para comprobar el correcto
funcionamiento del programa.
Para la realizacin del estudio emprico del coste, los estudiantes podrn crear diferentes ficheros de
datos con un nmero diferente de doctores, de manera que se pueda medir cmo vara el tiempo que
emplean las operaciones segn dicho nmero.