Skip to content
Advertisement

Does this look like an efficient way to find vertices which have no outgoing edges in a graph (JGrapthT)?

I am using JGraphT for holding about 150,000 (or thereabouts) vertices in an in-memory graph. This a directed graph and each vertex is going to have { 0 | 1 } outgoing edges.

I want to find retrieve the set of vertices which have no outgoing edges. Here’s what I have attempted:

JavaScript

This perhaps, is a naive attempt. I am keen to know if there is any better, more idiomatic and more efficient way of doing this.

Advertisement

Answer

I’m not quite sure what’s going on in the code, but the following would work fine:

JavaScript

Note that, to get all vertices without outgoing arcs, you must use vertexHasSuccessors(.) as opposed to vertexHasPredecessors(.).

Note that the vertexHasSuccessors method simply invokes !graph.outgoingEdgesOf(vertex).isEmpty();

This approach should be efficient since it runs in O(n) time, where n is the number of customers. If you want even better performance, you could keep track of all the vertices without an outgoing arc during the construction of the graph. That is, keep a set of all the vertices in your graph, and each time you add an arc (i,j), remove vertex i from your set. As such you can always query the set of vertices without outgoing arcs in constant time.

Finally, for large graphs, you could have a look at the optimized graph implementations in the jgrapht-opt package.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement