现假设有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
A 请写出这个网页链接结构的Google矩阵,目测你认为哪个页面的重要性(PR值)最高?
5个网页之间的链接关系为:
在得到初始矩阵后开始计算PR值。假设用户点击网页链接的概率为α,而用户跳到无关页面上的概率为1-α,而访问的页面恰好是这5个页面中A的概率只有(1-α)/5(α是阻尼系数,Google取α等于0.85)。
因此,取α=0.85,Google矩阵为:
特征向量的初始值
将G代入公式p(n)=G*p(n-1)进行迭代计算,直到p(n)≈p(n-1),p(n)即为PR的值。
B(本题可选)手动或编程计算这5个页面的PR值,可以使用任何你熟悉的编程语言,欢迎在论坛上晒自己的程序和结果
答案:通过程序实现可知,页面C的PR值最高。
Java程序实现如下(需要导入Jama-1.0.2.jar包):
package hadoop;
import Jama.Matrix;
public class PageRank {
static double alpha =0.85;
public static void main(String[] args) {
double[][] arrayS ={
{0d,1.0d/2,1.0d/2,0,1.0d/2},
{1.0d/4,0,0,0,0},
{1.0d/4,0,0,1,1.0d/2},
{1.0d/4,1.0d/2,1.0d/2,0,0},
{1.0d/4,0,0,0,0}
};
int length=6;//保存小数点后几位
double[][] arrayPR={{1},{1},{1},{1},{1}};
int n = arrayS.length;
Matrix s = new Matrix(arrayS);//初始矩阵
System.out.print("初始矩阵S:");s.print(5, length);
Matrix pageRank = new Matrix(arrayPR);//page rank初始值
System.out.print("特征向量:");pageRank.print(5, 0);
Matrix u=new Matrix(n,n,1.0d);//单元矩阵
Matrix g=s.times(alpha).plus(u.times((1-alpha)/n));
System.out.print("Google矩阵G:");g.print(5, length);
/*
* 开始迭代计算适合的pageRank值。(也就是求矩阵g,特征值为1 的特征向量pageRank。ps:近似值)
* p(n)=g*p(n-1)
*/
Matrix pageRankPre = pageRank;//P(0)
int iterator =0;
while(iterator<20){
pageRankPre = pageRank;
pageRank = g.times(pageRank);
iterator ++;
System.out.println("迭代次数:"+iterator);
pageRank.print(2, length);
}
}
}
输出结果如下:
初始矩阵S:
0.000000 0.500000 0.500000 0.000000 0.500000
0.250000 0.000000 0.000000 0.000000 0.000000
0.250000 0.000000 0.000000 1.000000 0.500000
0.250000 0.500000 0.500000 0.000000 0.000000
0.250000 0.000000 0.000000 0.000000 0.000000
特征向量:
1
1
1
1
1
Google矩阵G:
0.030000 0.455000 0.455000 0.030000 0.455000
0.242500 0.030000 0.030000 0.030000 0.030000
0.242500 0.030000 0.030000 0.880000 0.455000
0.242500 0.455000 0.455000 0.030000 0.030000
0.242500 0.030000 0.030000 0.030000 0.030000
迭代次数:1
1.425000
0.362500
1.637500
1.212500
0.362500
迭代次数:2
1.154063
0.452813
1.637500
1.302813
0.452813
迭代次数:3
1.230828
0.395238
1.695074
1.283621
0.395238
迭代次数:4
1.206359
0.411551
1.670605
1.299934
0.411551
迭代次数:5
1.209826
0.406351
1.686204
1.291268
0.406351
迭代次数:6
1.212035
0.407088
1.677365
1.296424
0.407088
迭代次数:7
1.208905
0.407558
1.682530
1.293450
0.407558
迭代次数:8
1.211499
0.406892
1.679537
1.295180
0.406892
迭代次数:9
1.209661
0.407444
1.681275
1.294176
0.407444
迭代次数:10
1.210869
0.407053
1.680266
1.294759
0.407053
迭代次数:11
1.210108
0.407310
1.680852
1.294420
0.407310
迭代次数:12
1.210575
0.407148
1.680512
1.294617
0.407148
迭代次数:13
1.210293
0.407247
1.680709
1.294503
0.407247
迭代次数:14
1.210462
0.407187
1.680595
1.294569
0.407187
迭代次数:15
1.210362
0.407223
1.680661
1.294530
0.407223
迭代次数:16
1.210421
0.407202
1.680623
1.294553
0.407202
迭代次数:17
1.210386
0.407214
1.680645
1.294540
0.407214
迭代次数:18
1.210406
0.407207
1.680632
1.294547
0.407207
迭代次数:19
1.210395
0.407211
1.680640
1.294543
0.407211
迭代次数:20
1.210401
0.407209
1.680635
1.294546
0.407209
1、对于硬件的要求; 2、计算所需的时长; 3、可能需要投入的成本(硬件成本、人力成本、时间成本、边际成本、各种不确定的成本要求)