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

ε祈祈猫儿з 提交于 2019-12-12 06:16:06

问题


I'm pretty sure this problem is P and not NP, but I'm having difficulty coming up with a polynomially bound algorithm to solve it.


回答1:


You can :

  1. check that number of edges in the graph is n(n-1)/2.
  2. check that each vertice is connected to exaclty n-1 distinct vertices.

This will run in O(V²), which is polynomial.

Hope it helped.




回答2:


Here's an O(|E|) algorithm that also has a small constant.

It's trivial to enumerate every edge in a complete graph. So all you need to do is scan your edge list and verify that every such edge exists.

For each edge (i, j), let f(i, j) = i*|V| + j. Assuming vertices are numbered 0 to |V|-1.

Let bitvec be a bit vector of length |V|2, initialized to 0.

For each edge (i, j), set bitvec[f(i, j)] = 1.

G is a complete graph if and only if every element of bitvec == 1.

This algorithm not only touches E once, but it's also completely vectorizable if you have a scatter instruction. That also means it's trivial to parallelize.




回答3:


Here is an O(E) algorithm:

  1. Use O(E) as it is input time, to scan the graph
  2. Meanwhile, record each vertex p's degree, increase degree only if the neighbor is not p itself (self-connecting edge) and is not a vertex q where p and q has another edge counted already (multiple edge), these checking can be done in O(1)
  3. Check if all vertex's degree is |V|-1, this step is O(V), if Yes then it is a complete graph

Total is O(E)




回答4:


For a given graph G = (V,E), check for each pair u, v in the V, and see if edge (u,v) is in E. The total number of u, v pairs are |V|*(|V|-1)/2. As a result, with a time complexity of O(|V|^2), you can check and see if a graph is complete or not.



来源:https://stackoverflow.com/questions/30105886/given-an-undirected-graph-g-v-e-determine-whether-g-is-a-complete-graph

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!