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) + "}"; 
    } 
  } 
 
}