六度空间

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AivenZhong/article/details/84730107

六度空间
一个数学领域的猜想,名为Six Degrees of Separation,中文翻译包括以下几种: 六度分割理论或小世界理论等。 理论指出:你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个中间人你就能够认识任何一个陌生人。也叫小世界理论。(百度)

这个理论以前就听说过了,现在学了图论之后,感觉也就那样,好像没那么神奇。在现在每个人,至少大概能直接联系到的人能有100人吧?特别是有了微信qq等社交网络之后。老一辈的可能没那么多,怎么说也得有50人可以直接联系的到吧。

然后人是一群群分布的,每个人都有不一样的群,但是每个人的群之间或多或少有直接或间接的联系,群与群之间有不同程度的亲密度。

但是总的来说,每个人可以通过自己的群体认识到更多的群体更多的陌生人,从而导致指数增长,可以很快的在5-6层之间覆盖到好几十亿人。粗略算一下每一层一个人可以直接联系50个新人加入大群,6层。50的6次方等于15625000000一百多亿啊!

在这里插入图片描述
在这里插入图片描述

现在世界总人口75亿,完全可以在6步之间找到一个人。
理论归理论,但是现实找一个陌生人还是有点难度的。要看在什么情况,在网络上就简单,但是在没有网络交通也不发达的地方就难了。而且,你也不能让每层的人都去找,你只能像路由算法那样,通过一个个人传递,每次把信息传到他认为离目标最近的人,最终到达目标。

下面用python简单模拟了下六度空间
用广搜来确定走了几层
逻辑上有点不符合实际,每个人的交际圈,就是每个人能直接联系的人,是随机生成的,所以每个人所组成的群体,群体与群体之间的亲密度差不多,都认识的人数量(重复的人)也差不多。所以大概通过每个人新认识的人大概可能也就20多30几个吧。20的n次方。

import random
from queue import Queue


def bfs(start, graph):
    queue = Queue()
    queue.put([start, 0])
    vis = [False for _ in range(len(graph))]
    vis[start] = True
    maxDegree = 0
    while not queue.empty():
        node, degree = queue.get()
        maxDegree = degree
        for nextNode in graph[node]:
            if not vis[nextNode]:
                queue.put([nextNode, degree + 1])
                vis[nextNode] = True
    return maxDegree


# 模拟一万个人空间的六度空间
# 每个人大概可以与50-100个人形成直接联系,因为会有重复,每个人实际上直接进入下一层的人数小于50-100人
n = 10000
min_max = (50, 100)
# 建立邻接表
graph = [[] for _ in range(n)]
for i in range(n):
    # 每个人随机产生50-100之间的联系人
    m = random.randint(min_max[0], min_max[1])
    # 联系人从10000个人里面随机选出m位联系人
    l = list(range(n))
    random.shuffle(l)
    for v in l:
        if v != i:
            graph[i].append(v)
        if len(graph[i]) == m:
            break

print('Six Degrees of Separation')
degree = bfs(0, graph)
print('max degree is: %d' % degree)

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AivenZhong/article/details/84730107