通过SQL解读财富的分配(二)
之前分析过一篇《通过SQL解读财富的分配》,当时还不过瘾,其实是我还没看到很多自己期望看到的数据,于是后面又做了一些测试,先测试了一版2000万的数据,得到的结果和100的差别不大,本来想来一个全球70亿人的游戏大联欢,但是确实蛮有挑战。
如果后期还准备玩这个游戏,我就加入更多的数据维度更有意义。
今天测试的是四个场景,样本基数是1000人,测试100次。
1)房间里有1000个人,每人都有1元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这1000个人的财富分布是怎样的?
2)房间里有1000个人,每人都有1元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,如果自己手头没有钱,可以每次透支1元钱,最后这1000个人的财富分布是怎样的?
3)房间里有1000个人,每人都有1000元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这1000个人的财富分布是怎样的?
4)房间里有1000个人,每人都有1000元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,如果自己手头没有钱,可以每次透支1元钱,最后这1000个人的财富分布是怎样的?
猛一看,好像都差不多,其实数据差别大了去了。
1
第一个是每次1元的本钱,反复100次,不透支。得到的数据如下,可以看到绝大多数的人都是手里空空,或者原地踏步,能够稍有成就的都是少数,能够出类拔萃的那是极少数。
2
第二个场景是,允许你透支,如果手头没钱,每次透支1元,反反复复100次。
第二组数据的差异化很大,输得最多的人输了近99元,赢得最多的人差不多是79,而中间的比例很明显,赢得14元和输了11元的比例相当,占的比重较高。
3
第三组数据,我们玩大一些,每次1元有些太少了。就来本钱是1000元。每一轮回归1000元,重新开始,试验100轮。
这组数据很有意思,至少不会输得精光。而且从测试结果来看肯定该不会,至少能够有900元在手。而运气好的人,运气也好不到哪里去。最多能够赢得75元,即1075元在手。
这个结果和我的初步想法差距很大,如果以中线1000为界,亏的人还是要多一些。
4
第四组数据更激进些,每个人还是1000的本钱,允许透支,每次1元,反反复复100次。
实验了100次,最少的还是900元,但是比例极低,基本的区间还是在999~1001之间。
但是增幅其实很小,不会有大起大落。
如果要测试脚本,其实很简单,就几行SQL改动一下即可。
变更核心逻辑:
--delete from test_money;
--insert into test_money select level,1 from dual connect by level <=1000;
--commit;
begin
for i in 1..1000 loop
update test_money set money=money-1 where pid=i;
update test_money set money=money+1 where pid=trunc(dbms_random.value(0,1000)) ;
end loop;
end;
/
set pages 200
select money,count(*)from test_money group by money order by money;
前端的调度器和信息汇总
for i in {1..100}
do
sqlplus -s / as sysdba<<EOF
@test.sql
EOF
sqlplus -s / as sysdba <<EOF
set pages 200
insert into test_money_sum select money,count(*)from test_money group by money;
select money,sum(money_cnt)/100 from test_money_sum group by money;
EOF
done
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Leetcode No.7 整数反转
- 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)
- XSS Game分析以及知识点总结
- Web 图形可视化 SQL 优化神奇,真香!
- C++ vector 容器浅析
- C++中的STL中map用法详解
- C++ pair(对组)的简单了解
- elasticSearch学习(六)
- centos7搭建LDAP服务器
- zookeeper is not a recognized option zookeeper参数不支持
- 快来看看你是不是“假的”DBA
- 基于docker搭建gitlab
- 理解Future及FutureTask的实现
- centos7 hbase1.4.13+hadoop2.7.1+单机环境搭建
- 关于kubeconfig多集群切换