Gewichtete zufällige Auswahl unter Verwendung der Walker-Alias-Methode


Ich habe nach diesem Algorithmus gesucht
(Algorithmus, der zufällig aus einer Liste von Elementen auswählt, bei denen jedes Element eine unterschiedliche Wahrscheinlichkeit hat, ausgewählt zu werden (Gewichtung))
und fand nur Python und C-Implementierungen, nachdem ich ein C # ein wenig anders (aber ich denke einfacher) ich dachte, ich sollte es teilen, auch ich brauche eineF # -Implementierung, wenn jemand es schaffen kann, schreibe bitte eine Antwort

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

Wenn irgendjemand es in F # neu machen kann, poste bitte deinen Code

Antworten auf die Frage(2)

Ihre Antwort auf die Frage