浅谈网页排行算法PageRank

对于一个搜索引擎,一般一个关键字能搜索出很多条网页出来,那么哪个网页应该排在前面,哪个排在后面呢,这是一个排序问题(当然这里不考虑“竞价排序”),排序的前后直接影响到用户的体验。什么样的网页排在前面?

理论上,有两方面的关键因素,一是搜索关键字和搜索结果网页相关性强的排在前面,二是质量高的网页应该排在前面。

这里只讨论因素二,如何判断网站的信息质量问题?

举个例子,街上有10个耐克鞋店,只有一个是真的,然而所有店面都说自己是卖耐克的,怎么排序呢?如果有100个客户都说第5家店卖的是真的,是不是表明第5家是真店的可能性最大呢,这时候可以把第5家排在最前面。

网页的搜索是也是类似的算法:

如果一个网页被很多其他网页所链接,说明它受到普遍的承认和信赖,那么它的排名就高,这就是pageRank的核心思想。

但是实际具体算法要复杂很多,还是上面的例子,一个耐克专业户顾客的说法和一个普通路人的说法,份量肯定是不一样的,因为一般来讲专业户的可靠性更强,那么可以得到一个粗糙的公式:

耐克真店率=专业户0.05+买鞋人0.02+路人*0.01

所以,针对于搜索,假如一个网页被很多网页所链接,排名高的网页的链接更可靠,比重更高。

问题又来了,怎样计算所有网页的排名呢?

pageRank具体算法:
(图片)
矩阵A为网页之间的链接关系,amn代表第m个网页指向网页n的链接数,

矩阵B=(b1 b2 b3 … bm),矩阵B为各网页各自的排名。

当然,B的排名在最原始的时候是并不知道的,这里设置

B0=(1/m,1/m,1/m…1/m),所有网页排名都一样。

那么B1=A*\nB0

将得到的B1再次迭代

Bm =A*Bm-1

经过X次迭代后B最终收敛,Bm和Bm-1几乎相等。最终获得矩阵B。

当然,实际中上百亿的网页中,不可能网页之间多是互相链接的,其实网页直接的链接程度非常的稀疏,所以page(佩奇)等工程师又对上面的算法进行了优化,对零概率和小概率的事件进行平滑的处理,大大降低了算法的复杂度。

参考:《数学之美》