diff --git a/blatt8/src/blatt8/Apriori.java b/blatt8/src/blatt8/Apriori.java new file mode 100644 index 0000000..b79486b --- /dev/null +++ b/blatt8/src/blatt8/Apriori.java @@ -0,0 +1,205 @@ +package blatt8; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class Apriori { + + + static List itemsets = new ArrayList(); + static float minSup = 0.01f; + static String path = "transactions.txt"; + static int numItems=0; + static int numTransactions=0; + + private static void analyzeTransactionFile(){ + try (BufferedReader br = new BufferedReader(new FileReader(path))) { + String line; + while ((line = br.readLine()) != null) { + numTransactions++; + String[] products = line.split("\\s+"); + for(int i=0;inumItems){ + numItems = Integer.parseInt(products[i])+1; + } + } + } + } + catch(IOException e){ + e.printStackTrace(); + } + System.out.println("Num Transactions:"+numTransactions); + System.out.println("Num Items:"+numItems); + } + + + private static void AprioriAlgorithm(){ + int k=1; + //Calculate L1 + System.out.println(k+"-Itemsets"); + find_frequent_1_itemsets(); + for (k=2;itemsets.size()>0;k++) + { + System.out.println("\n"+k+"-Itemsets"); + generateCandidates(); + + calculateFrequentItemsets(); + } + } + + + private static void generateCandidates() { + int k = itemsets.get(0).length+1; + List candidates = new ArrayList(); + for(int i=0; i(candidates); + if(itemsets.size()>0)System.out.println(itemsets.size()+" Candidates for k="+itemsets.get(0).length); + else System.out.println("0 Candidates"); + } + + + private static boolean prune(int[] c) { +// if(new Random().nextInt(50)==0)return false; + return false; +// for(int skip=0;skip=skip) +// subset[i]=c[i+1]; +// else +// subset[i]=c[i]; +// } +// boolean match=false; +// for(int i=0;i(); + for(int i=0; i=minSup){ + frequent.add(itemsets.get(i)); + printItemset(itemsets.get(i)); + } + } + itemsets = frequent; + if(itemsets.size()>0)System.out.println("Total Number Frequent "+itemsets.get(0).length+"-Itemsets: "+itemsets.size()); + else System.out.println("0 Frequent"); + + } + + private static void printItemset(int[] is) { + String print=""; + for(int i=0;i