Haskell: Чистая структура данных, которая эффективно моделирует блок памяти? - PullRequest
2 голосов
/ 04 января 2012

Я заинтересован в написании виртуальной машины, которая работает с блоком памяти. Я хотел бы смоделировать блок памяти (скажем, 1 МБ) с чистой структурой данных, которая по-прежнему эффективна для чтения и записи в любом месте блока. Не очень интересует изменяемая структура. Существует ли такая структура?

Ответы [ 2 ]

8 голосов
/ 04 января 2012

Пакет vector предлагает неизменяемые (и изменяемые) упакованные и распакованные векторы со всеми ожидаемыми сложностями времени.Изменяемые можно использовать как из IO, так и из ST, и вы можете иметь распакованный массив любого экземпляра Storable.Это намного лучше, чем стандартные модули массивов.

Однако, поскольку вы упомянули эффективные неизменяемые обновления, я бы предложил использовать структуру данных, подобную Map;возможно HashMap из неупорядоченных контейнеров .Возможно, даже стоило бы иметь карту с небольшими распакованными векторами на листьях, чтобы избежать некоторой дополнительной нагрузки на дерево.

В зависимости от вашего варианта использования, вас также может заинтересовать стандартный Data.Sequence., который имеет O (1) доступ к началу и концу и довольно хорошее время доступа к середине последовательности.

0 голосов
/ 04 января 2012

Достаточно ли для вас Data.Array.ST ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...