Я работаю над способом представления базы данных транзакций, которую можно просматривать в виде списка элементов списка, будущие операции с этими списками подразумевают: проекцию, уменьшение, получение максимума, разбиение, уменьшение некоторых элементов и т. Д.на ...
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
Спасибо за чей-либо ответ