查看: 217|回复: 0

[原创] 5个页面的pageRank的java代码实现

[复制链接]
论坛徽章:
0
发表于 2019-5-31 19:18 | 显示全部楼层 |阅读模式

模型 编程

1 参考根据幻灯片中第16页所给出的“4网页模型” ,现假设有A,B,C,D,E五个网页,其中
1)A网页有链接指向B,C,D,E
2)B网页有链接指向A,D
3)C网页有链接指向A,D
4)D网页有链接指向C
5)E网页有链接指向A,C

手动或编程计算这5个页面的PR值。
下面是我用Java写的一个demo代码,希望大家看下有没有问题。嘻嘻。。


  1. package pagerank;

  2. import org.apache.commons.math3.linear.Array2DRowRealMatrix;
  3. import org.apache.commons.math3.linear.RealMatrix;

  4. public class PageRank {

  5.     public static void main(String args[]) {
  6.         //定义了五维数组代表G
  7.         double b[][] =  {{0,0.5,0.5,0,0.5},{0.25,0,0,0,0},{0.25,0,0,1,0.5},{0.25,0.5,0.5,0,0},{0.25,0,0,0,0}};
  8.         //将数组转换为矩阵
  9.         RealMatrix matrix = new Array2DRowRealMatrix(b);
  10.         /*
  11.          * 根据公式,默认α=0.85则(1-α)=0.15
  12.          * q_next=G*q=0.85*G+0.15*1/5*U=0.85G+0.03U
  13.          * 其中U为1列行都为1的矩阵
  14.          */
  15.         double u[][]= {{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}};
  16.         RealMatrix uMatrix = new Array2DRowRealMatrix(u);
  17.         RealMatrix G = matrix.ScalarMultiply(0.85).add(uMatrix.scalarMultiply(0.03));
  18.         double q[][]= {{1},{1},{1},{1},{1}};
  19.         RealMatrix qMatrix = new Array2DRowRealMatrix(q);
  20.         double abs=0.01;
  21.         boolean exit = true;
  22.         int i = 1;
  23.         
  24.         do {
  25.             RealMatrix qMatrix1=G.multiply(qMatrix);
  26.             RealMatrix temp = qMatrix1.add(qMatrix.scalarMultiply(-1));
  27.             exit=false;
  28.             double[] result = temp.getColumn(0);
  29.             for(int n=0;n<result.length;n++) {
  30.                 if(Math.abs(result[n])>abs) {
  31.                     exit=true;
  32.                 }
  33.             }
  34.             i++;
  35.             if(!exit) {
  36.                 System.out.println("一共執行了:"+i+"次");
  37.                 System.out.println("q_n-1的值"+qMatrix);
  38.             }
  39.             qMatrix=qMatrix1;
  40.         } while (exit);
  41.         System.out.println("最終q的值"+qMatrix);
  42.         
  43.     }
  44. }
复制代码


结果如下:
一共執行了:7次
q(n-1)的值Array2DRowRealMatrix{{1.2098255298},{0.4063513049},{1.6862041907},{1.2912676697},{0.4063513049}}
q(n)  的值Array2DRowRealMatrix{{1.2120353902},{0.4070879251},{1.6773647489},{1.2964240107},{0.4070879251}}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-9-20 15:55 , Processed in 0.202042 second(s), 28 queries .

关闭

扫一扫加入
本版微信群