Scegliere valore in base alla percentuale

di il
1 risposte

Scegliere valore in base alla percentuale

Ciao a tutti,
sono un novizio nella programmazione e scrivendo i miei primi codici mi sono imbattuto in un problema che non riesco in nessun modo a risolvere.
Ho una lista di oggetti. Ogni oggetto ha associata una percentuale. La somma di tutte le percentuali di tutti gli oggetti è uguale al 100%. Vorrei fare in modo che quando richiesto venga preso un oggetto in base alla sua percentuale di uscita.

L'unica idea che mi è venuta in mente è la seguente. Converto le percentuali in numeri da 0 a 1 (esempio 75% è uguale a 0.75), e li trasformo in range consecutivi. Se ho due oggetti con percentuale 75% e 25%, ho due range: 0-0.75, 0.75-1.Poi genero un numero casuale compreso tra 0 a 1, e il range che comprenderà questo numero sarà l'oggetto vincente.

Purtroppo però mi sembra un po' complicato, e non sono nemmeno in grado di trasformare il tutto in codice.

Qualcuno con più esperienza di me sa darmi una mano?

PS.
Gli oggetti e le percentuali sono salvate in due array distinte, ma è possibile "ri-accoppiarli" visto che oggetti e percentuale hanno gli stessi indici.

1 Risposte

  • Re: Scegliere valore in base alla percentuale

    Prendi es.

    ogg A --> 10%
    ogg B --> 40%
    ogg C --> 35%
    ogg D --> 15%

    generi un array che contiene il cumulativo progressivo dei valori nella scala 0...1:

    [0.1, 0.5, 0.85, 1]

    Nota che es. 0.85 è la somma di 10+40+35 diviso poi per 100.

    Poi estrai a caso un valore tra 0 e 1 (nota che con Math.random() e idem il nextDouble() di Random il 1.0 è esclusivo)

    Siccome hai un array "ordinato", puoi facilmente cercare dove "cade" il valore.

    Se estrai valori es. 0.25 o 0.42 essi "cadono" nell'indice 1 poiché minore di 0.5 ma maggiore di 0.1, ovvero prenderai l'oggetto B .
Devi accedere o registrarti per scrivere nel forum
1 risposte