世界上任意两个人之间最多经过6跳就能建立联系,朋友网貌似实现了这种查找。一个最直接的想法就是找最短路径,但是不管是Dijkstra还是Floyd算法都是O(n^3)。况且六度人脉的功能在使用时感觉并不是精确的,因此在实际中应该用某种近似的算法来实现。知乎上有人发帖进行讨论(
http://www.zhihu.com/question/20010259
),感觉两个idea比较靠谱:
1. 从两端各找三层,找公共点;
2. 先聚类,在小圈子里面先算最短路径。
个人更倾向于第二个想法,因为qq上面还有个圈子的功能,基本就是聚类的实现吧。然后任意给出两个用户,如果属于同一个圈子,直接返回路径即可;如果属于不同的圈子,就可以找两个圈子的公共交集,从而找到相应路径。这个感觉直接用数据库就可以实现了。
前面跟陆总讨论的时候,感觉这块挺有意思,有必要记录下来。不过也都是一些猜测而已,欢迎拍砖。。。
个人更倾向于第二个想法,因为qq上面还有个圈子的功能,基本就是聚类的实现吧。然后任意给出两个用户,如果属于同一个圈子,直接返回路径即可;如果属于不同的圈子,就可以找两个圈子的公共交集,从而找到相应路径。这个感觉直接用数据库就可以实现了。
前面跟陆总讨论的时候,感觉这块挺有意思,有必要记录下来。不过也都是一些猜测而已,欢迎拍砖。。。