首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

你本可以发明 PageRank

2026-08-27 1 阅读 约4分钟阅读 pkoird
分享:
字号:
想象一下,这一年是 1996 年。您发现自己对 AltaVista 这样的现有搜索引擎感到沮丧,它主要进行基于内容的搜索(如果您搜索“Hotels for Chickens”,它会为您提供一篇关于“Hotels for Chickens”的文章,因为单词匹配)。一定有更好的方法,对吗?嗯,当然,事后看来。谢尔盖·布林 (Sergey Brin) 和拉里·佩奇 (Larry Page) 提出了这种精确的算法,即 PageRank,它是帮助 Google 家喻户晓并为他们带来大量收入的关键算法之一。谢尔盖和拉里都是斯坦福大学的研究生,因此他们想出如此惊人的算法似乎并不令人惊讶。然而,问题是,你会偶然发现同样的事情吗?我想是的。 PageRank 的核心象征着这些基本属性。每个页面都有一个“排名”或声誉。一个页面通过链接到另一个页面来与另一个页面共享其“排名”,有点给它一个认可的标记。页面的总排名/声誉是其从邻居(无论链接它的人)获得的所有声誉的最小总和。就是这样。用一个具体的例子来巩固这一点。想象一下,一个页面(例如 BBC 新闻)的声誉为 50,并且链接到 5 个不同的页面。假设它将 80% (40) 的声誉分配给其链接者(其余的统一分配给所有页面)。那么每个链接者都会从 BBC 获得总共 40/5 = 8 分。你可能会编写一个非常小的(而且可读性惊人的)Python程序,其执行如下: #传入[n]具有n上的所有传入节点#传出[n]具有来自n的所有传出节点#一个页面将其声誉的阻尼%分配给其邻居。 # (1-damping)% 平均分配到所有页面。 def pagerank ( 输入 , 输出 , 阻尼 = .85 , 容差 = 1e-10 ): n = len (输入) # 总页面排名 = [ 1 / n] * n # 起始排名。一切平等。最小排名 = ( 1 - 阻尼) / n # 由于随机跳转,一个页面至少从其他每个页面获取此 # 值。 while True : old =rank.copy() for page, Neighbor in enumerate (incoming): # 你从你的链接器那里得到这个(谁将其排名平均分配给所有链接者) acquire = sum ( old[neighbor] / len (outgoing[neighbor]) for neighbor in Neighbor )rank[page] =minimum_rank +damping * acquired # 直到算法收敛 if max (abs (a - b) for a, b in zip (rank,旧))< 容差:返回等级 就是这样。如果您多次运行这些更新,您最终会得到每个页面的排名,基本上可以告诉您它们的重要性。当然,这里已经做出了某些假设(例如没有悬空节点等),但这些只是簿记,您现在知道算法的关键了。恭喜你,如果你发现自己身处 1996 年,你就知道该怎么做才能成为亿万富翁!
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱