El objetivo en este examen de la práctica será modificar dos de las funcionalidades de tu solución de la práctica. Concretamente deberás cambiar:
el método utilizado para calcular la distancia entre dos especies
el método para calcular distancias entre clústers a lo largo de la ejecución del algoritmo de clusterización que construye un árbol filogenético
IMPORTANTE: Este problema de Jutge es el único canal disponible para realizar la entrega del examen de la práctica. Ten en cuenta que
Dispondrás de 1h 45 min para la resolución del examen.
La nota del examen procederá exclusivamente de la corrección automática de tu último envío.
No superar ningún juego de pruebas conlleva un cero en la nota de este examen.
Podrás realizar tantas entregas como quieras, pero solo se tendrá en cuenta la más reciente.
Las dos nuevas funcionalidades que has de implementar en este examen
están descritas con todo detalle en el documento
enunciado_examen.pdf que forma parte del
archivo public.tar que puedes descargar en
esta página (icono del gatito).
Recomendamos que hagas una copia “limpia” de tu práctica en un
subdirectorio aparte y en esa copia lleves a cabo todos los cambios.
Verifica que todos los módulos compilan sin errores, que el proceso de
montaje da un archivo ejecutable correcto y que el
program.exe pasa el juego de pruebas público suministrado.
Comprueba que el Makefile genera el fichero
program.exe y crea el fichero .tar para hacer
el envío al Jutge. Asegúrate que entregas el fichero .tar
con la solución del examen, no la solución original.
El Jutge prueba tus entregas mediante 4 juegos de pruebas que, salvo
por el cambio del comando #ejecuta_paso_wpgma
por el comando #ejecuta_paso_clust, son
similares a los usados en la práctica—de hecho son casi iguales, solo
algo menos “exigentes” respecto a la eficiencia.
sample: el juego de pruebas público
privat1: solo distancias entre especies
privat2: clusters 1
privat3: clusters 2
En un fichero llamado practica.tar debes
entregar
Los ficheros .hh y
.cc de las clases y el programa principal. No
incluyas ficheros .o y similares.
El fichero Makefile, que usaremos para
generar y probar el ejecutable
Ten en cuenta las siguientes restricciones:
El fichero que contiene el programa principal se ha de llamar
program.cc (recuerda cambiar la opción del
main que realiza un paso del algoritmo de
construcción del árbol filogenético, para que pase a llamarse
ejecuta_paso_clust)
El Makefile ha de generar un ejecutable
llamado program.exe
Es importante que uses las opciones de compilación del Jutge de PRO2 (véase Documentation Compilers PRO2 en www.jutge.org)
No usar la opción -D_GLIBCXX_DEBUG o
usarla de forma incorrecta podrá ser penalizado
Produce el fichero practica.tar con la
instrucción Linux
tar -cvf practica.tar fitxer1 fitxer2 fitxer3 ...
desde el directorio/carpeta donde tengas los ficheros que vas a
entregar. Incluye esta instrucción en tu Makefile, de forma que el
.tar se pueda generar ejecutando
make practica.tar. Con eso reduciras el riesgo
de error en sucesivas entregas. El Jutge no acepta
.tar donde los ficheros estén dentro de
carpetas. Recomendamos usar GNU tar para
reducir el riesgo de que el fichero
practica.tar sea incompatible con el Jutge. No
es necesario incluir BinTree.hh en
practica.tar.
Input
3 lee_cjt_especies 5 d GCTCCTGTCCGTTTCAGCCG e TACACCATTAACCGGTGGGG a AAAAGATGACCAGCGTAATG b GCAACCTTTGTGGGCGCAGT c ACGATTTGCGTAAGCTATGT imprime_cjt_especies tabla_distancias imprime_arbol_filogenetico crea_especie f GAAAAAAAAAAAAAAAAAAAAA crea_especie g AAAAAAAAAAAAAAAAAAAAAA imprime_cjt_especies tabla_distancias imprime_arbol_filogenetico elimina_especie nuevo1 crea_especie nuevo1 TTTAAACCCGGG inicializa_clusters elimina_especie a imprime_cjt_especies tabla_distancias ejecuta_paso_clust imprime_cluster c ejecuta_paso_clust imprime_cluster g imprime_cluster cg imprime_cluster nuevo1 ejecuta_paso_clust ejecuta_paso_clust imprime_cluster cg crea_especie nuevo2 AATCTGGCTCTGAATAAGACCCAGTATCAAGCCTTACCA ejecuta_paso_clust ejecuta_paso_clust imprime_cluster a inicializa_clusters crea_especie nuevo2 AAA imprime_arbol_filogenetico lee_cjt_especies 0 imprime_cjt_especies tabla_distancias imprime_arbol_filogenetico ejecuta_paso_clust crea_especie pangolin AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA imprime_cjt_especies tabla_distancias obtener_gen pangolin imprime_arbol_filogenetico ejecuta_paso_clust fin
Output
# lee_cjt_especies # imprime_cjt_especies a AAAAGATGACCAGCGTAATG b GCAACCTTTGTGGGCGCAGT c ACGATTTGCGTAAGCTATGT d GCTCCTGTCCGTTTCAGCCG e TACACCATTAACCGGTGGGG # tabla_distancias a: b (34.5161) c (47.4937) d (34.2871) e (36.0398) b: c (37.1501) d (36.361) e (42.2486) c: d (38.6859) e (32.8337) d: e (32.58) e: # imprime_arbol_filogenetico [(abcde, 19.465) [(ab, 17.258) [a][b]][(cde, 17.8799) [c][(de, 16.29) [d][e]]]] # crea_especie f GAAAAAAAAAAAAAAAAAAAAA # crea_especie g AAAAAAAAAAAAAAAAAAAAAA # imprime_cjt_especies a AAAAGATGACCAGCGTAATG b GCAACCTTTGTGGGCGCAGT c ACGATTTGCGTAAGCTATGT d GCTCCTGTCCGTTTCAGCCG e TACACCATTAACCGGTGGGG f GAAAAAAAAAAAAAAAAAAAAA g AAAAAAAAAAAAAAAAAAAAAA # tabla_distancias a: b (34.5161) c (47.4937) d (34.2871) e (36.0398) f (26.0019) g (25.0995) b: c (37.1501) d (36.361) e (42.2486) f (16.825) g (16.2562) c: d (38.6859) e (32.8337) f (16.2248) g (15.6649) d: e (32.58) f (17.3751) g (16.7991) e: f (17.3751) g (16.7991) f: g (96.3763) g: # imprime_arbol_filogenetico [(abfdcge, 17.597) [(abfd, 15.8008) [a][(bfd, 13.434) [(bf, 8.4125) [b][f]][d]]][(cge, 12.4082) [(cg, 7.83246) [c][g]][e]]] # elimina_especie nuevo1 ERROR: La especie nuevo1 no existe. # crea_especie nuevo1 TTTAAACCCGGG # inicializa_clusters a: b (34.5161) c (47.4937) d (34.2871) e (36.0398) f (26.0019) g (25.0995) nuevo1 (37.614) b: c (37.1501) d (36.361) e (42.2486) f (16.825) g (16.2562) nuevo1 (38.5622) c: d (38.6859) e (32.8337) f (16.2248) g (15.6649) nuevo1 (33.8415) d: e (32.58) f (17.3751) g (16.7991) nuevo1 (35.0666) e: f (17.3751) g (16.7991) nuevo1 (52.3519) f: g (96.3763) nuevo1 (17.6348) g: nuevo1 (16.9538) nuevo1: # elimina_especie a # imprime_cjt_especies b GCAACCTTTGTGGGCGCAGT c ACGATTTGCGTAAGCTATGT d GCTCCTGTCCGTTTCAGCCG e TACACCATTAACCGGTGGGG f GAAAAAAAAAAAAAAAAAAAAA g AAAAAAAAAAAAAAAAAAAAAA nuevo1 TTTAAACCCGGG # tabla_distancias b: c (37.1501) d (36.361) e (42.2486) f (16.825) g (16.2562) nuevo1 (38.5622) c: d (38.6859) e (32.8337) f (16.2248) g (15.6649) nuevo1 (33.8415) d: e (32.58) f (17.3751) g (16.7991) nuevo1 (35.0666) e: f (17.3751) g (16.7991) nuevo1 (52.3519) f: g (96.3763) nuevo1 (17.6348) g: nuevo1 (16.9538) nuevo1: # ejecuta_paso_clust a: b (34.5161) cg (36.2966) d (34.2871) e (36.0398) f (26.0019) nuevo1 (37.614) b: cg (26.7032) d (36.361) e (42.2486) f (16.825) nuevo1 (38.5622) cg: d (27.7425) e (24.8164) f (56.3006) nuevo1 (25.3977) d: e (32.58) f (17.3751) nuevo1 (35.0666) e: f (17.3751) nuevo1 (52.3519) f: nuevo1 (17.6348) nuevo1: # imprime_cluster c ERROR: El cluster c no existe. # ejecuta_paso_clust a: bf (30.259) cg (36.2966) d (34.2871) e (36.0398) nuevo1 (37.614) bf: cg (41.5019) d (26.8681) e (29.8118) nuevo1 (28.0985) cg: d (27.7425) e (24.8164) nuevo1 (25.3977) d: e (32.58) nuevo1 (35.0666) e: nuevo1 (52.3519) nuevo1: # imprime_cluster g ERROR: El cluster g no existe. # imprime_cluster cg [(cg, 7.83246) [c][g]] # imprime_cluster nuevo1 [nuevo1] # ejecuta_paso_clust a: bf (30.259) cge (36.211) d (34.2871) nuevo1 (37.614) bf: cge (37.6052) d (26.8681) nuevo1 (28.0985) cge: d (29.355) nuevo1 (34.3824) d: nuevo1 (35.0666) nuevo1: # ejecuta_paso_clust a: bfd (31.6017) cge (36.211) nuevo1 (37.614) bfd: cge (34.8551) nuevo1 (30.4212) cge: nuevo1 (34.3824) nuevo1: # imprime_cluster cg ERROR: El cluster cg no existe. # crea_especie nuevo2 AATCTGGCTCTGAATAAGACCCAGTATCAAGCCTTACCA # ejecuta_paso_clust a: bfdnuevo1 (33.1048) cge (36.211) bfdnuevo1: cge (34.737) cge: # ejecuta_paso_clust abfdnuevo1: cge (35.0318) cge: # imprime_cluster a ERROR: El cluster a no existe. # inicializa_clusters b: c (37.1501) d (36.361) e (42.2486) f (16.825) g (16.2562) nuevo1 (38.5622) nuevo2 (37.3137) c: d (38.6859) e (32.8337) f (16.2248) g (15.6649) nuevo1 (33.8415) nuevo2 (34.8546) d: e (32.58) f (17.3751) g (16.7991) nuevo1 (35.0666) nuevo2 (37.32) e: f (17.3751) g (16.7991) nuevo1 (52.3519) nuevo2 (38.4702) f: g (96.3763) nuevo1 (17.6348) nuevo2 (22.5262) g: nuevo1 (16.9538) nuevo2 (21.7552) nuevo1: nuevo2 (30.6907) nuevo2: # crea_especie nuevo2 AAA ERROR: La especie nuevo2 ya existe. # imprime_arbol_filogenetico [(bfdnuevo1cgenuevo2, 17.0217) [(bfdnuevo1, 15.2106) [(bfd, 13.434) [(bf, 8.4125) [b][f]][d]][nuevo1]][(cgenuevo2, 15.8467) [(cge, 12.4082) [(cg, 7.83246) [c][g]][e]][nuevo2]]] # lee_cjt_especies # imprime_cjt_especies # tabla_distancias # imprime_arbol_filogenetico ERROR: El conjunto de clusters es vacio. # ejecuta_paso_clust ERROR: num_clusters <= 1 # crea_especie pangolin AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # imprime_cjt_especies pangolin AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # tabla_distancias pangolin: # obtener_gen pangolin AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # imprime_arbol_filogenetico [pangolin] # ejecuta_paso_clust ERROR: num_clusters <= 1