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

时间:2011-06-10 06:38:15

标签: algorithm data-structures graph

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

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

你认为在这里可以做得更快吗?

2 个答案:

答案 0 :(得分:0)

几乎相同的事情:

  • 从邻接矩阵
  • 中取P行和Q行
  • 对于节点I,
    • 如果第I列的P行为0,Q行为1,请进行操作。

这显然没有在for循环中有另一个循环来“检查它是否已连接”。

这是理论上你能做的最快的(这是O(n),理论下限是O(n))。实际上,您可以根据您使用的语言以及优化的语言对其进行优化。例如,Matlab会喜欢它,如果你把它表达为:

nodes = (~rowP)*rowQ';

答案 1 :(得分:0)

如果我错了,请纠正我,但它应该比线性时间快。必须检查每个节点,但是在恒定时间内验证是否存在边缘。