Objective-C中的加权随机字母

Chr*_*ris 3 random objective-c

我需要一种简单的方法来随机选择字母表中的一个字母,加权我希望它出现的百分比.例如,我希望字母'E'在5.9%的时间内出现在随机函数中,但我只希望'Z'在0.3%的时间内出现(依此类推,基于每个的平均出现次数)字母表中的字母).有什么建议?我看到的唯一方法是使用10000个字母(590'E',3'Z'等)填充数组,然后从该数组中随机选择一个字母,但它看起来像内存密集且笨拙.

use*_*321 5

不确定这是否可行,但看起来它可能会起作用:

  1. 记下字母和频率列表,并从最小频率到最大频率进行排序.
  2. 创建一个26元素数组,其中每个元素n包含所有先前权重的总和以及频率列表中的元素n.记下数组最后一个元素的总和
  3. 生成一个介于0和上面记录的总和之间的随机数
  4. 对和数组进行二元搜索,直到到达该数字将落下的元素

这有点难以理解,所以它会是这样的:

  1. 如果你有一个带有这些频率的5个字母的字母,a = 5%,b = 20%,c = 10%,d = 40%,e = 25%,按频率排序:a,c,b,e,d
  2. 保持元素的运行总和:5,15,35,60,100
  3. 生成0到100之间的随机数.说出来22.
  4. 二元搜索22将落下的元素.在这种情况下,它将位于元素2和3之间,这将是字母"b"(我想这是你想要的四舍五入)