PDA

View Full Version : [Algoritmico-Java] Prendere una percentuale di punti di una rotta


guylmaster
30-03-2012, 17:32
Salve,
ho il classico problema algoritmico che mi sta facendo impazzire, però questa volta è molto semplice da spiegare:

Ho una rotta composta da una lista contenente un certo numero di punti, io voglio prendere solo una certa percentuale della rotta, come posso fare?

Ovviamente se ho la rotta rappresentata dalla seguente lista di punti 1,2,3,4,5,6,7,8,9,10 e voglio prenderne il 30% voglio grossomodo che mi restituisca qualcosa del tipo:
1,5,10

Ovvero voglio che i punti li prenda in maniera uniforme nella mia lista e non che vengano presi tutti uno dopo l'altro.

Come posso fare considerato che le uniche informazioni che io avrò saranno la lista, quindi il numero totale dei punti contenuti e la percentuale di punti che voglio prendere?

Io stavo pensando a qualcosa del tipo se i è la posizione del punto nella lista allora se i % qualcosa == 0 allora prendilo/non prenderlo. Non riesco però bene a formulare questa condizione. Avete qualche suggerimento?

Vi ringrazio in anticipo per l'aiuto,
guylmaster

!fazz
30-03-2012, 17:40
così su due piedi direi indice % ( 1/(percentuale/100))==0 controlla se ti và bene

guylmaster
30-03-2012, 19:16
così su due piedi direi indice % ( 1/(percentuale/100))==0 controlla se ti và bene

Io avevo pensato a questo ragionamento anche se intricatissimo:


float modulo = (((float)rotta.size()) / 100) * percentuale;
modulo = ((float)rotta.size()) / modulo;
int salta = 0;



Poi nel for che scandisce la rotta (usando come indice l'intero i) metto questo:


if(salta < modulo && i > 0)
{
//Lo salto, ovvero aggiungo alla linea % che è il mio carattere di commento
linee.add(0,"% "+linea);
salta++;
}
else
{
//Lo prendo
linee.add(0,linea);
salta = 0;
}


Ovvero modulo mi dice quanti ne devo prendere, in base alla percentuale e alla lunghezza totale della rotta.

Il mio con il 10% ne prende 1 si e 10 no, il tuo con il 10% ne prende 1 si e 9 no su una rotta di 915 nodi. Ora il 10% è prenderne 1 si e 9 no come fa il tuo o è giusto il mio? mi sto confondendo.


EDIT: se ho 915 punti prenderne il 10% significa prenderne 91,5, il mio che ne prende 1 si e 10 no non significa prenderne 1/10 ? quindi proprio 91 (vabbè il .5 non può pregne mezzo) mentre ad occhio e croce il tuo ne prenderebbe il 9% o mi sto confondendo?

banryu79
02-04-2012, 08:36
...
Il mio con il 10% ne prende 1 si e 10 no, il tuo con il 10% ne prende 1 si e 9 no su una rotta di 915 nodi. Ora il 10% è prenderne 1 si e 9 no come fa il tuo o è giusto il mio? mi sto confondendo.


EDIT: se ho 915 punti prenderne il 10% significa prenderne 91,5, il mio che ne prende 1 si e 10 no non significa prenderne 1/10 ? quindi proprio 91 (vabbè il .5 non può pregne mezzo) mentre ad occhio e croce il tuo ne prenderebbe il 9% o mi sto confondendo?
prenderne il 10% significa che se hai una rotta di 100 punti ne prendi 10(e 90 li salti), ergo se hai una rotta di 10 punti ne prendi 1(e 9 li salti).

ally
02-04-2012, 11:46
...dalla percentuale ti calcoli lo step (valore intero)...cicli e quando la divisione intera con lo step non restituisce resto rispetto al counter del ciclo preni il valore...