如何将概率(均匀递增或递减线性分布)分配给值数组?
How do I assign a probability (uniform increasing or decreasing linear distribution) to a array of values?
Given X=[1,2,3,4,5,6,7,8,9,10] -- but X could be any length(N).
I want to achieve the following:
- I want to give the 1st value X[0], the highest probability.
- I want to give the 2nd value X[1], a lesser probability than X[0].
- I want to give the 3rd value X[2], a lesser probability than X[1].
- ...
- I want to give the Last value X[N], a lesser probability than X[N-1]
All probabilities should sum up to 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 中的可能解决方案会很棒。
最后一个元素的概率是 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
您可以对指数求和(所有值加一)并使用总和来计算概率。
对于反向分布,反转概率数组。
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);
Given X=[1,2,3,4,5,6,7,8,9,10] -- but X could be any length(N).
I want to achieve the following:
- I want to give the 1st value X[0], the highest probability.
- I want to give the 2nd value X[1], a lesser probability than X[0].
- I want to give the 3rd value X[2], a lesser probability than X[1].
- ...
- I want to give the Last value X[N], a lesser probability than X[N-1]
All probabilities should sum up to 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 中的可能解决方案会很棒。
最后一个元素的概率是 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
您可以对指数求和(所有值加一)并使用总和来计算概率。
对于反向分布,反转概率数组。
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);