gpt4 book ai didi

c# - 使用 Walker 的别名方法进行加权随机选择

转载 作者:行者123 更新时间:2023-11-30 13:33:01 26 4
gpt4 key购买 nike


我在找这个算法
(算法会从元素列表中随机选择每个元素被选中的概率(权重)不同)
并且只找到了 python 和 c 实现,在我做了一个 C# 之后,有点不同(但我认为更简单)我想我应该分享它,我还需要一个 F# imlementation,如果有人能做到的话请发表回答

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);
}
}
}

如果有人可以用 F# 重新制作它,请发布您的代码

最佳答案

下面是 F# 中的类似代码:

let rng = new System.Random()
let d = [| "A", 3
"B", 2
"C", 3 |]
let sums = Seq.scan (+) 0 (dict d).Values |> Seq.skip 1 |> Seq.toArray
let pick = rng.Next(sums.[sums.Length-1])
let res = fst d.[sums |> Seq.findIndex ((<) pick)]

关于c# - 使用 Walker 的别名方法进行加权随机选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10164303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com