quiero definir una funciónHaskell: invertir una permutación en el tiempo lineal, utilizando solo lista
invert :: [Int] -> [Int]
que asume que su entrada es una permutación de [0..(n-1)]
, y devuelve su inversa. ¿Se puede definir utilizando solo listas y tuplas (sin matrices) para que se ejecute en tiempo lineal?
Esto es principalmente por interés académico; en código real podría usar Array
o STArray
o similar.
¿Puede explicar qué es un invertido de una permutación ¿lista? – Tarrasch
Tarrasch, mira aquí: http://mathworld.wolfram.com/InversoPermutación.html – Kenji
Me gusta esta pregunta, pero creo que no es posible hacerlo en O (n). Un método sencillo requiere clasificación. Si Haskell enumera O (1) indexado y anexado, entonces sería posible. Muchas operaciones en 'Data.List' son O (n), por lo que estamos muy limitados en términos de eficiencia. – Kenji