/*
* 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.util;
import java.util.Collection;
import org.apache.commons.collections15.Transformer;
import edu.uci.ics.jung.algorithms.scoring.HITS;
/**
* Methods for assigning values (to be interpreted as prior probabilities) to
* vertices in the context of random-walk-based scoring algorithms.
*/
public class ScoringUtils {
/**
* Assigns a probability of 1/<code>roots.size()</code> to each of the
* elements of <code>roots</code>.
*
* @param <V>
* the vertex type
* @param roots
* the vertices to be assigned nonzero prior probabilities
* @return
*/
public static <V> Transformer<V, Double> getUniformRootPrior(
Collection<V> roots) {
final Collection<V> inner_roots = roots;
Transformer<V, Double> distribution = new Transformer<V, Double>() {
@Override
public Double transform(V input) {
if (inner_roots.contains(input)) {
return new Double(1.0 / inner_roots.size());
}
return 0.0;
}
};
return distribution;
}
/**
* Returns a Transformer that hub and authority values of 1/
* <code>roots.size()</code> to each element of <code>roots</code>.
*
* @param <V>
* the vertex type
* @param roots
* the vertices to be assigned nonzero scores
* @return a Transformer that assigns uniform prior hub/authority
* probabilities to each root
*/
public static <V> Transformer<V, HITS.Scores> getHITSUniformRootPrior(
Collection<V> roots) {
final Collection<V> inner_roots = roots;
Transformer<V, HITS.Scores> distribution = new Transformer<V, HITS.Scores>() {
@Override
public HITS.Scores transform(V input) {
if (inner_roots.contains(input)) {
return new HITS.Scores(1.0 / inner_roots.size(),
1.0 / inner_roots.size());
}
return new HITS.Scores(0.0, 0.0);
}
};
return distribution;
}
}