我不是一个非常有经验的程序员,但是我想编写一个接收两个Facebook个人资料的程序,并返回他们之间最短的“路径”。
我想运行时间很长等等,但如果我开始编写该程序,我应该选择哪种语言?我应该使用哪些库?我应该进入哪个方向?
答案 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(堆栈或递归)。