我有一个由 N 个元素组成的数组(代表给定字母表的 N 个字母),并且该数组的每个单元格都保存一个整数值,该整数值表示该字母在给定文本中出现的次数。现在我想根据他在给定约束下出现的次数从字母表中的所有字母中随机选择一个字母:
如果字母具有正(非零)值,则算法始终可以选择它(当然,概率更大或更小)。
如果字母 A 的值高于字母 B,则算法必须更可能选择它。
现在,考虑到这一点,我想出了一个可以完成这项工作的简单算法,但我只是想知道是否有更好的事情要做。这似乎是非常基本的,我认为为了更有效地完成这一点,可能需要做更多聪明的事情。这是我认为的算法:
- 将数组中的所有频率相加。将其存储在 SUM 中
- 选择从 0 到 SUM 的随机值。将其存储在 RAN 中
- [While] RAN > 0,从第一个开始,访问数组中的每个单元格(按顺序),并从RAN中减去该单元格的值
- 最后访问的单元格是选择的单元格
那么,还有比这更好的事情吗?我错过了什么吗?
我知道大多数现代计算机可以如此快速地计算这个,如果我的算法效率低下,我什至不会注意到,所以这更多是一个理论问题,而不是一个实际问题。
我更喜欢解释算法,而不仅仅是代码的答案,但如果你更愿意在代码中提供你的答案,我对此没有任何问题。