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

时间:2015-05-07 15:44:59

标签: algorithm graph np

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

4 个答案:

答案 0 :(得分:1)

这里的O(| E |)算法也有一个很小的常数。

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

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

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

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

G是一个完整的图表,当且仅当bitvec的所有元素== 1。

此算法不仅触及E一次,而且如果您有散射指令,它也可以完全矢量化。这也意味着并行化是微不足道的。

答案 1 :(得分:0)

你可以:

  1. 检查图表中的边数是n(n-1)/2
  2. 检查每个顶点是否连接到exaclty n-1不同的顶点。
  3. 这将在O(V²)中运行,这是多项式。

    希望它有所帮助。

答案 2 :(得分:0)

这是一个O(E)算法:

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

答案 3 :(得分:0)

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