最近在接受采访时,有人问了一个有趣的问题。
Do I know him?
个问题。用户“知道”另一个,如果他们通过6级朋友连接。 E.g。 A
是B
的朋友,B
是C
的朋友,C
是D
的朋友,D是E
的朋友1}},E
是F
的朋友。我们可以说,A
知道F
。
显然,您无法使用BFS或其他标准遍历技术有效地解决此问题。问题是 - 如何在DB中存储此数据结构以及如何快速执行此搜索。
答案 0 :(得分:7)
BFS有什么问题?
从第一个节点执行BFS的三个步骤,用标志1标记可访问的用户。它需要10 ^ 9步。
从第二个节点执行BFS的三个步骤,用标记2标记可访问的用户。如果我们遇到标记1 - 宾果。
答案 1 :(得分:0)
如何将数据存储为100万x 1百万个矩阵A,其中A [i] [j]是从用户i到用户j的最小步数。然后你几乎可以立即查询它。然而,更新成本更高。