Проблема
Я ищу контейнер, который используется для сохранения частичных результатов проблем n - 1
для вычисления n
th. Это означает, что размер контейнера в конце всегда будет n
.
Каждый элемент i
контейнера зависит от не менее 2 и до 4 предыдущих результатов.
Контейнер должен предоставить:
- вставки времени в начале или конце (один из двух, не обязательно оба)
- индексирование постоянного времени в середине
или, альтернативно (при инициализации O(n)
):
- редактирование отдельных элементов с постоянным временем
- индексирование постоянного времени в середине
Что такое std::vector
и почему это релевантно
Для тех из вас, кто не знает С++, std::vector
представляет собой массив с динамическим размером. Это идеально подходит для этой проблемы, потому что она способна:
- резервное пространство при строительстве
- предлагает индексирование постоянного времени в середине
- предлагает постоянную установку времени в конце (с зарезервированным пространством)
Поэтому эта проблема разрешима в сложности O(n)
в С++.
Почему Data.Vector
не std::vector
Data.Vector
вместе с Data.Array
обеспечивают аналогичную функциональность std::vector
, но не совсем то же самое. Оба они, конечно, предлагают индексирование по постоянному времени в середине, но они не предлагают ни постоянной модификации времени ((//)
, например, не менее O(n)
), ни постоянной установки времени в начале начала.
Заключение
Какой контейнер действительно имитирует std::vector
в Haskell? Или, каков мой лучший снимок?