繁体   English   中英

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

[英]finding the value pair that has the highest affinity in Java?

嗨,我目前正在研究算法问题集。

给出file.txt文件中的以下文件,

yahoo,ap42
google,ap42
twitter,thl76
google,aa314
google,aa314
google,thl76
twitter,aa314
twitter,ap42
yahoo,aa314

Web服务器在日志文件中记录页面视图。 日志文件由每页一行视图组成。 页面视图由页面ID和用户ID组成,用逗号分隔。 一对页面的亲和力是查看两个页面的不同用户的数量。 例如,在引用的日志文件中,雅虎和谷歌的亲和力是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);
                }
            }
        }
    }

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

  1. 遍历文件并创建一个hashMap。
  2. 遍历此遍历后,您将获得每个用户查看的页面。
  3. 现在遍历此数据集。 对于每个用户,请取出他查看的页面列表。 进行页面对的所有可能组合,并将其放入最大堆中,并将值设置为1.如果组合存在于堆中,则递增该值。 确保你对待 - 雅虎,google与google,yahoo相同。

  4. 在这结束时,堆顶部的元素是您的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM