ruby - 寻找许多连接的交集(图形算法?)

标签 ruby algorithm graph

假设我有 3 个(或更多)人的联系人列表。称他们为 Max、Jeff 和 Steve。

例如,他们每个人都有一个连接列表。

马克斯 -> 弗兰克,苏

杰夫 -> 苏、杰瑞、卡罗琳

史蒂夫 -> 卡罗琳、爱丽丝、鲍勃

鉴于这些列表,我想返回出现的任何交叉点。

所以我会返回 [Sue, Caroline],因为 Max 和 Jeff 在 Sue 处相交,而 Jeff 和 Steve 在 Caroline 处相交。

我正在用 Ruby 编程,所以它可能有自己很酷的、特殊的方式来做这样的事情,否则我将不得不编写自己的算法来获得这些。我将其视为如下图所示。

graph of explained connections

如果我一开始就在列表中找到这些交叉点,那么找到这些交叉点的​​好方法是什么?是否有一种很好的 ruby​​ 方式来表示:Max.connections & Jeff.connections & Steve.connections 或者制作图表并像那样对它们进行排序会更好吗?

谢谢!

最佳答案

假设你有:

h = {
  "Max" => ["Frank", "Sue"],
  "Jeff" => ["Sue", "Jerry", "Caroline"],
  "Steve" => ["Caroline", "Alice", "Bob"],
}

h 中的每个数组不包含重复项。然后,要在数组中查找重复项,您可以执行以下操作:

h.values.flatten.group_by{|e| e}.values.select{|a| a.length > 1}.map(&:first)
# => ["Sue", "Caroline"]

关于ruby - 寻找许多连接的交集(图形算法?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558341/

相关文章:

ruby - 示例 ruby​​ 程序中交换数组中的元素时出错

java - Rails 模型实例变量未在模型类中声明

algorithm - 不在可能重复数列表中的最小非负数

c++ - 选择排序算法产生乱序结果

python - 如何使用 2D np 数组作为输入创建 networkx 图

r - 如何调整 interaction.plot 和 lineplot.CI 的图例位置?

ruby-on-rails - 在此代码示例中,double splat (**) 参数是什么意思,为什么要使用它?

ruby - 如何在 Cucumber 中模拟 TCP 连接

python - 螺旋图案 : how do I find a number given coordinates?

algorithm - 查找路径是否存在于单向有向图中的最佳方法