1.从共同关注和间接关注说起
关于社交网站好友推荐,我认为不外乎分三种类型,一.找到自己现实生活中认识的朋友;二.在纷乱复杂的用户中找到和自己兴趣点一样志趣相投的人。
我们先从第一点说起,更明确指的是希望推荐系统可以推荐到现实生活中的朋友圈的那些还没有互相关注的人,所以我们只考虑和用户之间双向关注的那些用户,抽象到图的概念即为无向图。再进一步抽象,可以这样描述这样一个问题,给定一个无向图,求每个顶点E中不与E直接相连的相邻顶点的相邻顶点。求顶点集过程时如遇到此顶点已在顶点集中,需要增加他的计数变量,然后对求得的顶点集按照计数变量大小排序,排名越高,则说明共同关注和间接关注越多,则说明俩人有很大概率在现实中认识。
我们可以来分析下算法的复杂度并试着优化。若用户之间的关系采用邻接矩阵存储,设顶点(用户)数量为M,若要求出所有用户的共同关注,则算法的复杂度为O(N^3)(易证)。还有办法做的更快么??从实际考虑,这个用户之间关系的矩阵一定是个十分稀疏的图,所以,我们可以遍历图中所有的边,然后对每条边再遍历所有的顶点,看该顶点是否只和该边的一个顶点相连。复杂度降低到了O(M*N),更直观的表示:假设平均每个用户有k个好友,则M=N*k/2,则该算法时间复杂度为O(N^2*k),是不是降低了很多!