28/07/13 14:44
pistilloi
Buona sera, avrei bisogno di un'algoritmo che dati: un'insieme di elementi e la probabilità che ogni elemento ha d'esser estratto; generi con maggio frequenza gli elementi più probabili.
Un'input d'esempio può essere:
A = {a,b,c,d,e,f}
a=0.5
b=0.05
c=0.1
d=0.02
e=0.3
f=0.03
Il numero di elementi da estrarre è minore della cardinalità di A, per esempio 4 elementi.
aaa
29/07/13 14:21
arack95
Non mi sembra troppo difficile come problema, tu come hai provato a risolverlo? Posta qualche idea così ne discutiamo
aaa
29/07/13 19:10
pistilloi
Ho cambiato totalmente approccio, mettendo tutte le parole del mio dizionari in un file(urna) privo di spazzi, a quel punto l'algoritmo estrae semplicemente numeri casuali da 1 a "numero totale di caratteri" e pesca il carattere in quella posizione.
Non è come l'idea iniziale ma funziona, che ti pare?
aaa
30/07/13 9:49
arack95
Cioè crei una stringa da 100 caratteri e inserisci 3 volte 'f', 30 volte 'e' e così via e poi trovi un numero random tra 1 e 100 ed estrai così l'elemento?
Io avevo pensato ad un'altra soluzione, generi un numero a virgola mobile compreso tra 0 e 1 e poi usare un algoritmo del tipo:
value rand = [0 .. 1]
value sum = 0
foreach element in array
sum = sum + element.value
if ( rand <= sum )
return element
end { if }
end { foreach }
Però se hai molti elemementi potrebbe essere lento ripetere quel foreach, quindi potrebbe essere ottimizzato generando prima un insieme di numeri random e poi facendo il check di tutti quanti i numeri nell'if.
Sicuramente esisterà una soluzione migliore
Edit.
element.value sarebbe la probabilità che l'elemento venga estratto, nel caso di 'a' ad esempio 0.5.
Spiegami meglio la tua soluzione, sono curioso
Ultima modifica effettuata da arack95 30/07/13 9:52
aaa