有些人可能不知道Xing是什么:它是一个在线网络社区,如LinkedIn等。你可以添加新联系人,管理这些联系人,搜索新联系人等。
整个应用程序都是用ruby完成的,并受到了小世界理论的启发,至少据说是这样。
有一个特别的特点,我真的无法想象它是如何做到的。如果您查找某个不在您的联系人列表中的Z,然后单击Z的个人资料,则会显示从您到Z的所有可能的连接例子:
你->人B->人C->人E->人Z
你->人M->人N->人I->人Z
你->人M->人K->人J->人Z
等。
特别是如果你有很多联系人,也有很多可能的联系。而且程序很快!
所以,我的问题是:这样的功能是如何实现的?背后是什么样的系统/数据库我只对标准的rdmbs有经验,比如mysql和mssql server,我真的很难想象在标准的数据库系统中如何做上面提到的事情。
有什么算法可以帮助计算可能的关系吗?目前,我正在读一本关于算法的有趣的书,比如计算两个事物的相似性等等,所以“小世界理论的实现”对我来说是非常有趣的。
提前谢谢你的提示。
最佳答案
这可能是一些预缓存用户的组合,结合了各种最小生成树算法例如,您可以查看Kruskal的算法(http://en.wikipedia.org/wiki/Kruskal%27s_algorithm)它不像你描述的那样,但是对于那些你知道两个人之间联系强度的加权树是有用的。
有关更一般的信息,请查看有关生成树的信息:
http://en.wikipedia.org/wiki/Minimum_spanning_tree
更一般地,请阅读goodrich和tomassia的“java中的数据结构和算法”的第13章(关于图形)。