miércoles, marzo 26, 2008

Midiendo la elegancia

Una de las cosas más estimulantes y sorprendentes de este proyecto es la comparación de la complejidad y eficiencia de los distintos algoritmos que se presentan. Algunos son simples y directos, pero logran un desempeño pobre. Otros son complicados o lentos, pero su complejidad se ve premiada por la victoria.

Pero cada tanto hay alguno de sencillez prístina que además gana limpiamente la competencia; y aunque eso puede indicar una pobreza de estructura del juego en cuestión, también indica estilo y elegancia.

Esto hace pensar que quizá sería interesante definir, para futuras competencias, categorías basadas en la complejidad intrínseca de los distintos algoritmos.

No es atractiva la idea de poner límites al tiempo de ejecución o uso de memoria, como hacen en otras competencias de este tipo; más bien sería deseable dividir los algoritmos según su uso de los recursos y luego, dentro de cada categoría, declarar un vencedor.

No queda claro cómo sería la mejor manera de hacerlo; si alguno se imagina un método elegante, que lo indique aquí y lo discutiremos.

1 comentario:

Toote dijo...

Creo que en cuestiones algorítmicas, los siguientes factores pueden ser relevantes:

1- cantidad de palabras para explicar lo que hace
2- cantidad de líneas de código
3- cantidad de variables utilizadas
4- rendimiento en distintas variedades del mismo juego

si un algoritmo es fácil de explicar en palabras, corto de implementar con sólo un par de variables y sale entre los primeros en diferentes variantes del mismo juego - al menos para mí - es evidentemente elegante.