【问题标题】:Algorithm to identify "fuzzily-connected" subgraphs识别“模糊连接”子图的算法
【发布时间】:2014-12-31 09:05:10
【问题描述】:

我有一个问题,从一英里高处看起来就像连接子图问题,但非常不同的是它不属于严格的定义。

我面对一个包含几百万个节点和链接的图(无法手动分析),在这几百万个节点中,已知有 2 或 3 个“集合”。

每个“集合”都由千分之十的节点和千分之几的子图组成,没有强连接。理论上,这些集合中的每一个都不应该与其他集合链接......但是(猜测)有十几个错误的链接最终连接了这些集合。

问题是找到那些集合和错误链接,或者至少获得一个人工管理的候选错误链接列表,可以手动验证。

我目前的“最佳想法”是随机选择两个节点,找到它们之间的最短路径,然后在该最短路径上标记链接。冲洗和重复数百万次,错误的链接最终会成为最明显的链接,因为它们是集合之间的“阻塞点”。

但是,这很慢,当一组比其他组大得多并且有内部阻塞点时,它最终会主导“标记最多”的列表,使其毫无意义。

有更好的算法/方法吗?

编辑: 路径标记的改进是与路径的长度成比例地标记,这有助于解决“大集合的内部阻塞点”问题,但并不能完全消除它,因为一些集合可能有遥远的“异常值”,而其他集合有很多紧密连接的节点(内部距离短)

【问题讨论】:

  • 在两个随机节点之间运行最小切算法是否有效?

标签: algorithm graph


【解决方案1】:

我的想法是ant colony algorithm。我从您选择两个随机节点的方法中得到启发,但认为做更多的事情而不是仅仅计算最短路径会很有用。

在 n 个随机节点中启动 n 只蚂蚁。您将需要使用试错法调整 n。蚂蚁在行走的边缘留下信息素。信息素会及时蒸发。蚂蚁根据概率选择不同的边缘之一进行旅行。一条边的信息素越多,蚂蚁就越有可能选择这条边。

一开始蚂蚁完全随机移动,因为没有信息素并且边缘具有相同的概率。然而,随着时间的推移,两个“模糊连接”组件之间最流行的边缘、桥梁将有越来越多的信息素。

所以,你扔 n 只蚂蚁,模拟 m 圈,然后返回带有最多信息素的边缘。您可以可视化此过程以清楚地了解发生了什么。

更新:我意识到这句话“然而,随着时间的推移,两个“模糊连接”组件之间最流行的边缘、桥梁将有越来越多的信息素” 是错误的。我implemented它,看起来大多数时候桥梁不一定会吸引蚂蚁:

有 n = 1000 只蚂蚁, m = 1000 步。最初,每条边都有 1 个信息素单位,如果蚂蚁经过它,信息素会增加 1。没有蒸发,但我认为这不会改善这种情况。 Bridge 有 49845 个信息素单位,但其他三个边缘的信息素超过 100k。


正如评论中Peter de Rivaz 所建议的那样,我尝试 (source code) 在 2 个随机节点之间重复 min-cut,效果要好得多:

使用python-igraph 库生成的图表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多