我正在使用无向图,并且在管道的特定阶段,我旨在找到最大生成树(MST)。问题在于我们有一些基于MST本身可以检测到的嘈杂顶点。因此,在计算MST时,我们可以将某些顶点检测为噪声并将其删除。
因此,我们最终得到了一片森林,但如果经过噪声修剪,则不一定是最大的生成树/森林。我可以重新计算图表的MST(消除了嘈杂的顶点),但是这需要时间。另一种选择是使用去除噪声后残留的部分生成树,并尝试将它们与最大生成边缘连接。
我知道,如果我从剩余森林开始,它不一定会产生MST,但是它将与我的需求近似,因此从这个意义上讲,后顾之忧。
如您所知,Kruskal算法是渐进式的,如果该动作没有循环,则将边沿(按权重排序)添加到MST。我想知道Networkx
中是否存在一种可以接受部分计算的生成树并根据图完成它的实现的简便方法或实现的版本。
我现在使用的功能:
import networkx as nx
gmst = nx.maximum_spanning_tree(g, weight="n")
noisy_vertices = detect_noisy_vertices(gmst)
gmst.remove_nodes_from(noisy_vertices)
# gmst is now a forest and based on kruskal it could continue to
# add edges to make an approximately maximum spanning tree
detect_noisy_vertices(gmst)
根据与该问题无关的某些条件返回noist顶点列表。
谢谢。