我一直在努力寻找或弄清楚算法。

任务:
基本上,我有一系列的可能性:

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/

10-11 12:40
查看更多