UserA-UserB-UserC-UserD-UserF
用“-”连接的用户彼此了解。
我需要针对这两个任务的算法:
有没有有效的解决方案?
编辑
我的目的不是要证明对与错,而是在必要时实时计算结果。
另外,我认为最具表现力的方式是代码,甚至是伪代码。
再次编辑
我已经决定这种工作必须在数据库内部完成,因此它必须是sql解决方案!
用图形表示此用户列表
计算从UserX到UserY的路径 对于UserX,请计算距离不超过3步的所有用户。
这些问题密切相关,以至于同一算法实际上可以解决这两个问题。您可以将其称为 “所有边的权重为1的Dijkstra算法” 或 “宽度优先搜索”。
本质上,从第一个节点开始,拜访其所有亲戚;然后将它们标记为已访问,记录到它们的最短路径(到它们的最短路径+刚经过的边缘),并对每个重复。在到达问题1的目的地后停止,然后在问题2的最短路径> 3之后停止。
用于六度分离的最快O(n)算法 可能是找到距离 UserX 和 UserY 1步的所有用户的集合,并找到这两个集合的交集。如果不存在,则从 UserX 添加用户两步并相交;然后从 UserY 添加用户 两步 并相交;等等,最多3。
如果每个人都有一个平均的100个朋友,这可能需要寻找高达约 2020200的用户 ,而不是在 1010十亿 的Dijkstra算法。实际上,这些数字会小得多,因为您经常有两个朋友也是彼此的朋友。
这是解决六度分离 (到目前为止已提到 的分离度 )的 唯一可行的方法。