当前位置: 首页 > 知识库问答 >
问题:

如何基于数组对随机数进行加权

长孙明知
2023-03-14

坦率地说,我一直在思考如何实现一些超出我数学能力的东西。因此,请随意尝试并为我指出正确的方向,而不是完整的代码解决方案,我将非常感谢您的帮助。

所以,假设我对文本进行了分析,并生成了不同两个字符组合的频率表。我已将这些存储在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.

所以我想随机选择这两个字符组合,但我想根据频率来“权衡”我的选择。也就是说,上面的AB应该是AA的“可能性”的15倍。而且,很明显,选择永远不应该返回类似BB的内容(即频率为0-在本例中,很明显BB确实出现在像Bubble!!:-)这样的单词中)。对于0的情况,我意识到我可以循环直到得到一个非0的频率,但这并不优雅,因为我有一种感觉/直觉,有一种方法可以扭曲我的平均值。

我在考虑选择我对中的第一个字符,即行-(我最终生成一个4对序列),我可以使用系统随机函数(random class.Next),然后使用“加权”随机算法来选择第二个字符。

有什么想法吗?

共有3个答案

史磊
2023-03-14

把所有的频率相加,用AA到ZZ的频率来生成一对。

假设您有一个对的总频率,如果rnd返回0,则得到AA,如果它返回1-14,则得到AB等

栾烨华
2023-03-14

对于您的特定问题,其他答案中有一些很好的建议。为了解决“我有一个符合均匀概率分布的随机数源,但我希望它符合给定的非均匀概率分布”的一般问题,然后您可以计算出分位数函数,它是执行该转换的函数。我在这里给出了一个温和的介绍,解释了为什么分位数函数是您想要的函数:

用C语言生成随机非均匀数据#

曾昂然
2023-03-14

根据您的示例,我首先创建所有数字(1、15、12、0)的累积序列=

然后我会产生一个0到27之间的随机数(比如19)。

然后我会计算出19是

 类似资料:
  • 我已经生成了一个从1-100的随机数,但不会出现重复的数字(例如,如果10来一,那么它不会再来了。)(这个不行) 我如何使用生成的出现在屏幕底部,使用户必须知道什么数字是1-100所有的数字是做了,然后没有数字生成 有谁能帮帮我吗?

  • 问题内容: 我有一个像这样的数组: 如何将其随机/随机播放? 问题答案: 实际无偏混洗算法是Fisher-Yates(aka Knuth)。

  • 我有这两个数组,我需要按ID订购第二个数组,就像第一个数组一样 如何根据第一个值重新订购第二个?我尝试了这个想法,但只适用于简单数组:https://develike.com/en/articles/sorting-an-array-by-values-based-on-another-array-in-php 有序ID数组: 无序数组:

  • 我有一个自定义类数据列表,我想根据一个字段和值应该是另一个字段对它们进行分组。以下面的例子为例。 现在我想基于类对这些数据进行分组。预期的输出应该是一个映射,其中包含作为类的键和作为学生姓名列表的值。 我的代码是这样的:

  • 假设我得到的是范围内的随机数,使用: 假设它给出的数字小于或等于25,你就赢了,如果它给出的数字大于25,我就赢了。然后我有75%的机会赢。 我该如何加权这个数字大于25的概率的某个百分比,比如说1%。 所以,基本上,我试图将我获胜的几率再提高1%,而不是仅仅说“你赢24分或更少” 如果不清楚,请告诉我。

  • 问题内容: 我正在尝试并行运行功能数组,当每个人都完成时,我想要处理该结果。我正在使用诺言。现在,我可以将所有函数放在一个数组中,并可以执行Promise.all(函数数组),但是我有一个像 每个承诺都是承诺的功能。Promise参考文档说Promise.all中的参数应该是一个可迭代的对象,而我的数组是可迭代的。但这对我不起作用。我认为它正在执行[promise1,promise2]作为一个承诺