I'm looking for the fastest way to find all neighbours of a vertex in an undirected Graph
. Please improve on the code if possible.
neighbours[g_Graph, v_] :=
Module[
{vl = VertexList[g],
pos},
pos = Position[vl, v][[1, 1]];
Pick[VertexList[g], AdjacencyMatrix[g][[pos]], 1]
]
I need it to work fast both for sparse and dense graphs.
- It is essential to the performance of this solution that it uses
SparseArray
s. - This is a bottleneck in my application. Since my graph is constantly changing, trying to precompute neighbours or using memoization will complicate things significantly.
I'd like to stress that speed is essential here. Here's a graph to test on:
max = 4000;
c = 0.3;
tg = RandomGraph[{max, Round[c max^2]}];
neighbours[tg, 1]; // Timing
Neighborhood
is much slower. \$\endgroup\$