PDA

View Full Version : JAVA: algoritmo


tandrea851
18-11-2004, 22:43
mi servirebbe un algoritmo scritto in java o pseudocodice per trovare un numero tra una lista più vicino alla media di quest'ultimi..


esempio

9 6 3 10 2

media 6
numero più vicino alla media 6

qualche suggeritmento? grazie

recoil
18-11-2004, 23:10
mi sa che ti conviene farlo, non è difficile
tanto l'algoritmo è lineare, devi scorrere la lista due volte, prima per fare la media poi per far passare tutti gli elementi e scegliere il più vicino.

anzi, la lista la scorri una volta e un tot perché quando trovi un elemento uguale alla media (se c'è) puoi anche fermarti :)

tandrea851
18-11-2004, 23:15
Originariamente inviato da recoil
mi sa che ti conviene farlo, non è difficile
tanto l'algoritmo è lineare, devi scorrere la lista due volte, prima per fare la media poi per far passare tutti gli elementi e scegliere il più vicino.

anzi, la lista la scorri una volta e un tot perché quando trovi un elemento uguale alla media (se c'è) puoi anche fermarti :)

grazie, ma il problema è come implemenatarlo in codice..
il ciclo ke calcola la media è fatto.. mentre l'altro non mi funziona.. v posto il pezzo di codice magari qualcuno riesce a correggerlo..

double diff = 0;
double appoggio = 0;


for(i=0;i<valori.length;i++)
{
diff = media - (double) valori[i].getArea();
Math.abs(diff);
if(diff<=appoggio)
{
appoggio=diff;
valori[i]=proxMedia;
}
}

kingv
19-11-2004, 08:56
penso che questo assegnamento
valori[i]=proxMedia;

sia scorretto, dovrebbe essere il contrario, ovvero ti salvi il numero che fino a quelo momento e' piu' vicino alla media.

tandrea851
19-11-2004, 09:52
Originariamente inviato da kingv
penso che questo assegnamento
valori[i]=proxMedia;

sia scorretto, dovrebbe essere il contrario, ovvero ti salvi il numero che fino a quelo momento e' piu' vicino alla media.

azz vero.. cmq ho risolto cosi sembrerebbe.. provate a dargli un occhiata:

double[] differenze = new double[forme.length];
double minimo=Integer.MAX_VALUE;
Forma proxMedia=null;

for(i=0;i<forme.length;i++)
{
differenze[i] = Math.abs(media - (double) forme[i].getArea());

if(differenze[i]<=minimo)
{
minimo=differenze[i];
proxMedia=forme[i];
}
}