我有一个名为networkx的图形G,我希望检查另一个名为networkx的图形H是否可以被嵌入其中。简单的例子包括:
- 检查G是否包含一个三角形(可以通过networkx.triangles完成) - 检查G是否包含长度为k的路径/循环 - 检查G是否包含有k个叶子的星形图(可以通过度序列完成)
等等。
我知道这个问题通常是NP-complete的,但我想知道是否存在比朴素算法更好的方法,或者您对如何编写这样的方法有什么建议。
- 检查G是否包含一个三角形(可以通过networkx.triangles完成) - 检查G是否包含长度为k的路径/循环 - 检查G是否包含有k个叶子的星形图(可以通过度序列完成)
等等。
我知道这个问题通常是NP-complete的,但我想知道是否存在比朴素算法更好的方法,或者您对如何编写这样的方法有什么建议。
is_subraph = lambda G, H: all(h_edge in G.edges() for h_edge in H.edges)
是O(m,n)的,这显然是多项式时间。 - MaratH
嵌入到G
中,并且嵌入忽略标签。这是可以做到的 - 只是很难(NP完全)。 - BachG
很大(我相信在这种情况下它不是 NP-complete)。另一个可能的假设是H
属于某个特定类别,比如树、环等。然而,这个问题是关于networkx
的,而不是嵌入算法 ;) 我正在寻找networkx
提供的工具,即使它们很简单。 - Bach