pagerank js实现
PageRank算法概述
PageRank是一种用于衡量网页重要性的算法,基于链接结构分析。核心思想是:被越多高质量网页链接的网页,其重要性越高。
JavaScript实现PageRank
初始化参数设置
const dampingFactor = 0.85; // 阻尼系数
const maxIterations = 100; // 最大迭代次数
const tolerance = 0.0001; // 收敛阈值
构建链接矩阵

function buildGraph(links) {
const graph = {};
// 初始化所有节点
links.forEach(link => {
if (!graph[link.source]) graph[link.source] = {outLinks: [], inLinks: []};
if (!graph[link.target]) graph[link.target] = {outLinks: [], inLinks: []};
});
// 填充链接关系
links.forEach(link => {
graph[link.source].outLinks.push(link.target);
graph[link.target].inLinks.push(link.source);
});
return graph;
}
PageRank核心计算
function calculatePageRank(graph) {
const nodes = Object.keys(graph);
const N = nodes.length;
let ranks = {};
// 初始化均匀分布
nodes.forEach(node => {
ranks[node] = 1 / N;
});
for (let iter = 0; iter < maxIterations; iter++) {
const newRanks = {};
let totalDiff = 0;
nodes.forEach(node => {
let sum = 0;
graph[node].inLinks.forEach(inNode => {
sum += ranks[inNode] / graph[inNode].outLinks.length;
});
newRanks[node] = (1 - dampingFactor) / N + dampingFactor * sum;
});
// 检查收敛
nodes.forEach(node => {
totalDiff += Math.abs(newRanks[node] - ranks[node]);
});
ranks = newRanks;
if (totalDiff < tolerance) break;
}
return ranks;
}
使用示例

const links = [
{source: 'A', target: 'B'},
{source: 'A', target: 'C'},
{source: 'B', target: 'C'},
{source: 'C', target: 'A'}
];
const graph = buildGraph(links);
const pageRanks = calculatePageRank(graph);
console.log(pageRanks);
实现要点说明
阻尼系数处理
- 阻尼系数通常设为0.85,模拟用户随机跳转行为
- (1-dampingFactor)/N 项保证所有节点都有基础权重
收敛条件
- 当两次迭代间的rank变化小于阈值时停止计算
- 避免无限循环同时保证结果精度
性能优化方向
- 对于大型网络可采用稀疏矩阵存储
- 考虑使用Map替代对象提高访问效率
- 并行计算可加速迭代过程






