Como ejercicio escribí an implementation del longest increasing subsequence algorithm, inicialmente en Python pero me gustaría traducir esto a Haskell. En pocas palabras, el algoritmo implica un pliegue sobre una lista de enteros, donde el resultado de cada iteración es una matriz de enteros que es resultado de cambiando un elemento de o añadiendo un elemento a el resultado anterior.Buscando una estructura similar a una matriz eficiente que admita "replace-one-member" y "append"
Por supuesto, en Python solo puede cambiar un elemento de la matriz. En Haskell, podrías reconstruir la matriz al reemplazar un elemento en cada iteración, pero eso parece un desperdicio (copiar la mayor parte de la matriz en cada iteración).
En resumen lo que estoy buscando es una estructura eficiente de datos Haskell que es una colección ordenada de objetos 'n' y apoya las operaciones: lookup i
, replace i foo
y append foo
(donde i
está en [0..n- 1]). Sugerencias?
Puede usar una matriz mutable. He tenido buenas experiencias con [MVector] (http://hackage.haskell.org/packages/archive/vector/0.9.1/doc/html/Data-Vector.html#t:MVector). – rampion
MVector tiene O (n) append/cons/snoc. –
¿Por qué necesita 'append'? El tamaño final se conoce desde el principio. –