数据关系 – 寻找解决scheme

我有一个问题,我需要解决,我敢肯定有这样做的方式,我只是不完全确定“要search什么”以及如何find它。

我正在考虑在Excel中这样做,或者我可以尝试做一个PHP脚本来做到这一点。

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

现在我想要做的是尝试find一组物质,其中该组中的所有物质都是相互兼容的。 目标是find尽可能大的群体,或理想情况下,find最大,次最大等,并从最大到最小(由于该组中最小元素数可能有一些限制)。

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

所以只是为了更清楚一点,例如这里是我的数据看起来像一个简化的表格:

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

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

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