package ca.pfv.spmf.algorithms.frequentpatterns.estDec; import java.util.ArrayList; import java.util.List; /** * This is an implementation of a estTree node. <br\> * <br\> * * This implementation was made by Azadeh Soltani <br\> * <br\> * * This file is part of the SPMF DATA MINING SOFTWARE * (http://www.philippe-fournier-viger.com/spmf).<br\> * <br\> * * SPMF is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version.<br\> * <br\> * * SPMF is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. <br\> * <br\> * * You should have received a copy of the GNU General Public License along with * SPMF. If not, see <http://www.gnu.org/licenses/>. * * @see Algo_estDec * @see estTree * @author Azadeh Soltani */ public class estNode { Integer itemID; // item id double counter; // frequency counter int tid; // last tid List<estNode> children; // children nodes /** * constructor * @param item the item * @param count the count * @param k the last transaction id */ estNode(Integer item, double count, int k) { itemID = item; counter = count; tid = k; children = new ArrayList<estNode>(); } /** * Default constructor */ estNode() { itemID = -1; counter = 0; tid = 0; children = new ArrayList<estNode>(); } /** * Return the immediate child of this node having a given ID. If there is no * such child, return null; * * @param id the id * @return the node or null */ public estNode getChildWithID(int id) { if (children == null) return null; for (estNode child : children) { if (child.itemID == id) { return child; } } return null; } /** * Return the immediate index of the node having a given ID. If there is no * such child, return -1; * * @param id */ public int getChildIndexWithID(int id) { if (children == null) return -1; int i = 0; for (estNode child : children) { if (child.itemID == id) { return i; } i++; } return -1; } /** * Update the count of a node * * @param k the current transaction id * @param value the value to be added to the count * @param d the decay rate */ public void update(int k, int value, double d) { counter = counter * Math.pow(d, k - tid) + value; tid = k; } /** * Compute the support of this node as a percentage. * * @param N an integer representing a transaction count. */ public double computeSupport(double N) { return counter / N; } }