数据关系 - 寻找解决方案

时间:2015-07-28 12:33:26

标签: php excel

我遇到了一个我需要解决的问题,我确信有一种方法可以解决这个问题,我只是不确定"搜索什么"以及如何找到它。

我正在考虑在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

1 个答案:

答案 0 :(得分:1)

如果你只使用没有数据库的php,你可以使用uasort对相关数组的所有元素求和。

<?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);