栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

挑战,如何实现六度分离算法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

挑战,如何实现六度分离算法?

用图形表示此用户列表

  • 每个用户都是一个节点
  • 彼此认识的两个用户之间都有优势
  1. 计算从UserX到UserY的路径
  2. 对于UserX,请计算距离不超过3步的所有用户。

这些问题密切相关,以至于同一算法实际上可以解决这两个问题。您可以将其称为 “所有边的权重为1的Dijkstra算法”“宽度优先搜索”。

本质上,从第一个节点开始,拜访其所有亲戚;然后将它们标记为已访问,记录到它们的最短路径(到它们的最短路径+刚经过的边缘),并对每个重复。在到达问题1的目的地后停止,然后在问题2的最短路径>
3之后停止。

这将在O(n)时间内运行。不,没有更快的方法。

用于六度分离的最快O(n)算法 可能是找到距离 UserXUserY 1步的所有用户的集合,并找到这两个集合的交集。如果不存在,则从
UserX 添加用户两步并相交;然后从 UserY 添加用户 两步 并相交;等等,最多3。

如果每个人都有一个平均的100个朋友,这可能需要寻找高达约 2020200的用户 ,而不是在 1010十亿
的Dijkstra算法。实际上,这些数字会小得多,因为您经常有两个朋友也是彼此的朋友。

这是解决六度分离 (到目前为止已提到 的分离度 )的 唯一可行的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号