diff --git a/FrequentPatterns.hs b/FrequentPatterns.hs index 891a14d..7270bfe 100644 --- a/FrequentPatterns.hs +++ b/FrequentPatterns.hs @@ -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] diff --git a/phase2.hs b/phase2.hs index 5ea60c0..f7fec29 100644 --- a/phase2.hs +++ b/phase2.hs @@ -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 +