二十六、数据统计
- 加权随机
Weighted Random
1)什么是"加权随机"
假设你有一个项目列表。项目可以是任何东西。例如,我们可能有一个喜欢吃的水果和蔬菜列表:
权重列表表示每个项目的权重(或概率、重要性)。权重是数字。例如,权重列表 [3, 7, 1] 可以表示:
如果我们以概率为基础来讲,那么权重列表可能是一个总和为1的浮点数数组(例如[0.1, 0.5, 0.2, 0.2])。
加权随机是一个函数,它会根据每个项目的权重随机返回列表中的一个项目,使得权重较大的项目更容易被选中。
函数的示例接口:
2)加权随机的应用
- 在遗传算法中,加权随机用于"选择"阶段,当我们需要根据个体的适应度评分选择最适应/最强大的个体进行交配,并产生下一代更强大的个体。你可以在500行代码中构建自动停车汽车文章中找到一个示例。
- 在循环神经网络(RNN)中,当根据下一个字母的概率来决定下一个要选择的字母(以形成句子)时使用加权随机。你可以在使用循环神经网络(RNN)生成食谱的Jupyter笔记本中找到一个示例。
- 在Nginx负载均衡中,为了将HTTP请求更频繁地发送到权重较高的服务器。
- 等等...
3)算法
直接的方法如下:
- 根据权重重复列表中的每个项目。
- 从列表中随机选择一个项目。
例如,在水果和蔬菜的情况下,我们可以生成大小为3 + 7 + 1 = 11的以下列表:
然而,正如你所看到的,这种方法可能需要大量的内存,特别是当我们需要在weightedItems列表中重复很多项目时。想象一下,如果你需要将一个字符串如"some-random-string"(18个字节)重复十亿次。你将需要额外分配大约180Mb的内存空间来存储这个数组。
带你读《图解算法小抄》二十六、数据统计(2)https://developer.aliyun.com/article/1347723?groupCode=tech_library