Confronto tra attributi

di Anonimizzato6825 il
1 risposte
Attibuto 8: Y={0, 1, 5, 6} N={2, 3, 4, 7, 8}
Attibuto 7: Y={6, 7} N={0, 1, 2, 3, 4, 5, 8}
Attibuto 6: Y={0, 1, 2, 3} N={4, 5, 6, 7, 8}
Attibuto 5: Meat={0, 1, 7, 8} Grass={2, 3} Fish={5} Grain={4, 6}
Attibuto 4: Claw={0, 1, 4, 6, 7} N={8} Web={5} Hoof={2, 3}
Attibuto 3: Y={4, 5, 6, 7} N={0, 1, 2, 3, 8}
Attibuto 2: Forward={0, 1, 7, 8} Side={2, 3, 4, 5, 6}
Attibuto 1: Blunt={2, 3} N={4, 5, 6, 7} Pointed={0, 1, 8}
Attibuto 0: Y={0, 1, 2, 3} N={4, 5, 6, 7, 8}

devo effettuare un confronto tra gli attributi, ad esempio prendo attributo 1 e lo confronto con attributo 0, cioè devo contare il numero di elementi che sono contenuti in attributo 0.

Attibuto 1: Blunt={2, 3} N={4, 5, 6, 7} Pointed={0, 1, 8}

Attibuto 0: Y={0, 1, 2, 3} N={4, 5, 6, 7, 8}

ho che Blunt={2, 3} è contenuto in Y={0, 1, 2, 3} , ho 2 elementi contenuti
ho che N={4, 5, 6, 7} è contenuto in N={4, 5, 6, 7, 8} (attributo 0) quindi ho 4 elementi contenuti
ho che Pointed={0, 1, 8} non ècontenuto ne in Y={0, 1, 2, 3} (attributo 0) ne in N={4, 5, 6, 7, 8} (attributo 0).
quindi dal seguente confronto ho 2+4 elementi contenuti cioè 6 che poi devo dividere per il numero totale di attributi cioè 9 .

Infine mi faccio i miei confronti tra tutti gli attributi:
Attributo 1 lo confronto con Attributo 0,
Attributo 2 lo confronto con Attributo 0,
.
.
Attributo 8 lo confronto con Attributo 0.

poi
Attributo 0 lo confronto con Attributo 1,
Attributo 2 lo confronto con Attributo 1,
.
.
Attributo 8 lo confronto con Attributo 1.
e così via

come si implementa tutto ciò?

1 Risposte

  • Ciao, spero di aver capito bene il tuo problema, credo che una possibile soluzione possa essere questa che ti scrivo qui di seguito che fa uso di liste e generics.In sostanza gli attributi sono modellati secondo liste i cui elementi sono liste di interi che rappresentano gli insiemi associati a ciascun attributo.Il metodo inclusionCheck() verifica se un insieme è contenuto in un altro ed è utilizzato dal metodo compareAttributes() che prende in input due attributi e ne effettua il confronto restituendo poi la somma totale degli elementi degli insiemi contenuti.Spero di esserti stato di aiuto.

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;


    public class Test {

    public static void main(String[] args) throws Exception{

    List<List<Integer>> attribute1= new ArrayList<List<Integer>>();
    List<List<Integer>> attribute0= new ArrayList<List<Integer>>();

    Integer[] atribute1BluntList = {2,3};
    Integer[] atribute1NList ={4,5,6,7};
    Integer[] atribute1PointedList ={0,1,8};

    attribute1.add(Arrays.asList(atribute1BluntList));
    attribute1.add(Arrays.asList(atribute1NList));
    attribute1.add(Arrays.asList(atribute1PointedList));

    Integer[] atribute0YList = {0,1,2,3};
    Integer[] atribute0NList ={4,5,6,7,8};

    attribute0.add(Arrays.asList(atribute0YList));
    attribute0.add(Arrays.asList(atribute0NList));

    System.out.println("Compare Attribute 1 and Attribute 0:"+
    new Test().compareAttributes(attribute1,attribute0));

    }

    /**
    * Confronta due attributi restituendo la somma totale degli elementi
    * degli insiemi per i quali il controllo di inclusione ha dato
    * esito positivo
    * @param attributes1
    * @param attributes2
    * @return
    */
    public int compareAttributes(List<List<Integer>> attributes1,List<List<Integer>> attributes2){

    int check = 0;

    for(List<Integer> elements1 : attributes1){
    for(List<Integer> elements2 : attributes2){
    check+=inclusionCheck(elements1,elements2);
    }
    }

    return check;
    }

    /**
    * Verifica se gli elementi della lista elements1 sono
    * contenuti nella lista elements2, se si restituisce
    * il numero di questi elementi altrimenti 0
    * @param elements1
    * @param elements2
    * @return
    */
    public int inclusionCheck(List<Integer> elements1,List<Integer> elements2){

    if( elements2.containsAll(elements1)) {
    return elements1.size();
    }else{
    return 0;
    }

    }
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte