trouver la paire de valeurs qui a la plus grande affinité en Java?


Salut, je travaille actuellement sur un ensemble de problèmes d'algorithme.

Donné le fichier ci-dessous dans un fichier.fichier txt,

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

Un serveur Web enregistre les pages vues dans un fichier journal. Le fichier journal se compose d'une ligne par page vue. Une vue de page se compose d'un id de page et d'un ID utilisateur, séparés par une virgule. L'affinité d'une paire de pages, le nombre d'utilisateurs distincts qui ont vu les deux pages. Par exemple, dans le fichier journal cité, l'affinité de yahoo et google est de 2 (car ap42 a été consulté à la fois et aa314 a été consulté à la fois).

Mon exigence est de créer un algorithme qui retournera la paire de pages avec la plus grande affinité.

Actuellement, j'ai écrit le code ci-dessous, cependant, en ce moment, il ne renvoie pas la paire de pages avec la plus grande affinité, aucune suggestion de la façon dont je modifie le code pour le faire fonctionner? grâce. :

    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);
                }
            }
        }
    }
Author: Vince Bowdren, 2016-09-06

1 answers

Vais écrire l'algorithme ici . Vous pouvez convertir cela dans le code.

  1. Parcourez le fichier et créez un HashMap de .
  2. Après cette traversée, vous obtiendrez les pages vues par chaque utilisateur.
  3. Parcourez maintenant cet ensemble de données. Pour chaque utilisateur, sortez la liste des pages qu'il a consultées. Faites toutes les combinaisons possibles de paires de pages et placez-les dans un tas max avec la valeur définie sur 1. Si la combinaison existe dans le tas, incrémentez la valeur. Assurez-vous de traiter - yahoo, google même que google, yahoo tout en comparant.

  4. À la fin de cela, l'élément en haut du tas est votre sortie.

 0
Author: Preeti Khurana, 2016-09-09 18:23:48