Algorithm 求顶点由集合定义的图的边数的算法
我有一个定义如下的图: 有一组数字{1,2,3,4,5} 图中的每个顶点可以由原始集合中的任意3个数字组合而成,无需重复。例如,一个有效的顶点是{1,2,3} 边存在于恰好相差1个数的任意两个顶点之间。因此,{1,2,3}和{1,2,4}之间有一条边,{1,2,3}和{2,4,5}之间没有边 如何编写算法来查找此图中的边数?我的算法中有两次边数。我不确定正确的方法是什么。我知道有5个,选择3个顶点。Algorithm 求顶点由集合定义的图的边数的算法,algorithm,graph,set,edges,Algorithm,Graph,Set,Edges,我有一个定义如下的图: 有一组数字{1,2,3,4,5} 图中的每个顶点可以由原始集合中的任意3个数字组合而成,无需重复。例如,一个有效的顶点是{1,2,3} 边存在于恰好相差1个数的任意两个顶点之间。因此,{1,2,3}和{1,2,4}之间有一条边,{1,2,3}和{2,4,5}之间没有边 如何编写算法来查找此图中的边数?我的算法中有两次边数。我不确定正确的方法是什么。我知道有5个,选择3个顶点。C(5,3)只需10个,所以计算边并不困难 更简单的方法:获取任意组合并查找边数: combina
C(5,3)
只需10个,所以计算边并不困难
更简单的方法:获取任意组合并查找边数:
combination
1 2 3
subcombinations:
1 2 paired 1 2 4; 1 2 5
1 3 paired 1 3 4; 1 3 5
2 3 paired 2 3 4; 2 3 5
所以我们有六条来自这个组合顶点的边。但从对称性来看,每个顶点有6条边。这样的图称为6-正则图
因此,边的总数为(除以2以消除每条边的重复计数)
如果您确实需要C(n,k)
组合的通用解决方案:
p = C(n,k) = n!/(k!*(n-k!))
NumEdges = p*k*(n-k)/2
啊,我明白了,我没有意识到每条边都被精确地计算了两次,所以我没有想到将最终结果除以二。我现在明白了,这有点类似于在一个完整的图中求边数的公式。非常感谢。
p = C(n,k) = n!/(k!*(n-k!))
NumEdges = p*k*(n-k)/2