algorithm - 在图中,找到连接到一个节点但未连接到另一个节点的所有节点的最快方法是什么?

标签 algorithm data-structures graph

假设您有两个节点 P 和 Q。现在我们必须找到与 Q 有边但与 P 没有边的节点。最快的方法是什么?我应该使用什么算法或数据结构?目前,每当添加边时,我都会为每个节点维护一个向量,该向量保存连接到该节点的所有节点(让我们为第 ith 个节点调用此 Vi)。我也有邻接矩阵。我正在做的大致是这样的事情。

for each node in Vq<br/> check if it is connected to P using adjacency matrix<br/> do something with this node<br/>

您认为在这里可以更快地完成任何事情吗?

最佳答案

几乎相同的事情:

  • 从邻接矩阵中取出P行和Q行
  • 对于节点 I,
    • 如果第I列P行为0,Q行为1,则进行运算。

这是明确表示在 for 循环内没有另一个循环来“检查它是否已连接”。

这是理论上最快的速度(这是 O(n),理论上的下限是 O(n))。在实践中,您可以根据您使用的语言和优化的目的来优化它。例如,如果您将其表述为 Matlab 会喜欢它:

nodes = (~rowP)*rowQ';

关于algorithm - 在图中,找到连接到一个节点但未连接到另一个节点的所有节点的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302811/

相关文章:

algorithm - 为什么 Jarvis 的 March ("Gift wrapping algorithm") 的这个实现不起作用?

algorithm - 查找有向图中从源到所有顶点的所有最短路径

algorithm - 边值问题的快速算法

algorithm - 我们可以将 Bellman-Ford 算法应用于无向图吗?

c++ - 无法完全删除结构填充 - 代码块 : Cygwin

javascript - 如何在 javascript 中实现 Karatsuba 乘法?

java - 为什么 Dikstra 算法的运行时间为 O(V + E log V) 而不是 O(V ^ 2)?

r - 使用散列或其他方法评估与 R 中组合列相关的信息

graph - 泰坦图: Finding vertices without outgoing edges

python - numba 的表现(我做错了什么吗?)