c# - 如何根据数组对随机数进行加权

标签 c# .net algorithm random weighted

我一直在考虑如何实现一些东西,坦率地说,这超出了我的数学技能。因此,请随时尝试为我指明正确的方向,而不是完整的代码解决方案,我将不胜感激。

那么,想象一下,我对文本进行了分析,并生成了一个包含不同双字符组合频率的表格。我将它们存储在一个 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.

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

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

有什么想法吗?

最佳答案

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

然后我会生成一个介于 0 和 27 之间的随机数(假设为 19)。

然后我会计算出 19 是 >=16 但 <28,给我桶 3 (BA)。

关于c# - 如何根据数组对随机数进行加权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14603723/

相关文章:

c# - ASP.NET C# 使用 System.IO 复制目录和子目录

.net - Path.Combine 的安全版本

algorithm - 顺序搜索时间中的预期搜索时间

java - 从数组中删除连续元素的最有效方法? java

c# - 提交表单后从数据库中检索最新的主键 C#

c# - OrderBy异常 "At least one object must implement IComparable"

c# - ASP.NET Core 2.0 - 必须提供 ArgumentException : Options. ClientId

.net - 如何判断 .NET 应用程序是在 DEBUG 还是 RELEASE 模式下编译的?

c# - "Access to path denied"- 在不同网站但在同一服务器上创建目录

javascript - JavaScript 中是否有一种有效的算法可以在较大的数组集中查找不同数组的数量?