Проблема
Я ищу контейнер, который используется для сохранения частичных результатов проблем 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? Или, каков мой лучший снимок?