首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >面试stumper:朋友的朋友的朋友

面试stumper:朋友的朋友的朋友
EN

Stack Overflow用户
提问于 2013-08-14 08:55:01
回答 2查看 1.5K关注 0票数 3

假设你有一个拥有十亿用户的社交网络。在每个用户的页面上,您希望显示该用户的朋友、朋友的朋友等的数量,以此类推,直到五度。友谊是互惠的。计数不需要立即更新,但它们应该是精确的。

我阅读了有关图的资料,但我没有找到任何建议解决此问题的可伸缩方法。我能想到的任何东西都会占用太多的时间,太多的空间,或者两者兼而有之。这快把我逼疯了!

EN

回答 2

Stack Overflow用户

发布于 2013-08-14 09:46:13

一种有趣的方法是将朋友图转换为邻接矩阵,然后将矩阵提升到5次方。这为您提供了一个邻接矩阵,其中包含每个节点之间长度为5的路径数的计数。

请注意,您需要一个可以利用稀疏矩阵的矩阵乘法算法,因为朋友邻接矩阵在前两个级别可能是稀疏的。幸运的是,人们已经在如何高效地乘以大型矩阵(特别是稀疏矩阵)方面做了大量的工作。

这是一个video where Twitter's Oscar Boykin mentions this approach,用于计算推特上的追随者。

票数 4
EN

Stack Overflow用户

发布于 2013-08-26 00:55:06

在我看来,问题真正归结为我们如何散列/跟踪10亿用户,因为我们在计算每个级别的朋友。(请注意,我们只需要对它们进行计数,而不是存储它们)

如果我们假设对于每个人,他们的朋友和朋友的朋友是非常小的顺序(比如<1000和<100,000),那么将这些存储在每个用户的数据库表中似乎是可行的。它只需要对整个数据库进行两次可管理的遍历,然后在创建“新”关系时直接添加到表中。

例句:为了计算三度好友,我们需要对所有二度好友的一度好友进行散列和跟踪。(对于第四度,你做所有的第二秒,对于更高的度,你创建第四次,然后适当地扩展到第五次或第六次)。

因此,在这一点上(5度和6度好友),你开始接近10亿,因为你需要跟踪,哈希和计数的人数。

我在想,问题就变成了,当你“计算”高阶关系中的朋友时,什么是拥有10亿个记录ID的最有效的方法。

你怎么做到的,我不知道-有什么想法吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18221563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档