0

나는 목록 요소의 목록으로 볼 수있는 트랜잭션 데이터베이스를 표현하는 방법을 연구하고 있습니다. 이러한 목록의 향후 작업은 투영, 축소, 최대 가져 오기, 분할, 일부 요소 축소 등을 의미합니다. ...병렬 작업을 사용하려면 Data.Array.Repa에 int [[Int]] 목록을 저장하는 방법은 무엇입니까?

type Item = int 

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

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

제가 이러한 데이터 구조

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.RepaData.ArrayNode보다 효율적으로 병렬 처리를 처리했다는 것을 알았습니다.

그러나 위의 데이터베이스를 나타내는 방법을 모르겠습니다. 길에서 같은 작업을 할 수 있도록 :

덕분에 사람의 응답을 하스켈

를 사용하여 투사, 감소, listting, 최대, 병렬 ... an 더 많이하지만 억제

+0

[벡터] (http://hackage.haskell.org/package/vector-0.7.0.1) 패키지의 Data.Vector를 사용하여 벡터 벡터를 생각해 보셨습니까? 이것은 박스형 일 수있는 한 [병렬화] 할 수 있습니다 (http://hackage.haskell.org/package/vector-strategies). –

답변

3

Data.Array.Repa 처리 할 수 2-D 배열이지만 직사각형이어야합니다. [[Int]] 형식은 사각형 모양을 적용하지 않습니다. 사각형 인 경우 Data.Array.Reap.fromList를 사용하여 병합 된 [Int]를 배열로 변환 할 수 있습니다.

관련 문제