Seleção aleatória ponderada usando o método de alias de Walker


Eu estava procurando por esse algoritmo
(algoritmo que selecionará aleatoriamente de uma lista de elementos onde cada elemento tem probabilidade diferente de ser escolhido (peso))
e encontrei apenas implementações em python ec, depois que fiz um C # one, um pouco diferente (mas acho mais simples) achei que deveria compartilhá-lo, também preciso de umF # imlementation, se alguém puder fazer isso por favor poste uma resposta

<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>

se alguém puder refazê-lo em F # por favor poste seu código

questionAnswers(2)

yourAnswerToTheQuestion