【发布时间】:2020-03-19 10:32:19
【问题描述】:
我想知道 G 的给定子图是否是完整图。我期待找到一个内置函数,比如is_complete_graph(G),但我看不到这样的东西。
我目前的解决方案是创建一个新的辅助函数:
def is_complete(G):
n = G.order()
return n*(n-1)/2 == G.size()
我想这可能很快,但我觉得自己实现这种事情是错误的,我觉得在 NetworkX 中必须有一种“正确”的方式来做到这一点。
我只需要简单无向图的解决方案。
【问题讨论】:
-
不要使用
/进行整数除法,而是使用//。如果您使用/,Python 3 会将整数转换为浮点数,而//在 Python 2 和 3 中都有效,为整数操作数生成整数结果。 -
看起来使用这个函数需要你建立一个新的图,它是你原来的子图。除非您无论如何都需要构建该新图表,否则会有更快的方法不需要您创建单独的新图表。您能否告诉我们您是否需要为其他目的构建新图表?
-
@Joel 不,我实际上不需要子图来做其他事情。所以像
G.has_clique(t)这样的东西会很棒 -
@TomKarzes 有趣的汤姆,我不知道。我对使用
//运算符犹豫不决,因为对我而言,它向读者暗示正在发生某种舍入,但事实并非如此(因为 n 是一个 intn*(n-1)保证是偶数)。虽然我不知道这是一个很酷的优化。 -
@bubsy_revelations 不,这只是意味着它正在执行整数除法而不是浮点。事实上,这与您的说法相反:浮点除法意味着结果是 not 整数,否则您肯定会使用整数除法。使用浮点运算是不合适的。请注意,如果您使用 Python 2,它会进行整数除法。只是在 Python 3 中它被改变了,所以你的代码在两个版本之间也是不兼容的。使用
//也可以解决这个问题。
标签: python networkx graph-theory