Как сохранить список списка int [[Int]] в Data.Array.Repa, чтобы включить параллельные операции? - PullRequest
0 голосов
/ 29 марта 2011

Я работаю над способом представления базы данных транзакций, которую можно просматривать в виде списка элементов списка, будущие операции с этими списками подразумевают: проекцию, уменьшение, получение максимума, разбиение, уменьшение некоторых элементов и т. Д.на ...

type Item = int

transaction  :: [Item]
database     :: [transaction]

for example [[1,2,3], [2,3,4]]

я видел предыдущие работы, которые использовали trie для представления таких структур данных

data LexicoTreeItem = Nil | Node item LexicoTreeItem LexicoTreeItem int

-- lexicoTreeItem item next alt weigth
-- item is the item of the node
-- next is the rest of the transaction, each path of the trie is a transaction
-- alt is another transaction starting with the item
-- weigth is the number of transactions which use this item

например для представления [[1, 2,3], [1,2,3,4]]

 1 - 2 - 3
     |
     3 - 4

один напишет

Node 1 (Node 2 (Node 3 Nil Nil 1) (Node 3 (Node 4 Nil Nil 1) Nil 1 ) 2 ) Nil 2

Проблема в том, что эта структура данных неэффективна при работе спараллелизм в хаскеле.Я узнал, что Data.Array.Repa обрабатывает параллелизм более эффективно, чем Data.Array и Node.

Но я не знаю, как представить вышеуказанную базу данных.Чтобы можно было выполнять такие операции, как: проекция, уменьшение, составление списков, максимум, подавление больше, но ... параллельно, используя Haskell

Спасибо за чей-либо ответ

1 Ответ

3 голосов
/ 29 марта 2011

Data.Array.Repa может обрабатывать двумерные массивы, но они должны быть прямоугольными.Форма [[Int]] не применяет прямоугольную форму.Если он прямоугольный, то вы можете использовать Data.Array.Reap.fromList для преобразования из плоского [Int] в массив.

...