Algoritmos y Estructuras de Datos II - dis.um.esdis.um.es/~domingo/apuntes/AED/0607/pract1.pdf ·...
Transcript of Algoritmos y Estructuras de Datos II - dis.um.esdis.um.es/~domingo/apuntes/AED/0607/pract1.pdf ·...
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
A. Contextualización"En el futuro, las prácticas serán corregidas por máquinas en lugar de por humanos."
¡El futuro ya está aquí! Los denominados jueces online permiten una corrección automática de los programas. El funcionamiento es muy sencillo. El juez es un ordenador que contiene un conjunto de problemas, cada uno con su enunciado, sus entradas y la salida correcta de cada uno. Los usuarios pueden enviar sus programas para ser evaluados por el juez. Si se obtiene la salida adecuada, el envío es aceptado, en otro caso, ¡vuelva a intentarlo!
El juez online de la Universidad de Valladolid (http://acm.uva.es/problemset/) es uno de los sistemas pioneros: más de 2.000 problemas disponibles, unos 63.000 usuarios, 1 millón de envíos al año, alrededor de un 25% de ellos aceptados...
Tu objetivo es desarrollar un motor para el manejo eficiente de la información del juez: los problemas, los usuarios, y los envíos; en especial en lo que se refiere a la realización de consultas y estadísticas.
B. Enunciado del problema
El sistema maneja un conjunto de problemas de programación propuestos, de manera que a cada uno de ellos le corresponde un enunciado en el que se especifica el planteamiento del problema así como el formato de los datos de entrada y salida, con algunos ejemplos de uso.
Por otro lado en el sistema se registran aquellos usuarios que quieren enviar sus soluciones propuestas a algún determinado problema, quedando almacenado para cada usuario sus datos personales como nombre completo, identificador, email, página web personal, país y fecha de registro del alta.
Nos interesa gestionar y consultar información sobre los envíos de los usuarios para solucionar los problemas, de manera que podamos ofrecer estadísticas sobre cuántos problemas ha resuelto de manera satisfactoria cada usuario o cuántos intentos fallidos y también la causa. Para ello existirá un fichero en el que se registra cada uno de estos envíos, en qué fecha se produjeron y el resultado final de los mismos. La aplicación tendrá en todo momento una “selección actual” de envíos, que contendrá todos aquellos envíos que cumplan uno o más criterios dados. Inicialmente la selección actual serán todos los envíos registrados. Mediante la ejecución de una serie de comandos implementados a tal fin se podrá ir seleccionando envíos atendiendo a diversos criterios: por problema, por usuario y por estado.
Nuestra tarea es crear un motor eficiente para el manejo del juez online y la consulta de envíos a los problemas propuestos, teniendo en cuenta que el volumen de datos a manejar por la aplicación será al menos del orden de: nº de usuarios entre 50 y 100, nº de problemas entre 50 y 100, y por último el nº de envíos puede aumentar hasta que sea computacionalmente viable por el sistema (5.000, 50.000, 100.000 …)
Hoja de descripción de la práctica nº 1 Página 1 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
En relación al fichero de envíos, deberá haber una operación de carga mediante la cual se va leyendo el índice y se crean en memoria las estructuras necesarias para las consultas posteriores. Se deberá permitir también la inserción de nuevos envíos. Opcionalmente, se incluirá la operación de guardar el fichero índice de envíos con los cambios realizados.
Para poder cargar en memoria la información del anterior fichero índice previamente se ha tenido que cargar el fichero de problemas y el fichero de usuarios, pudiendo igualmente insertar nuevos problemas y nuevos usuarios en el sistema. Opcionalmente, se incluirá la operación de guardar los ficheros índice de problemas y usuarios con los cambios realizados.Una vez cargado el índice, o tras insertar nuevas envíos, disponemos de operaciones de visualización y consulta de los envíos, de los usuarios y de los problemas.
C. Especificaciones del producto
El motor desarrollado debe ajustarse a las siguientes especificaciones. Los apartados C.1, C.2 y C.3 describen los formatos de los ficheros usados. En el apartado C.4 se especifican los comandos de obligado cumplimiento, y en el C.5 los que son opcionales. Se entiende que todo lo que no esté especificado se deja a la libre elección del implementador. En cualquier caso, las decisiones a este respecto deberán estar justificadas adecuadamente.
C.1. Formato del fichero de problemas
Todos los problemas vendrán relacionados en un fichero de texto ASCII. Este fichero estará ordenado de forma creciente por identificador del problema (ID_Problema) de menor a mayor. Todos los campos de este y de los restantes ficheros están separados por el carácter delimitador ';' (punto y coma). Cada línea de este fichero tiene el siguiente formato:
ID_Problema;Titulo
ID_ProblemaEs un número entero con el identificador del problema.
TítuloEs el título del problema, una cadena de texto de longitud arbitraria.
C.2. Formato del fichero de usuarios
Al igual que el fichero de problemas, los ficheros de usuarios son también archivos de texto ASCII. Este fichero estará ordenado de forma creciente según el identificador de usuario (ID_Usuario) de menor a mayor. Cada línea de este fichero tiene el siguiente formato:
ID_Usuario;Nombre;Página_Web;E-Mail;País;Fecha_Alta
Hoja de descripción de la práctica nº 1 Página 2 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.ID_Usuario
Identificador numérico del usuario.
NombreEs el nombre del usuario (nombre y apellidos).
Página_WebEs la dirección de la página web personal del usuario. Puede estar vacío.
E-MailDirección del correo electrónico. Puede estar vacío.
PaísNombre del país del usuario.
Fecha_AltaEs la fecha en la que el usuario se dio de alta.El formato es el siguiente:
[aaaa/mm/dd-hh:nn:ss]
Los símbolos en negrita aparecen de manera literal. Los campos en cursiva son:aaaa → año, con 4 dígitosmm → mes, en formato numérico, también con 2 dígitosdd → día, siempre con 2 dígitoshh → hora, en formato de 00 a 23nn → minutos, con 2 dígitosss → segundos, con 2 dígitos
C.3. Formato del fichero índice de envíos
El fichero índice de envíos es un fichero de texto ASCII en el que se describen los envíos de remitidos por cada usuario sobre los problemas al juez online. Cada línea de texto describe un envío. Los envíos aparecen en el fichero ordenados de forma creciente según el identificador de envío (ID_Envío) de menor a mayor, lo cual coincide con el orden de llegada de la fecha, de más antigua a más reciente (puede que dos o más envíos coincidan en fecha y hora).
El formato de las líneas almacenadas en el fichero índice es el siguiente:
ID_Envío;Fecha;Estado;CPU;Memoria;ID_Usuario;Fuente;ID_Problema
ID_EnvíoIdentificador de la propuesta (números enteros consecutivos).
FechaFecha y hora en la que se ha enviado la solución propuesta. Igual que el formato definido en la sección C.2.
Hoja de descripción de la práctica nº 1 Página 3 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
EstadoEs el código del estado de la evaluación de la propuesta enviada:
Código DescripciónAC AcceptedPE Presentation ErrorWA Wrong AnswerCE Compile ErrorRE Runtime ErrorTL Time Limit ExceededML Memory Limit ExceededOL Out Limit ExcededRF Restricted Function
OTHER Other
CPUEs el tiempo de CPU de la propuesta enviada (número entero).
MemoriaEs la memoria ocupada por la propuesta enviada (número entero).
ID_UsuarioEs el identificador del usuario.
FuenteEs el lenguaje de programación utilizado en la solución del problema. Puede ser uno de los siguientes valores: C, C++, Pascal o Java.
ID_ProblemaIdentificador de un problema propuesto.
C.4. Interface del programa. Comandos Obligatorios
Todas las interacciones entre el programa y el usuario se realizarán utilizando la entrada y la salida estándar. Se creará un interface de línea de comandos con el usuario de la aplicación. En este sentido, el programa debe poder admitir un uso offline, esto es, redireccionando la entrada y la salida estándar a ficheros.
En particular, la interface del programa será una línea de comandos que deberá aceptar, por lo menos, las órdenes: leer, borrar, mostrar, visualizar, seleccionar, ayuda y salir.
>> leer fichero_Problemas fichero_Usuarios fichero_Envíos
Carga los ficheros índice de problemas, usuarios y envíos. Esta operación servirá para inicializar en memoria las estructuras de datos necesarias para el programa. Si ya hay información cargado en ese momento, se deberá eliminar.
Hoja de descripción de la práctica nº 1 Página 4 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
Al acabar la lectura se deberá mostrar por pantalla la información resumida referente a la carga de datos con, al menos:
Formato de salida: número de problemas número de usuarios número de envíos tiempo total de carga (en milisegundos) memoria utilizada por el programa (en Kbytes).
Opcionalmente se mostrará también el número de días, número de envíos aceptados o rechazados u otra información estadística que se considere interesante.
>> borrarElimina toda la información cargada en operaciones anteriores, liberando la memoria ocupada por el programa.
>> mostrar criterio valor
Valores de los parámetros:criterio valorproblema ID_Problemausuario ID_Usuario
>> mostrar problema ID_ProblemaEste comando muestra por pantalla la siguiente información correspondiente a
un identificador de problema:
Formato de salida: ID_Problema Título
>> mostrar usuario ID_UsuarioDado un identificador de un usuario se muestra la información correspondiente
a ese usuario. Formato de salida:
Nombre Identificador de usuario EMail Página_Web País Fecha de Alta
Hoja de descripción de la práctica nº 1 Página 5 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
Ejemplo del juez online:
ginesgm statistics
>> visualizarMuestra por pantalla los envíos seleccionados actualmente en la “selección actual”. (resultado del comando seleccionar) ordenados por fecha del más reciente al más antiguo. Inicialmente todos los envíos se encuentran seleccionados en la selección actual.
Formato de salida:
ID_Envío Fecha Estado CPU MemoriaUsuario
(nombre)Fuente ID_Problema Título
Nota: Observar que se visualiza el nombre del problema y del usuario, aunque en la implementación será suficiente con guardar los identificadores asociados.
Ejemplo del juez online:
ID Date (UTC) Status CPU Memory Author Source Problem / Title
5053357 2006/10/18
11:27:18 Accepted 1.023 656 UPB_GUYS C++ 10594 Data Flow
5053356 2006/10/18
11:26:53 Compile Error
0.000 Minimum Kapysh A.S. C++ 10236 The Fibonacci
Primes
5053355 2006/10/18
11:26:46 Accepted 0.121 420 BAO Yiyang C++ 784 Maze Exploration
5053354 2006/10/18
11:26:11 Accepted 6.766 444
Masaya Kiwada
C++ 10090 Marbles
5053353 2006/10/18
11:26:08 Wrong
Answer 1.250 6332 Chen Guanying C++ 638 Finding Rectangles
5053352 2006/10/18
11:26:01 Compile Error
0.000 Minimum Aziz Ghazanfar C++ 733 Follow the Folding
Dot
>> seleccionar modo criterio valor
Hoja de descripción de la práctica nº 1 Página 6 de 17
Name: Gines Garcia Mateos User ID: 28340 EMail: mailto:Homepage: Country: SPAIN Register date: 20030131 12:30:00
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
Este comando selecciona envíos atendiendo a un modo de selección especificado y según un criterio de búsqueda y un valor asignado a ese criterio.
Valores de los parámetros:modo DescripciónAND Selecciona envíos de la selección actual que cumplan una nueva
condición criterio/valor.OR Selecciona envíos que cumplan una condición de criterio/valor y
los añade a la selección actual (quitando los repetidos)ALL Selecciona todos los envíos. Inicialmente la selección actual está
formada por todos los envíos.NONE Deja vacía la selección actual sin ningún envío seleccionado.
criterio valor Descripciónproblema ID_Problema Selecciona los envíos realizados para un
determinado problemausuario ID_Usuario Selecciona los envíos realizados para un
determinado usuarioestado ID_Estado Selecciona los envíos realizados para un
determinado estado
Formato de salida: Tiempo en realizar la selección (en milisegundos). Nº de envíos seleccionados.
>> ayudaMostrar información sobre todos los comandos disponibles. Documentar especialmente los comandos opcionales y los nuevos, en caso de que se haya introducido alguno.
>> salirSalir del programa, liberando la memoria que se haya utilizado.
Nota: Para los comandos que se requiera calcular el tiempo de ejecución se debe medir siempre en milisegundos, con la mayor resolución posible. Ver indicaciones en: http://dis.um.es/~ginesgm/indpractica1.html
C.5. Interface del programa. Comandos Opcionales
>> insertar criterio valores (opcional)
Valores de los parámetros:criterio valores
Hoja de descripción de la práctica nº 1 Página 7 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
problema ID_Prob Títulousuario ID_Usu Nombre E-Mail Página_Web País Fecha_alta envío ID_Env Fecha Estado Memoria ID_Usu Fuente ID_Prob
>> insertar problema ID_Prob TítuloInserta un nuevo problema en el sistema. Los parámetros son los mismos que los especificados en el fichero índice de problemas (ver apartado C.1). Esta operación no escribe en el fichero índice. Se deberá indicar la nueva cantidad de memoria usada por el programa y el número total de problemas.>> insertar usuario ID_Usu Nombre E-Mail Página_Web País Fecha_alta Inserta un nuevo usuario en el sistema. Los parámetros son los mismos que los especificados en el fichero índice de usuarios (ver apartado C.2). Esta operación no escribe en el fichero índice. Se deberá indicar la nueva cantidad de memoria usada por el programa y el número total de usuarios.
>> insertar envío ID_Env Fecha Estado Memoria ID_Usu Fuente ID_Prob Inserta un nuevo envío en el sistema. Los parámetros son los mismos que los especificados en el fichero índice de envíos (ver apartado C.3). Esta operación no escribe en el fichero índice. Se deberá indicar la nueva cantidad de memoria usada por el programa y el número total de envíos.
>> guardar fichero_Problemas fichero_Usuarios fichero_Envíos (opcional)
Guarda los cambios en los ficheros índice de problemas, usuarios y envíos con los nombres indicados, teniendo en cuenta las operaciones insertar realizadas.
>> listar criterio valores (opcional)
Valores de los parámetros:criterio valoresproblema ID_Problema_ini ID_Problema_finusuario ID_Usuario_ini ID_Usuario_fin
>> listar problema ID_Problema_ini ID_Problema_finEste comando muestra por pantalla información de los problemas con identificador entre un rango especificado:
Formato de salida:
ID_Problema Título • Incluir el tiempo de ejecución en realizar el listado.
Ejemplo del juez online: listar problema 100 104
Hoja de descripción de la práctica nº 1 Página 8 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
PROBLEM LISTProblem Title
100 The 3n + 1 problem101 The Blocks Problem102 Ecological Bin Packing103 Stacking Boxes104 Arbitrage
>> listar usuario ID_Usuario_ini ID_Usuario_finEste comando muestra por pantalla información de los usuarios con
identificador entre un rango especificado:
Formato de salida:
ID_Usuario Nombre (y apellidos) • Incluir el tiempo de ejecución en realizar el listado.
>> buscar criterio valor (opcional)
Valores de los parámetros:criterio valorproblema palabra1 palabra2 … palabranusuario palabra1 palabra2 … palabran
>> buscar problema palabra1 palabra2 … palabranBusca aquellos problemas que contengan en su título una o varias palabras de búsqueda. En la búsqueda no hay que distinguir entre mayúsculas, minúsculas, ni tildes. En el caso de especificar varias palabras se realizará la búsqueda que cumpla todas las palabras (AND).
Formato de salida:
ID_Problema Título • Incluir el tiempo de ejecutar la operación.
>> buscar usuario palabra1 palabra2 … palabranBusca un usuario por su nombre (incluye nombre y apellidos). En la búsqueda no hay que distinguir entre mayúsculas, minúsculas, ni tildes (por ejemplo GarCia será equivalente a García). En el caso de especificar varias palabras se realizará la búsqueda que cumpla todas las palabras (AND).
Formato de salida:
Hoja de descripción de la práctica nº 1 Página 9 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
ID_Usuario Nombre • Incluir el tiempo de ejecutar la operación.
Ejemplo del juez online:Search / author statistics
Please, type the name (or a substring content in the name) to find an author. If several authors match the key, I will prompt you to select one. Don't worry about case, spaces, accutes,...
Back to Contest Problem Set
Search results:1000 Ciriaco García de Celis 1031 Juan Manuel García López 1192 Luis Manuel de la Fuente Garcia 1309 Jesús Óscar García Castellanos 1345 Mauricio Alfonso Garcia Limon 1554 Isaac García Incertis 2932 Jesús García Bruña 2960 Jose Maria Guerra Garcia
>> estadística criterio valor (opcional)
Valores de los parámetros:Criterio valorproblema ID_Problemausuario ID_Usuario
>> estadística problema ID_ProblemaEste comando muestra por pantalla información estadística por tipo de estado de los envíos propuestos por los usuarios correspondientes a un identificador de problema.
Formato de salida: Nº total de envíos para ese problema Nº de envíos aceptados (estado: “Accepted”) Nº de envíos no aceptados por estado: “Presentation Error” Nº de envíos no aceptados por estado: “Wrong Answer” Nº de envíos no aceptados por estado: “Runtime Error” Nº de envíos no aceptados por estado: “Time Limit Exceeded” Nº de envíos no aceptados por estado: “Memory Limit Exceeded” Nº de envíos no aceptados por estado: “Output Limit Exceeded” Nº de envíos no aceptados por estado: “ Compile Error” Nº de envíos no aceptados por estado: “Restricted Function” Incluir el tiempo de ejecutar la operación.
Hoja de descripción de la práctica nº 1 Página 10 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
Ejemplo del juez online:
>> estadística usuario ID_UsuarioMuestra por pantalla información estadística sobre el estado de cada uno de los envíos de un usuario dado:
Formato de salida: Nº total de envíos de ese usuario Nº de envíos aceptados (estado: “Accepted”) Nº de envíos no aceptados por estado: “Presentation Error” Nº de envíos no aceptados por estado: “Wrong Answer” Nº de envíos no aceptados por estado: “Runtime Error” Nº de envíos no aceptados por estado: “Time Limit Exceeded” Nº de envíos no aceptados por estado: “Memory Limit Exceeded” Nº de envíos no aceptados por estado: “Output Limit Exceeded” Nº de envíos no aceptados por estado: “ Compile Error” Nº de envíos no aceptados por estado: “Restricted Function” Número de problemas intentados Número de problemas distintos resueltos Lista de problemas “aceptados” de ese usuario. Incluir el tiempo de ejecutar la operación.
Ejemplo del juez online:
ginesgm statistics
Number of tried problems 23Number of solved problems 19List of 20 solved problems:
Hoja de descripción de la práctica nº 1 Página 11 de 17
Total submisions 12308 Accepted 2224 Presentation Error 762 Wrong Answer 4027 Runtime Error 808 Time Limit Exceeded 2777 Memory Limit Exceeded 108 Output Limit Exceeded 33 Compile Error 1381 Restricted Function 188
Name: Gines Garcia Mateos User ID: 28340 EMail: mailto:Homepage: Country: SPAIN Register date: 20030131 12:30:00 Last submission: Thu Oct 05, 11:48:13 UTC 2006
Submissions 69
Accepted 22
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
100 101 102 108 117 128 429 740 741 10034 10044 10131 10337 10405 10422 10505 10850 10853 10854
>> ranklist criterio valores (opcional)
Valores de los parámetros:criterio valoresproblema ID_Problema pos_ini pos_finusuario ID_Usuario pos_ini pos_fin
>> ranklist problema ID_Problema pos_ini pos_finEste comando muestra los envíos que han sido aceptados y que resuelven mejor el problema atendiendo al tiempo de la CPU consumido. Según el ranking, muestra entre una posición inicial y una posición final especificadas. Por ejemplo para mostrar los 10 mejores la posición inicial sería 1 y la final sería 10. Para ver los 10 siguientes entonces estarían entre 11 y 20.
Formato de salida:Nº CPU Memoria Usuario (Nombre) Fuente Fecha ID_Envío
• Incluir el tiempo necesario para ejecutar la operación.
Ejemplo del juez online:
Ranklist (Best Accepted or Presentation Error from each author)
CPU Time Memory Author Source Date (UTC) ID (host)
1 0:00.012 64 Christian Häggström C 2004/02/1117:46:18.900 2291613 (H0)
2 0:00.018 64 Patrick Fehr C++ 2004/06/1521:58:22.910 2599476 (H0)
3 0:00.018 64 Krzysztof Dulêba C++ 2006/07/3003:14:25.159 4775764 (H0)
4 0:00.031 64 Alexander A. Maly C 2004/01/2216:37:40.666 2233994 (H0)
5 0:00.037 64 Duval Stéphane C 2003/12/0323:18:23.794 2119391 (H0)
6 0:00.037 64 Claudio Di Martino C 2004/05/1912:45:40.368 2534416 (H0)
7 0:00.045 64 Csaba Noszaly C 2004/02/0620:32:30.076 2277385 (H0)
8 0:00.055 64 Ulan Degenbaev C++ 2004/01/1209:36:26.500 2209963 (H0)
9 0:00.059 64 TSE Chi Yung C 2003/12/0306:08:49.641 2117519 (H0)
10 0:00.063 64 Dean Cupovic C 2004/05/0813:35:32.341 2510911 (H0) Next 25 Previous 25 Top
>> ranklist usuario ID_Usuario pos_ini pos_finEste comando muestra los usuarios mejor posicionados en el ranking atendiendo al número total de problemas resueltos (aceptados). Tener en cuenta que un mismo usuario puede tener varios envíos aceptados del mismo problema, por lo que habrá que
Hoja de descripción de la práctica nº 1 Página 12 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
calcular los problemas distintos que han sido aceptados. Según el ranking muestra entre una posición inicial y una posición final especificadas.
Formato de salida:
Nº Usuario (nombre) País Nº Problemas resueltos Nº de envíos
• Incluir el tiempo necesario para ejecutar la operación.
Ejemplo del juez online:
AUTHORS RANKLISTClick on authors name to see detailed information
Back to Contest Problem Set Last update: Wed Oct 18 11:36:33 UTC 2006
Ranklist AUTHOR COUNTRY PROBLEMS
SOLVED SUBMISSIONS
1 Anton Maydell 1875 3542
2 Joachim Wulff (little joey) 1870 7408
3 Adrian Kügel 1734 6704
4 Lawrence Leung@CUHK (.. in rest) 1723 14979
5 Bal4u Japan 1696 3853
6 Per Austrin 1570 3475
7 Yury Kholondyrev 1400 3925
8 TSE Chi Yung 1399 3859
9 mjf f 1351 3557
10 Luka Kalinovcic 1333 2912
Observar que en la mayoría de los comandos se debe indicar el tiempo requerido para realizar la operación. El tiempo se debe medir siempre en milisegundos, con la mayor resolución posible. Ver indicaciones en: http://dis.um.es/~ginesgm/indpractica1.html
C.6. Requisito adicionalAdicionalmente, se impone el siguiente requisito en referencia a las estructuras de datos utilizadas en el programa. Cada grupo deberá implementar al menos dos de las siguientes estructuras de datos:
Estructura de datosÁrboles trie
Árboles AVLÁrboles B
Dispersión abiertaDispersión cerrada
Hoja de descripción de la práctica nº 1 Página 13 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
Nota: se valorará la implementación de más estructuras (siempre que sean adecuadas).
D. Memoria de la práctica
La memoria de la práctica deberá contener obligatoriamente los siguientes apartados.
D.1. PortadaNombre de los alumnos y dirección de email de cada uno. En la cara opuesta a la portada deberá aparecer el login y el password de la cuenta en la que están los ficheros de la práctica.
D.2. Análisis del problemaPor análisis se entiende el estudio preliminar del problema. Incluye:
Estudio de los requisitos del problema tratado. Describir en palabras propias el problema a tratar, centrándose en los aspectos más relevantes. Abstraer. Definir las partes de la especificación que sean ambiguas o incompletas. Decidir las partes opcionales que se realizan.
Estudio de los tipos abstractos necesarios para resolver el problema y las operaciones sobre los mismos. Encontrar los tipos abstractos que aparecen en el problema, y en qué partes aparecen. Analizar las diferentes alternativas que se presentan para la implementación de estos tipos.
Descripción de los tipos abstractos. Describir los principales tipos abstractos de datos encontrados. Se puede usar un formato propio de especificación.
D.3. Diseño de la aplicaciónEl diseño es la toma de decisiones sobre la estructura del programa a implementar. Incluye:
Estructura de datos para cada tipo de datos. Decidir qué estructura de datos se va a utilizar para cada tipo, justificando la decisión. Particularizar las características generales de la estructura para el problema concreto, indicando posibles modificaciones y adaptaciones. Mostrar un esquema gráfico global de la estructura de tipos de datos existentes.
Algoritmos sobre los tipos de datos. Descripción abstracta de los algoritmos utilizados, correspondientes a cada operación relevante del programa.
Descomposición modular del programa. Decidir cómo se organiza la implementación del programa. Qué módulos existen. Cuál es la responsabilidad de cada uno. Qué relación de uso hay entre los módulos.
Documentar cualquier otra decisión de diseño que pueda resultar de interés.
Hoja de descripción de la práctica nº 1 Página 14 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
D.4. Listado del códigoEntregar un listado del código, comentado, incluyendo ficheros de cabecera, de implementación y el fichero makefile necesario para compilar el programa.
D.5. Informe de desarrolloEl informe de desarrollo es un documento sobre el proceso personal y del grupo para la resolución de la práctica. Debe contener lo siguiente:
Organización temporal de las fases de resolución (análisis, diseño, implementación, pruebas), no de forma genérica sino para esta práctica en concreto.
Cómo ha sido la coordinación y el reparto del trabajo entre los miembros del grupo. Concretar personas y tareas realizadas.
Tablas de dedicación personal en las distintas fases del trabajo. Se utilizarán tablas como las explicadas en las páginas 37 y 350 del texto guía, rellenadas con el mayor rigor posible.
Conclusiones y valoraciones personales.
E. Evaluación de la práctica
E.1. ObligatorioPara aprobar la práctica se requiere que:- El programa se pueda compilar sin errores en las máquinas del laboratorio de prácticas,
en la fecha y hora en la que se realice la entrevista con los alumnos.
- El programa debe funcionar correctamente, sin colgarse y produciendo resultados correctos para el conjunto de pruebas que determine el profesor.
- La interface del programa debe ajustarse, como mínimo, a la especificación del apartado C.
- La memoria de la práctica debe contener todos los puntos indicados en el apartado D, y debe ser entregada en el plazo que se establezca. ¡La documentación entregada no debe contener faltas de ortografía (incluida la omisión de tildes)!
E.2. Criterios de valoraciónLa práctica se puntuará de acuerdo a los siguientes criterios de calidad del software:
- Análisis y diseño. Se valorará la calidad y adecuación del diseño y el análisis realizados, y la dedicación a estas fases previas a la implementación.
Hoja de descripción de la práctica nº 1 Página 15 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
- Modularidad. La funcionalidad debe estar bien repartida entre los módulos. Debe estar claro el sentido y la responsabilidad de cada módulo. Se debe respetar el principio de ocultación de la implementación.
- Abstracciones. Se deben encontrar los tipos abstractos que aparecen, e implementarlos usando clases, eligiendo las estructuras más adecuadas.
- Implementación. Se valorará positivamente la implementación de más de una estructura de datos, siempre que resulte conveniente.
- Uso del lenguaje. El código deber ser claro, legible, robusto y eficiente. No crear procedimientos muy largos y complejos. Se valorará el uso de clases genéricas (plantillas) y precondiciones / postcondiciones (asertos).
Los comandos obligatorios contarán un 60% sobre la nota total de la práctica. Para superar la práctica deben estar implementados todos ellos. Los comandos opcionales contarán el 40% restante. A cada opcional se le asigna un porcentaje según su grado de dificultad. Atendiendo a los porcentajes de los opcionales elegidos se conseguirá el 100% de la nota.
Porcentajes de calificación de los opcionales:
Opcional Criterio %
insertarproblemausuarioenvío
guardar
10 % (insertar 3 criterios + guardar)
listarproblemausuario
10% (Implementación de los 2 criterios)
estadísticaproblema 10 %usuario 20 %
ranklistproblemausuario
Implementación de 1 criterio 20%Implementación de los 2 criterios 20%+20% = 40%
buscarproblemausuario
Implementación de 1 criterio 30%Implementación de los 2 criterios 30%+10% = 40%
E.3. Seguimiento y evaluación continuaCon el objetivo de permitir un seguimiento del trabajo realizado por los alumnos, para orientarlos mejor en la resolución del problema y corregir pronto los posibles fallos, los grupos deberán realizar dos tutorías de seguimiento con los profesores de prácticas antes de la entrega final de la práctica.
- La primera entrevista será durante la primera quincena de enero. En ella los alumnos deberán llevar preparado el diseño de su programa, en concreto: el esquema gráfico de los tipos de datos existentes, la decisión de las estructuras de datos a usar para cada tipo, y la descomposición modular del programa. Así mismo deberán entregar el código que tengan
Hoja de descripción de la práctica nº 1 Página 16 de 17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez OnlinePráctica 1. Estructuras de datos.
desarrollado, incluyendo por lo menos: los ficheros de cabecera de los módulos y la implementación de alguna de las estructuras más relevantes.
- La segunda entrevista será durante la primera quincena de marzo. En ella se entregará y revisará esta práctica, y deberán funcionar como mínimo los comandos obligatorios.
El profesor asignado a cada grupo se encargará de convocar a los alumnos a una fecha y hora determinada (esta información aparecerá también actualizada en la página web de los profesores).
E.4. Otras cuestionesLa práctica se deberá realizar preferiblemente en grupos de dos alumnos. De forma extraordinaria se permiten grupos de 1 alumno, en cuyo caso la parte obligatoria contará un 70%.
Para realizar las pruebas, los profesores dejarán en la página web de la asignatura un programa generador de casos de prueba.
Hoja de descripción de la práctica nº 1 Página 17 de 17