最短路径,顶点对频率的统计

sinat_27250809 2018-06-28 06:49:43
有没有一种方法,可以高效地统计多条路径中,顶点对出现的频率

如:顶点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,谢谢
...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40852944 2018-06-29
  • 打赏
  • 举报
回复

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);
}
}
weixin_40852944 2018-06-29
  • 打赏
  • 举报
回复

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;
}
weixin_40852944 2018-06-29
  • 打赏
  • 举报
回复


引用 楼主 sinat_27250809 的回复:
有没有一种方法,可以高效地统计多条路径中,顶点对出现的频率

如:顶点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,谢谢

来这里回帖吧~

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧