В качестве упражнения я написал реализацию алгоритма с самой длинной возрастающей подпоследовательностью , первоначально на Python, но я хотел бы перевести это на Haskell. В двух словах, алгоритм включает в себя сгиб по списку целых чисел, где результатом каждой итерации является массив целых чисел, который является результатом либо изменения одного элемента из , либо добавления одного элемента к предыдущий результат.
Конечно, в Python вы можете просто изменить один элемент массива. В Haskell вы могли бы перестроить массив, заменяя один элемент на каждой итерации, но это кажется расточительным (копирование большей части массива на каждой итерации).
Вкратце, я ищу эффективную структуру данных Haskell, которая представляет собой упорядоченную коллекцию 'n' объектов и поддерживает операции: lookup i
, replace i foo
и append foo
(где i
- это в [0..n-1]). Предложения?