我一直在考虑如何实现一些东西,坦率地说,这超出了我的数学技能。因此,请随时尝试为我指明正确的方向,而不是完整的代码解决方案,我将不胜感激。
那么,想象一下,我对文本进行了分析,并生成了一个包含不同双字符组合频率的表格。我将它们存储在一个 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/