javascript - 从任意加权列表生成随机数

标签 javascript php statistics

这是我需要做的,我将同时使用 PHP 和 JavaScript 来完成。

我有一个数字列表,范围从 1 到 300-500(我还没有设置限制)。我将运行一个绘图,从给定范围内随机选择 10 个数字。

这是棘手的部分:我希望一些数字不太可能被拟定。这 300-500 个中的一小部分将被标记为“幸运数字”。

例如,在 100 张图纸中,大多数数字被抽取的机会均等,除了少数,每 30-50 张图纸只会被抽取一次。

基本上我需要人为设置某些数字被选中的概率,同时保持与其余数字的均匀分布。

到目前为止我发现的唯一相似的是这个问题:Generate A Weighted Random Number ,问题是我的规范有相当多的数字(最多 500),所以权重会变得非常小,据推测这可能是该解决方案(拒绝抽样)的问题。不过,我仍在尝试,但我想知道是否还有其他解决方案。

数学不是我的专长,所以我很感激任何意见。谢谢。

最佳答案

我写了一个快速的小 JSFiddle 来处理这个:

http://jsfiddle.net/cHVsC/

基本上,我生成一个名为 pool 的数组,其中包含完整的数字列表,包括权重更高的数字的重复项。然后选择与非加权数组完全一样。

示例 JS:

function generatePool (count, luckyNumbers) {
    var arr = [], i, j;
    for (i = 1; i <= count; i++) {
        if (luckyNumbers[i]) {
            for (j = 0; j < luckyNumbers[i]; j++) {
                arr.push(i);
            }
        } else {
            arr.push(i);
        }
    }
    return arr;
}

function randomNumber (pool) {
    return pool[ Math.floor(Math.random() * pool.length) ];
}

和一个用法示例

var luckyNumbers = {};
luckyNumbers[13] = 10;
luckyNumbers[25] = 100;

var pool = generatePool(300, luckyNumbers);

alert(randomNumber(pool));

更新:我误解了最初的目标。这是一个更新版本:

function generatePool (count, luckyNumbers) {
    var arr = [], i, j;
    for (i = 1; i <= count; i++) {
        for (j = 0; j < (luckyNumbers[i] || 10); j++) {
            arr.push(i);
        }
    }
    return arr;
}

function randomNumber (pool) {
    return pool[ Math.floor(Math.random() * pool.length) ];
}

用法示例:

var luckyNumbers = {};
luckyNumbers[13] = 1; //-- ~1:10 odds
luckyNumbers[25] = 2; //-- ~2:10 odds

var pool = generatePool(300, luckyNumbers);

console.log(randomNumber(pool));

关于javascript - 从任意加权列表生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23899132/

相关文章:

javascript - Typescript 属性在类型 {} 上不存在

php - 在图像上找到最喜欢的区域

javascript - 使用 JavaScript 将文本添加到 url 的开头

javascript - Google Analytics.js 和内容安全政策

javascript - 我上传图像的 Javascript 和 PHP 通信有什么问题?

php - Mysql/Codeigniter - 加密/解密用户数据安全 - 最佳实践

php shell_exec 权限被拒绝

php - 从每个字段的列中获取值,但它返回 NULL?

command-line - 从命令行获取一组数字的平均值的最快方法是什么?

r - 在R代码中生成100个均匀不同的随机变量