假设您有两个节点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
你认为在这里可以做得更快吗?
答案 0 :(得分:0)
几乎相同的事情:
这显然没有在for循环中有另一个循环来“检查它是否已连接”。
这是理论上你能做的最快的(这是O(n),理论下限是O(n))。实际上,您可以根据您使用的语言以及优化的语言对其进行优化。例如,Matlab会喜欢它,如果你把它表达为:
nodes = (~rowP)*rowQ';
答案 1 :(得分:0)
如果我错了,请纠正我,但它应该比线性时间快。必须检查每个节点,但是在恒定时间内验证是否存在边缘。