我有一个N元素的数组(表示给定字母表中的N个字母),数组的每个单元格都包含一个整数值,该整数值表示在给定文本中该字母出现的次数。现在我想根据以下约束条件从所有字母中随机选择一个字母:
- 如果该字母具有正(非零)值,则算法始终可以选择它(当然具有更大或较小的概率)。
- 如果字母A的值比字母B高,则算法选择字母A的可能性应更大。
现在,考虑到这一点,我想出了一个简单的算法可能会完成任务,但我只是想知道是否有更好的方法。这似乎是相当基础的,我认为可能有更聪明的方法来更有效地实现这一点。这是我想到的算法:
- 将数组中所有频率相加。将其存储在SUM中
- 从0到SUM中选择一个随机值。将其存储在RAN中
- [当] RAN > 0时,从第一个开始,按顺序访问数组中的每个单元格,并从其中减去该单元格的值
- 最后访问的单元格就是选择的字母
那么,除了这个之外有更好的方法吗?我有什么遗漏的吗?
我知道大多数现代计算机可以如此快地计算出这个算法,以至于我甚至不会注意到我的算法是否低效,因此这更多是一个理论问题而不是实际问题。
我更喜欢解释性算法而不是提供答案的代码,但如果您更喜欢用代码提供答案,我没有问题。