“房间里有100个人,每人都有100元钱,每轮每人要拿一元钱随机给另一个人”最后分布的python结果
2017-07-30 17:05
555 查看
下午看到了这个问题,一开始直觉当然是觉得每个人的期望都是一样的,大家都是公平的,最后肯定是差不多。
这就是直觉,而在统计学和随机过程的世界里,直觉往往是错误的。
我们用python仿真一下这个过程。
第一张图是每个人最后手上的钱,后面一个是财富的分布。
确实反直觉。
但是仔细一想,确实这件事情是这样的。我们假设现在进行了1000次试验,那么每个人的期望收益就是100 - 1000 + (1000* 1/99 * 99) = 100.这个期望是100,是我们的直觉。但是别忘了,这是一个分布,有方差的,所以,其实每个人都是在这个分布里面抽样。所以才会有这样类似于反直觉的结果。
这就是直觉,而在统计学和随机过程的世界里,直觉往往是错误的。
我们用python仿真一下这个过程。
# coding:utf-8 # 房间里有100个人,每人都有100元钱,他们在玩一个游戏。 # 每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的? import matplotlib.pyplot as plt import pandas as pd import random person = 100 id_list = range(person) id_money_dict = {k: person for k in id_list} round_number = 17000 for round in range(round_number): for id in id_money_dict.keys(): id_money_dict[id] += -1 id_get = random.randint(0, person-1) while id_get == id: id_get = random.randint(0, person - 1) id_money_dict[id_get] += 1 se = pd.Series(id_money_dict) se.plot.bar() plt.show() plt.close() plt.show() plt.close() se.plot.hist(bins=100) plt.show()结果的图如下:
第一张图是每个人最后手上的钱,后面一个是财富的分布。
确实反直觉。
但是仔细一想,确实这件事情是这样的。我们假设现在进行了1000次试验,那么每个人的期望收益就是100 - 1000 + (1000* 1/99 * 99) = 100.这个期望是100,是我们的直觉。但是别忘了,这是一个分布,有方差的,所以,其实每个人都是在这个分布里面抽样。所以才会有这样类似于反直觉的结果。
相关文章推荐
- 知乎问题"房间里100个人,每人1000元,他们玩一个游戏,每轮游戏中,每个人拿出1元,随机给另一个人,最后他们的财富分布是怎样的"实践解答
- 房间内有 100 人,每人有 100 块,有钱的人每分钟随机给另一个人 1 块,最后这个房间内的财富分布怎样?
- 【算法】100人没人100元赠送,最后分布
- 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。按照数组下标输出结果。
- python 实现:题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- Python随机生成均匀分布在三角形内或者任意多边形内的点
- python 随机产生多维高斯分布点
- 用java求解一道趣味体:123456789插入+,-,*,/后,最后结果为100
- 生成特定分布随机数的方法:Python seed() 函数&numpy &scikit-learn随机数据生成
- 约瑟夫环,100个人围成圈圈,逢3退出,求最后剩下的人的编号(分别用数组和双向循环链表实现)
- 100元随机分给10个人 最多20 最少0.01
- 用python生成各种随机分布图
- IT产业最具影响力的100个人,博客中国初步遴选结果
- 编写10个线程,第一个线程从1加到10,第二个线程从11加到20…第十个线程从91加到100, 最后再把10个线程结果相加。
- Python随机生成均匀分布在单位圆内的点
- 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A,B,C,D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生,若输入的不是A,B,C,D则视为无效票,选举结束后按得票数从高到底输出候选人编号和所得票数.
- 随机生成一个0到100的数,让用户猜,允许猜5次,每次猜大了或猜小了,都要给出提示,最后给出正确答案
- python的输出结果最后带一个"None"
- Python实现1-9数组形成的结果为100的所有运算式的示例
- 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出, 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?