我一直在玩一些东西,并想出了试图找出凯文培根数字的想法。我有一个网站的数据,为此我们可以考虑一个社交网络。让我们假设它是 Facebook(为了简化讨论)。我有人,我有他们朋友的名单,所以我有他们之间的联系。如何计算一个人到另一个人的距离(基本上是凯文培根数)?
我最好的想法是具有深度限制的双向搜索(以限制计算复杂性并避免在图中根本无法连接的人的问题),但我意识到这是相当蛮力的。
制作小的子图(比如 Facebook 上的群组),计算它们之间的最短距离(也许是提前),然后尝试使用 THOSE 来查找链接会更好吗?虽然这需要预先计算,但它可以搜索更少的节点(节点可以是组而不是个人,使图更小)。不过,这仍然是双向搜索。
我还可以预先计算个人连接的人数,首先在节点中搜索“受欢迎”的人,因为他们最有可能连接到给定的目标个人。我意识到这将是可能的最短路径的速度权衡。我想我还想使用深度优先搜索,而不是我计划在其他情况下使用的广度优先搜索。
有人能想出一种更简单/更快的方法吗?我希望能够找到两个人之间的最短距离,所以这并不像总是有相同的终点那么容易(例如在凯文培根问题中)。
我意识到有一些问题,比如我可以得到 200 人的连锁店之类的,但这可以解决我对我愿意搜索的深度的限制。