有没有一种方法,可以高效地统计多条路径中,顶点对出现的频率如:顶点1到顶点2的路径为:1->3->5->2,顶点对有<1,3><1,5><1,2><3,5><3,2><5,2>
顶点4到顶点6的路径为:4->5->2->6,顶点对有<4,5><4,2><4,6><5,2><5,6><2,6>多条路径分析后,<5,2>共出现2次,优先级高因为数据集比较大,希望大神们能够提出一个高效的方法,最好用Java,谢谢
顶点4到顶点6的路径为:4->5->2->6,顶点对有<4,5><4,2><4,6><5,2><5,6><2,6>多条路径分析后,<5,2>共出现2次,优先级高因为数据集比较大,希望大神们能够提出一个高效的方法,最好用Java,谢谢
public static void main(String[] args) {
Integer []arrs1 = new Integer[]{2,1,3,4,7,5,6};
Integer []arrs2 = new Integer[]{3,5,2,8,19,10};
Integer []arrs3 = new Integer[]{3,8,11,13};
List<Node> allNodes = new ArrayList<>();
allNodes.addAll(packageNode(arrs1));
allNodes.addAll(packageNode(arrs2));
allNodes.addAll(packageNode(arrs3));
System.out.println(allNodes);
Map<Node,Integer> result = new HashMap<>(allNodes.size());
for(Node node: allNodes){
if(result.get(node)!=null){
Integer count = result.get(node);
result.put(node,count+1);
}else{
result.put(node,1);
}
} List<Map.Entry<Node,Integer>> entryArrayList = new ArrayList<>(result.entrySet());
Collections.sort(entryArrayList, (o1,o2)->{
Integer ov1 = o1.getValue();
Integer ov2 = o2.getValue();
return ov2.compareTo(ov1);
});
System.out.println(entryArrayList);
} public static List<Node> packageNode(Integer[] arrs){
List<Node> nodes = new ArrayList<>();
for(int i=0;i<arrs.length-1;i++){
Integer first = arrs[i];
for(int j=i;j<arrs.length;j++){
if(j+1<arrs.length){
Integer last = arrs[j+1];
nodes.add(new Node(first,last));
}
}
}
return nodes;
}
class Node{ private Integer first; private Integer last; public Node(Integer first, Integer last) {
this.first = first;
this.last = last;
} public Integer getFirst() {
return first;
} public void setFirst(Integer first) {
this.first = first;
} public Integer getLast() {
return last;
} public void setLast(Integer last) {
this.last = last;
} @Override
public boolean equals(Object o) {
if (this == o) {
return true;
} if (!(o instanceof Node)) {
return false;
}
Node node = (Node) o;
return Objects.equals(first, node.first) &&
Objects.equals(last, node.last);
} @Override
public int hashCode() {
return Objects.hash(first, last);
}
}