mysql按权重生成随机数_按照指定的权重求随机数

本文探讨了如何在MySQL中按权重生成随机数,并介绍了遗传算法中的轮盘赌选择方法。通过将权重转化为累积概率,实现了在给定概率分布下抽取随机数的Python函数。同时,解释了遗传算法中适应度与选择概率的关系,以及轮盘赌选择法的计算步骤和实例。
摘要由CSDN通过智能技术生成

原文:http://fatelei.github.io/2015/09/08/

按照指定的权重求随机数

描述:通常取随机数,取到每个数字的概率都是一样,比如取 n 次,取到某个数的概率都是 1/n。现在情况发生了变化,要随机取的数,每个数字都被设置了一个权值(weight),比如:

11f9701c0f4986560749879fb04d9a37.png

上面这个图表的含义是:进行随机取数,取到 1 的概率是 1/5,取到 2 概率是 2/5,取到 3 的概率是 2/5。现在要求你使用代码完成这个按照不同权值进行取值的过程。

一开始想到方法是:

使用一个数组 value ,数组的下标对应于这个权重的范围,下标对应的值就是要求的值,比如还是上面这个例子,比如在 1 < x <= 3这个区间范围内,然后对整个区间长度求随机值,rand(1, 5) 会得到一个下标值,然后根据这个下标值去获取想要的值。这个解法的问题是,如果某个值的权值很大,那么需要一个很大的数组,这样会非常非常消耗内存,显然不是一个很好的解决方法。不过当时也没有想到更好的方法。

晚上回来想了想,有没有可以优化的方向

1

2

3

p(x = 1) = 1/5 (x <= 1)

p(x = 2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值