Class YenShortestPathIterator<V,​E>

  • Type Parameters:
    V - the graph vertex type
    E - the graph edge type
    All Implemented Interfaces:
    java.util.Iterator<GraphPath<V,​E>>

    public class YenShortestPathIterator<V,​E>
    extends java.lang.Object
    implements java.util.Iterator<GraphPath<V,​E>>
    Iterator over the shortest loopless paths between two vertices in a graph sorted by weight.

    For this iterator to work correctly the graph must not be modified during iteration. Currently there are no means to ensure that, nor to fail-fast. The results of such modifications are undefined.

    The main idea of this algorithm is to divide each path between the source and the sink into the root part - the part that coincides within some of the paths computed so far, and the spur part, the part that deviates from all other paths computed so far. Therefore, for each path the algorithm maintains a vertex, at which the path deviates from its "parent" path (the candidate path using which it was computed).

    First the algorithm finds the shortest path between the source and the sink, which is put into the candidates heap. The source is assigned to be its deviation vertex. Then on each iteration the algorithm takes a candidate from the heap with minimum weight, puts it into the result list and builds all possible deviations from it wrt. other paths, that are in the result list. By generating spur paths starting only from the vertices that are after the deviation vertex of current path (including the deviation vertex) it is possible to avoid building duplicated candidates.

    Additionally, the algorithm supports path validation by means of PathValidator.

    Author:
    Semen Chudakov
    See Also:
    PathValidator
    • Constructor Summary

      Constructors 
      Constructor Description
      YenShortestPathIterator​(Graph<V,​E> graph, V source, V sink)
      Constructs an instance of the algorithm for given graph, source and sink.
      YenShortestPathIterator​(Graph<V,​E> graph, V source, V sink, java.util.function.Supplier<org.jheaps.AddressableHeap<java.lang.Double,​Pair<GraphPath<V,​E>,​java.lang.Boolean>>> heapSupplier)
      Constructs an instance of the algorithm for given graph, source, sink and heapSupplier.
      YenShortestPathIterator​(Graph<V,​E> graph, V source, V sink, java.util.function.Supplier<org.jheaps.AddressableHeap<java.lang.Double,​Pair<GraphPath<V,​E>,​java.lang.Boolean>>> heapSupplier, PathValidator<V,​E> pathValidator)
      Constructs an instance of the algorithm for given graph, source, sink, heapSupplier and pathValidator.
      YenShortestPathIterator​(Graph<V,​E> graph, V source, V sink, PathValidator<V,​E> pathValidator)
      Constructs an instance of the algorithm for given graph, source, sink and pathValidator.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean hasNext()
      GraphPath<V,​E> next()
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.util.Iterator

        forEachRemaining, remove
    • Constructor Detail

      • YenShortestPathIterator

        public YenShortestPathIterator​(Graph<V,​E> graph,
                                       V source,
                                       V sink)
        Constructs an instance of the algorithm for given graph, source and sink.
        Parameters:
        graph - graph
        source - source vertex
        sink - sink vertex
      • YenShortestPathIterator

        public YenShortestPathIterator​(Graph<V,​E> graph,
                                       V source,
                                       V sink,
                                       PathValidator<V,​E> pathValidator)
        Constructs an instance of the algorithm for given graph, source, sink and pathValidator. The pathValidator can be null, which will indicate that all paths are valid.
        Parameters:
        graph - graph
        source - source vertex
        sink - sink vertex
        pathValidator - validator to computed paths
      • YenShortestPathIterator

        public YenShortestPathIterator​(Graph<V,​E> graph,
                                       V source,
                                       V sink,
                                       java.util.function.Supplier<org.jheaps.AddressableHeap<java.lang.Double,​Pair<GraphPath<V,​E>,​java.lang.Boolean>>> heapSupplier)
        Constructs an instance of the algorithm for given graph, source, sink and heapSupplier.
        Parameters:
        graph - graph
        source - source vertex
        sink - sink vertex
        heapSupplier - supplier of the preferable heap implementation
      • YenShortestPathIterator

        public YenShortestPathIterator​(Graph<V,​E> graph,
                                       V source,
                                       V sink,
                                       java.util.function.Supplier<org.jheaps.AddressableHeap<java.lang.Double,​Pair<GraphPath<V,​E>,​java.lang.Boolean>>> heapSupplier,
                                       PathValidator<V,​E> pathValidator)
        Constructs an instance of the algorithm for given graph, source, sink, heapSupplier and pathValidator. The pathValidator can be null, which will indicate that all paths are valid.
        Parameters:
        graph - graph
        source - source vertex
        sink - sink vertex
        heapSupplier - supplier of the preferable heap implementation
        pathValidator - validator for computed paths
    • Method Detail

      • hasNext

        public boolean hasNext()
        Specified by:
        hasNext in interface java.util.Iterator<V>
      • next

        public GraphPath<V,​E> next()
        Specified by:
        next in interface java.util.Iterator<V>