added parallel strategy in apriori

This commit is contained in:
IGI-111
2015-04-07 15:32:23 +00:00
parent 38fed1fd2f
commit ae5b95c69d
2 changed files with 4 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ import DataModel
import qualified Data.Set as Set
import Debug.Trace (trace)
import qualified Data.List as List
import Control.Parallel.Strategies(parMap, rpar)
semiUnion :: ItemSet -> ItemSet -> ItemSet
semiUnion (ItemSet set1) (ItemSet set2) = ItemSet $
@@ -24,8 +25,8 @@ semiUnion (ItemSet set1) (ItemSet set2) = ItemSet $
generateNextLevel :: [ItemSet] -> [ItemSet]
generateNextLevel level = trace ("Computing level " ++ show (isSize (head level))) $
foldr (\value old -> generate value ++ old) [] level where
generate value = takeWhile (/= empty)
(foldr (\x old -> semiUnion value x : old) [] (tail $ List.dropWhile (/= value) level))
generate value = takeWhile (/= empty) $
parMap rpar (semiUnion value) (tail $ List.dropWhile (/= value) level) -- FIXME: this could be a better strategy
isSize (ItemSet set) = Set.size set
singletons :: [ItemSet] -> [Item]

View File

@@ -27,3 +27,4 @@ main = do
table = map (ItemSet. Set.fromList .map Item) tableFileContent
rules = extractRules threshold table freqPats
output = init $ foldr (\x old -> old++x++"\n") "" $ map show rules