Estructuras de Datos y Algoritmos

advertisement
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
Descargar