public NodePartition<N> apply(Graph<N> g) { ImmutableSet<ImmutableList<N>> nodePairs = getEquivalentPairs(g); Set<Set<N>> rv = new HashSet<Set<N>>(); Map<N, Set<N>> intermediate = new HashMap<N, Set<N>>(); for (ImmutableList<N> pair : nodePairs) { Set<N> res = intermediate.get(pair.get(0)); if (res == null) { res = intermediate.get(pair.get(1)); } if (res == null) { // we haven't seen this one before res = new HashSet<N>(); } res.add(pair.get(0)); res.add(pair.get(1)); intermediate.put(pair.get(0), res); intermediate.put(pair.get(1), res); } rv.addAll(intermediate.values()); // pick up the nodes which don't appear in intermediate; they are // singletons (equivalence classes of size 1) Collection<N> singletons = new ArrayList<N>(g.nodes()); singletons.removeAll(intermediate.keySet()); for (N v : singletons) { Set<N> vSet = Collections.singleton(v); intermediate.put(v, vSet); rv.add(vSet); } return new NodePartition<N>(g, intermediate, rv); }
continue; if (!canPossiblyCompare(v1, v2)) continue; if (isStructurallyEquivalent(g, v1, v2)) { Pair<V> p = new Pair<V>(v1, v2); alreadyEquivalent.add(v2);
if (!canBeEquivalent(v1, v2)) { continue; if (isStructurallyEquivalent(g, v1, v2)) { ImmutableList<N> pair = ImmutableList.of(v1, v2); alreadyEquivalent.add(v2);
if (!canPossiblyCompare(v1, v2)) { continue; if (isStructurallyEquivalent(g, v1, v2)) { Pair<V> p = new Pair<V>(v1, v2); alreadyEquivalent.add(v2);
public VertexPartition<V,E> apply(Graph<V,E> g) Set<Pair<V>> vertex_pairs = getEquivalentPairs(g);
continue; if (!canBeEquivalent(v1, v2)) continue; if (isStructurallyEquivalent(g, v1, v2)) { Pair<V> p = new Pair<V>(v1, v2); alreadyEquivalent.add(v2);
@Override public VertexPartition<V, E> transform(Graph<V, E> g) { Set<Pair<V>> vertex_pairs = getEquivalentPairs(g); Set<Set<V>> rv = new HashSet<Set<V>>(); Map<V, Set<V>> intermediate = new HashMap<V, Set<V>>(); for (Pair<V> p : vertex_pairs) { Set<V> res = intermediate.get(p.getFirst()); if (res == null) { res = intermediate.get(p.getSecond()); } if (res == null) { res = new HashSet<V>(); } res.add(p.getFirst()); res.add(p.getSecond()); intermediate.put(p.getFirst(), res); intermediate.put(p.getSecond(), res); } rv.addAll(intermediate.values()); // pick up the vertices which don't appear in intermediate; they are // singletons (equivalence classes of size 1) Collection<V> singletons = CollectionUtils.subtract(g.getVertices(), intermediate.keySet()); for (V v : singletons) { Set<V> v_set = Collections.singleton(v); intermediate.put(v, v_set); rv.add(v_set); } return new VertexPartition<V, E>(g, intermediate, rv); }
public VertexPartition<V,E> transform(Graph<V,E> g) Set<Pair<V>> vertex_pairs = getEquivalentPairs(g);