如何在 networkx 中找到几何子图的最近邻居?
How to find nearest neighbours of geometric subgraphs in networkx?
当我在 python 中使用 NetworkX 生成随机几何图形时,生成的图形并不总是连接的。要更改此 属性 我想确定单独的子图并在每个子图中找到最接近最大子图中节点的两个节点以连接它们。
最好我还希望能够确定第二个最近的和第三个等等。
networkx 中是否有可以执行此操作的实用程序。如果不是,你知道解决这个问题的最有效的数学方法吗? (也许随机 select 每个图中的两个点,然后执行 k-d 树算法 - 问题仍然是至少对于较小的子图我需要对所有节点执行算法?!?!)
如果你能告诉我 networkx 中是否存在可以完成工作的东西,或者告诉我实现这种例程的最有效方法,那就太好了。
I would like to determine the separate subgraphs
这是在图中寻找最大派系的问题。这是一组顶点,彼此都可以到达,但不能从集合外的任何顶点到达。
这是算法的伪代码
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
处的代码
find the node in each respective subgraph that is closest to a node in
the largest subgraph
可能最好也是最简单的方法是计算子图中每对节点之间的距离,保留最接近的一对。
如果您对近似答案感到满意并且子图不重叠,那么您可以
calculate center of gravity of largest subgraph
compare distances of subgraph nodes to center of gravity ( instead of with every node in largest subgraph )
当我在 python 中使用 NetworkX 生成随机几何图形时,生成的图形并不总是连接的。要更改此 属性 我想确定单独的子图并在每个子图中找到最接近最大子图中节点的两个节点以连接它们。 最好我还希望能够确定第二个最近的和第三个等等。
networkx 中是否有可以执行此操作的实用程序。如果不是,你知道解决这个问题的最有效的数学方法吗? (也许随机 select 每个图中的两个点,然后执行 k-d 树算法 - 问题仍然是至少对于较小的子图我需要对所有节点执行算法?!?!)
如果你能告诉我 networkx 中是否存在可以完成工作的东西,或者告诉我实现这种例程的最有效方法,那就太好了。
I would like to determine the separate subgraphs
这是在图中寻找最大派系的问题。这是一组顶点,彼此都可以到达,但不能从集合外的任何顶点到达。
这是算法的伪代码
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
处的代码find the node in each respective subgraph that is closest to a node in the largest subgraph
可能最好也是最简单的方法是计算子图中每对节点之间的距离,保留最接近的一对。
如果您对近似答案感到满意并且子图不重叠,那么您可以
calculate center of gravity of largest subgraph
compare distances of subgraph nodes to center of gravity ( instead of with every node in largest subgraph )