我有一个由N个元素组成的数组(代表给定字母的N个字母),并且数组的每个单元格都包含一个整数值,该整数值表示该字母的给定文本中出现的次数。现在,我要根据给定约束的出现次数从字母表中的所有字母中随机选择一个字母:
如果字母的值为正(非零),则可以始终通过算法选择字母(当然,概率更大或更小)。
如果字母A的值大于字母B的值,则该算法必须更有可能选择它。
现在,考虑到这一点,我想出了一个可能完成这项工作的简单算法,但是我只是想知道是否还有更好的事情要做。这似乎是非常基本的,我认为可能需要做更多聪明的事情才能更有效地完成此任务。这是我认为的算法:
那么,有没有比这更好的事情了?我想念什么吗?
我知道大多数现代计算机都可以如此快速地进行计算,我什至不会注意到我的算法是否效率低下,因此这更多是理论问题,而不是实际问题。
我更喜欢解释性的算法,而不仅仅是答案的代码,但是如果您更愿意以代码形式提供答案,那么我对此没有任何问题。
这个想法:
例:
Element A B C D Frequency 1 4 3 2 Cumulative 1 5 8 10
生成范围为1-10(1 + 4 + 3 + 2 = 10,与累积列表中的最后一个值相同)的随机数,进行二进制搜索,它将返回如下值:
Number Element returned 1 A 2 B 3 B 4 B 5 B 6 C 7 C 8 C 9 D 10 D