我尝试使用基本公式(是从另一个SO问题中得到的,用于计算n
顶点的不同边集的最大数量:
2**(n*(n-1)/2)
但是它仅对小范围的数字有用-然后变得太复杂了。
是否有改善此公式/降低复杂性的方法?
无法从帖子的表格中以数学形式简化此公式。您帖子中的公式是指可以连接具有n
个顶点的简单(无环或多个边)无向图的可能方法的数量。
这是通过首先获取顶点数n
来计算的。每个顶点可以连接到可能的n-1
边,因为它不能连接到自身。所以我们有n(n-1)
。
现在,我们需要考虑到边缘是无向的。这意味着可能的边的数量减半,给我们n(n-1)/2
。
最后,每个边在边集中可以存在或不存在。这可以通过长度为n(n-1)/2
的1和0的二进制字符串来可视化,其中1
表示存在边,而0
表示没有边。我们可以写这种数字字符串的方法有2^(n(n-1)/2)
,范围从无边图形000...000
到完整图形111...111
。
无法根据计算时间来简化此公式。当我们处理n ∈ ℤ
时,可以用Python将公式重写为:
math.sqrt(2**(n**2 - n))
但是因为它使用
math.sqrt
,所以这不可能更快。您也可以使用:
2**(n*(n-1)//2)
使用
//
来避免使用具有最大值的浮点数。使用Python整数计算边缘集的最大数量意味着您仅受可用内存的限制。