在Facebook上发现两个人之间最短的“路径”

时间:2011-04-23 02:39:23

标签: facebook programming-languages

我不是一个非常有经验的程序员,但是我想编写一个接收两个Facebook个人资料的程序,并返回他们之间最短的“路径”。

我想运行时间很长等等,但如果我开始编写该程序,我应该选择哪种语言?我应该使用哪些库?我应该进入哪个方向?

2 个答案:

答案 0 :(得分:2)

说到语言,你应该使用你最熟悉的东西。例如,他们有PHP的示例代码,所以如果你知道PHP,你可以从那开始。 Java也可以工作。

现在,我不知道fbook API是否已经有一些执行此任务的功能。但是,正如您已经提到的那样,您希望找到“最短路径”。事实上,有许多算法可以找到图形的两个节点之间的最短路径。

您正在寻找图表的两个节点之间的最短路径。什么是图表?

图形听起来就像 - 节点和边缘的集合。在这种情况下,每个人都是一个节点。连接节点的边缘是由友谊形成的。

所以,假设你有朋友X ,他有朋友{A,B,C,D}和朋友Y ,他们有朋友(B,D,E) ,F}。首先创建一个所有朋友的图表(即,取两组的 union )。{A,B,C,D,E,F,X, Y}我们包括X和Y,因为我们最终想要找到这两者之间的最短距离。

一旦你获得了每个朋友(他们是他们的朋友,他们是彼此的朋友等)的社交图,那么你可以将它们放入图形结构中。我不会谈论如何做到这一点 - 只是在这里大局。

表示这种方法的一种方法是使用邻接矩阵:

  A B C D E F X Y
A 1 0 0 0 0 0 1 0
B      ...
C
D
E
F
X
Y

即,查看每个网格项。如果这两个人是朋友,则在他们的横截面中加上“1”,否则为“0”。

现在对该数据应用最短路径算法。您可以使用Dijkstra的算法来实现这一目标。

所以:你需要对图形,邻接矩阵和最短路径算法有一点背景知识。甚至可能有一个Java库可以为您完成所有这些工作。甚至是PHP或R库。但从高层次来看,这正是你想要实现的目标。我甚至不确定fbook API是否会为您提供解决此问题所需的所有数据。

祝你好运!

答案 1 :(得分:0)

我应该选择哪种语言?

您喜欢使用的任何语言。

我应该使用哪些库?我应该走什么大方向?

尝试:BFS(队列)和DFS(堆栈或递归)。