IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

概率选取的实现

idea's blog 2011-08-03 13:29:52 累计浏览 3,577 次
本机暂存

    常常有这样的功能需求: 每次从一批候选项中随机选取其中一项, 要求每一项的出现都有一定的概率. 比如说, 有如下候选项和对应的概率: A:10%, B:5%, C:25%, D:60%.

    现在, 把每一项的概率用一个正整数(概率值)来表示, 不使用百分率, 整数的总和不一定等于100, 可以是任意大小,

实际概率 = 概率值/总和 * 100%

    概率选取的算法如下:

  • 依次(顺序可随机)将各项按概率值从原点开始放在一维坐标上首尾相连, 这样, 每一项对应一个取值区间
  • 在总区间范围内随机选取一个点, 落在哪一项对应的区间就选中哪一项
  •     用伪码表示:

    total_p = sum(p1 + p2 + p3 + ...)
    rand = random(1, total_p) // [1, total_p]
    foreach(items as item){
        rand -= item.p
        if(rand <= 0){
            // 选中了
        }
    }

    同分类推荐文章

    1. 对基本有序的序列排序算法 (2026-06-11 17:46:49)
    2. Four Levels Of Customer Understanding (2026-05-22 21:00:00)
    3. 除法的意义 (2026-04-12 20:52:17)

    查看更多 算法 文章 →

    建议继续学习

    1. 几个随机算法 (累计阅读 3,647)
    2. 一道随机数题目的求解 (累计阅读 3,205)
    3. 抽奖类活动项目的一些技术Tips (累计阅读 2,416)
    4. 游戏的类型 (累计阅读 2,210)