给定一个无向图G = (V, E),判断G是否是完全图
Given an undirected graph G = (V, E), determine whether G is a complete graph
我很确定这个问题是 P 而不是 NP,但我很难想出一个多项式约束算法来解决它。
你可以:
- 检查图中的边数是否为
n(n-1)/2
。
- 检查每个顶点是否连接到精确
n-1
个不同的顶点。
这将 运行 in O(V²)
,这是多项式。
希望对您有所帮助。
这是一个 O(E) 算法:
- 使用 O(E) 作为输入时间,扫描图形
- 同时,记录每个顶点p的度数,增加度数只有当邻居不是p本身(自连边)和不是顶点 q,其中 p 和 q 已经计算了另一条边(多边),这些检查可以在 O(1)
中完成
- 检查所有顶点的度是否为|V|-1,这一步为O(V),如果是则为完整图
总计为 O(E)
这是一个 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 一次,而且如果您有分散指令,它也是完全可向量化的。这也意味着并行化是微不足道的。
对于给定的图 G = (V,E),检查 V 中的每一对 u, v,并查看边 (u,v) 是否在 E 中。
u, v 对的总数为 |V|*(|V|-1)/2。结果,时间复杂度为O(|V|^2),你可以检查一个图是否完整。
我很确定这个问题是 P 而不是 NP,但我很难想出一个多项式约束算法来解决它。
你可以:
- 检查图中的边数是否为
n(n-1)/2
。 - 检查每个顶点是否连接到精确
n-1
个不同的顶点。
这将 运行 in O(V²)
,这是多项式。
希望对您有所帮助。
这是一个 O(E) 算法:
- 使用 O(E) 作为输入时间,扫描图形
- 同时,记录每个顶点p的度数,增加度数只有当邻居不是p本身(自连边)和不是顶点 q,其中 p 和 q 已经计算了另一条边(多边),这些检查可以在 O(1) 中完成
- 检查所有顶点的度是否为|V|-1,这一步为O(V),如果是则为完整图
总计为 O(E)
这是一个 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 一次,而且如果您有分散指令,它也是完全可向量化的。这也意味着并行化是微不足道的。
对于给定的图 G = (V,E),检查 V 中的每一对 u, v,并查看边 (u,v) 是否在 E 中。 u, v 对的总数为 |V|*(|V|-1)/2。结果,时间复杂度为O(|V|^2),你可以检查一个图是否完整。