package edu.usc.enl.dynamicmeasurement.algorithms.tasks.hh.groundtruth; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.hh.HHAlgorithm; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.SingleSwitchTask; import edu.usc.enl.dynamicmeasurement.model.WildcardPattern; import org.w3c.dom.Element; import java.util.*; /** * Created with IntelliJ IDEA. * User: masoud * Date: 8/18/13 * Time: 7:21 AM <br/> * The groundtruth algorithm for finding heavy hitters at the level specified by wildcardNum property. */ public class HHGroundTruth extends HHAlgorithm implements SingleSwitchTask.SingleSwitchTaskImplementation { private Map<Long, Double> data = new HashMap<>(); public HHGroundTruth(Element element) { super(element); } public HHGroundTruth(double threshold, int wildcardNum1, WildcardPattern taskWildcardPattern1) { super(threshold, wildcardNum1, taskWildcardPattern1); } @Override public Collection<WildcardPattern> findHH() { List<WildcardPattern> output = new LinkedList<>(); for (Map.Entry<Long, Double> entry : data.entrySet()) { if (entry.getValue() >= threshold) { output.add(new WildcardPattern(entry.getKey(), wildcardNum, entry.getValue())); } } return output; } @Override public void reset() { data.clear(); } @Override public void update(int step) { } @Override public void finish() { super.finish(); } @Override public void setSum(double sum) { } @Override public void match(long item, double diff) { item >>>= wildcardNum; Double aDouble = data.get(item); if (aDouble == null) { data.put(item, diff); } else { data.put(item, diff + aDouble); } } public void setCapacity(int c) { } @Override public double estimateAccuracy() { return 1; } @Override public int getUsedResourceShare() { return 0; } @Override public void setCapacityShare(int c) { } }