一、算法简介
佩奇排名(PageRank),又称网页排名、谷歌左侧排名、PR,是Google公司所使用的对其搜索引擎搜索结果中的网页进行排名的一种算法。 佩奇排名本质上是一种以网页之间的超链接个数和质量作为主要因素粗略地分析网页的重要性的算法。
算法计算过程如下所示,数学原理比较简单。简单来说就是通过节点的所有入度来更新节点。
二、Benchmark
PageRankBenchmark由MIT开发的基准套件,以此评估软硬件运行大数据应用的性能。Benchmark中包含4个kernel,
- kernel0产生数据
- kernel1对数据对边进行排序
- kernel2利用kernel的结果构建sparse martix并计算入度和出度
- kernel3测试Pagerank。
三、数据的存储——sparse Martix
1、Adjacency list(邻接表)
row=1:6, column=1:6,第i行表示第i个节点与其他节点的连接关系,第j列表示第j个节点与其他节点的连接关系
A[row,column]==1表示存在row->column的边,
A[row,column]==0表示不存在row->column的边。
2、Coordinate list (COO)(三元组)
COO stores a list of (row, column, value) tuples. Ideally, the entries are sorted first by row index and then by column index, to improve random access times. This is another format that is good for incremental matrix construction.
3、compressed sparse row (CSR) or compressed row storage (CRS)
CRS储存sparse需要三个数组。
- A按行序储存所有元素
- IA储存每一行第一个非零元素在A中的位置(长度比行数多一)
- JA储存每一个非零元素所在的列,也是按行存储
4、Compressed sparse column (CSC or CCS)
类似于CSR,将行序变为列序。
四、算法公式
c = 0.85
a = (1-c)/(double)N;
r = ((c .* r) * M) + (a .* sum(r,2))
解释:r是节点的rank向量,c是damping factor(阻尼系数),a是随机链接而来的rank向量。至于为什么a.*sum(r,2)并不是很理解,r是一个归一化向量,所以sum(r,2)就是1啊。
接下来解释为什么是(c.*r)*M,M矩阵按照CSC的方式储存,如下图(与算法简介中的图对应)
r向量表示每个点的rank值。M矩阵中非零元素表示该边存在,非零元素的数值为该行节点的出度。以更新r[C]为例,需要所有节点乘以其出度(不存在的边认为出度为0)
r[C] = r * M[:,3]= r(A) * out_degree(A)+r(B) * out_degree(B)+ r( C) * out_degree( C)
=0.5 * 0.5+0.17 * 1 + 0.33 * 0
=0.42
同理可得r[A] ,r[B] ,所以 r * M即得到更新后的r向量。再考虑上链接的概率,就得到了(c.*r)*M。
引用
1、PageRank Pipeline Benchmark: Proposal for a Holistic System Benchmark for Big-Data Platforms
2、A CUDA Implementation of the PageRank Pipeline Benchmark