PageRank的一个简单实现

来源:互联网 发布:淘宝 大类目小类目 编辑:程序博客网 时间:2024/04/30 23:10
 
public class PageRank {private BinaryData adjacencyMatrix = null;private double threshold = 0.000000001;private double alpha = 0.3;private double beta = 0.6;private double gamma = 0.1;private UnitaryData preference = new ArrayUnitaryData(new double[]{1, 1, 1});// initialize to a random valueprivate UnitaryData rank = new ArrayUnitaryData(new double[]{0, 0, 0});private UnitaryData oldRank = new ArrayUnitaryData(new double[]{1, 1, 1});private int length = 0;private UnitaryData alphaPart = new ArrayUnitaryData(new double[]{1, 1, 1});private UnitaryData betaPart = new ArrayUnitaryData(new double[]{1, 1, 1});private UnitaryData gammaPart = new ArrayUnitaryData(new double[]{1, 1, 1});public PageRank(BinaryData data){((ArrayBinaryData)data).Stochastic();adjacencyMatrix = data;length = rank.getDimension();}public void Iteration(){adjacencyMatrix.print();// alphaPartfor (int i = 0; i < length; i++) {alphaPart.setValue(i, alpha * rank.getValue(i));}// betaPartfor (int i = 0; i < length; i++) {double temp = 0;for (int j = 0; j < length; j++) {temp += adjacencyMatrix.getValue(i, j) * rank.getValue(j);}temp *= beta;betaPart.setValue(i, temp);}// gammaPartfor (int i = 0; i < length; i++) {gammaPart.setValue(i, gamma * preference.getValue(i));}// sumfor (int i = 0; i < length; i++) {rank.setValue(i, alphaPart.getValue(i) + betaPart.getValue(i) + gammaPart.getValue(i));}for (int j = 0; j < length; j++) {System.out.print(rank.getValue(j));System.out.print('\n');}for (int j = 0; j < length; j++) {System.out.print(oldRank.getValue(j));System.out.print('\n');}System.out.print('\n');}public void Run(){for (int i = 0; i < 100; i++) {Iteration();if (CheckFinish()) {break;}oldRank = rank.clone();}}public boolean CheckFinish(){int passed = 0;for (int i = 0; i < length; i++) {double diff = Math.abs(rank.getValue(i) - oldRank.getValue(i));if (diff < threshold) {passed += 1; }}if (passed == length) {return true;}else {return false;}}public static void main(String[] args) {double a[][] = {{0, 3, 5},{3, 0, 1},{5, 1, 0}};BinaryData g = new ArrayBinaryData(a);PageRank PR = new PageRank(g);PR.Run();}}

原创粉丝点击