/* * Created on Jul 12, 2007 * * Copyright (c) 2007, the JUNG Project and the Regents of the University * of California * All rights reserved. * * This software is open-source under the BSD license; see either * "license.txt" or * http://jung.sourceforge.net/license.txt for a description. */ package edu.uci.ics.jung.algorithms.scoring; import org.apache.commons.collections15.Transformer; import edu.uci.ics.jung.algorithms.scoring.util.ScoringUtils; import edu.uci.ics.jung.graph.Hypergraph; /** * Assigns scores to each vertex according to the PageRank algorithm. * * <p> * PageRank is an eigenvector-based algorithm. The score for a given vertex may * be thought of as the fraction of time spent 'visiting' that vertex (measured * over all time) in a random walk over the vertices (following outgoing edges * from each vertex). PageRank modifies this random walk by adding to the model * a probability (specified as 'alpha' in the constructor) of jumping to any * vertex. If alpha is 0, this is equivalent to the eigenvector centrality * algorithm; if alpha is 1, all vertices will receive the same score (1/|V|). * Thus, alpha acts as a sort of score smoothing parameter. * * <p> * The original algorithm assumed that, for a given vertex, the probability of * following any outgoing edge was the same; this is the default if edge weights * are not specified. This implementation generalizes the original by permitting * the user to specify edge weights; in order to maintain the original * semantics, however, the weights on the outgoing edges for a given vertex must * represent transition probabilities; that is, they must sum to 1. * * <p> * If a vertex has no outgoing edges, then the probability of taking a random * jump from that vertex is (by default) effectively 1. If the user wishes to * instead throw an exception when this happens, call * <code>acceptDisconnectedGraph(false)</code> on this instance. * * <p> * Typical values for alpha (according to the original paper) are in the range * [0.1, 0.2] but may be any value between 0 and 1 inclusive. * * @see "The Anatomy of a Large-Scale Hypertextual Web Search Engine by L. Page and S. Brin, 1999" */ public class PageRank<V, E> extends PageRankWithPriors<V, E> { /** * Creates an instance for the specified graph, edge weights, and random * jump probability. * * @param graph * the input graph * @param edge_weight * the edge weights (transition probabilities) * @param alpha * the probability of taking a random jump to an arbitrary vertex */ public PageRank(Hypergraph<V, E> graph, Transformer<E, ? extends Number> edge_weight, double alpha) { super(graph, edge_weight, ScoringUtils.getUniformRootPrior(graph.getVertices()), alpha); } /** * Creates an instance for the specified graph and random jump probability; * the probability of following any outgoing edge from a given vertex is the * same. * * @param graph * the input graph * @param alpha * the probability of taking a random jump to an arbitrary vertex */ public PageRank(Hypergraph<V, E> graph, double alpha) { super(graph, ScoringUtils.getUniformRootPrior(graph.getVertices()), alpha); } }