Java получает кратчайший путь между всеми вершинами сложной сети

#shortest-path #jgraph

Вопрос:

Java получает кратчайший путь между всеми вершинами сложной сети. Если число вершин очень велико, использование JGraph для получения всех вершин в двухслойном цикле неэффективно. Как повысить эффективность?

 Set<V> vs = graph.vertexSet();
List<GraphPath<V, E>> list = new ArrayList<>();
for (V v : vs) {
   for (V v1 : vs) {
       if (!v.equals(v1)) {
           GraphPath<V, E> path = floydWarshallShortestPaths.getPath(v, v1);
           list.add(path);
       }
    }
}
 

Комментарии:

1. Алгоритм Флойда-Уоршалла вычисляет все кратчайшие пути в графике за O(n^3) времени. Это та реализация, которую вы используете? Если это так, вы можете просто позвонить getPaths() в каждую вершину. Независимо от этого, реализация должна просто выполнить расчет один раз.