如何在Data.Array.Repa中存储int [[Int]]列表的列表,以启用并行操作?

时间:2011-03-29 10:10:14

标签: arrays haskell multidimensional-array parallel-processing multicore

我正在研究表示事务数据库的方式,可以将其视为列表元素列表,这些列表上的未来操作将意味着:投影,减少,获取最大值,分割,减少某些元素等等在......

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

问题是在处理haskell中的并行性时,这种数据结构效率不高。 我了解Data.Array.RepaData.ArrayNode更有效地处理了并行性。

但我不知道如何代表上述数据库。在能够进行操作的方式如:投影,缩小,列表,最大值,抑制更多但是...并行使用Haskell

感谢任何人的回复

1 个答案:

答案 0 :(得分:3)

Data.Array.Repa可以处理二维数组,但它们必须是矩形的。 [[Int]]表单不强制执行矩形形状。如果是矩形,则可以使用Data.Array.Reap.fromList将展平的[Int]转换为数组。