[ Última actualización: programa de referencia y resultados preliminares disponibles, ver más abajo]
Por lo tanto, quiero probar la compensación de velocidad / complejidad con una aplicación clásica: la clasificación.
Escriba una función ANSI C que clasifique una matriz de números de coma flotante en orden creciente .
No se puede utilizar cualquier bibliotecas, llamadas al sistema, multithreading o ASM en línea.
Entradas juzgadas en dos componentes: longitud del código y rendimiento. Puntuación de la siguiente manera: las entradas se ordenarán por longitud (registro de # caracteres sin espacios en blanco, para que pueda mantener algo de formato) y por rendimiento (registro de # segundos sobre un punto de referencia), y cada intervalo [mejor, peor] se normaliza linealmente a [ 0,1]. El puntaje total de un programa será el promedio de los dos puntajes normalizados. La puntuación más baja gana. Una entrada por usuario.
La clasificación tendrá que (eventualmente) estar en su lugar (es decir, la matriz de entrada tendrá que contener los valores ordenados en el momento de la devolución), y debe usar la siguiente firma, incluidos los nombres:
void sort(float* v, int n) {
}
Caracteres a contar: aquellos en la sort
función, firma incluida, más funciones adicionales llamadas por él (pero sin incluir el código de prueba).
El programa debe manejar cualquier valor numérico float
y matrices de longitud> = 0, hasta 2 ^ 20.
Conectaré sort
y sus dependencias en un programa de prueba y compilaré en GCC (sin opciones sofisticadas). Alimentaré un montón de matrices en él, verificaré la exactitud de los resultados y el tiempo total de ejecución. Las pruebas se ejecutarán en un Intel Core i7 740QM (Clarksfield) en Ubuntu 13. Las
longitudes de matriz abarcarán todo el rango permitido, con una mayor densidad de matrices cortas. Los valores serán aleatorios, con una distribución de cola gorda (tanto en el rango positivo como en el negativo). Los elementos duplicados se incluirán en algunas pruebas.
El programa de prueba está disponible aquí: https://gist.github.com/anonymous/82386fa028f6534af263
Importa el envío como user.c
. El número de casos de prueba ( TEST_COUNT
) en el punto de referencia real será 3000. Proporcione cualquier comentario en los comentarios de las preguntas.
Plazo: 3 semanas (7 de abril de 2014, 16:00 GMT). Publicaré el punto de referencia en 2 semanas.
Puede ser aconsejable publicar cerca de la fecha límite para evitar regalar su código a los competidores.
Resultados preliminares, a partir de la publicación de referencia:
Estos son algunos resultados. La última columna muestra el puntaje como un porcentaje, cuanto más alto mejor, colocando a Johnny Cage en primer lugar. Los algoritmos que eran de órdenes de magnitud más lentos que el resto se ejecutaron en un subconjunto de pruebas y se extrapolaron en el tiempo. El propio C qsort
está incluido para comparación (¡Johnny's es más rápido!). Realizaré una comparación final a la hora de cierre.