www.pudn.com > datamining.rar > Item.java
//package cn.edu.tsinghua.ss.liuhongxin;
import java.util.ArrayList;
/**
* 项,每项包含元素个数范围:1..*
*/
public class Item {
private String[] elements;
private double support;
public Item() {
}
public Item(String[] elements, double support) {
this.elements = elements;
this.support = support;
}
public Item(String element, double support) {
this.elements = new String[1];
elements[0] = element;
this.support = support;
}
public double getSupport() {
return support;
}
public void setSupport(double support) {
this.support = support;
}
/**
* 得到元素集合
*/
public ArrayList getElements() {
ArrayList result = new ArrayList();
for (int i = 0; i < elements.length; i++) {
result.add(elements[i]);
}
return result;
}
/**
* 得到c的k项子集
*/
public ArrayList getSubSet(int k) {
return getSubSet(k, elements.length);
}
private ArrayList getSubSet(int k, int size) {
ArrayList subSet = new ArrayList();
if (k == 1) {
for (int i = 0; i < size; i++) {
ArrayList item = new ArrayList(1);
item.add(elements[i]);
subSet.add(item);
}
return subSet;
} else {
for (int i = size - 1; i >= k - 1; i--)
{
ArrayList subSubSet = getSubSet(k - 1, i);
for (int j = 0; j < subSubSet.size(); j++)
{
ArrayList item = (ArrayList) subSubSet.get(j);
item.add(elements[i]);
}
subSet.addAll(subSubSet);
}
return subSet;//???????????
}
}
/**
* 判断两item是否只是最后一元素不同
*/
public boolean similarTo(Item item) {
if (elements.length == 1) {
return !elements[0].equals(item.elements[0]);
}
for (int i = 0; i < elements.length - 1; i++) {
if (!elements[i].equals(item.elements[i])) {
return false;
}
}
return !elements[elements.length - 1].equals(item.elements[elements.length - 1]);
}
/**
* 合并两个只有最后一元素不同的item
*/
public Item join(Item item) {
String[] joinedElements = new String[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
joinedElements[i] = new String(elements[i]);
}
joinedElements[elements.length] = new String(item.elements[elements.length - 1]);
return new Item(joinedElements, 0d);
}
public Object clone() {
String[] newElements = new String[elements.length];
for (int i = 0; i < elements.length; i++) {
newElements[i] = new String(elements[i]);
}
return new Item(newElements, support);
}
public String toString() {
StringBuffer returnValue = new StringBuffer("Support: " + this.support +"\n");
if (elements == null || elements.length == 0) {
return "";
} else if (elements.length == 1) {
return returnValue + "{" + elements[0] + "}";
} else {
StringBuffer sb = new StringBuffer("{");
for (int i = 0; i < elements.length; i++) {
sb.append(elements[i] + ", ");
}
return returnValue + sb.substring(0, sb.length() - 2) + "}";
}
}
}