一个有意思的分钱模拟问题

简介: 一个有意思的分钱模拟问题。

大家好,今天来分享一个有意思的分钱模拟问题,为了帮助大家理解,采取了可视化的方式。

这个问题描述是这样的:房间里有 100 个人,每人都有 100 元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这 100 个人的财富分布是怎样的?

猜一下,经过 10000 次的交换,你们认为最后的结果会是怎么样子的?
5
4
3
2
1
登登登,答案是这个样子的。

image.png

和你的直觉想法有出入吗?是不是一开始认为是平均分布的?

事实上,很多人一开始都没想到结果会是这样子的。

我们借助 Java GUI 来可视化的理解这个问题。

首先初始化数据,一开始每人都有 100 元钱。

// 初始化数据
   money = new int[100];
   for(int i = 0 ; i < money.length ; i ++)
       money[i] = 100;

image.png

初始状态


然后每轮游戏中,每个人都要 拿出一元钱随机给另一个人
for(int i = 0 ; i < money.length; i ++){
      if(money[i] > 0){
          int j = (int)(Math.random() * money.length);
          money[i] -= 1;
          money[j] += 1;
       }
  }

1.gif

不够直观?那我们可以先排序再显示。

Arrays.sort(money);
for(int i = 0 ; i < money.length; i ++){
      if(money[i] > 0){
          int j = (int)(Math.random() * money.length);
          money[i] -= 1;
          money[j] += 1;
       }
  }

2.gif

排序


我们可以发现,初始时所有人的财富值相等,随着游戏的进行,财富值差距越来越大,而不是均匀分布。

感兴趣继续研究的小伙伴可以下载下方的源码。

完整代码: https://github.com/MisterBooo/AmazingAlgo

参考阅读:

来源 | 五分钟学算法
作者 | 程序员吴师兄

相关文章
|
弹性计算 算法 Linux
使用SM4算法加密LUKS格式磁盘
本文介绍了在Anolis 8操作系统使用cryptsetup对磁盘进行分区、加密和挂载的过程。采用SM4加密算法。具体步骤包括:初始化加密卷、解锁加密分区、格式化并挂载设备。最后,展示了如何取消挂载并关闭加密卷以确保数据安全。整个过程确保了磁盘数据的安全性和隐私保护。
1078 2
使用SM4算法加密LUKS格式磁盘
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
机器学习/深度学习 存储 编解码
什么是图像噪声?是如何产生的?图像去噪技术都有哪些?
图像噪声是在图像采集、传输和处理过程中产生的像素值异常现象,主要由光子计数统计、电子偏移和放大器噪声等因素引起。噪声影响图像质量,降低信噪比,使特征难以识别。图像去噪技术包括传统方法(如空间域滤波、频域滤波、图像压缩和超糅合)和基于深度学习的方法(如卷积神经网络、残差网络和生成对抗网络),旨在有效去除噪声,提高图像质量。
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进-卷积Conv】DualConv( Dual Convolutional):用于轻量级深度神经网络的双卷积核
**摘要:** 我们提出DualConv,一种融合$3\times3$和$1\times1$卷积的轻量级DNN技术,适用于资源有限的系统。它通过组卷积结合两种卷积核,减少计算和参数量,同时增强准确性。在MobileNetV2上,参数减少54%,CIFAR-100精度仅降0.68%。在YOLOv3中,DualConv提升检测速度并增4.4%的PASCAL VOC准确性。论文及代码已开源。
|
存储 JavaScript 数据库
ToB项目身份认证AD集成(一):基于目录的用户管理、LDAP和Active Directory简述
本文介绍了基于目录的用户管理及其在企业中的应用,重点解析了LDAP协议和Active Directory服务的概念、关系及差异。通过具体的账号密码认证时序图,展示了利用LDAP协议与AD域进行用户认证的过程。总结了目录服务在现代网络环境中的重要性,并预告了后续的深入文章。
692 2
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
675 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
868 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue的仓库管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的仓库管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
670 7
|
存储 缓存 安全
USB 2.0 规范摘录2
USB 2.0 规范摘录
397 1
|
Kubernetes 关系型数据库 网络架构
ray集群部署vllm的折磨
概括如下: 在构建一个兼容多种LLM推理框架的平台时,开发者选择了Ray分布式框架,以解决资源管理和适配问题。然而,在尝试集成vllm时遇到挑战,因为vllm内部自管理Ray集群,与原有设计冲突。经过一系列尝试,包括调整资源分配、修改vllm源码和利用Ray部署的`placement_group_bundles`特性,最终实现了兼容,但依赖于非官方支持的解决方案。在面对vllm新版本和Ray部署的`reconfigure`方法问题时,又需权衡和调整实现方式。尽管面临困难,开发者认为使用Ray作为统一底层仍具有潜力。

热门文章

最新文章