|
CURSO 2008-2009
TRABAJOS de RECONOCIMIENTO DE
PATRONES
Última actualización: Martes, 02-Dic-2008 11:01.
Trabajos finales.
- OBJETIVOS. Los objetivos de este trabajo, el más
ambicioso del curso, son los siguientes:
- Ser capaz de resolver un problema casi real.
- Usar los algoritmos vistos en clase.
- Ser capaces de asimilar nuevos algoritmos.
- Ser capaces de leer bibliografía científica.
- Implementar algoritmos de reconocimiento de
patrones.
- Tener en cuenta las complejidades a la hora
de diseñar e implementar algoritmos.
- Redactar una memoria científica de manera
correcta.
- Exponer vuestro trabajo en clase con eficacia
comunicativa.
- LISTA DE LOS TRABAJOS:
- Àrboles de sufijos.
- Algoritmo de Boyer-Moore.
- Distancia de edición.
- Comparación de algoritmos.
- Buscador de documentos.
Cada pareja, o si lo hace solo cada alumno, ha
de elegir un trabajo entre los de la lista anterior.
- PARTES DEL TRABAJO:
- Lectura y comprensión de un artículo
sobre RP.
- Implementación de los algoritmos.
- Prueba de los algoritmos.
- Resolución de un problema de RP.
- Redacción de la memoria.
- Exposición en clase del trabajo.
- MATERIAL DE LOS TRABAJOS.
- Cristina
Martín: árboles de sufijos -1.
- Alfonso
Roa: árboles de sufijos -2.
- Rocío
Mañana y Carlos Vidal: distancia de permutación
dirigida.
- Juan
Almagro y Mónica González: distancia
de transporte.
- Álvaro Valdiviejas: comparación
de algoritmos.
Trabajo II: algoritmo
de Karp-Rabin, algoritmo Z y algoritmo de autómatas finitos.
- DESCRIPCIÓN. En este trabajo deberéis implementar
los siguientes algoritmos:
- Algoritmo de Karp-Rabin.
- Algoritmo Z.
- Algoritmo de autómatas finitos.
-
EXPERIMENTOS. Cada uno de los algoritmos anteriores
tendrá que ejecutarse sobre los ficheros que aparecen más
abajo. Por ejemplo, el fichero Patron1.txt contiene un patrón
que hay que buscar en el fichero Texto1.txt, y así sucesivamente.
- Un fichero zip con todos los ficheros anteriores se encuentra
aquí. Los
patrones pueden contener un carácter comodín; véase
el problema 34.1-5 de la página 857 del libro de Cormen.
En los casos en que aparezca el carácter comodín
hay que resolver el problema de reconocimiento de patrones con
comodín.
- La salida de los programas ha de contener la respuesta a las
preguntas:
- ¿Está el patrón P en el texto T?;
- ¿Cuántas veces está el patrón
en el texto?
- Para cada algoritmo se reflejarán sus características
relevantes. Por ejemplo, para el algoritmo de Rabin-Karp, se
contará el número de falsos positivos.
- LENGUAJE. La implementación se puede realizar en el lenguaje
que se prefiera (C, Pascal, Maple, C++, etc.). Hay que entregar el
código, el ejecutable y la memoria bien por correo electrónico
(fmartin@eui.upm.es) o en
persona (despacho 2004).
- MEMORIA. Se redactará una memoria en que se explicarán
brevemente las implementaciones de los algoritmos, la realización
práctica del experimento y, finalmente, se interpretarán
los datos del experimento y se obtendrán conclusiones. Se responderán,
al menos, a las siguientes preguntas:
- ¿Qué algoritmo es más fácil de implementar?
Da razones.
- ¿Qué algoritmos son mejores y en qué condiciones?
Razona la respuesta.
- Da una lista de las dificultades técnicas con que te has
encontrado al programar los algoritmos.
- Describe la estrategia de prueba de los programas.
- PUNTUACIÓN. Descontaré puntos si la memoria:
- Tiene faltas de ortografía.
- Está plagada de material irrelevante.
- Falta claridad de pensamiento.
- Es más larga de lo necesario o es más corta de
lo necesario.
- Hace afirmaciones irreflexivas.
- ERRORES DE CÓDIGO. Descontaré puntos si el código:
- No está comentado debidamente.
- No está estructurado claramente.
- Las variables tienen nombres absurdos.
- Tiene errores de ejecución.
- La interfaz es infame.
- FECHA LÍMITE. La fecha límite es el 2 de diciembre
a las 23:59 horas.
- PREGUNTAS Y TUTORÍAS. Estoy dispuesto a responder preguntas
sobre los algoritmos y sus posibles estrategias de codificación.
No responderé preguntas sobre errores de codificación;
tal cosa, a estas alturas, es responsabilidad vuestra.
Trabajo I: comparación
de algoritmos de ordenación:
- IMPLEMENTACIÓN. Hay que implementar los siguientes algoritmos
de ordenación:
- Quicksort, versión recursiva.
- Quicksort, versión iterativa.
- Quicksort, versión con la mediana (algoritmo de Floyd).
- Divide y vencerás, versión recursiva.
- Divide y vencerás, versión iterativa.
- Inserción (selección del máximo en cada
paso).
- Recuento (counting sort).
- EXPERIMENTOS. Se han de diseñar de acuerdo a las siguientes
instrucciones:
- Cada uno de los algoritmos ha de ejecutarse sobre un juego de
n datos. Los valores de n son: 100, 200, ..., 10.000, esto es, aumentan
de 100 en 100 hasta 10.000.
- El rango de valores para los datos es de de 1 a 10.000. Los datos
se generarán aleatoriamente. Se permiten números repetidos.
- Para cada juego de datos, se ejecutarán los algoritmos
anteriores y se guardarán los tiempos de ejecución.
Con la pareja tamaño de entrada y tiempo de ordenación
se generarán gráficas poligonales para comparar los
tiempos de ejecución de cada uno; véase el ejemplo
de más abajo.
- A partir de las gráficas, se estimarán las siguientes
cantidades:
- El tamaño de entrada para el cual un algoritmo es
más rápido que otro.
- Constantes que acompañan a las complejidades.

- LENGUAJE. La implementación se puede realizar en el lenguaje
que se prefiera (C, Pascal, Maple, C++, etc.). Hay que entregar el código
y el ejecutable bien por correo electrónico (fmartin@eui.upm.es)
o en persona (despacho 2004).
- MEMORIA. Se redactará una memoria en que se explicarán
brevemente las implementaciones de los algoritmos, la realización
práctica del experimento y, finalmente, se interpretarán
los datos del experimento y se obtendrán conclusiones. Se responderán,
al menos, a las siguientes preguntas:
- ¿Qué algoritmo es mejor y bajo qué circunstancias?
- ¿Es el algoritmo de recuento el mejor? Justifica la respuesta.
- Dar una clasificación de los algoritmos en términos
de tiempo de acuerdo al tamaño de la entrada.
- Haciendo uso de la creatividad que se os supone, ofrecer vuestras
propias conclusiones. Procurad que vayan acompañadas de razonamientos.
- PUNTUACIÓN. Descontaré puntos si la memoria:
- Tiene faltas de ortografía.
- Está plagada de material irrelevante.
- Falta claridad de pensamiento.
- Es más larga de lo necesario o es más corta de lo
necesario.
- ERRORES DE CÓDIGO. Descontaré puntos si el código:
- No está comentado debidamente.
- No está estructurado claramente.
- Las variables tienen nombres absurdos.
- Tiene errores de ejecución.
- La interfaz es infame.
- FECHA LÍMITE. La fecha límite es el 7 de noviembre a
las 23:59 horas.
- PREGUNTAS Y TUTORÍAS. Estoy dispuesto a responder preguntas
sobre el algoritmo, su corrección, su complejidad y similares.
No responderé preguntas sobre errores de codificación,
pues pienso que, a estas alturas, es responsabilidad vuestra.
|
|