从知乎有一个很有趣的问题:房间里有100个人,每人都有100元钱,如果每过一分钟,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的?
这个问题,可以看成一个小型实验,模拟的是规则绝对公平时,社会财富的流向。财富随机流动的话,贫富差距是否就会消失呢? 城市数据团用程序模拟了这个过程:
就这样,80%的钱跑进了20%的口袋里。即使在最公平的规则下,世界依然展现出了残酷的一面。 更何况,真实的财富流动并不随机。
有个段子是这么说的: 我告诉你一个一年稳赚两百万的办法……往银行里存一个亿定期,一年稳赚两百万。 笑话归笑话,事实也确实如此,原始资本往往是积累财富最有效的方式之一。
关于关于允许负债,富二代财富积累,低保+税收下的实验结果请访问原文作者:http://www.sohu.com/a/159059809_167388
当然知乎上另有高人对原文作者提出了异议:这篇文章犯了一大堆概率论经典错误。他算的那个正态分布是每个个体手上的钱,原文算的是群体排序后的财富分布,根本就不是在算同一个东西。。。请访问:https://www.zhihu.com/pin/877873289857478656
自己写了个代码(不允许负债):
C++
#include<iostream>
#include<ctime>
#include<stdlib.h>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
int population=0,total=0,individual=0,generation=0,figure=0,temp=0;
cout<<"人数:";
cin>>population;
cout<<"初始每人拥有的资产:";
cin>>individual;
cout<<"迭代次数:";
cin>>generation;
cout<<"每一代交换金额:";
cin>>figure;
total=population*individual;
cout<<"社会财富总量:"<<total<<endl;
cout<<"start"<<endl;
srand((unsigned)time(NULL));
int *num=new int[population];
for(int i=0;i<population;i++)num[i]=individual;
while(generation>0){
for(int i=0;i<population;i++){
if(num[i]>0){
num[i]-=figure;
temp=rand()%population;
num[temp]+=figure;
}
}
generation--;
}
total=0;
for(int i=0;i<population;i++)total+=num[i];
cout<<"社会财富总量:"<<total<<endl;
cout<<"每个人的资产"<<endl;
sort(num,num+population);
for(int i=0;i<population;i++){
if((i)%10==0)cout<<endl;
printf("%5d",num[i]);
}
return 0;
}