给定X = [1,2,3,4,5,6,7,8,9,10] - 但X可以是任意长度(N)。
我想实现以下目标:
- 我想给出第一个值X [0],概率最高。
- 我想给第二个值X [1],概率小于X [0]。
- 我想给第三个值X [2],概率小于X [1]。
- ...
- 我想给出最后一个值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中的解决方案会很棒。
答案 0 :(得分:1)
最后一个元素的概率是q,前一个元素是2 * q,前一个是3 * q ...而第一个是N * q
bool PreciseControl::eventFilter(QObject *, QEvent *event)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if(event->type() == QEvent::MouseButtonPress &&
mouseEvent->button()==Qt::RightButton )
{
emit rightMousePressed();
return true;
}
else if(event->type() == QEvent::MouseButtonRelease &&
mouseEvent->button()==Qt::RightButton )
{
emit rightMouseReleased();
return true;
}
if(event->type() == QEvent::MouseButtonPress &&
mouseEvent->button()==Qt::LeftButton )
{
emit leftMousePressed();
return true;
}
else if(event->type() == QEvent::MouseButtonRelease &&
mouseEvent->button()==Qt::LeftButton )
{
emit leftMouseReleased();
return true;
}
return false;}
因此,您可以找到任何序列长度的q并获得每个元素的概率。 N = 3
的示例 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 = 2 / (3 * 4) = 1/6
答案 1 :(得分:1)
您可以对指数求和(所有值增加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);