我有这样的数据:
d = (
(701, 1, 0.2),
(701, 2, 0.3),
(701, 3, 0.5),
(702, 1, 0.2),
(702, 2, 0.3),
(703, 3, 0.5)
)
Run Code Online (Sandbox Code Playgroud)
其中(701,1,0.2)=(id1,id2,priority)
如果我知道id1,使用优先级,有没有一种选择id2的漂亮方法?
Func(701)应该返回:
1 - 在20%的情况下
2 - 30%
3 - 50%
百分比当然很粗糙
给定一组n字频对:
[ (w0, f0), (w1, f1), ..., (wn-1, fn-1) ]
在哪里是一个单词,是整数频率,以及频率的总和,wifi∑fi = m
我想使用伪随机数生成器(pRNG)来选择p单词,以便选择任何单词的概率与其频率成正比:wj0, wj1, ..., wjp-1
P(wi = wjk) = P(i = jk) = fi / m
(注意,这是替换选择,因此每次都可以选择相同的单词).
到目前为止,我已经提出了三种算法:
创建一个大小数组m,并填充它以便第一个条目,下一个条目,等等,所以最后的条目是.f0w0f1w …
我知道,有一个类似的问题,但它使我感到困惑,所以我认为以我的方式提问更容易.
所以我有一系列价值观,正面和负面.它们越高,被选中的概率就越大.
我实际上无法确定如何分配概率,然后随机选择一个概率.我猜这个数组需要先排序,但之后我就有点迷失了.
我正在寻找一个可以有偏见的随机数发生器.例如,假设我想要1-5之间的随机数,概率为:
1:上升20%的时间
2:上升10%的时间
3:上升40%的时间
4:上升25%的时间
5:上升5%的时间
标准库或其他库中是否有可以执行此操作的内容?或者,有没有一种有效的方法来做到这一点?
我一直在考虑如何实现一些坦率地说超出我的数学技能的东西.所以在这里,随意尝试指出我正确的方向,而不是完整的代码解决方案任何帮助,我将不胜感激.
所以,想象一下,我已经对文本进行了分析,并生成了一个不同的两个字符组合的频率表.我将它们存储在26x26阵列中.例如.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A 1 15 (frequency of AA, then frequency of AB etc.)
B 12 0 (freq of BA, BB etc..)
... etc.
Run Code Online (Sandbox Code Playgroud)
所以我想随机选择这两个字符组合,但我想根据频率"权衡"我的选择.即.上面的AB应该比AA高15倍.并且,显然,选择应该永远不会返回像BB这样的东西(即频率为0 - 在这个例子中,显然BB确实出现在像Bubble !! :-)这样的单词中).对于0的情况,我意识到我可以循环,直到我得到一个非0频率,但这只是不优雅,因为我有一种感觉/直觉,有一种方法来扭曲我的平均值.
我想要选择我的第一个字符 - 即.行 - (我最终生成了4对序列)我可以使用系统随机函数(Random class.Next)然后使用'加权'随机算法来选择第二个字符.
有任何想法吗?