查找Java中具有最高亲和力的值对?

查找Java中具有最高亲和力的值对?,java,arrays,algorithm,sorting,data-structures,Java,Arrays,Algorithm,Sorting,Data Structures,嗨,我现在正在做一个算法问题集 给定file.txt文件中的以下文件 yahoo,ap42 google,ap42 twitter,thl76 google,aa314 google,aa314 google,thl76 twitter,aa314 twitter,ap42 yahoo,aa314 web服务器在日志文件中记录页面视图。日志文件由每页视图一行组成。页面视图由页面id和用户id组成,用逗号分隔。一对页面的相关性是查看两个页面的不同用户数。例如,在引用的日志文件中,yahoo和go

嗨,我现在正在做一个算法问题集

给定file.txt文件中的以下文件

yahoo,ap42
google,ap42
twitter,thl76
google,aa314
google,aa314
google,thl76
twitter,aa314
twitter,ap42
yahoo,aa314
web服务器在日志文件中记录页面视图。日志文件由每页视图一行组成。页面视图由页面id和用户id组成,用逗号分隔。一对页面的相关性是查看两个页面的不同用户数。例如,在引用的日志文件中,yahoo和google的关联度为2(因为ap42同时查看了这两个文件,aa314同时查看了这两个文件)

我的要求是创建一个算法,该算法将返回具有最高亲和力的页面对

目前,我已经写了下面的代码,但是,现在它没有返回具有最高亲和力的页面对,有没有建议我如何修改代码以使其工作?谢谢

    Scanner in = new Scanner(new File("./file.txt"));
    ArrayList<String[]> logList = new ArrayList<String[]>();
    while (in.hasNextLine()) {
        logList.add(in.nextLine().split(","));
    }
    String currentPage;
    String currentUser;

    int highestCount =0;

    for (int i = 0; i < logList.size()-1; i++) {
        int affinityCount =0;
        currentPage = logList.get(i)[0];
        currentUser = logList.get(i)[1];
        for (int j = logList.size()-1; j > 0; j--) {
            if (i != j) {
                if (!currentPage.equals(logList.get(j)[0])
                        && currentUser.equals(logList.get(j)[1])) {
                    affinityCount++;
                    System.out.println("currentPage: "+currentPage+" currentUser: "+ currentUser);
                    System.out.println("logList.get(j)[0]: "+logList.get(j)[0]+" logList.get(j)[1]): "+ logList.get(j)[1]);
                    System.out.println(affinityCount);
                }
            }
        }
    }
Scanner in=new Scanner(新文件(“./File.txt”);
ArrayList logList=新建ArrayList();
while(在.hasNextLine()中){
logList.add(在.nextLine().split(“,”)中);
}
字符串当前页;
字符串当前用户;
int highestCount=0;
对于(int i=0;i0;j--){
如果(i!=j){
如果(!currentPage.equals(logList.get(j)[0])
&¤tUser.equals(logList.get(j)[1])){
仿射计数++;
System.out.println(“当前页面:+currentPage+”当前用户:+currentUser);
System.out.println(“logList.get(j)[0]:”+logList.get(j)[0]+”logList.get(j)[1]):“+logList.get(j)[1]);
System.out.println(affinityCount);
}
}
}
}

我将在这里编写算法。您可以将其转换为代码

  • 遍历该文件并创建的哈希映射
  • 在此遍历之后,您将获得每个用户查看的页面
  • 现在遍历这个数据集。对于每个用户,取出他查看的页面列表。对这对页面进行所有可能的组合,并将其放入最大堆中,值设置为1。如果组合存在于堆中,则增加该值。 确保你对待雅虎,谷歌和谷歌一样,在比较的时候对待雅虎

  • 最后,堆顶部的元素是您的输出


  • 我将在这里编写算法。您可以将其转换为代码

  • 遍历该文件并创建的哈希映射
  • 在此遍历之后,您将获得每个用户查看的页面
  • 现在遍历这个数据集。对于每个用户,取出他查看的页面列表。对这对页面进行所有可能的组合,并将其放入最大堆中,值设置为1。如果组合存在于堆中,则增加该值。 确保你对待雅虎,谷歌和谷歌一样,在比较的时候对待雅虎

  • 最后,堆顶部的元素是您的输出


  • 您是否只需要具有最高亲和力的前2页或更多页?是的,我希望找到具有最高亲和力的前2页对。谢谢。你知道不同网页和用户名的数量大小吗?如果有并列关系,你会输出哪一个?你只需要前两个具有最高亲和力的页面还是更多?是的,我希望找到具有最高亲和力的前两个页面对。谢谢。你知道不同网页和用户名的大小吗?如果有,你会输出哪一个?