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

时间:2017-07-22 16:55:16

标签: python graph nodes 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.

example

1 个答案:

答案 0 :(得分:1)

这听起来像是要计算Maximum Independent Set一般图 NP-hard )。 (维基百科还提到名称​​顶点包装)。

Networkx有approximation algorithm

也许你的近似值是不够的(我认为没有预建替代品)。

根据上面的维基百科链接,igraph中有一个确切的算法。

另外请记住,这种近似算法适用于通用图,因此可能非常有可能,树有更好的方法。

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