集合交叉的并行算法

时间:2012-12-12 18:15:28

标签: algorithm parallel-processing distributed-computing set set-intersection

我有n组(分布在n级)数据,它代表网格的节点,我想知道一种有效的并行算法来找到这些集合的交集,即公共节点。只要任何2个集合共享一个节点,就会定义一个交集。

例如;

输入:

Rank 0: Set 1 - [0, 1, 2, 3, 4]

Rank 1: Set 2 - [2, 4, 5, 6]

Rank 2: Set 3 - [0, 5, 6, 7, 8]

实施并行算法 - >结果:(找到交叉点后)

Rank 0: [0, 2, 4]

Rank 1: [2, 4, 5, 6]

Rank 2: [0, 5, 6]

算法需要在每个等级上设置1组的n级别上完成。

1 个答案:

答案 0 :(得分:1)

你应该能够使用哈希表来并行快速O(N)。

对于每个集合S_i,对于每个成员m_x(所有成员可以并行完成),将set成员放入与集合名称相关联的哈希表中,例如。无论何时你从集合S_j的m_x上的哈希表中获得命中,你现在都有相应的集合号S_i,并且你立即知道S_i与S_j相交。您可以将m_x放在派生的交集中。

您需要一个并行安全的哈希表。这很简单;在更新期间锁定存储桶。

[另一个答案建议对集合进行排序。对于大多数排序算法,将是O(N ln N)时间,而不是那么快。