数据关系——寻找解决方案


Data relationship - looking for solutions

我有一个问题,我需要解决,我确信有一种方法做到这一点,我只是不完全确定"搜索什么"和如何找到它。

我想在Excel中做这个,或者我可以试着做一个PHP脚本来做。

基本上,我有一组物质。每对物质与另一种物质或相容或不相容。所以我得到的是一个有行和列的表,其中有0或1,即兼容/不兼容。

现在我想做的是试着找到一组物质,其中所有的物质都是相互兼容的。目标是找到尽可能大的组,或者理想情况下,找到最大的,第二大的等等,并将它们从最大到最小排序(考虑到该组中的最小元素数量可能有一些限制)。

我希望这是有意义的,问题是我不确定如何解决它,但我认为这是应该相对普遍做的事情,所以我怀疑唯一的方法是从头开始编写脚本/宏,使用蛮力来做到这一点。这也可能不是很有效,因为我有一个超过30个元素的表。

为了让它更清楚,举个例子,这是我的数据的简化表:

Substance              A   B  C  D
    A                  0   1  1  1
    B                  1   0  0  1
    C                  1   0  0  0
    D                  1   0  0  0

如果您只使用php而不使用数据库,则可以使用wasort对相关数组的所有元素进行求和。

<?php
$substances = [
    'A' => [
        'A' => 0,
        'B' => 1,
        'C' => 1,
        'D' => 0,
    ],
    'B' => [
        'A' => 1,
        'B' => 0,
        'C' => 1,
        'D' => 1,
    ],
    'C' => [
        'A' => 0,
        'B' => 1,
        'C' => 0,
        'D' => 0,
    ]
];
uasort ($substances, function ($a, $b) {
    $a = array_sum($a);
    $b = array_sum($b);
    if ($a == $b) {
        return 0;
    }
    return ($a > $b) ? -1 : 1;
});
var_export($substances);