Estoy buscando una estructura de datos en Haskell que sea compatible con indexación rápida y rápida. Esto es para un problema de memorización que surge de la recursión.Haskell: Datastruture con O (1) anexión y O (1) indización?
Desde el modo en que funcionan los vectores en C++ (que son mutables, pero eso no debería importar en este caso) parece que los vectores inmutables con (O) amortiguado (1) añaden y O (1) indexación debería ser posible (ok, no lo es, mira los comentarios a esta pregunta). ¿Es posible esto en Haskell o debería ir con Data.Sequence que tiene (AFAICT de todos modos) O (1) anexar y O (log (min (i, n-i))) indización?
En una nota relacionada, como novato de Haskell, anhelo una guía práctica y concisa de las estructuras de datos de Haskell. Idealmente, esto proporcionaría una visión general bastante completa de las estructuras de datos más prácticas junto con las características de rendimiento y los indicadores de las bibliotecas de Haskell donde se implementan. Parece que hay mucha información por ahí, pero me parece un poco dispersa. ¿Estoy pidiendo demasiado?
Estoy bastante seguro de que no existe tal estructura de datos. Si todos sus adjuntos suceden linealmente, use 'Data.Vector' ya que fusion le dará el rendimiento que desea, de lo contrario use' Data.Sequence' –
Gracias. Creo que debería ser posible, pero tal vez especializado ... ¿Puedes explicar a qué te refieres con "todos tus anexos sucedieron linealmente"? ¿Quiere decir con índices que aumentan linealmente? Parece que con el vector cada operación seguiría siendo O (n) ... – Paul
, básicamente, si puede pensar que el vector está "enhebrado" a través de su código de una manera que no guarda valores intermedios, los anexos pueden ser " fusionado "en una sola operación. –