微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在networkx中找到几何子图的最近邻居?

如何解决如何在networkx中找到几何子图的最近邻居?

当我在 python 中使用 NetworkX 生成随机几何图形时,生成的图形并不总是连接的。为了改变这个属性,我想确定单独的子图,并在每个子图中找到最接近最大子图中节点的两个节点来连接它们。 最好我也希望能够确定第二个最接近的和第三个等等。

networkx 中是否有一个实用程序可以做到这一点。如果没有,您知道解决这个问题的最有效的数学方法吗? (也许在每个图中随机选择两个点,然后执行 k-d 树算法 - 仍然存在的问题是,至少对于较小的子图,我需要对所有节点执行该算法?!?!)

如果您能告诉我 networkx 中是否存在可以完成工作的内容,或者告诉我实现此类例程的最有效方法,那就太好了。

解决方法

我想确定单独的子图

这是在图中找到最大团的问题。即彼此都可以到达的顶点集合,但不能从集合外的任何顶点到达。

这是算法的伪代码

LOOP
    CONSTRUCT empty current set
    SELECT V arbitrary vertex
    add V to current set
    remove V from graph
    LOOP      // while set is growing
        added_to_set = false
        LOOP V over vertices in graph
            LOOP Vset over current set
                IF Vset connected to V
                     add V to current set
                     remove V from graph
                     added_to_set = true
                     break;
        IF added_to_set == false
           break;    // the set is maximal
    ADD current set to list of sets
    IF graph has no remaining vertices
       OUTPUT sets found
       STOP

有关此的 C++ 实现,请参阅 https://github.com/JamesBremner/PathFinder2/blob/dbd6ff06edabd6a6d35d5eb10ed7972dc2d779a6/src/cPathFinder.cpp#L483

中的代码

在每个子图中找到最接近一个节点的节点 最大的子图

可能最好也是最简单的是计算子图中每对节点之间的距离,保留最近的一对。

如果您对近似答案感到满意并且子图不重叠,那么您可以

calculate center of gravity of largest subgraph
compare distances of subgraph nodes to center of gravity ( instead of with every node in largest subgraph )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。