2

我有一个由 150 万对元素组成的数组(由 ' ' 分隔):

$array {
    [0] => "element1 element2"
    [1] => "element2 element3"
    [2] => "element8 element4"
    [3] => "element8 element5"
    [4] => "element4 element5"
    [5] => "element6 element7"
    [6] => ... 
}     

每对元素都是唯一的,元素是 15 到 20 个字符的字符串。

在我的管道中,此数组表示 [0]“element1 与 element2 相关”,[1]“element2 与 element3 相关”,...我想将所有相关元素聚集在一起并获得类似于以下内容的输出:

 $array_output {
      [0] => "element1 element2 element3"
      [1] => "element8 element4 element5"
      [2] => "element6 element7"
      [3] => ... 
 }  

我想这个任务很简单,我可能错过了一个明显的方法来完成它,但是我没有找到一种快速的方法来聚集我的元素(即从几分钟到几个小时)。

4

1 回答 1

0

您有一个表示为邻接列表的图,并且您希望将其转换为该图的连接组件的列表。最好的方法是建立连接的节点集,并为每条边合并它们,直到没有更多边为止。

要在 PHP 中执行此操作:

  1. 将您的输入转换为多维数组([["element1", "element2"],["element2","element3"]]等)
  2. 初始化地图表示中的节点列表,每个节点指向仅包含该节点的集合(例如["element1" => ["element1"],"element2" => ["element2"]]等)
  3. 对于来自 (1) 的数组中的每个配对,合并来自 (2) 的数组中两个元素的集合,并将两个元素以及集合中的任何其他元素指向新合并的集合
  4. 将(3)中的所有集合放入一个(集合)集合中,因此您只能获得每个集合一次
  5. 将每组转换为所需的输出格式

您将需要使用引用运算符 ( &) 以重用 (3) 中的相同数组。该算法将更容易在 Java 或具有更明显的哈希图和哈希表的东西中实现。

于 2015-02-25T17:25:50.030 回答