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.
- 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 (Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.) 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.