在变量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]]
答案 0 :(得分:0)
您的intersection
代码严重受损。
使用单元测试。
尝试使用代码计算[1,2,3]
,[3,4,5]
。
如果我没弄错,它总会返回第一个列表。