当前位置: 首页 > news >正文

概率与决策 - 模拟程序让你在选择中取胜

前言

在人生中我们会处处面临抉择,是选择A还是选择B呢。选对了可能皆大欢喜,选错了可能就是一个重要的转折点。
在刷知乎的过程中,经常会有类似的问题。看似荒诞的背后,却蕴藏着无限的哲学。

  1. 《每毫秒给你1个亿,代价是你每秒被动触发一次1亿分之一的死亡率,你愿意吗?》
  2. 《“100%概率获得200万”和“99%概率获得2个亿”,你选哪个?》

作为程序员,看着这种概率与决策,有时候常在想,我怎么做决策我的胜率概率最大,能不能用程序来模拟一下。我选择A赢的概率,我选择B赢的概率呢?

当然,必定是可以的,程序天然非常容易处理这些大数据,循环等问题,话不多说,直接看效果吧。

1

2

3

  • 体验地址
  • github源码地址

死亡概率模拟器

核心算法采用了“几何分布逆变换采样”

  • O(1)时间复杂度,相比传统蒙特卡洛方法性能提升显著
  • 数学准确性:基于几何分布的期望值 E[X] = 1/p
  • 边界保护:处理 log(0) 等数学异常
calculateDeathTime() {const p = this.selectedProbability.value;const u = Math.random();const u_safe = Math.max(u, 1e-10); // 避免log(0)// 几何分布公式:X = ceil(log(U) / log(1-p))const deathTime = Math.ceil(Math.log(u_safe) / Math.log(1 - p));return Math.max(1, deathTime);
}

风险抉择抽奖

采用了预计算 + 进度动画分离。

  • 计算与渲染分离:避免10000次抽奖时的性能问题
  • 固定时长体验:无论多少次抽奖,用户等待时间可控
  • 平滑进度显示:50ms更新间隔保证流畅动画
async startLottery() {// 步骤1:预先快速计算所有结果(无延迟)for (let i = 0; i < this.selectedTimes; i++) {const result = this.performSingleLottery();this.results.push(result);}// 步骤2:根据次数设置固定动画时长let animationDuration = 0;if (this.selectedTimes === 1) animationDuration = 0;      // 立即else if (this.selectedTimes === 10) animationDuration = 500;    // 0.5selse if (this.selectedTimes === 100) animationDuration = 1000;   // 1selse if (this.selectedTimes === 1000) animationDuration = 1500;  // 1.5selse if (this.selectedTimes === 10000) animationDuration = 2000; // 2s// 步骤3:播放进度动画(仅更新显示)const updateInterval = 50; // 每50ms更新一次const totalSteps = animationDuration / updateInterval;for (let step = 1; step <= totalSteps; step++) {this.currentRound = Math.floor((step / totalSteps) * this.selectedTimes);await this.sleep(updateInterval);}
}

同时采用了真随机模拟 Math.random() 模拟概率,大数定律验证,次数越多越接近理论值

performSingleLottery() {const random = Math.random(); // [0, 1)if (random < 0.99) {return { win: true, amount: 200000000 }; // 99%概率:2亿} else {return { win: false, amount: 0 };         // 1%概率:0元}
}

最后

其实最后发觉,概率学到最后就是数学期望,一个人选择可能是随机,但100人、1w人、10w人选择就是必然的概率了。

一个人选择失败对整体影响有限,但对于他自身而言,可能是灾难性的,这也就是一个人在就是整个时代的一粒沙尘,对整个时代影响微乎其微。

但通过代码的计算我们也可以看出,一个人微乎其微,但如果你在你的前面加一个权重,那可能就不一样了,所以大家行动起来吧,让自己变得更强,那样,在选择中,你取胜的概率就会更大了,谢谢大家。

  • 体验地址
  • github源码地址
http://www.hskmm.com/?act=detail&tid=23586

相关文章:

  • 题解:qoj6504 Flowers Land 2
  • Prophet
  • 深入解析:逻辑回归(Logistic Regression)
  • 和水导学习的第二篇笔记
  • 微信公众号推文添加附件方法,1分钟学会!支持word,excel,pdf等适合招聘,公告,申请表等
  • bMIND包本地安装
  • 为博客写遗言
  • 2025国庆Day2
  • vue - 实战3 - 后端
  • 新能源汽车整车电控环境详解!
  • P11983 [JOIST 2025] 展览会 3 题解
  • 网络流 费用流 EK算法
  • “AI元人文”构想说明:构建智能时代的人文学科新范式
  • 双向LSTM-Attention模型
  • Xilinx高性能NVMe Host控制器IP+PCIe 3.0软核控制器IP,4通道DMA,1通道IO,纯逻辑实现,AXI4和AXI4-Stream DMA接口,支持PCIe 3.0和4.0
  • 公私合作抗击网络威胁的创新实践
  • 特征工程
  • 一些dp题
  • 【人工智能通识专栏】第三十二讲:本地化部署模型 - 教程
  • [Node.js] chokidar 文件系统监听库
  • Jenkins安装并与GitLab集成,实现dev、qa、uat、prod多分支持续集成的详细步骤 - 指南
  • ZR 2025 十一集训 #1
  • Channel-Driven 降低模块耦合设计复杂度
  • how to download a websites favicon.ico
  • mini-spring实现
  • 10.3
  • Linux 代码利用 STDOUT 打印日志导致应用“假死”?一次线上 Bug 的深度排查与解决
  • 2025 年地坪研磨机公司推荐榜单:盘点 TOP 品牌的格力,宁德时代等标杆客户合作案例
  • Python 新手入门:从零开始学习 Python 的 10 个关键步骤
  • EPL S22 Stage 2 赛前前瞻