写点什么

13 周作业

发布于: 2021 年 01 月 06 日

PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))

其中:PR(A):页面 A 的网页级别,

PR(Ti):页面 Ti 的网页级别,页面 Ti 链向页面 A,

C(Ti):页面 Ti 链出的链接数量,

d:阻尼系数,取值在 0-1 之间.


package com.joy.programmer.joyce.util;


public class PageRank_My {


public static void main(String[] args) {

// 定义阻尼系数

double damp = 0.85;


/* 测试数据,表示四个网页相互之间的有向链接矩阵

* 用矩阵形式表示

* A B C D

* A 0 1 1 0

* B 0 0 1 0

* C 1 1 0 0

* D 0 1 1 0

/


int[][] link = {

{0, 1, 1, 0},

{0, 0, 1, 0},

{1, 1, 0, 0},

{0, 1, 1, 0}


};

// 各点的总链出数量

int[] linkOut = new int[link.length];

for (int i = 0; i < link.length; i++) {

for (int j = 0; j < link.length; j++) {

linkOut[i] += link[i][j];

}

}

//定义一个初始数组并初始化,设所有的页面初始 PR 值都为 1;

double[] pr = new double[link.length];


double[] init = new double[link.length];

for (int i = 0; i < link.length; i++) {

init[i] = 1.0;


}

pr = pagerank(link, damp, linkOut, init);


//我们进行 10 次迭代计算 pagerank 的值

for (int i = 0; i < 10; i++) {

System.arraycopy(pr, 0, init, 0, link.length);

pr = pagerank(link, damp, linkOut, pr);

}


for (int i = 0; i < link.length; i++) {

System.out.println("PR(" + i + ") = " + pr[i]);

}


}


/*计算 pagerank 的函数

* @param link 页面的链接图

* @param damp 设置的阻尼系数,佩奇设的是 0.85

* @param linkout 每个页面的链接总数

* @param init 上次迭代的结果

*

/

public static double[] pagerank(int[][] link, double damp, int[] linkout,

double[] init) {


double[] pr = new double[init.length];

double num = 0;

for (int i = 0; i < init.length; i++) {

for (int j = 0; j < init.length; j++) {

// 接下来的判断是关键,计算非本页面,和链接数不为 0 的页面,并且那个页面有连到本页面的值,即是 links[j][i] !=0。

if ((i != j) && (linkout[j] != 0) && (link[j][i] != 0)) { num = num + init[j] / linkout[j]; }


}

// pagerank 的计算公式

pr[i] = damp + (1 - damp) * num;

}

return pr;

}

}


用户头像

还未添加个人签名 2020.09.08 加入

还未添加个人简介

评论

发布
暂无评论
13周作业