如何将概率(均匀递增或递减线性分布)分配给一组值

How do I assign a probability (uniform increasing or decreasing linear distribution) to a array of values?

本文关键字:分布 分配 一组 线性 概率      更新时间:2023-09-26

给定X=[1,2,3,4,5,6,7,8,9,10]-,但X可以是任何长度(N(

我想实现以下目标:

  1. 我想给第一个值X[0],这是最高的概率
  2. 我想给第二个值X[1],一个比X[0]小的概率
  3. 我想给第三个值X[2],一个比X[1]小的概率
  4. 我想给最后一个值X[N],一个比X[N-1]小的概率

所有概率总和应为1。

为了清晰起见,均匀概率分布(1/(X.length((如下所示:

{1:0.1,2:0.1,3:0.1,4:0.1,5:0.1,6:0.1,7:0.1,8:0.1,9:0.1,10:0.1,}

如果可能的话,javascript的解决方案会很棒。

您可以对指数求和(所有值增加一(,并使用该和来计算概率。

对于反向分布,请反转概率数组。

var add = (a, b) => a + b,
    data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    sum = data.length * (data.length + 1) / 2,
    probability = data.map((_, i) => (i + 1) / sum),
    sumProbability = probability.reduce(add, 0);
console.log(probability);
console.log(sumProbability);

最后一个元素的概率为q,上一个元素为2*q,上个元素为3*q。。。对于第一个是N*q

  q + 2 * q + 3 * q +...+(N-1)*q + N * q  = 1
  q * Sum(1...N) = 1
  q * N * (N + 1) / 2 = 1
  q = 2 / (N * (N + 1))

所以你可以找到任意序列长度的q,并得到每个元素的概率。N=3 的示例

  q = 2 / (3 * 4) = 1/6

概率:

  3/6, 2/6, 1/6   Sum = 1