拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Google 搜索算法原理与代码实现:PageRank 幂迭代 numpy 全流程实测

Google 搜索算法原理与代码实现:PageRank 幂迭代 numpy 全流程实测

PageRank 五实验复盘:幂迭代 77 次收敛到 L1 差 4.92e-11 是什么概念

“PageRank 就是谷歌排序算法”——对,但面试里考的是你能不能用 numpy 从零写出来,并回答三个追问:迭代多少次收敛?阻尼因子怎么选?悬空节点不处理会怎样?本文用五个实验把这三个追问全部量化回答,全部数字来自 numpy 真实运行留档(8 页图小网络到 1 万节点大网络)。

一、五实验总览

实验内容实测
E1幂迭代 vs 线性代数解77 次收敛,L1 差4.92e-11
E2容差扫描tol=1e-04 → 29 次;1e-10 → 77 次
E3阻尼因子扫描d=0.5 → 27 次;d=0.95 → 127 次
E4spider trap + 悬空节点修正后 138 次收敛,泄漏分值 0.0375
E51 万节点规模测试建图 0.27s,迭代 91 次26.35s

二、E1/E2:收敛是"按数量级计价"的

核心实现只有四行:

for_inrange(max_iter):new=d*(M @ rank)+(1-d)/nifnp.linalg.norm(new-rank,1)<tol:breakrank=new

容差每收紧两个数量级,迭代次数多 16 次左右(29→45→61→77)——幂迭代按几何速度收敛,每轮把误差乘以大约 d。工程含义:tol=1e-06 对排序场景足够,追求 1e-12 属于给自己买不来的精度。

三、E3:阻尼因子影响的是速度,不是结论

d 从 0.5 扫到 0.95,迭代次数 27 → 127,但Top3 排名全程稳定为 [0, 3, 2]。d 越大"随机跳转"越少、越贴近纯链接结构,收敛越慢。0.85 之所以是经典默认值,是速度与"尊重链接结构"的折中——不是精度魔法。

四、E4:悬空节点不处理,PageRank 直接漏分

4 页环 + 悬空节点的实验:不处理悬空节点(没有任何出链的页面),它的分值会凭空消失,全网 PageRank 和小于 1。修正方式是把悬空节点的分值均匀摊回全图,实测修正后收敛 138 次,悬空节点拿回 0.0375 分值。spider trap(自环环组)则靠 d 的随机跳转稀释——这就是 d 存在的第二层意义。

五、E5:一万节点 26 秒意味着什么

1 万节点随机图:numpy 建图 0.27 秒,幂迭代 91 次收敛 26.35 秒。稠密矩阵乘是 O(n²) 每轮——百万节点级要换稀疏矩阵(scipy.sparse)或图分区并行。但作为理解算法的基准,numpy 版是最诚实的参照系。

六、面试速答模板

  • 收敛:幂迭代几何收敛,tol 每紧 2 个数量级多约 16 次(8 页图实测);
  • 阻尼:影响速度不影响排序结论(d 扫描 Top3 不变);
  • 陷阱:悬空节点摊回全图防泄漏,spider trap 靠 d 稀释。

五个实验的完整源码(pagerank.py 约 150 行注释版)+ 全部运行留档已打包,跑一遍胜过背十遍。

📦配套完整资源已整理上传:点击查看资源包(含 numpy 五实验源码与全部运行留档,开箱即跑)

返回列表