2015-07-28 146 views
1

我有一個問題,我需要解決,我敢肯定有這樣做的方式,我只是不完全確定「要搜索什麼」以及如何找到它。數據關係 - 尋找解決方案

我正在考慮在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 
+0

這個問題有點短暫的信息。你可以分享你的嘗試,以及你遇到了什麼問題? –

+0

有些不對勁......表格顯示** B **與** D **兼容,但** D **僅與** A兼容??? –

+0

嗨,對於這個例子,我只是爲了說明的目的而做出來的 基本上我需要創建一組物質,其中特定組中的所有物質都是相互兼容的。我的目標是創建具有儘可能多元素的組 - 理想情況下,按照從最大到最小的順序(給定該組中最少數量的元素)對它們進行排序。 – Jachym

回答

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