public void add(Set<O> clique) { resultCliques = null; final Set<O> unmodClique = Collections.unmodifiableSet(clique); originalCliques.add(unmodClique); List<O> orderedOperands = new ArrayList<O>(clique); for (int i=0; i<orderedOperands.size(); i++){ O a = orderedOperands.get(i); for (int j=i+1; j<orderedOperands.size(); j++){ O b = orderedOperands.get(j); addEdge(a, b); addEdge(b, a); } } }
public Set<Set<O>> getResults() { if (resultCliques == null){ resultCliques = new HashSet<Set<O>>(); Set<Integer> skip = new HashSet<Integer>(); List<Set<O>> workingCliques = new ArrayList<Set<O>>(originalCliques); for (int i=0; i<workingCliques.size(); i++){ if (!skip.contains(i)){ Set<O> g1 = new HashSet<O>(workingCliques.get(i)); for (int j=i+1; j<workingCliques.size(); j++){ if (!skip.contains(j)){ Set<O> g2 = workingCliques.get(j); if (canMerge(g1, g2)){ g1.addAll(g2); skip.add(j); } } } resultCliques.add(g1); } } } return resultCliques; }
public static void main(String[] args) { CliqueFinder<String> finder = new CliqueFinder<>(); finder.add(new HashSet<>(Arrays.asList("A", "B"))); finder.add(new HashSet<>(Arrays.asList("B", "C"))); finder.add(new HashSet<>(Arrays.asList("C", "D"))); finder.add(new HashSet<>(Arrays.asList("A", "D"))); finder.add(new HashSet<>(Arrays.asList("B", "D"))); Set<Set<String>> results = finder.getResults(); assert(results.size() == 2); assert(results.contains(new HashSet<>(Arrays.asList("C", "B", "D")))); finder.clear(); finder.add(new HashSet<>(Arrays.asList("A", "X"))); finder.add(new HashSet<>(Arrays.asList("B", "X"))); finder.add(new HashSet<>(Arrays.asList("Y", "A"))); finder.add(new HashSet<>(Arrays.asList("B", "D", "A"))); finder.add(new HashSet<>(Arrays.asList("C", "B"))); results = finder.getResults(); assert(results.size() == 4); assert(results.contains(new HashSet<>(Arrays.asList("D", "A", "B")))); finder.clear(); finder.add(new HashSet<>(Arrays.asList("A", "B", "C"))); finder.add(new HashSet<>(Arrays.asList("X", "Y", "Z"))); finder.add(new HashSet<>(Arrays.asList("X", "A"))); finder.add(new HashSet<>(Arrays.asList("X", "C"))); for (Set<String> result : finder.getResults()){
public static void main(String[] args) { CliqueFinder<String> finder = new CliqueFinder<String>(); finder.add(new HashSet<String>(Arrays.asList("A", "B"))); finder.add(new HashSet<String>(Arrays.asList("B", "C"))); finder.add(new HashSet<String>(Arrays.asList("C", "D"))); finder.add(new HashSet<String>(Arrays.asList("A", "D"))); finder.add(new HashSet<String>(Arrays.asList("B", "D"))); Set<Set<String>> results = finder.getResults(); assert(results.size() == 2); assert(results.contains(new HashSet<String>(Arrays.asList("C", "B", "D")))); finder.clear(); finder.add(new HashSet<String>(Arrays.asList("A", "X"))); finder.add(new HashSet<String>(Arrays.asList("B", "X"))); finder.add(new HashSet<String>(Arrays.asList("Y", "A"))); finder.add(new HashSet<String>(Arrays.asList("B", "D", "A"))); finder.add(new HashSet<String>(Arrays.asList("C", "B"))); results = finder.getResults(); assert(results.size() == 4); assert(results.contains(new HashSet<String>(Arrays.asList("D", "A", "B")))); finder.clear(); finder.add(new HashSet<String>(Arrays.asList("A", "B", "C"))); finder.add(new HashSet<String>(Arrays.asList("X", "Y", "Z"))); finder.add(new HashSet<String>(Arrays.asList("X", "A"))); finder.add(new HashSet<String>(Arrays.asList("X", "C"))); for (Set<String> result : finder.getResults()){
CliqueFinder<OWLClassExpression> merger = new CliqueFinder<OWLClassExpression>(); merger.add(ax.getClassExpressions()); for (Set<OWLClassExpression> newAxioms : merger.getResults()){ OWLDisjointClassesAxiom newAxiom = getOWLModelManager().getOWLDataFactory().getOWLDisjointClassesAxiom(newAxioms); if (oldAxioms.contains(newAxiom)){
CliqueFinder<OWLClassExpression> merger = new CliqueFinder<OWLClassExpression>(); merger.add(ax.getClassExpressions()); for (Set<OWLClassExpression> newAxioms : merger.getResults()){ OWLDisjointClassesAxiom newAxiom = getOWLModelManager().getOWLDataFactory().getOWLDisjointClassesAxiom(newAxioms); if (oldAxioms.contains(newAxiom)){
CliqueFinder<OWLClassExpression> merger = new CliqueFinder<>(); merger.add(ax.getClassExpressions()); for (Set<OWLClassExpression> newAxioms : merger.getResults()){ OWLDisjointClassesAxiom newAxiom = getOWLModelManager().getOWLDataFactory().getOWLDisjointClassesAxiom(newAxioms); if (oldAxioms.contains(newAxiom)){
public static void main(String[] args) { CliqueFinder<String> finder = new CliqueFinder<String>(); finder.add(new HashSet<String>(Arrays.asList("A", "B"))); finder.add(new HashSet<String>(Arrays.asList("B", "C"))); finder.add(new HashSet<String>(Arrays.asList("C", "D"))); finder.add(new HashSet<String>(Arrays.asList("A", "D"))); finder.add(new HashSet<String>(Arrays.asList("B", "D"))); Set<Set<String>> results = finder.getResults(); assert(results.size() == 2); assert(results.contains(new HashSet<String>(Arrays.asList("C", "B", "D")))); finder.clear(); finder.add(new HashSet<String>(Arrays.asList("A", "X"))); finder.add(new HashSet<String>(Arrays.asList("B", "X"))); finder.add(new HashSet<String>(Arrays.asList("Y", "A"))); finder.add(new HashSet<String>(Arrays.asList("B", "D", "A"))); finder.add(new HashSet<String>(Arrays.asList("C", "B"))); results = finder.getResults(); assert(results.size() == 4); assert(results.contains(new HashSet<String>(Arrays.asList("D", "A", "B")))); finder.clear(); finder.add(new HashSet<String>(Arrays.asList("A", "B", "C"))); finder.add(new HashSet<String>(Arrays.asList("X", "Y", "Z"))); finder.add(new HashSet<String>(Arrays.asList("X", "A"))); finder.add(new HashSet<String>(Arrays.asList("X", "C"))); for (Set<String> result : finder.getResults()){
CliqueFinder<OWLClassExpression> merger = new CliqueFinder<>(); merger.add(ax.getClassExpressions()); for (Set<OWLClassExpression> newAxioms : merger.getResults()){ OWLDisjointClassesAxiom newAxiom = getOWLModelManager().getOWLDataFactory().getOWLDisjointClassesAxiom(newAxioms); if (oldAxioms.contains(newAxiom)){
public static void main(String[] args) { CliqueFinder<String> finder = new CliqueFinder<>(); finder.add(new HashSet<>(Arrays.asList("A", "B"))); finder.add(new HashSet<>(Arrays.asList("B", "C"))); finder.add(new HashSet<>(Arrays.asList("C", "D"))); finder.add(new HashSet<>(Arrays.asList("A", "D"))); finder.add(new HashSet<>(Arrays.asList("B", "D"))); Set<Set<String>> results = finder.getResults(); assert(results.size() == 2); assert(results.contains(new HashSet<>(Arrays.asList("C", "B", "D")))); finder.clear(); finder.add(new HashSet<>(Arrays.asList("A", "X"))); finder.add(new HashSet<>(Arrays.asList("B", "X"))); finder.add(new HashSet<>(Arrays.asList("Y", "A"))); finder.add(new HashSet<>(Arrays.asList("B", "D", "A"))); finder.add(new HashSet<>(Arrays.asList("C", "B"))); results = finder.getResults(); assert(results.size() == 4); assert(results.contains(new HashSet<>(Arrays.asList("D", "A", "B")))); finder.clear(); finder.add(new HashSet<>(Arrays.asList("A", "B", "C"))); finder.add(new HashSet<>(Arrays.asList("X", "Y", "Z"))); finder.add(new HashSet<>(Arrays.asList("X", "A"))); finder.add(new HashSet<>(Arrays.asList("X", "C"))); for (Set<String> result : finder.getResults()){
public Set<Set<O>> getResults() { if (resultCliques == null){ resultCliques = new HashSet<>(); Set<Integer> skip = new HashSet<>(); List<Set<O>> workingCliques = new ArrayList<>(originalCliques); for (int i=0; i<workingCliques.size(); i++){ if (!skip.contains(i)){ Set<O> g1 = new HashSet<>(workingCliques.get(i)); for (int j=i+1; j<workingCliques.size(); j++){ if (!skip.contains(j)){ Set<O> g2 = workingCliques.get(j); if (canMerge(g1, g2)){ g1.addAll(g2); skip.add(j); } } } resultCliques.add(g1); } } } return resultCliques; }
public Set<Set<O>> getResults() { if (resultCliques == null){ resultCliques = new HashSet<Set<O>>(); Set<Integer> skip = new HashSet<Integer>(); List<Set<O>> workingCliques = new ArrayList<Set<O>>(originalCliques); for (int i=0; i<workingCliques.size(); i++){ if (!skip.contains(i)){ Set<O> g1 = new HashSet<O>(workingCliques.get(i)); for (int j=i+1; j<workingCliques.size(); j++){ if (!skip.contains(j)){ Set<O> g2 = workingCliques.get(j); if (canMerge(g1, g2)){ g1.addAll(g2); skip.add(j); } } } resultCliques.add(g1); } } } return resultCliques; }
public Set<Set<O>> getResults() { if (resultCliques == null){ resultCliques = new HashSet<>(); Set<Integer> skip = new HashSet<>(); List<Set<O>> workingCliques = new ArrayList<>(originalCliques); for (int i=0; i<workingCliques.size(); i++){ if (!skip.contains(i)){ Set<O> g1 = new HashSet<>(workingCliques.get(i)); for (int j=i+1; j<workingCliques.size(); j++){ if (!skip.contains(j)){ Set<O> g2 = workingCliques.get(j); if (canMerge(g1, g2)){ g1.addAll(g2); skip.add(j); } } } resultCliques.add(g1); } } } return resultCliques; }
/** * @return true if the two subgraphs can be merged because they form a complete graph */ private boolean canMerge(Set<O> g1, Set<O> g2){ for (O vertexInG2 : g2){ if (!g1.contains(vertexInG2)){ for (O vertexInG1 : g1){ if (!isEdge(vertexInG2, vertexInG1)){ return false; // found a vertex in g2 that is not adjacent to a vertex in g1 } } } } return true; }
/** * @return true if the two subgraphs can be merged because they form a complete graph */ private boolean canMerge(Set<O> g1, Set<O> g2){ for (O vertexInG2 : g2){ if (!g1.contains(vertexInG2)){ for (O vertexInG1 : g1){ if (!isEdge(vertexInG2, vertexInG1)){ return false; // found a vertex in g2 that is not adjacent to a vertex in g1 } } } } return true; }
/** * @return true if the two subgraphs can be merged because they form a complete graph */ private boolean canMerge(Set<O> g1, Set<O> g2){ for (O vertexInG2 : g2){ if (!g1.contains(vertexInG2)){ for (O vertexInG1 : g1){ if (!isEdge(vertexInG2, vertexInG1)){ return false; // found a vertex in g2 that is not adjacent to a vertex in g1 } } } } return true; }
public void add(Set<O> clique) { resultCliques = null; final Set<O> unmodClique = Collections.unmodifiableSet(clique); originalCliques.add(unmodClique); List<O> orderedOperands = new ArrayList<>(clique); for (int i=0; i<orderedOperands.size(); i++){ O a = orderedOperands.get(i); for (int j=i+1; j<orderedOperands.size(); j++){ O b = orderedOperands.get(j); addEdge(a, b); addEdge(b, a); } } }
/** * @return true if the two subgraphs can be merged because they form a complete graph */ private boolean canMerge(Set<O> g1, Set<O> g2){ for (O vertexInG2 : g2){ if (!g1.contains(vertexInG2)){ for (O vertexInG1 : g1){ if (!isEdge(vertexInG2, vertexInG1)){ return false; // found a vertex in g2 that is not adjacent to a vertex in g1 } } } } return true; }
public void add(Set<O> clique) { resultCliques = null; final Set<O> unmodClique = Collections.unmodifiableSet(clique); originalCliques.add(unmodClique); List<O> orderedOperands = new ArrayList<>(clique); for (int i=0; i<orderedOperands.size(); i++){ O a = orderedOperands.get(i); for (int j=i+1; j<orderedOperands.size(); j++){ O b = orderedOperands.get(j); addEdge(a, b); addEdge(b, a); } } }
public void add(Set<O> clique) { resultCliques = null; final Set<O> unmodClique = Collections.unmodifiableSet(clique); originalCliques.add(unmodClique); List<O> orderedOperands = new ArrayList<O>(clique); for (int i=0; i<orderedOperands.size(); i++){ O a = orderedOperands.get(i); for (int j=i+1; j<orderedOperands.size(); j++){ O b = orderedOperands.get(j); addEdge(a, b); addEdge(b, a); } } }