From 9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 21 Apr 2015 10:34:27 +0100 Subject: initial version --- .../pagoda/summary/EstimatedFeatureComparator.java | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/uk/ac/ox/cs/pagoda/summary/EstimatedFeatureComparator.java (limited to 'src/uk/ac/ox/cs/pagoda/summary/EstimatedFeatureComparator.java') diff --git a/src/uk/ac/ox/cs/pagoda/summary/EstimatedFeatureComparator.java b/src/uk/ac/ox/cs/pagoda/summary/EstimatedFeatureComparator.java new file mode 100644 index 0000000..59fdf7f --- /dev/null +++ b/src/uk/ac/ox/cs/pagoda/summary/EstimatedFeatureComparator.java @@ -0,0 +1,53 @@ +package uk.ac.ox.cs.pagoda.summary; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +public class EstimatedFeatureComparator implements Comparator { + + Graph graph; + Map node2features = new HashMap(); + + public EstimatedFeatureComparator(Graph graph) { + this.graph = graph; + EstimatedFeature feature; + for (Node node: graph.getNodes()) { + feature = new EstimatedFeature(graph, node); + node2features.put(node, feature); + } + } + + @Override + public int compare(Node o1, Node o2) { + EstimatedFeature f1 = node2features.get(o1), f2 = node2features.get(o2); + int result; + if ((result = o1.getLabel().compareTo(o2.getLabel())) != 0) return result; + if ((result = f1.outGoingNodeCount - f2.outGoingNodeCount) != 0) return result; + if ((result = f1.inComingNodeCount - f2.inComingNodeCount) != 0) return result; + if ((result = Edge.compareLabels(graph.getOutGoingEdges(o1), graph.getOutGoingEdges(o2))) != 0) return result; + result = Edge.compareLabels(graph.getInComingEdges(o1), graph.getInComingEdges(o2)); + return result; + } + +} + +class EstimatedFeature { + + int outGoingNodeCount, inComingNodeCount; + + public EstimatedFeature(Graph graph, Node node) { + HashSet neighbours = new HashSet(); + for (Edge edge: graph.getOutGoingEdges(node)) + neighbours.add(edge.getToNodeName()); + outGoingNodeCount = neighbours.size(); + + neighbours.clear(); + for (Edge edge: graph.getInComingEdges(node)) + neighbours.add(edge.getFromNodeName()); + inComingNodeCount = neighbours.size(); + } +} + + -- cgit v1.2.3