V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yinft
V2EX  ›  问与答

有没有什么工具可以在数组里取个随机数出来 然后取出来的概率我能提前设置好的?

  •  
  •   yinft · 2021-12-09 13:40:28 +08:00 · 1014 次点击
    这是一个创建于 861 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如[1 2 3 4 5] 我设置 1 的概率是 60% 剩下的几个都是 10%,然后取 10 次 6 次左右是 1 ,kotlin 或者 java 语言实现的都行

    9 条回复    2021-12-10 08:55:44 +08:00
    yinft
        1
    yinft  
    OP
       2021-12-09 13:42:10 +08:00
    求助啊。。。
    coderluan
        2
    coderluan  
       2021-12-09 13:49:39 +08:00   ❤️ 1
    这个自己写就完了,要什么工具???

    生成一个新数组,概率多少就塞多少个进去,比如你的例子,新数组就是[1,1,1,1,1,1,2,3,4,5], 随机取一个就满足了。
    ipwx
        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
    ipwx
        4
    ipwx  
       2021-12-09 13:50:55 +08:00
    哦补充:看 prob_vec 第几项 <= p 可以用二分。

    所以整个复杂度是 O(N + log N),额外空间 O(N)
    wolfie
        5
    wolfie  
       2021-12-09 13:55:19 +08:00
    Hutool RandomUtil.weightRandom()
    misaka19000
        6
    misaka19000  
       2021-12-09 14:06:33 +08:00
    设置权重就行了,比如要 1 的概率是 60%,那么就保证 1 在数组中的占的比例是 60%就行
    yinft
        7
    yinft  
    OP
       2021-12-09 14:09:13 +08:00
    @wolfie 感谢
    yinft
        8
    yinft  
    OP
       2021-12-09 14:09:25 +08:00
    感谢老哥们
    whi147
        9
    whi147  
       2021-12-10 08:55:44 +08:00 via iPhone
    赌轮盘
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5577 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 01:42 · PVG 09:42 · LAX 18:42 · JFK 21:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.