|
本帖最后由 康娜酱 于 2024-3-28 10:09 编辑
情境:
一个技能,第一次必定打出,然后有66%会再打出下一次,34%中断
如果没中断就一直66% VS 34%下去,然后一共最多可以打出7次(第一次+另外六次)
计算打出次数的期望值。
- var cb = 6; // 最多可以打出多少次(第一次不计入)
- var pr = 0.66; // 概率
- var arr = [];
- for (var i = 0; i <= cb; ++i) {
- arr.push(Math.pow(pr, i) * (i === cb ? 1 : 1 - pr));
- }
- var ex = 0;
- for (var i = 0; i <= cb; ++i) {
- ex += (1 + i) * arr[i]
- }
- return ex;
复制代码
打出1+0次的概率 = 0.34 = 34%
打出1+1次的概率 = 0.66 * 0.34 = 22.44%
打出1+2次的概率 = 0.66 ^ 2 * 0.34 = 14.8104%
打出1+3次的概率 = 0.66 ^ 3 * 0.34 = 9.774864%
打出1+4次的概率 = 0.66 ^ 4 * 0.34 = 6.45141024%
打出1+5次的概率 = 0.66 ^ 5 * 0.34 = 4.2579307584%
打出1+6次的概率 = 0.66 ^ 6 = 8.2653950016%
先创建一个arr空数组[],然后用for循环往里面push入Math.pow(pr, i) * (i === ds ? 1 : 1 - pr)
即是当for循环到i的值为0时,push入0.66^0*0.34等同打出1+0次的概率(34%)
而比如for循环到i的值为2时,push入0.66^2*0.34等同打出1+2次的概率(14.8104%)
到最后for循环到i的值为6时,push入0.66^6*1等同打出1+6次的概率(8.2653950016%)
for循环push完之后, 数组arr得出[0.34, 0.2244, 0.148104, 0.09774864, 0.0645141024, 0.042579307584, 0.082653950016]
可以开始计算期望值了,首先把ex赋值为0,然后又再用for循环把ex加上"打出的次数 * 数组arr中打出该次数的概率"
即是代入期望值公式1 * 0.34 + 2 * 0.2244 + 3 * 0.148104 + 4 * 0.09774864 + 5 * 0.0645141024 + 6 * 0.042579307584 + 7 * 0.082653950016 = 2.7807305676159997
最后咱们就得出了期望值约是2.78啦~
|
|