博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PageRank算法计算网页的价值
阅读量:7095 次
发布时间:2019-06-28

本文共 1649 字,大约阅读时间需要 5 分钟。

hot3.png

现假设有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值)最高?
B 手动或编程计算这5个页面的PR值,可以使用任何你熟悉的编程语言;
C 指出当页面较多的时候,计算PR的主要困难在什么地方,Map-Reduce是怎么解决这个难题的?

一、Google矩阵

将上述问题进行数学建模,如下:

二、网页价值计算(计算PageRank值)

PageRank算法的数学原理如下:

得到初始矩阵后,我们就可以得到PR值,当只有a概率的用户会点击网页链接,剩下(1-a)概率的用户会跳到无关的页面上去,而访问的页面恰好是这5个页面中A的概率只有(1-a)/5(a是阻尼系数,Google取a等于0.85),所以真正的Google矩阵 :

于是得到q(n)=G*q(n-1),特征向量q的初始值为值为1的5*1矩阵,直到q(n)=q(n-1),q(n)就是PR的值。

将上述的思想抽象成一个数学函数:

当f(n+1)约等于f(n),此时的PageRank值即为f(n)。

三、编程实现

public class PageRank {    /**     * 矩阵g乘以矩阵p     * @param g     * @param p     * @return 矩阵g乘以矩阵p的结果矩阵     */    private static double[] multiMatrix(double[][] g, double[] p){        double[] multiResult = new double[p.length];        for(int i=0; i
0.0000001){ return false; } } return true; } /** * * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub double[][] transitionMatrix={ {0, 1/2f, 1/2f, 0, 1/2f}, {1/4f, 0, 0, 0, 0}, {1/4f, 0, 0, 1f, 1/2f}, {1/4f, 1/2f, 1/2f, 0, 0}, {1/4f, 0, 0, 0, 0} };//初始矩阵 double[] p={1,1,1,1,1}; double weight = 0.85f; //a的值 //真正的Google矩阵 getGoogleMatrix(transitionMatrix, weight); //输出看一下// for(int i=0; i

计算结果:

1.21039892251282980.40720978708319011.6806369103372531.2945445929835420.4072097870831901

 

转载于:https://my.oschina.net/TaoPengFeiBlog/blog/799769

你可能感兴趣的文章
yml使用
查看>>
KVM性能测试
查看>>
express+gulp构建项目(五)swig模板
查看>>
【百度地图API】让用户选择起点和终点的驾车导航
查看>>
c#实现屏保
查看>>
Android学习笔记43-XML文件解析(Pull方式)
查看>>
【C#】委托
查看>>
左偏树
查看>>
转:JAVA 的wait(), notify()与synchronized同步机制
查看>>
我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类
查看>>
基于FineUIMVC的代码生成器(传统三层)v1.0-2
查看>>
遍历数组按学号找人,若找到则输出信息,否则输出"查无此人"
查看>>
原型讲解二:原型是干什么用的
查看>>
the server responsed width a status of 404 (Not Found)
查看>>
JF 笔试 反思
查看>>
思维模式
查看>>
Andorid自动化-Monkey命令一
查看>>
学习进度条
查看>>
CCF能力认证历届第二题
查看>>
基于shell 脚本处理文本数据流程
查看>>