algorithm - 如何找到图中与给定节点集等距的所有节点?

标签 algorithm graph complexity-theory graph-algorithm

如果您有一个简单的无向图 G(V,E)F,它是 V 的子集。你如何找到一些节点 v 使得 F 中的每个节点到 v 的距离相同并且距离最小?如果没有 v,则返回 None。有人告诉我这可以在 O(|V|+|E|) 复杂度内完成。

假设所有边的距离为 1。

谁能解释一下这是如何做到的?伪代码也会有所帮助。

最佳答案

解决方案与BFS类似,但有一点变化:

  1. 从 S = F 开始,标记 F 个节点。

  2. 寻找|S|与 S 中每个元素的距离为 1 的集合(所有这些集合都应包含未标记的节点)。如果这些集合的交集非空,则找到候选者。

  3. 取 |S| 的并集在 S' 中设置以上并标记这些节点。如果 S' 为空,则返回 'None'。

  4. 返回第 2 步。

假设所有的集合操作都需要常数时间,那么算法的复杂度与BFS相同,为O(|V| + |E|)。

现在来推理集合操作的复杂性。我的理由是集合操作不会增加复杂性,因为步骤 2 和步骤 3 中的并集和交集操作可以组合起来花费时间 O(|S|),并且因为在每个步骤中 S 都与之前迭代中的 S 不同,集合操作的整体复杂度为 O(|V|)。

关于algorithm - 如何找到图中与给定节点集等距的所有节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647757/

相关文章:

complexity-theory - 是否有可能以小于 O(n²) 的复杂度找到数组中两个数字之间的最大落差?

c++ - 这个 pow() 函数在 while 循环 C++ 中发生了什么?

performance - 在 2D 游戏的视口(viewport)中有效地检索 Z 排序对象

python - 自动识别图像中的图案

c++ - 二分无向图测试: Converting to check nodes with strings instead of integers

algorithm - 从边缘列表创建邻接列表的复杂性?

c# - 用于生成 XML 文件的机器学习算法

python - 添加边缘权重以在 networkx 中绘制输出

algorithm - 第二最小成本生成树

algorithm - 重复 : T(n/4) + T(n/2) + n^2 with tree methods