Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建javascript数组(N),该数组由连续较小的整数组成,其总和为1000_Javascript_Arrays_Random_Probability_Weighted - Fatal编程技术网

创建javascript数组(N),该数组由连续较小的整数组成,其总和为1000

创建javascript数组(N),该数组由连续较小的整数组成,其总和为1000,javascript,arrays,random,probability,weighted,Javascript,Arrays,Random,Probability,Weighted,我正在开发一个基于文本的滚动游戏,我需要生成一个由N个概率值组成的数组,每个连续值都比之前的值小(少),总的总和等于1000。1000是重要的,因为在其他地方我的概率小于1% 该函数使用该数组生成加权随机指数:概率为所讨论的数组 function rndProb(probability) { chances = new Array(); for(var x=0; x<probability.length ; x++) { for(var y=0;

我正在开发一个基于文本的滚动游戏,我需要生成一个由N个概率值组成的数组,每个连续值都比之前的值小(少),总的总和等于1000。1000是重要的,因为在其他地方我的概率小于1%

该函数使用该数组生成加权随机指数:概率为所讨论的数组

function rndProb(probability)
{

    chances = new Array();
    for(var x=0; x<probability.length ; x++)
    {
        for(var y=0; y<probability[x]; y++)
        {
        chances.push(x);
        }
    }
    var px = Math.floor(Math.random() * chances.length+1);
    return chances[px];
}
差不多

function probGen(arrayLength)
{
    for(var i=0;i<arrayLength;i++)
    {
         prob.push(((1000-arrayLength)/arrayLength)+1);
    }
    return prob;
}
函数probGen(阵列长度)
{

对于(var i=0;i从算术序列1,2,…,N开始。这个序列的和是S=N*(N+1)/2。我们可以很容易地将序列的每个成员乘以1000/S,得到一个和为1000的序列。(因为你需要整数,所以会有一个余数,我们可以把它加到最大的值上。)

在Javascript中:

function probGen(arrayLength)
{
    var prob = [];
    var sum = arrayLength * (arrayLength + 1) / 2;
    var multiplier = Math.floor(1000 / sum);
    var remainder = 1000 - (sum * multiplier);

    if (sum > 1000) { return null; } // error case

    for (var i = arrayLength ; i > 0 ; i--)
    {
        prob.push(i * multiplier);
    }
    prob[0] += remainder;
    return prob;
}

解决了!让我的头受伤了

function generateProbs(arrayLength)
{
    var prob = new Array();
    var diff = 1;
    for(var d=2;d<arrayLength+1;d++)
    {
        diff = diff + d;
    }
    var offset = (1000/diff);

    for(var i=arrayLength;i>0;i--)
    {
        prob.push(Math.round(offset*i));
    }
    return prob;
}
function generateProbs(阵列长度)
{
var prob=新数组();
var-diff=1;
对于(变量d=2;d0;i--)
{
prob.push(数学圆整(偏移量*i));
}
返回问题;
}

也许可以在上发帖以获得算法方面的帮助,然后将其转换为代码?与我所想的类似…找到乘数并进行迭代,创建均匀分布的概率。我与您同时发布了我的答案:)在您的时间内将您的答案标记为正确。感谢您的努力!
function generateProbs(arrayLength)
{
    var prob = new Array();
    var diff = 1;
    for(var d=2;d<arrayLength+1;d++)
    {
        diff = diff + d;
    }
    var offset = (1000/diff);

    for(var i=arrayLength;i>0;i--)
    {
        prob.push(Math.round(offset*i));
    }
    return prob;
}