推荐可能的朋友算法

发布 : 2019-01-04 分类 : 杂类 浏览 :

最简单推荐好友算法

最简单推荐好友就是计算两者有哪些共同好友,如果共同好友很多自然就认识的概率很大
其基本思想是, 用户之间的共同好友越多, 则他们越可能是好友。由于这种方法受用户好友总数影响较大, 因此通常根据共同好友比例计算相似度来推荐好友。

六度分隔理论

六度分隔(Six Degrees of Separation)理论。简单地说:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。

数学解析:若每个人认识100人,其六度就是100^6=1-0000-0000-0000 1万亿 完全可以覆盖全人类 而且100个人并不算多,随便打开手机通讯录,qq,微信等等 联系人都不下1000了

三元闭包理论

三元闭包定义:在一个社交圈内,若两个人有一个共同好友,则这两个人在未来成为好友的可能性就会提高。

举例说明,若B、C有一个共同好友A,且B、C不认识,则B、C成为好友的几率会增加

这个理论直观自然,可以从机会、信任、动机上来解释:

  • 1、B、C是A的朋友,那么B、C见面的机会会增加,如果A花时间和B、C相处,那么B、C可能会因此有机会认识
  • 2、在友谊形成过程中,基于B、C都是A好友的事实,假定B、C都知道这点,这会为他们提供陌生人之间所缺乏的基本信任
  • 3、A有将B、C撮合为好友的动机:如果B、C不是朋友,可能会为A和B、C的友谊造成潜在的压力两个人共同好友的多少决定这两个人关系的强弱,基于共同好友的多少,就可以进行好友推荐。

根据遍历朋友列表找出朋友的朋友然后统计出现的次数
如果大于1 就说明两个人之间有多个相同的朋友 这样两个没有朋友关系的人可能就是朋友关系

关系图:

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* @author zhou
* @create 2019-01-04 11:34
* @email zhouinfo@qq.com
* @blog www.zhouinfo.site
*/
public class Friend {

public static void main(String[] args) {
int n = 8;
char[][] a = {
{0, 0, 1, 0, 0, 1, 0, 0},
{0, 0, 0, 1, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 1, 1, 0},
{0, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 1, 1, 1, 0, 0, 1},
{0, 0, 1, 1, 0, 0, 0, 1},
{0, 1, 0, 0, 1, 1, 1, 0}};
int[][] f = new int[n][n];

for (int i = 0; i < n; i++) {
System.out.print(i + " 的朋友为 : ");
for (int j = 0; j < n; j++) {
if (a[i][j] == 1) {
System.out.print(j + " ");
for (int k = 0; k < n; k++) {
//排除自己 并且 两人没有朋友关系,但有朋友的朋友关系
if (k != i && a[i][k] == 0 && a[j][k] == 1) {
f[i][k] = f[i][k]+1;
}
}
}
}
System.out.println();
}

for (int i = 0; i < n; i++) {
System.out.print(i + " 可能是朋友为 : ");
for (int j = 0; j < n; j++) {
//需要大于1才能说明两人之间可能有朋友关系
if (a[i][j] == 0 && f[i][j] > 1) {
System.out.print(j + "[" + f[i][j] + "] ");
}
}
System.out.println();
}


}

}

输入:

{
{0, 1, 1, 0, 0, 1, 0, 0},
{1, 0, 0, 1, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 0, 1},
{0, 0, 1, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 1, 1, 0, 0}
}

1

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0 的朋友为 : 2 5 
1 的朋友为 : 3 7
2 的朋友为 : 0 4 5 6
3 的朋友为 : 1 5 6
4 的朋友为 : 2 5 7
5 的朋友为 : 0 2 3 4 7
6 的朋友为 : 2 3 7
7 的朋友为 : 1 4 5 6
0 可能是朋友为 : 4[2]
1 可能是朋友为 : 5[2] 6[2]
2 可能是朋友为 : 3[2] 7[3]
3 可能是朋友为 : 2[2] 7[3]
4 可能是朋友为 : 0[2] 6[2]
5 可能是朋友为 : 1[2] 6[3]
6 可能是朋友为 : 1[2] 4[2] 5[3]
7 可能是朋友为 : 2[3] 3[3]
本文作者 : zhouinfo
原文链接 : http://blog.zhouinfo.site/2019/01/04/%E6%8E%A8%E8%8D%90%E5%8F%AF%E8%83%BD%E7%9A%84%E6%9C%8B%E5%8F%8B%E7%AE%97%E6%B3%95/
版权声明 : 本博客所有文章除特别声明外,均采用 CC Apache License 2.0 许可协议。转载请注明出处!
留下足迹