Python实现pagerank算法
Pagerank算法是谷歌的网页排序算法,通过对不同的网页赋予一定的权重,权重大的靠前。最原始的算法逻辑上并不难,主要是对网页赋初值,并进一步对迭代。
原始公式如下:
这里的Ru是网页U的打分,d是阻尼系数,B(u)是节点U的入邻居集合,Lv是点V的出读,Rv是点V的分数,N是总顶点个数。当图比较大的时候,我们会面临R值过小的情况,因此,两边同时乘N,并且另Ru = NRu, Rv = NRv,这样就得到了下面的公式:
通常情况下,我们对图中的每个点初始赋值为1,然后利用公式迭代。迭代的终止条件有两种,一种是直接迭代固定的次数,第二种是两次迭代点之间差值的平均值小于一个数时停止。
这里给出一种python实现方法,选择固定迭代次数,对输入图数据进行迭代。
# 用于存储图
class Graph():
def __init__(self):
self.linked_node_map = {
} # 邻接表
self.PR_map = {
} # 存储不同的节点的PR值
# 添加节点
def add_node(self, node_id):
if node_id not in self.linked_node_map:
self.linked_node_map[node_id] = set