大规模分布式系统架构与设计实战笔记之PageRank

在千峰老师的《大规模分布式系统架构与设计实战》一书中的有一个从赌钱游戏看PageRank算法,以下简称PR算法

首先我们来说下PR算法,PR(A)=(PR(B)/L(B)+PR(C)/L(C)+...+PR(X)/L(X))*q+1-q
其中q为逃脱因子,暂且不去理解它(取q=1),此时有公式PR(A)=PR(B)/L(B)+PR(C)/L(C)+...+PR(X)/L(X),说白了网页A的PR值等于他的所有入站链接的PR值得和。

但是网页的PR值我们没法孤立出来进行求算,你想啊,比如现在我想算网页A的PR值,那么我得知道链接到A的那些网页的PR值以及他们的L值,而要想知道这些网页的PR和L值,又得算...这就使得我们的求算没有尽头。所以我们得考虑换种方案。

我们可以对于所有的网页,计算它们的出站链接的PR值,就是说计算所有网络中存在的链接的PR值,然后我们以这些链接链接到的网页作为标准分类,最终求得每个网页的PR值。

举例,比如现在我们有3个网页A,B,C,他们互相都有链接,一共有六个链接。按照上面的方案,对于网页A,有出站链接A->B(PR值为PR(A)/2),有出站链接A->C(PR值为PR(A)/2);
对于网页B,有出站链接B->A(PR值为PR(B)/2),有出站链接B->C(PR值为PR(B)/2);
对于网页C,有出站链接C->A(PR值为PR(C)/2),有出站链接C->B(PR值为PR(C)/2);

网络中一共存在6个链接,他们的PR值也已经算出,此时进行统计可以看到,网页A的入站链接有2个,B->A(PR值为PR(B)/2),C->A(PR值为PR(C)/2),则PR(A)=PR(B)/2+PR(C)/2;
以此类推,PR(B)=PR(A)/2+PR(C)/2;PR(C)=PR(A)/2+PR(B)/2;

自此,我们就找到了每个网页PR值的算法,然后我们仅仅需要为PR(A),PR(B),PR(C)赋值,然后进行多轮迭代,就可求出最终的每个网页的PR值。

在PR值得求算过程中,PR值一直在网页之间流动,因此多轮计算后回收敛。

类似这种“并行计算+数据算法”的经典搭配,并且这种“海量数据并行计算,迭代多轮后收敛”的分析过程十分常见。

附件中是书中的源代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值