Взвешенный случайный выбор с использованием метода псевдонима Уокера
Я искал этот алгоритм
(algorithm which will randomly select from a list of elements where each element has different probability of being picked (weight) )
и нашел только реализации Python и C, после того, как я сделал C # один, немного по-другому (но я думаю, что проще), я думал, что я должен поделиться им, также мне нужноF# imlementationЕсли кто-то может сделать это, пожалуйста, напишите ответ
<code>using System; using System.Collections.Generic; using System.Linq; namespace ChuckNorris { class Program { static void Main(string[] args) { var oo = new Dictionary<string, int> { {"A",7}, {"B",1}, {"C",9}, {"D",8}, {"E",11}, }; var rnd = new Random(); var pick = rnd.Next(oo.Values.Sum()); var sum = 0; var res = ""; foreach (var o in oo) { sum += o.Value; if(sum >= pick) { res = o.Key; break; } } Console.WriteLine("result is "+ res); } } } </code>
if anyone can remake it in F# please post your code