gpt4 book ai didi

algorithm - 高效的分布式算法,用于合并具有公共(public)元素的集合

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:30 25 4
gpt4 key购买 nike

我正在 Flink 上进行 MinHash LSH 的分布式实现,作为最后一步,我需要合并一些集群,这些集群被标识为它们之间相似的元素集。

所以我有一个分布式集合集合作为输入,我需要一种算法来有效地将集合与公共(public)元素合并。鉴于 Flink 的计算模型,该算法可能是迭代的,不一定像 map-reduce。

举个例子:

来自 {{1{1,2}},{2,{2,3}},{3,{4,5},{4{1,27}}}}结果应该是 {1,2,3,27},{4,5} 因为集合 #1、#2 和 #4 至少有一个共同元素。

最佳答案

这是一个想法:Gelly 是 Fl​​ink 的一部分,它有一个连接组件查找器。制作一个图,其中每个集合元素都有一个节点,边以最简单的方式连接每个集合的元素,例如对于 {a, b, c, d, ...} 添加 [a,b], [a,c], [a,d], [a,... 。现在找到连接的组件。他们的节点提供了您正在寻找的集合。

编辑如果您担心从集合到图形再转换回来的性能影响(尽管这种担心是过早的优化;您应该尝试一下),重新实现 Gelly 的集合 token 推送方案就足够简单了。这是如何工作的。您的示例中已经有了标记:集合编号。让 S[i] 设置为 i 在您的示例中显示。例如。 S[1] = {1,2}。设 R 是一个逆多重图,它将每个集合元素带到它所属的集合集合中。例如。 R[2] = {1,2} 在你的例子中。令 T[i] 为可通过传递非空交集“链接”从集合 i 到达的元素。然后计算:

T[i] = S[i] for all i // with no links at all, a set reaches its own elements
loop
for all i, Tnew[i] = \union_{ x \in T[i] } S[R[x]] // add new reachables
exit if Tnew == T
T = Tnew
end loop

完成后, map T 的不同值就是您想要的答案。最大迭代次数应为 log |U|其中 U 是集合元素的全域。

关于algorithm - 高效的分布式算法,用于合并具有公共(public)元素的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com