相关疑难解决方法(0)

随机加权选择

我有这样的数据:

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%

百分比当然很粗糙

python

14
推荐指数
1
解决办法
6254
查看次数

高效的算法随机选择频率项目

给定一组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

(注意,这是替换选择,因此每次可以选择相同的单词).

到目前为止,我已经提出了三种算法:

  1. 创建一个大小数组m,并填充它以便第一个条目,下一个条目,等等,所以最后的条目是.f0w0f1w …

random algorithm big-o

10
推荐指数
2
解决办法
1914
查看次数

根据概率挑选随机项目

我知道,有一个类似的问题,但它使我感到困惑,所以我认为以我的方式提问更容易.

所以我有一系列价值观,正面和负面.它们越高,被选中的概率就越大.
我实际上无法确定如何分配概率,然后随机选择一个概率.我猜这个数组需要先排序,但之后我就有点迷失了.

c random probability

7
推荐指数
1
解决办法
6714
查看次数

偏置随机数发生器

我正在寻找一个可以有偏见的随机数发生器.例如,假设我想要1-5之间的随机数,概率为:

1:上升20%的时间
2:上升10%的时间
3:上升40%的时间
4:上升25%的时间
5:上升5%的时间

标准库或其他库中是否有可以执行此操作的内容?或者,有没有一种有效的方法来做到这一点?

c++ random

7
推荐指数
4
解决办法
1万
查看次数

如何基于数组加权随机数

我一直在考虑如何实现一些坦率地说超出我的数学技能的东西.所以在这里,随意尝试指出我正确的方向,而不是完整的代码解决方案任何帮助,我将不胜感激.

所以,想象一下,我已经对文本进行了分析,并生成了一个不同的两个字符组合的频率表.我将它们存储在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)然后使用'加权'随机算法来选择第二个字符.

有任何想法吗?

.net c# random algorithm weighted

3
推荐指数
2
解决办法
1915
查看次数

标签 统计

random ×4

algorithm ×2

.net ×1

big-o ×1

c ×1

c# ×1

c++ ×1

probability ×1

python ×1

weighted ×1