繁体   English   中英

给定无向图G =(V,E),确定G是否为完整图

[英]Given an undirected graph G = (V, E), determine whether G is a complete graph

我很确定这个问题是P而不是NP,但是我很难提出多项式绑定算法来解决它。

您可以 :

  1. 检查图中的边数为n(n-1)/2
  2. 检查每个顶点是否都连接到n-1不同的顶点。

这将在多项式O(V²)运行。

希望能有所帮助。

这是一个O(| E |)算法,该算法的常数也较小。

枚举完整图形中的每个边都是微不足道的。 因此,您要做的就是扫描边缘列表,并验证每个这样的边缘是否存在。

对于每个边(i,j),令f(i,j)= i * | V | + j。 假设顶点编号为0到| V | -1。

bitvec为长度| V |的位向量 2 ,初始化为0。

对于每个边(i,j),设置bitvec[f(i, j)] = 1。

当且仅当bitvec每个元素== 1时,G才是完整的图。

该算法不仅触及E一次,而且如果您有分散指令,它也可以完全向量化。 这也意味着并行化很简单。

这是一个O(E)算法:

  1. 使用O(E)作为输入时间来扫描图形
  2. 同时,记录每个顶点的度数, 仅当邻居不是p本身(自连接边) 并且不是顶点q(其中p和q已经计算了另一个边数(多个边数)) 时才增加度数,这些检查可以在O(1)
  3. 检查是否所有顶点的度均为| V | -1,此步骤为O(V),如果是,则为完整图形

总计为O(E)

对于给定的图G =(V,E),检查V中的每对u,v,并查看边(u,v)是否在E中。u,v对的总数为| V | *( | V | -1)/ 2。 结果,时间复杂度为O(| V | ^ 2),您可以检查并查看图形是否完整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM