我有一个非常大的连接图(数百万个节点)。每条边都有一个权重 - 确定连接节点的接近程度。我想找到"集群"在图中(非常靠近的节点集)。例如,如果节点是美国的每个城市,边缘是城市之间的距离 - 集群可能是{达拉斯,休斯顿,沃斯堡}和{纽约,布里奇波特,泽西城,特伦顿}。
群集不必具有相同的大小,并且并非所有节点都必须位于群集中。相反,群集需要具有一些平均最小权重,W等于(群集中权重之和)/(群集中边缘数量)。
我最熟悉Python,而NetworkX似乎是这个
的标准工具似乎这不会太难编程,尽管不是特别有效。我描述的算法有名称吗? NetworkX中是否有实现?
答案 0 :(得分:1)
我知道一些图形分区算法,它们的目标是使所有部件具有尽可能大小相同和最小边缘切割,但正如您所描述的那样,您不需要这样的算法。无论如何,我认为你的问题是NP完全像许多其他图分区问题。 也许有一些算法特别适用于你的问题(我认为有但我不知道)但我认为你仍然可以找到好的和可接受的解决方案,稍微改变一些最初用于寻找最小边缘切割的算法具有相同的组件大小。
例如,请参阅this。我认为您可以使用多级k-way分区进行一些更改。 例如,在粗化阶段,您可以使用光边匹配。 考虑一种情况,在粗化阶段,您将A和B匹配到一个组中,并将C和D与另一个组匹配。这两组之间边缘的重量是其构件彼此边缘的总和,例如, W = Wac + Wad + Wbc + Wbd其中W是边缘权重,Wac是A和C之间的边缘权重,依此类推。我也认为考虑到Wac,Wad,Wbc和Wbd的平均值而不是它们的总和也值得一试。
根据我的经验,这个算法非常快,我不确定你能在python中找到预编码的库来进行更改。