November 2012
Intermediate to advanced
888 pages
54h 46m
Polish
Chcemy dokonywać wielokrotnego wyboru elementów z kolekcji w taki sposób, by częstotliwość wyboru danego elementu odpowiadała zadanemu a priori prawdopodobieństwu.
Należy utworzyć hasz, w którym poszczególne elementy mapowane są w odpowiadające im względne prawdopodobieństwa wyboru, wyrażone liczbami całkowitymi:
def choose_weighted(weighted)
sum = weighted.inject(0) do |sum, item_and_weight|
sum += item_and_weight[1]
end
target = rand(sum)
weighted.each do |item, weight|
return item if target <= weight
target -= weight
end
end
Jeżeli na przykład wszystkie elementy mapowane będą w wartość 1, będzie to oznaczać, że każdy z nich może zostać wybrany ...