我一直在努力寻找或弄清楚算法。
任务:
基本上,我有一系列的可能性:
var input = [0.1, 0.2, 0.3, 0.1];
让我们将这些输入分别命名为:A,B,C和D。
而且我还有一个变量“m”,它可以告诉我要获得结果需要发生多少这些事情。
例如:
var m = 2;
这个变量m告诉我,如果这两个(或更多)概率中的任何一个发生,事件就会发生。
因此,在这种情况下,对于事件发生,事件发生的所有可能方式是:
A B C D
美国广播公司
ABD
BCD
AB
交流电
广告
公元前
BD和CD
现在,我需要计算它们的概率,我已经有了算法来计算AND和OR(其中输入只是一个概率数组)。
和:
if (input.length > 0) {
output = 1;
}
for (i = 0; i < input.length; i++) {
output = input[i] * output;
}
要么:
if (input.length > 0) {
output = input[0];
}
for (i = 1; i < input.length; i++) {
output = (output + input[i]) - (output * input[i]);
}
因此,我正在努力弄清楚如何在所有可能的可能性之间循环...并具有类似以下内容:
(A和B以及C和D)或(A和B和C)或(A和B和D)……等等……希望您能理解。
最佳答案
通过使用生成所有可能组合的递归函数,您可以获得最少两个的所需数组组合。
function getC(array, min) {
function iter(i, temp) {
var t = temp.concat(array[i]);
if (i === array.length) return;
iter(i + 1, t);
iter(i + 1, temp);
if (t.length >= min) {
result.push(t);
}
}
var result = [];
iter(0, []);
return result;
}
var input = [0.1, 0.2, 0.3, 0.1];
console.log(getC(input, 2).map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 灵活的算法来计算所有可能方案的可能性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53417632/