Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- import java.util.Comparator;
- public class PageRank {
- /**
- * Diese Methode erstellt die Matrix A~ fuer das PageRank-Verfahren
- * PARAMETER:
- * L: die Linkmatrix (s. Aufgabenblatt)
- * rho: Wahrscheinlichkeit, anstatt einem Link zu folgen,
- * zufaellig irgendeine Seite zu besuchen
- */
- public static double[][] buildProbabilityMatrix(int[][] L, double rho) {
- //wir gehen davon aus, dass jede Seite bereits auf sich selbst verweist.
- double[][] A = new double[L.length][L.length];
- for(int i=0; i<L.length; i++){
- int linkCount = 0;
- for(int j=0; j<L.length; j++){
- linkCount+=L[i][j];
- }
- for(int j=0; j<L.length; j++){
- A[i][j]=(1.0d-rho)*L[i][j]/linkCount+rho/L.length;
- }
- }
- return A;
- }
- /**
- * Diese Methode berechnet die PageRanks der einzelnen Seiten,
- * also das Gleichgewicht der Aufenthaltswahrscheinlichkeiten.
- * (Entspricht dem p-Strich aus der Angabe)
- * Die Ausgabe muss dazu noch normiert sein.
- * PARAMETER:
- * L: die Linkmatrix (s. Aufgabenblatt)
- * rho: Wahrscheinlichkeit, zufaellig irgendeine Seite zu besuchen
- * ,anstatt einem Link zu folgen.
- *
- */
- public static double[] rank(int[][] L, double rho) {
- double[][]A = buildProbabilityMatrix(L, rho);
- //A~ - I
- for(int i=0; i<A.length; i++){
- A[i][i] -= 1.0d;
- }
- double[] G = Gauss.solveSing(A);
- double norm = 0;
- for(int i=0; i<G.length; i++){
- norm += G[i]*G[i];
- }
- norm = Math.sqrt(norm);
- for(int i=0; i<G.length; i++){
- G[i] /= norm;
- }
- return G;
- }
- /**
- * Diese Methode erstellt eine Rangliste der uebergebenen URLs nach
- * absteigendem PageRank.
- * PARAMETER:
- * urls: Die URLs der betrachteten Seiten
- * L: die Linkmatrix (s. Aufgabenblatt)
- * rho: Wahrscheinlichkeit, anstatt einem Link zu folgen,
- * zufaellig irgendeine Seite zu besuchen
- */
- public static String[] getSortedURLs(String[] urls, int[][] L, double rho) {
- int n = L.length;
- double[] p = rank(L, rho);
- RankPair[] sortedPairs = new RankPair[n];
- for (int i = 0; i < n; i++) {
- sortedPairs[i] = new RankPair(urls[i], p[i]);
- }
- Arrays.sort(sortedPairs, new Comparator<RankPair>() {
- @Override
- public int compare(RankPair o1, RankPair o2) {
- return -Double.compare(o1.pr, o2.pr);
- }
- });
- String[] sortedUrls = new String[n];
- for (int i = 0; i < n; i++) {
- sortedUrls[i] = sortedPairs[i].url;
- }
- return sortedUrls;
- }
- /**
- * Ein RankPair besteht aus einer URL und dem zugehoerigen Rang, und dient
- * als Hilfsklasse zum Sortieren der Urls
- */
- private static class RankPair {
- public String url;
- public double pr;
- public RankPair(String u, double p) {
- url = u;
- pr = p;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement