📘 教案 21:PageRank(完整数学与算法机制)
一、问题背景
在一个包含大量网页的网络中,每个网页之间通过超链接相互连接。问题是:
如何评价一个网页的重要性?
直观但错误的思路
最简单的方法:
- 被链接次数越多 → 越重要
但问题是:
- 垃圾网页互相链接
- 权重无法区分
核心改进思想
一个网页的重要性,取决于"指向它的网页的重要性"
二、图模型表示
将网页系统抽象为有向图:
G = (V, E)
- 节点:网页
- 边:超链接(A → B)
定义
设:
PR(v) = \\text{节点 v 的重要性}
三、PageRank 基本公式
核心递推关系:
PR(v) = \\sum_{u \\in In(v)} \\frac{PR(u)}{L(u)}
含义
- (In(v)):所有指向 v 的节点
- (L(u)):节点 u 的出度(它指向多少个页面)
解释
每个页面将自己的"权重"平均分给它指向的页面
四、随机游走模型(关键理解)
PageRank 可以解释为:
一个"随机用户"在网页之间不断点击链接
规则:
- 在当前页面,随机选择一个链接跳转
- 不断重复
那么:
页面被访问的概率 = PageRank 值
五、问题:收敛性与死循环
存在问题:
1️⃣ 无出边节点(Dead End)
例如:
text
A → B
B → (无)
👉 权重会消失
2️⃣ 小圈子(Spider Trap)
text
A → B → C → A
👉 权重被困住
六、引入阻尼因子(Damping Factor)
改进公式:
PR(v) = \\frac{1-d}{N} + d \\sum_{u \\in In(v)} \\frac{PR(u)}{L(u)}
参数说明
- (d):阻尼系数(通常 0.85)
- (N):节点总数
含义
用户行为:
- 85%:点击链接
- 15%:随机跳转
👉 解决:
- 死节点
- 小圈子
七、矩阵形式(严格表达)
设:
PR = M \\cdot PR
其中:
- (M):转移矩阵
加入阻尼后:
PR = d M PR + \\frac{1-d}{N} \\mathbf{1}
👉 本质:
求一个"稳定分布"(特征向量问题)
八、求解方法(迭代法)
初始化:
PR\^{(0)} = \\left\[\\frac{1}{N}, \\dots, \\frac{1}{N}\\right
]
迭代:
PR\^{(k+1)} = d M PR\^{(k)} + \\frac{1-d}{N}
直到:
\|\|PR\^{(k+1)} - PR\^{(k)}\|\| \< \\epsilon
九、算法复杂度
每轮计算:
O(E)
总复杂度:
O(E \\cdot k)
(k 为迭代次数)
十、核心性质
1. 全局依赖
每个节点的值依赖全图
2. 递归定义
类似:
text
重要性 = 别人对你的评价
3. 收敛性
在阻尼因子存在时:
必然收敛
十一、工程实现关键点
1️⃣ 稀疏矩阵优化
图通常很稀疏:
👉 用邻接表存储
2️⃣ 并行计算
每轮更新独立:
👉 可分布式计算
3️⃣ MapReduce / Spark 实现
十二、与其他算法的关系
| 算法 | 类型 |
|---|---|
| BFS | 局部搜索 |
| Dijkstra | 最短路径 |
| PageRank | 全局评分 |
👉 PageRank 是:
图上的"全局迭代优化算法"
十三、本质总结(严肃表达)
PageRank 通过构建随机游走模型,将网页重要性转化为稳态概率分布问题,并通过迭代计算得到全局一致的节点评分。
🔥 这一节的层级非常重要
你现在已经进入:
text
图算法 → 概率模型 → 线性代数 → 工程计算