六度空间
六度空间
一个数学领域的猜想,名为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)
运行结果:
相关阅读
空间解封,尤其永久封禁,相当不靠谱,大伙儿请珍重。查找限制、空间封禁,QQ冻结,此类可以解,笔者相信;永久封禁的空间,尤其是自己不能进的
命名空间(解决了为什么使用using namespace std;的疑惑
命名空间是用来组织和重用代码的编译单元。NameSpace(名字空间),是为了解决命名冲突的问题而引入的概念。通过使用 namespace xxx(就
根据相关资料显示,去年也就是2012年腾讯QQ同时在线的用户数突破一亿七千万。请分清楚,是“同时在线”。那就更别说QQ注册
C盘是系统分区,不管是WindowsXP、Win7、Win8、Win10系统,默认系统分区都是C盘。电脑使用越久,C盘空间会被各种缓存和临时文件慢慢塞
一、实模式下内存分配机制 在8086或者80186以前,要运行一个程序,操作系统会把这些程序全都装入内存,程序都是直接运行在物理内存上