我有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是否有序(如你的例子)? –