比如[1 2 3 4 5] 我设置 1 的概率是 60% 剩下的几个都是 10%,然后取 10 次 6 次左右是 1 ,kotlin 或者 java 语言实现的都行
1
yinft OP 求助啊。。。
|
2
coderluan 2021-12-09 13:49:39 +08:00 1
这个自己写就完了,要什么工具???
生成一个新数组,概率多少就塞多少个进去,比如你的例子,新数组就是[1,1,1,1,1,1,2,3,4,5], 随机取一个就满足了。 |
3
ipwx 2021-12-09 13:50:06 +08:00
0. 设置一个 prob_vec = [0.6, 0.7, 0.8, 0.9, 1.0]
1. random.random() 得到一个随机数 p ,p 在 0 ~ 1 之间。 3. 看 prob_vec 第几项是最后一个 <= p 的,如果是就取对应的数。 比如你 p = 0.45 ,那么就取 1 。 如果 p = 0.65 ,就去 2 |
4
ipwx 2021-12-09 13:50:55 +08:00
哦补充:看 prob_vec 第几项 <= p 可以用二分。
所以整个复杂度是 O(N + log N),额外空间 O(N) |
5
wolfie 2021-12-09 13:55:19 +08:00
Hutool RandomUtil.weightRandom()
|
6
misaka19000 2021-12-09 14:06:33 +08:00
设置权重就行了,比如要 1 的概率是 60%,那么就保证 1 在数组中的占的比例是 60%就行
|
8
yinft OP 感谢老哥们
|
9
whi147 2021-12-10 08:55:44 +08:00 via iPhone
赌轮盘
|