Java 从所有节点中搜索最近的特定顶点的k个数
我想从所有其他非医院顶点中找到k个最近的医院顶点。现在我的代码我可以在我的样本测试中运行它,它有10条边和一些顶点,工作正常。但是,当我加载一个真实的道路网络时,它需要几个小时以上的时间,并且输出仍然不可用。网络列表是表示文本文件中所有边的邻接列表。医院列表包含所有源顶点。size是数据文件中最大节点的数目。我是否更改了存储数据的方式Java 从所有节点中搜索最近的特定顶点的k个数,java,Java,我想从所有其他非医院顶点中找到k个最近的医院顶点。现在我的代码我可以在我的样本测试中运行它,它有10条边和一些顶点,工作正常。但是,当我加载一个真实的道路网络时,它需要几个小时以上的时间,并且输出仍然不可用。网络列表是表示文本文件中所有边的邻接列表。医院列表包含所有源顶点。size是数据文件中最大节点的数目。我是否更改了存储数据的方式 public static List< Map<Integer, Integer>> kNearestHospitals(Arra
public static List< Map<Integer, Integer>> kNearestHospitals(ArrayList<ArrayList<Integer>> networkList, LinkedList<Integer> hospitalList,
int size, int k){
long searchStartTime=System.nanoTime();
List< Map<Integer, Integer>> result = new LinkedList< Map<Integer, Integer>>();
//searching
//finding k nearest hospitals for all the nodes
for (int i = 0; i < networkList.size(); i++) {
result.add(kNearest_BFS(networkList,hospitalList,size,i,k));
System.out.println("test");
}
long totalTime=System.nanoTime()-searchStartTime;
System.out.println("C&D :" +totalTime);
//FileManager.writeOuputC_D(result, hospitalList, size);
return result;
}
public static Map<Integer, Integer> kNearest_BFS(ArrayList<ArrayList<Integer>> networkList, LinkedList<Integer> hospitalList,
int size,int node, int k) {
//initializing and pre-processing
Queue<Integer> q = new LinkedList<>();
dist = new int[size];
visited = new boolean[size];
//hospitals = new int[size];
Map<Integer, Integer> hospitalDistance = new HashMap<Integer, Integer>();
for (int i=0; i < size; i++) {
visited[i]=false;
dist[i]=Integer.MAX_VALUE;
}
//marking current node and marking as visited
q.add(node);
visited[node] = true;
dist[node] =0;
//searching k nearest hospital for specific node
while(!q.isEmpty()) {
int x = q.poll();
for (int i = 0; i < networkList.get(x).size(); i++) {
if (visited[networkList.get(x).get(i)]==false) {
visited[networkList.get(x).get(i)]= true;
dist[networkList.get(x).get(i)]= dist[x] + 1; // vertex's distance + 1
q.add(networkList.get(x).get(i)); // Pushing the adjacent unvisited vertices
if(hospitalList.contains(networkList.get(x).get(i))) {
//storing nearest hospital node with distance
hospitalDistance.put(networkList.get(x).get(i), dist[networkList.get(x).get(i)]);
}
//stop when the hash have top k nearest hospital.
if(hospitalDistance.size() == k) {
return hospitalDistance;
}
}
}
}
return hospitalDistance;
}
}
publicstaticlist