没有得到关闭项目集的确切结果

时间:2014-09-20 13:45:42

标签: java arraylist data-mining

在变量total(数组列表类的实例)中,我有频繁项集的列表。当我找到关闭的频繁项目集时,它显示错误的结果。

在交集方法中,我将查找两个数组列表是否相同。

     ArrayList close=new ArrayList();

                System.out.println("total: "+total);

            for(int i1=0;i1<total.size();i1++)
            {
                List list1=(List)total.get(i1);

                if(close.size()==0)
                close.add(list1);
                else
                {
                    List tp=intersection(list1,close);

                if(tp.size()!=0)
                close.add(list1);
            }
        }
        System.out.println("close: "+close);

    for(int i2=0;i2<total.size();i2++)
        {
            List list1=(List)total.get(i2);

            if(close.size()!=0)
            {
                for(int i1=0;i1<close.size();i1++)
                {
                List list2=(List)close.get(i1);
                List tp=intersect(list1,list2);

                if(tp.size()!=0)
                {
                    if(!close.contains(list1))
                    {
//here hm is containing all the list of frequent item sets with their support count.

                        if(((Integer)hm.get(list1)>(Integer)hm.get(list2))&&((Integer)hm.get(list1)!=(Integer)hm.get(list2)))
                        {
                            close.add(list1);
                            //System.out.println(list1+": "+hm.get(list1)+"  "+list2+": "+hm.get(list2));
                        }

}
                        }
                        }
                     }
                 }


public <T> List<T> intersection(List<T> list1, List<T> list2) 
    {
        List<T> list = new ArrayList<T>();
        for (T t : list1) 
        {
            List<T> list3=(List<T>)list2.get(0);
            if(!list3.contains(t)) 
            {
                return list1;
            }
            if(list.size()!=0)
            return list1;
        }
        return list;
    }

in total object values are like this

total: [[1, 3, 7, 9, 12], [1, 3, 7, 9], [1, 3, 9, 12], [1, 7, 9, 12], [1, 3, 7,
12], [3, 7, 9, 12], [3, 9, 12], [3, 7, 9], [3, 7, 12], [1, 7, 12], [1, 9, 12], [
7, 9, 12], [1, 7, 9], [1, 3, 12], [1, 3, 9], [1, 3, 7], [1, 9], [1, 12], [1, 3],
 [12, 15], [1, 7], [3, 12], [7, 9], [9, 12], [7, 12], [3, 15], [3, 9], [3, 7], [
3], [1], [7], [12], [9], [15]]

in close close: [[1, 3, 7, 9, 12], [1, 3, 9, 12], [3, 9, 12], [1, 9, 12], [1, 3, 12], [1,
 3, 9], [12, 15], [3, 15], [1, 9], [1, 12], [1, 3], [3, 12], [9, 12], [7, 12], [
3, 9], [15], [3], [1], [7], [12], [9]]

1 个答案:

答案 0 :(得分:0)

您的intersection代码严重受损。

使用单元测试

尝试使用代码计算[1,2,3][3,4,5]

的交集

如果我没弄错,它总会返回第一个列表。