Algoritmos y Estructuras de Datos II - dis.um.esdis.um.es/~domingo/apuntes/AED/0607/pract1.pdf ·...

17
Algoritmos y Estructuras de Datos – Curso 2006/07 Juez Online Prá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, e-mail, 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 100nº 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

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, e­mail, 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 off­line, 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 E­Mail 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 E­Mail:  mailto:Homepage: Country:  SPAIN Register date:  2003­01­31 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 E­Mail:  mailto:Homepage: Country:  SPAIN Register date:  2003­01­31 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/11­17:46:18.900  2291613   (H0) 

2  0:00.018  64   Patrick Fehr  C++  2004/06/15­21:58:22.910  2599476   (H0) 

3  0:00.018  64   Krzysztof Dulêba  C++  2006/07/30­03:14:25.159  4775764   (H0) 

4  0:00.031  64   Alexander A. Maly  C  2004/01/22­16:37:40.666  2233994   (H0) 

5  0:00.037  64   Duval Stéphane  C  2003/12/03­23:18:23.794  2119391   (H0) 

6  0:00.037  64   Claudio Di Martino  C  2004/05/19­12:45:40.368  2534416   (H0) 

7  0:00.045  64   Csaba Noszaly  C  2004/02/06­20:32:30.076  2277385   (H0) 

8  0:00.055  64   Ulan Degenbaev  C++  2004/01/12­09:36:26.500  2209963   (H0) 

9  0:00.059  64   TSE Chi Yung  C  2003/12/03­06:08:49.641  2117519   (H0) 

10  0:00.063  64   Dean Cupovic  C  2004/05/08­13: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 SUBMI­SSIONS 

 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 e­mail 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