大家应该都有这样的经验,QQ中添加完一个新的好友后,或者开心网等添加完一个新的朋友后,都会有一个页面显示出来,告诉用户,A, B, C, etc. 可能也是你认识的人,也许是你的朋友。
想讨论一下,这个功能是如何实现的。
第一直观的想法,就是BFS。
但是,如果A有200个好友,level 1时就已经有200人,如果平均一个用户有200个好友,这样展开的话,即使只有3,4层,那也是很庞大的数字。
可是我看QQ或者开心网之类的,每次添加完好友后,响应速度还是蛮快的。而且,推荐的那一些可能认识的人中间,还是有一些的确是认识的朋友。就是说,命中率还是蛮高的。
有没有比较好的算法么?
如果A和B都是你的朋友,C又是A和B的朋友,那么C就可能是你的朋友
他基本上不会去立即做一个宽优先的搜索,正如你说的,宽优先用的时间太长了。曾经在做一个项目是做过一个类似的功能,反应速度基本上可以,当然也可能是数据少的原因,当时我们做的思路是这样的。先把这个过程分两步,第一,找出疑似人列表;二,筛选疑似人员。
假设A(B,C),E(B,C,F,R),B(A,C,F),C(B,A)
根据关系如果A加E的话,提示的就是F为可能认识的人。当时我们做的时候,是用E-A,得到(F,R);在A的好友B(A,C,F),C(B,A)中去查询(F)(R),最后得到F。