修剪网络中节点的算法,实现最大隔离数(python networkx)

Algorithm to prune nodes in network, achieve maximum number of isolates (python networkx)

我有网络(大&小),我需要对其进行修剪,直到只剩下孤立的网络。我想最大化隔离的数量。有没有算法可以做到这一点?如果它更复杂? (例如,在底部也可能有连接的节点)

考虑这个简单的例子:

import networkx as nx
G = nx.DiGraph()
G.add_edges_from([(1,2), (2,3), (2,4), (3,5), (3,6), (4,7), (4,8),
 (1,2+9), (2+9,3+9), (2+9,4+9), (3+9,5+9), (3+9,6+9), (4+9,7+9), (4+9,8+9) ])

这里最优解是删除节点1,3,4,11,12

这听起来像是您想要计算 Maximum Independent SetNP-hard 对于 一般图 )。 (维基百科还提到了名称 vertex packing)。

Networkx 有一个 approximation algorithm

也许一个近似值对你来说不够(而且我认为没有预构建的替代方案)。

根据上面的维基百科-link,在igraph.

中有一个精确的算法可用

另请记住,此近似算法适用于一般图,因此很有可能有更好的树方法。

编辑:(不检查)This SO-answer presents an algorithm for trees(问题可能重复)。