Как изменить алгоритмы поиска по ширине с одного потока на многопоточный?
Я хочу получить кратчайший путь от одного узла к другому узлу.Поэтому я использую алгоритмы поиска по ширине.Но мой график имеет много узлов, и мне потребовалось почти 300 секунд, чтобы получить результат.Теперь мой менеджер попросит меня использовать многопоточность?Общий код таков здесь- А это обязательно? Как изменить мой код?
public int getShortestPath(Long beginLabel, Long endLabel,Stack<Vertex> stack) { Vertex begin = this.getVertexByLong(beginLabel); Vertex end = this.getVertexByLong(endLabel); begin.setVisited(true); List<Vertex> queue = new LinkedList<Vertex>(); queue.add(begin); boolean done = false; while (!done && !queue.isEmpty()) { Vertex curVertex = queue.remove(0); StringBuffer sb = new StringBuffer(); sb.append("curVertex:"+curVertex.getLabel()+"to>>>>>>"); while (!done && curVertex.getFirstUnvisitedNeighbor() != null) { Vertex tmpVertex = curVertex.getFirstUnvisitedNeighbor(); sb.append(tmpVertex.getLabel()+"|"); tmpVertex.setVisited(true); int tmpCost = curVertex.getCost() + 1; tmpVertex.setPreviousVertex(curVertex); tmpVertex.setCost(tmpCost); queue.add(tmpVertex); if (tmpVertex.equals(end)) { done = true; } } sb.append(" end."); log.debug(sb.toString()); } int pathLength = end.getCost(); // find the path.traverse back from end while (end != null) { stack.push(end); end = end.getPreviousVertex(); } return pathLength; } public Vertex getFirstUnvisitedNeighbor() { Vertex unVisitedNeighbor = null; for (int i = 0, len = edgeList.size(); i < len; i++) { Edge edge = edgeList.get(i); if(edge.isUnabled()){ continue; } Vertex vertex = edge.endVertex; if (!vertex.isVisited) { unVisitedNeighbor = vertex; break; } } return unVisitedNeighbor; }
Что я уже пробовал:
Do I need some concurrent framework like `Fork/Join`?
Patrice T
Сколько узлов и ребер за 300 секунд ?
PEIYANGXINQU
около 7000 узлов