我有一个问题,我需要解决,我确信有一种方法做到这一点,我只是不完全确定"搜索什么"和如何找到它。
我想在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);