Tengo problemas para entender las instrucciones de implementación de Fannkuch. Instrucciones: http://www.haskell.org/haskellwiki/Shootout/Fannkuch¿Cómo funciona Fannkuch?
Después del paso "Cuenta el número de vueltas, aquí 5.", estoy perdido.
Tengo problemas para entender las instrucciones de implementación de Fannkuch. Instrucciones: http://www.haskell.org/haskellwiki/Shootout/Fannkuch¿Cómo funciona Fannkuch?
Después del paso "Cuenta el número de vueltas, aquí 5.", estoy perdido.
Guau, sí, esa no es la mejor descripción de algoritmo :).
Mi interpretación es que quieren que hagas lo siguiente:
fannkuch(n) { int maxFlips = 0, printCount = 0; foreach permutation p of [1..n] { maxFlips = max(maxFlips, flipCount(p)); if (printCount++ < 30) printPermutation(p); } print(maxFlips); } flipCount(p) { int count = 0; while (p[0] != 1) { reverse(p, p + p[0]); count++; } return count; }
Véase el Benchmarks Game - Fannkuch
que requieren los primeros 30 permutaciones para ser impreso era sólo una forma sencilla para limitar los cambios aceptables que podrían ser hecho al algoritmo.
Gracias Gary. Estoy entendiendo esto ahora, sin embargo, noté que parece haber un orden correcto de permutaciones que se imprimen. Estoy tratando de entender ahora por qué se imprimen esas 30 permutaciones específicas, y por qué en ese orden. – mudge
La orden de permutación específica realmente no importa. Ese orden específico enumera las permutaciones en orden lexicográfico de 'más pequeño' a 'más grande'. Eso es generalmente cómo se comportarían las funciones como next_permutation() en C++ dada una lista ordenada. Interesante artículo sobre esto -> http://marknelson.us/2002/03/01/next-permutation/. –
¿Entonces la lista de 30 permutaciones es solo el resultado de la función para generar las primeras permutaciones? No están completamente en orden lexicográfico. La cuarta y quinta permutaciones están fuera del orden lexicográfico. – mudge