UNIVERSIDAD AUTÓNOMA DE MADRID INGENIERÍA DE TELECOMUNICACIÓN ASIGNATURA: ESTRUCTURA DE DATOS Y ALGORITMOS PRÁCTICA 4: ALGORITMOS DE ORDENACIÓN REALIZACIÓN Y ENTREGA DE LA PRÁCTICA: Realización Turno A: 16/5/2007, Entrega Turno A: 23/5/2007. Realización Turno B: 17/5/2007, Entrega Turno B: 24/5/2007. Realización Turno C: 17/5/2007, Entrega Turno C: 24/5/2007. OBJETIVOS: El objetivo de esta práctica es implementar algoritmos avanzados de ordenación que utilizan la metodología de divide y vencerás a fin de lograr capacidad para usar en forma eficiente los distintos métodos. MEMORIA A PRESENTAR: Cada equipo conformado deberá enviar por la Web para entrega de prácticas de la asignatura EDA el código fuente (archivos .c), los archivos cabeceras (archivos .h) y los archivos .dsp y .dsw correspondientes a los problemas planteados. Los archivos de cada carpeta (una por problema) deben comprimirse según normas establecidas en la Web de la asignatura. Adicionalmente, debe entregarse una documentación (en modalidad póster) en la que se describa brevemente la resolución del problema realizada, se detallen las respuestas solicitadas y se adjunte el código impreso de los distintos programas junto con los aspectos de equipo especificados en la Web de la asignatura. NORMAS BÁSICAS: Las siguientes normas deben ser consideradas en la realización de la solución a los problemas propuestos y la entrega del material: 1. Estilo de programación: debe ajustarse a las normas de programación definidas para el curso (pueden consultarse en la Web). 2. Pruebas: es especialmente importante el control de errores; es justificable que un programa no admita valores muy grandes de los datos, pero no es justificable que el programa tenga un comportamiento anómalo con dichos valores. Los ejecutables deben de haberse compilado con el Visual C++, y deben de poder ejecutarse en una sesión DOS de Windows 98 o superior. 3. Nombre de los archivos: debe ser de la forma P4n_xxx.c, siendo n el número de problema (1, 2 ó 3) y xxx el código de turno (A, día miércoles; B, día jueves a la tarde; ó C, día jueves a la mañana) y el número de equipo. 1 PROBLEMAS: PROBLEMA 1: Implementar en MergeSort.c el algoritmo de ordenación correspondiente al método conocido como MergeSort. El prototipo de la función será: void OrdIntercalacion( int * tabla, int n ); donde tabla es la tabla a ordenar y n es su tamaño. El tipo de datos de la tabla a ordenar será int. Generar los valores de esta tabla mediante permutaciones aleatorias. El pseudocódigo para una permutación aleatoria es: a) Pedir memoria tamaño n. b) Asignar i a la tabla[ i ] para i = 1 a n. c) Generar permutaciones aleatorias, intercambiando tabla[ i ] con tabla[ número aleatorio ] para i = 1 a n. Para este generador, a codificar en el correspondiente código C, el prototipo será: int * GenerarTablaPerm( int tam ); PROBLEMA 2: Implementar en HeapSort.c el algoritmo de ordenación correspondiente al método conocido como HeapSort. El prototipo de la función será: void HeapSort( int * tabla, int n ); donde tabla es la tabla a ordenar y n es su tamaño. Generar los números de la tabla de la misma forma que en el problema anterior. Nota: En ambos problemas prestar atención a la reusabilidad del software. PROBLEMA 3: Comprobar empíricamente los tiempos de ejecución tanto para el programa correspondiente al algoritmo MergeSort como al programa que implementa el algoritmo HeapSort para distintos casos de prueba con tamaños de tablas mayores de 100.000 elementos. Interpretar y comparar los resultados obtenidos. 2