/** * Remove rules are the same ina semantic way(At = 1, At <> 0, At = [0,1]) * * @param tam int Size of the star */ public void eliminaSubsumidos(int tam) { // for (int i = 0; i < this.size() - 1; i++) { for (int i = 0; i < tam; i++) { Complejo aux = this.getRegla(i); boolean seguir = true; for (int j = i + 1; (j < this.size()) && (seguir); j++) { Complejo aux2 = this.getRegla(j); seguir = false; boolean parar = false; for (int l = 0; (l < aux.size()) && (!parar); l++) { Selector s = aux.getSelector(l); boolean salir = false; for (int h = 0; (h < aux2.size()) && (!salir); h++) { Selector s2 = aux2.getSelector(h); if ((s.compareTo(s2) == -3) || (s.compareTo(s2) == 0)) { // mirar compareTo en Selector salir = true; // paso a ver el siguiente selector (si eso) if ((l == aux.size() - 1) && (aux.getDistribucionClase(0) == aux2.getDistribucionClase(0))) { // if (l == aux.size() - 1) { /* System.out.println("\nEstos son los complejos subsumidos:"); aux.print(); aux2.print(); */ seguir = false; this.deleteRegla( i); // tienen los mismos atributos y misma distribucion (son semanticament =) i--; } } } parar = !salir; // si salir == true -> no paro (parar = false) } } } }
/** Remove complex with repetitive attributes */ public void eliminaNulos() { boolean salir; for (int i = 0; i < this.size(); i++) { Complejo aux = this.getRegla(i); salir = false; for (int j = 0; (j < aux.size() - 1) && (!salir); j++) { Selector s = aux.getSelector(j); for (int h = j + 1; (h < aux.size()) && (!salir); h++) { Selector s2 = aux.getSelector(h); if (s.compareTo(s2) < 2) { // mismo atributo this.deleteRegla(i); // borrando salir = true; i--; } } } } }
/** * Remove repetitive complex(at1 = 0 ^ at2 = 0 -- at2 = 0 ^ at1 = 0) * * @param tam Size of the star */ public void eliminaRepetidos(int tam) { for (int i = 0; i < this.size() - 1; i++) { // for (int i = 0; i < tam; i++) { Complejo aux = this.getRegla(i); boolean seguir = true; for (int j = i + 1; (j < this.size()) && (seguir); j++) { Complejo aux2 = this.getRegla(j); // seguir = false; boolean parar = false; for (int l = 0; (l < aux.size()) && (!parar); l++) { Selector s = aux.getSelector(l); boolean salir = false; for (int h = 0; (h < aux2.size()) && (!salir); h++) { Selector s2 = aux2.getSelector(h); // System.out.println("Comparando "); if (s.compareTo(s2) == 0) { // son iguales salir = true; // paso a ver el siguiente selector (si eso) /* System.out.println("selectores iguales"); System.out.println("regla "+(i+1)+" y "+(j+1)); s.print();s2.print();*/ if (l == aux.size() - 1) { /* System.out.println("\nEstos son los complejos repetidos:"); aux.print(); aux2.print();*/ seguir = false; this.deleteRegla(i); // borro porque est�repe totalmente /*System.out.println("Se borra la regla "+(i+1)); aux.print();*/ i--; } } } parar = !salir; // si salir == true -> no paro (parar = false) } } } }