Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185

    Trovare il valore di massima frequenza

    Ciao a tutti ragazzi,
    ho un oggetto così dichiarato
    codice:
    Vector<Vector<Integer>> FNC;
    il mio problema è, come trovo l'elemento che occorre piu volte? Piu che altro non capisco come usare gli indici. So che dovrei controllare elemento per elemento e quello so che si prende cosi
    codice:
    FNC.get(index).elementAt(index1)
    ma come gestisco i due indici?
    la matrice FNC è piu o meno cosi strutturata
    [CODE]
    1 -2 3 -4
    1 -3 4
    4
    3 -4

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Trovare il valore di massima frequenza

    Originariamente inviato da dennis87
    Ciao a tutti ragazzi,
    ho un oggetto così dichiarato
    codice:
    Vector<Vector<Integer>> FNC;
    il mio problema è, come trovo l'elemento che occorre piu volte? Piu che altro non capisco come usare gli indici. So che dovrei controllare elemento per elemento e quello so che si prende cosi
    codice:
    FNC.get(index).elementAt(index1)
    ma come gestisco i due indici?
    la matrice FNC è piu o meno cosi strutturata
    [CODE]
    1 -2 3 -4
    1 -3 4
    4
    3 -4
    Se il problema è come scorrere la matrice puoi fare due cicli annidati, quello esterno per scorrere le righe e quello interno per scorrere gli elementi di ognuna di queste righe.
    Puoi farlo in maniera particolarmente comoda con due for-each.

    (quella che hai postato non è una matrice)
    effeffe

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185
    ho detto matrice per intenderci via
    Comunque ancora non ho capito come fare. come faccio a scorrere righe e colonne, alla fine non è un vettore bidimensionale di interi (int[][] FNC). Qui uso un Vector<Vector<Integer>>.
    Mi potresti dare qualche dritta per favore?

    EDIT:
    Forse intendi una cosa del genere?
    codice:
    for(int i=0;i<FNC.capacity();i++){
       for(int j=0;j<FNC.get(i);j++){
       }
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da dennis87
    ho detto matrice per intenderci via
    Comunque ancora non ho capito come fare. come faccio a scorrere righe e colonne, alla fine non è un vettore bidimensionale di interi (int[][] FNC). Qui uso un Vector<Vector<Integer>>.
    Mi potresti dare qualche dritta per favore?

    EDIT:
    Forse intendi una cosa del genere?
    codice:
    for(int i=0;i<FNC.capacity();i++){
       for(int j=0;j<FNC.get(i);j++){
       }
    }
    Hmm, le condizioni mi sembrano sbagliate. capacity() non restituisce il numero di elementi contenuti e get(i) non ho capito perché ci sia. Visto che hai parlato di array bidimensionali, ecco la solfa è sempre la stessa: invece del campo size usi il metodo size().
    Ma col for-each è più comodo: http://docs.oracle.com/javase/tutori...bolts/for.html
    effeffe

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185
    Se vedi nel primo post FNC non è un array bidimensionale è un vector, anzi precisamente un vector di vector e quindi c'è il capacity

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da dennis87
    Se vedi nel primo post FNC non è un array bidimensionale è un vector, anzi precisamente un vector di vector e quindi c'è il capacity
    Io non ho detto che quell'oggetto non ha il metodo capacity(), ma che quest'ultimo non fa quello che ti serve.
    effeffe

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185
    Allora scusami ma non ho proprio capito come fare ancora...
    ce la faresti a scrivere uno pseudo-codice?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da dennis87
    Allora scusami ma non ho proprio capito come fare ancora...
    ce la faresti a scrivere uno pseudo-codice?
    codice:
    for (Vector<Integer> row : fnc)
        for (Integer i : row)
            ...
    effeffe

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185
    ok, i due for each li ho capiti.
    Il primo mi legge la riga mentre il secondo prende elemento per elemento.
    Ora pensavo, come faccio il controllo per trovare quello che occorre di piu?

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da dennis87
    ok, i due for each li ho capiti.
    Il primo mi legge la riga mentre il secondo prende elemento per elemento.
    Ora pensavo, come faccio il controllo per trovare quello che occorre di piu?
    I primi due approcci che mi vengono in mente:

    - metti tutti i valori in un'unica struttura dati (un array o un qualche tipo List), ordina gli elementi (cosa che si può fare con un metodo già pronto delle librerie) e scorri questa lista tenendoti salvato l'elemento che, fino a quel momento, è comparso più volte consecutivamente: alla fine esso sarà l'elemento più frequente;
    - usa una mappa dove le chiavi saranno gli elementi della tua collezione ed i valori il numero delle loro occorrenze, scorri gli elementi con due cicli (come quelli che ho postato) e per ogni elemento aumenta il numero di occorrenze associate, oppure impostalo ad 1 se è la prima volta che lo incontri: alla fine ovviamente il numero con associato il più alto numero di occorrenze è quello più frequente.

    Non ho considerato l'efficienza. Inoltre se non hai particolari motivi per fare il contrario (e qui non sembri averne, però magari il tuo programma è più grande), dichiara le tue liste come List anziché Vector o simili, ed usa ArrayList anziché Vector.
    effeffe

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.