added parallel strategy in apriori
This commit is contained in:
@@ -5,6 +5,7 @@ import DataModel
|
|||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Debug.Trace (trace)
|
import Debug.Trace (trace)
|
||||||
import qualified Data.List as List
|
import qualified Data.List as List
|
||||||
|
import Control.Parallel.Strategies(parMap, rpar)
|
||||||
|
|
||||||
semiUnion :: ItemSet -> ItemSet -> ItemSet
|
semiUnion :: ItemSet -> ItemSet -> ItemSet
|
||||||
semiUnion (ItemSet set1) (ItemSet set2) = ItemSet $
|
semiUnion (ItemSet set1) (ItemSet set2) = ItemSet $
|
||||||
@@ -24,8 +25,8 @@ semiUnion (ItemSet set1) (ItemSet set2) = ItemSet $
|
|||||||
generateNextLevel :: [ItemSet] -> [ItemSet]
|
generateNextLevel :: [ItemSet] -> [ItemSet]
|
||||||
generateNextLevel level = trace ("Computing level " ++ show (isSize (head level))) $
|
generateNextLevel level = trace ("Computing level " ++ show (isSize (head level))) $
|
||||||
foldr (\value old -> generate value ++ old) [] level where
|
foldr (\value old -> generate value ++ old) [] level where
|
||||||
generate value = takeWhile (/= empty)
|
generate value = takeWhile (/= empty) $
|
||||||
(foldr (\x old -> semiUnion value x : old) [] (tail $ List.dropWhile (/= value) level))
|
parMap rpar (semiUnion value) (tail $ List.dropWhile (/= value) level) -- FIXME: this could be a better strategy
|
||||||
isSize (ItemSet set) = Set.size set
|
isSize (ItemSet set) = Set.size set
|
||||||
|
|
||||||
singletons :: [ItemSet] -> [Item]
|
singletons :: [ItemSet] -> [Item]
|
||||||
|
|||||||
@@ -27,3 +27,4 @@ main = do
|
|||||||
table = map (ItemSet. Set.fromList .map Item) tableFileContent
|
table = map (ItemSet. Set.fromList .map Item) tableFileContent
|
||||||
rules = extractRules threshold table freqPats
|
rules = extractRules threshold table freqPats
|
||||||
output = init $ foldr (\x old -> old++x++"\n") "" $ map show rules
|
output = init $ foldr (\x old -> old++x++"\n") "" $ map show rules
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user