Я использую JUNG API для расчета кратчайших путей между несколькими узлами в графах среднего размера (от 20 до 100 узлов). Прямо сейчас я перебираю свои узлы и использую простую функцию «ShortetsPath», чтобы вычислить кратчайший путь для двух узлов. Все кратчайшие пути помещаются в список ArrayList.
UnweightedShortestPath<Vertex, SEdge> dist = new UnweightedShortestPath<Vertex, SEdge>(undir);
ArrayList<Vertex> tv = new ArrayList<Vertex>(); // contains nodes for shortestpath
ArrayList<Integer> distances = new ArrayList<Integer>(); // for the distances
for (int j = 0; j <tv.size()-1;j++){ //iterate over nodes
Vertex one = tv.get(j);
for (int k = j+1; k<tv.size();k++){ //iterate over next nodes
Vertex two = tv.get(k);
Number n = dist.getDistance(one, two);
int d;
if (n == null) {
d = 5000000;
}
else {
d = n.intValue();
}
distances.add(d);
}
}
Я хотел бы ускорить расчет, потому что мне нужно вычислить это для многих графиков и узлов. Насколько мне известно, в JUNG API доступен только Dijkstra. Итак, мои вопросы: Могу ли я использовать Dijkstra для повышения производительности? Доступны ли другие алгоритмы в JUNG API? Имеет ли смысл использовать другую реализацию графа, которая предлагает больше различных методов для поиска кратчайших путей?
Спасибо пока :)