我有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组上的每个秩。
我发现一个算法有效地做了2组交集,所以我正在考虑创建一个比较2个等级的树结构,直到我耗尽所有的等级。 –
2组交叉算法看起来像这样;我们可以有两个索引,都从零开始。比较A和B的两个第一个元素。如果A [0]大于B [0],我们将B的索引增加1。如果B [0]大于A [0],我们将A的索引增加1。如果它们相等,我们知道发生了交集,所以将其添加到列表并将A和B的索引增加1。一旦索引达到A或B的末尾,我们就找到了A和B的所有交集。这需要在排序后执行。 –
在数学上,你想要得到的每个等级的结果是该等级的集合与其他等级集合的交集**的联合。对于并行实现,考虑一个等价问题可能是值得的:删除不是任何其他集合的元素的每个元素。附:这些集合alwasys是否有序(如你的例子)? –