Php 查找没有共同元素的组合

Php 查找没有共同元素的组合,php,algorithm,math,combinations,probability,Php,Algorithm,Math,Combinations,Probability,我有一个数组(A,B,C,D) 我使用组合公式从以上4个字母中选择2个字母,共6个组合 n!/R(右) 阵列(A,B), 阵列(A,C), 阵列(A,D), 阵列(B,C), 阵列(B,D), 数组(C,D) 我如何找到2、3或n(应该是动态的)组的组合,它们没有共同的字母。所以我希望结果会低于2组的组合 阵列(A,B), 数组(C,D) 阵列(A,C), 阵列(B,D) 阵列(A,D), 阵列(B,C) 这只是一个示例,但我希望该算法适用于大量阵列(我有35000多个阵列)。我想找到一组2、3

我有一个数组(A,B,C,D)

我使用组合公式从以上4个字母中选择2个字母,共6个组合

n!/R(右)

阵列(A,B), 阵列(A,C), 阵列(A,D), 阵列(B,C), 阵列(B,D), 数组(C,D)

我如何找到2、3或n(应该是动态的)组的组合,它们没有共同的字母。所以我希望结果会低于2组的组合

阵列(A,B), 数组(C,D)

阵列(A,C), 阵列(B,D)

阵列(A,D), 阵列(B,C)


这只是一个示例,但我希望该算法适用于大量阵列(我有35000多个阵列)。我想找到一组2、3或n(应该是动态的),每个组都应该有没有共同元素的数组(所有键都应该是不同的,没有一个元素应该重复)。

你没有说关于集合是如何表示的,所以我使用数组来表示

// The base set
$baseSet = array('A', 'B', 'C', 'D');

// Build the subsets
$subSets = array();
for ($i = 0; $i < 3; $i++) {
    for ($j = $i+1; $j< 4; $j++) {
        $subSets[] = array($baseSet[$i], $baseSet[$j]);
    }
}
一般来说,PHP提供了很多功能

如果只想比较两个子集,请使用
数组\u intersect()


它对小阵列工作良好,但有没有办法处理大阵列?我有9845大小的数组。我想找出唯一的组合。在我的答案中添加了一个比较示例。它适用于数量较少的数组,但当我们有大量数组并且有更多数组元素时,它就不起作用了。“不起作用”表示。。。?我建议的比较从任意数量的数组中抽取两个。逻辑是正确的,但是嵌套for循环对于大量的组合执行起来需要很长时间。
foreach ($subSets as $subSet) {
    $complement = array_diff($baseSet, $subSet);
    printf("{%s, %s} - {$s, %s}\n",
        $baseSet[0], $baseSet[1],
        $complement[0], $complement[1]
    );
}
$common = array_intersect($subSet1, $subSet2);
if (empty($common)) {
    echo 'The subsets are distinct.';
} else {
    echo 'The subsets have these elements in common: ' . implode(', ', $common);
}