Apriori算法
来源:互联网 发布:软件项目部署方案 编辑:程序博客网 时间:2024/06/10 21:28
1.文件阅读器
package MyApriori;import java.io.BufferedReader ;import java.io.File ;import java.io.FileInputStream ;import java.io.InputStreamReader;import java.util.ArrayList ;import java.util.List ;public class FileReader{ public static List<List<String>> getDatabase() { List<List<String>> db = new ArrayList<List<String>>() ; try { File file = new File("data.txt") ; if ( file.isFile() && file.exists()) { InputStreamReader read = new InputStreamReader(new FileInputStream(file)) ; BufferedReader reader = new BufferedReader( read ) ; String line = null; while ( (line = reader.readLine())!= null ) { String [] strToknizer = line.split(" ") ; List<String> tmpLine = new ArrayList<String>() ; for ( int i = 1 ; i < strToknizer.length ; i++ ) { tmpLine.add(strToknizer[i]) ; } db.add(tmpLine) ; } reader.close(); } else { System.out.println("fail to find target file !"); } } catch (Exception e) { System.out.println("fail in reading file\'s content "); e.printStackTrace(); } return db ; }}
A*算法
package MyApriori;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;public class MyApriori {private static boolean endTag=false;private static List<List<String>> cItemset;private static List<List<String>>ckItemset;private static Map<List<String>,Integer> lItemset;private static Map<List<String>,Integer> lkItemset;static List<List<String>> record = new ArrayList<List<String>> ();final static double MIN_SUPPORT = 2 ; static Map<List<String>, Double > confItemset = new HashMap<List<String>,Double >() ; public static List<List<String>> getDataSet () { return FileReader.getDatabase(); } public static List<List<String>> getFirstCandidate () { List<List<String>> cItemset = new ArrayList<List<String>> () ; List<String> tempLine = new ArrayList<String>() ; for( int i = 0 ; i < record.size() ; i++ ) { for (int j = 0 ; j < record.get(i).size(); j++) { if(tempLine.contains(record.get(i).get(j))) ; else { tempLine.add(record.get(i).get(j)) ; } } } for ( int i = 0 ; i < tempLine.size() ;i++) { List<String> str = new ArrayList<String>() ; str.add(tempLine.get(i)); cItemset.add(str) ; } return cItemset ; } static Map<List<String>,Integer> getSupportedItemset( List<List<String>> cItemset ) { Map<List<String>,Integer> supportedItemset = new HashMap<List<String>,Integer> () ; boolean end = true ; for( int i = 0 ; i < cItemset.size(); i++ ) { int count = countFrequent ( cItemset.get(i)) ; if( count >= MIN_SUPPORT ) { supportedItemset.put(cItemset.get(i), count) ; end = false ; } } endTag = end ; //System.out.println(\"value of the endTag here !!!\"+endTag); return supportedItemset ; } static int countFrequent ( List<String> list) { int count = 0 ; for ( int i = 1 ; i < record.size() ; i++ ) { boolean curRecordLineNotHave = false ; for ( int k = 0 ; k < list.size(); k++) { if(!record.get(i).contains(list.get(k))) { curRecordLineNotHave = true ; break ; } } if(curRecordLineNotHave == false ) { count++ ; } } return count ; } /** * method following is the getNextCandidata usually can be known as * get Ck from Lk-1 * */ private static List<List<String>> getNextCandidate ( Map<List<String>,Integer> lItemset ) { List<List<String>> nextItemset = new ArrayList<List<String>>() ; List<List<String>> preItemset = getLItemset(lItemset ) ; int count = 0 ; for ( int i = 0 ; i < preItemset.size() ; i++ ) { List<String> tempLine = new ArrayList<String> () ; tempLine.addAll(preItemset.get(i)) ; for( int j = i+1 ; j < preItemset.size(); j++) { if( preItemset.get(i).size() == preItemset.get(j).size()) { if( 1 == differElemNum(preItemset.get(i),preItemset.get(j))) { int index = getDifferIndex ( preItemset.get(i), preItemset.get(j)) ; tempLine.add(preItemset.get(j).get(index)) ; if( isSubSets ( tempLine, preItemset)) { List<String> aLine = new ArrayList() ; for(int m = 0 ; m < tempLine.size() ;m++) { aLine.add(tempLine.get(m)); } if( nextItemSetNotHave( aLine, nextItemset )) nextItemset.add(aLine) ; } } }//outer if tempLine.remove(tempLine.size()-1 ) ; }//for j } return nextItemset ; } private static boolean nextItemSetNotHave( List<String> aLine , List<List<String>> nextItemset ) { boolean notHave = true ; for( int i = 0 ; i < nextItemset.size(); i++ ) { if(aLine.equals(nextItemset.get(i))) { notHave = false ; } } return notHave ; } private static int getDifferIndex ( List<String> list1 , List<String> list2) { int index = -1 ; for ( int i = 0 ; i < list1.size() ; i++ ) { for( int j = 0 ; j < list1.size(); j++ ) { if ( !list1.get(i).equals(list2.get(j))) { index = j ; } } if ( index != -1 ) break ; } return index ; } private static int differElemNum ( List<String> list1, List<String>list2 ) { int count = 0 ; boolean flag ; for( int i = 0 ; i < list1.size() ; i++ ) { flag = true ; for(int j = 0 ; j < list1.size(); j++ ) { if(list1.get(i).equals(list2.get(j))) { flag = false ; break; } } if( flag == true ) { count++ ; } } return count ; } /** * method following is used to justice whether * @param tempList all subsets except itself is the subsets of * @param lItemset * * @return boolean true : all subsets of tempList are all in * lItemset\'s set * */ private static boolean isSubSets ( List<String> tempList , List<List<String>> lItemset) { boolean flag = false ; for ( int i = 0 ; i < tempList.size() ; i++ ) { List<String> testLine = new ArrayList() ; for (int j = 0 ; j < tempList.size(); j++ ) { if (i!= j ) { testLine.add(tempList.get(j)) ; } } for ( int k = 0 ; k < lItemset.size() ; k++ ) { if ( testLine.equals(lItemset.get(k))) { flag = true ; break ; } } if ( flag == false ) { return false ; } } return flag ; //return true ; } private static List<List<String>> getLItemset ( Map<List<String>, Integer> lItemset ) { List<List<String>> itemset = new ArrayList<List<String>> () ; Iterator<Map.Entry<List<String>, Integer>> iterator = lItemset.entrySet().iterator(); Entry<List<String>, Integer> entry ; while ( iterator.hasNext() ) { entry = iterator.next(); List<String> key = entry.getKey() ; itemset.add(key) ; } return itemset ; } public static void main ( String [] args ) throws Exception { record =getDataSet() ; cItemset = getFirstCandidate() ; lItemset = getSupportedItemset( cItemset ) ; printfLKitemset ( lItemset) ; while ( endTag != true ) { ckItemset = getNextCandidate(lItemset ) ; lkItemset = getSupportedItemset ( ckItemset ) ; if(lkItemset.size() != 0 ) printfLKitemset ( lkItemset) ; cItemset = ckItemset ; lItemset = lkItemset ; } System.out.println("finish ") ; } private static void printfLKitemset ( Map<List<String> , Integer> lkItemset ) { Iterator<Entry<List<String>,Integer>> iterator = lkItemset.entrySet().iterator(); Entry<List<String>,Integer> entry ; while ( iterator.hasNext() ) { entry = iterator.next() ; List<String> key = entry.getKey() ; Integer value = entry.getValue() ; System.out.println("the key : "); for ( int i = 0 ; i < key.size() ; i++ ) { System.out.print(key.get(i)); System.out.print(" "); } System.out.println("the value : "+ value.intValue()); } } }
0 0
- Apriori算法
- Apriori算法
- Apriori算法
- apriori 算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- Apriori算法
- 107. Binary Tree Level Order Traversal II
- adb 调试笔记
- 构造方法
- ssh项目搭建
- JAVA中的字符串的indexOf函数 和substring
- Apriori算法
- java中String 类对象在克隆时候的特殊性
- 紫书动规 例题9-12 UVA
- 谷哥的小弟学后台(38)——SqlMapConfig.xml
- leetcode- Sum of Left Leaves
- Java中byte与(16进制)字符串的互相转换
- hibernate缓存机制详细分析 (转)
- 【集训队出题2011】大楼 题解
- 关于jsp乱码问题