用一个菜问秒杀若干伽刚特尔的概率
起因
我玩 pvz2 的砸罐子的时候,非要刷新到伽刚特尔在相邻三行内的时候,才开始打。今天就来算一下这个事件的概率。
问题定义
假设草坪有五行,有若干个伽刚特尔均匀随机地出现在任意一行上,而菜问的大招能秒杀三行以内的伽刚特尔(假设它们足够近,在3*3的格子范围内),求菜问能秒杀的概率。即,僵尸出现在123行,事件发生,124行则未发生。
这里假设僵尸出现在任意一行是等概率的,即此处的 1/5。草坪行数 row = 5,菜问大招范围 m = 3 都暂且定为常数,只考虑僵尸的数量 gn 是变量。
换个场景重新定义一下问题:若干个小球均匀随机地放入 1 ~ 5 号抽屉里,只能打开编号相连的三个抽屉(即123、234、345),问能取出所有小球的概率。这里可以认为,小球放好后,你可以知道小球在哪个抽屉,并总能做出最优的打开抽屉的方案,即开123号抽屉能取出所有小球,你不会打开234号抽屉。
问题分析
gn <= 2 的情况
gn = 1,很显然 p = 1。gn = 2 时,不妨考虑其对立事件,即菜问无法秒杀的概率。因为只有两只僵尸,且它们所在行之间的距离不小于3,所以只可能是14、15、25,用排列数计算如下:
P(Aˉ)=A22∗352=625P(\bar{A}) = \frac{A_2^2*3}{5^2} = \frac{6}{25}P(Aˉ)=52A22∗3=256
故,P(A)=1925P(A) = \frac{19}{25}P(A)=2519
gn >= 3 的情况
利用分类讨论是可以做的,无论是直接求该事件,或者求对立事件都可以做。要分三只僵尸位于三行、两行、一行三种情况讨论,然后综合计算即可。在草稿纸上经过大量计算后可得,P(A3)=65125P(A_{3}) = \frac{65}{125}P(A3)=12565 下标 3 表示 gn = 3。过程比较冗杂,这里不展开描述。
我介绍另一种较简单的思路:
首先选取三行只有三种情况,即选中123、234、345,不考虑行号,其实就是三个三行的情况(也就是说,不考虑行号的时候,选择123、234、345都一样)。假设僵尸全位于某一个三行内的排列数为a(如下图左1),那么2a(下图左2)就是选取123+选取234,这里会有一些重复。同理 3a 是考虑这三种情况的总合(下图左2),也有一些重复。
下面列一下每个选择具体包含的情况:
- 123行:1 2 3 1~2 2~3 1~3 (僵尸仅位于第1行、仅位于第2行、仅位于第3行,位于12行,位于23行,位于123行)
- 234行:2 3 4 2~3 3~4 2~4 (类似)
- 345行:3 4 5 3~4 4~5 3~5 (类似)
那么重复的部分是哪些呢?(2 3 2~3) 、(3 4 3~4)这八种情况被计算了两次。前四种情况刚好是僵尸任意排在23行的排列数,后四种情况是僵尸任意排在34行的排列数。忽略行号,这两个排列数是相等的。
所以公式呼之欲出了,gn = 3 时的排列数 pq = 3 * 僵尸任意排列在三行内的排列数 - 2 * 僵尸任意排列在两行内的排列数
僵尸任意排列在三行内,就是 3gn3^{gn}3gn,两行内,则是 2gn2^{gn}2gn,所以
P(A3)=3∗33−2∗2353=65125P(A_3) = \frac{3 * 3^3 - 2 * 2^3}{5^3} = \frac{65}{125}P(A3)=533∗33−2∗23=12565
同理可得 P(A4)=3∗34−2∗2454=211625P(A_4) = \frac{3 * 3^4 - 2 * 2^4}{5^4} = \frac{211}{625}P(A4)=543∗34−2∗24=625211 关于 gn 的公式为
P(Agn)=3∗3gn−2∗2gn5gnP(A_{gn}) = \frac{3 * 3^{gn} - 2 * 2^{gn}}{5^{gn}} P(Agn)=5gn3∗3gn−2∗2gn
模拟实验
还是模拟实验一下,验证一下自己的计算结果。
import numpy as npdef calc(gn=2, row=5, m=3):# np.random.seed(42)sz = 10000000samples = np.random.randint(0, row, (sz, gn)) # 随机模拟僵尸的出现情况res = samples.max(axis=1) - samples.min(axis=1) # 一次模拟中 僵尸的最大距离 < 3 则事件发生# print(samples)# print(res)print(np.sum(res < m) / sz)calc(2)
calc(3)
calc(4)print(19/25)
print(65/125)
print(211/625)
运行结果如下,可见计算的结果应该没有问题。
总结
利用了容斥原理的思想,考虑简单情况的叠加,再除去重复计算的部分,就可以得到正确的结果。
用一个菜问秒杀若干伽刚特尔的概率相关推荐
- 如何设计一个优秀的秒杀系统?
前言 如果问起秒杀系统如何设计,相信都能说出个123来,但是如果细究其中的细节点,很多人估计就无法很快的打上来了.本文从六个方面,来简要讲一下秒杀系统要如何设计,应该主要哪些事情. 01 | 设计秒杀 ...
- 如何设计一个小而美的秒杀系统?
https://www.ibm.com/developerworks/cn/web/wa-design-small-and-good-kill-system/index.html 现如今,春节抢红包的 ...
- 编写程序,从键盘输入 一个 英文字母(有若干行)。如果是大写字母,则输出它对应的小写字母;如果是小写字母,则输出它对应的大写字母。
撰写人--软工二班--陈喜平 题目描述 编写程序,从键盘输入 一个 英文字母(有若干行).如果是大写字母,则输出它对应的小写字母:如果是小写字母,则输出它对应的大写字母. 输入 一个英文字母.(有多组 ...
- 【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒
题目 某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用.水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个.每次往水缸中倒水与从 ...
- 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,问该数是多少
/* 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,问该数是多少,(10万内求解) a*a=A+100; b*b=A+168; */#include <stdio.h& ...
- 记录一个菜鸡的大一立项:做一个跑步打卡APP
记录一个菜鸡的大一立项:做一个跑步打卡APP(///▽///) 1. 思路: 2. 具体功能: [ 记录跑步时间.距离] [ 跑步计划制定] [ 跑步路程追踪] [ 跑步信息记录 ] [ 校园景点介绍 ...
- 我们有一个线上的项目,刚启动完就占用了超过 1.5G,一次大量 JVM Native 内存泄露的排查分析(64M 问题)
我们有一个线上的项目,刚启动完就占用了使用 top 命令查看 RES 占用了超过 1.5G,这明显不合理,于是进行了一些分析找到了根本的原因,下面是完整的分析过程,希望对你有所帮助. 会涉及到下面这些 ...
- Python脚本做一个淘宝秒杀程序!
Python脚本做一个淘宝秒杀程序! 先上代码 from selenium import webdriver import datetime import time import os import ...
- 因果推断会是下一个AI热潮吗?朱迪亚•珀尔新作《因果论》重磅上市!
从"大数据时代和机器学习热潮"到"第二次因果革命",从以数据为中心到数据理解的转变不仅涉及技术上的转变,还意味着更加深刻的范式转换. 因果关系理论与现有机器学习 ...
最新文章
- WIN7源码安装Apache和PHP注意事项
- 如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- 使用NoSQL实施实体服务–第5部分:使用云提高自治性
- Oracle 10g、11g :RAC关闭、启动、重启步骤
- java 阻塞 直到完成_完成所有提交的任务后关闭Java执行程序而不会阻塞
- pg库sharelock_PostgreSQL 行锁解读
- python制作表格的语句_python根据Excel自动生成创建表sql语句
- Zookeeper与Kafka集群搭建
- 错误调试:Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4
- 兆比特每秒和兆字节每秒_宽带中的“M(兆)”是什么意思?
- Java实现面向对象编程
- JAVA网络编程个人笔记 第五章 URL和URI
- 计算机软考笔试知识点,计算机软考考试必备知识点:关键链法
- HTML常用语法及标签(第一天所学)
- 自定义 iPhone 铃声
- 手机剪辑视频指南:去水印、加字幕、做转场,统统一键就搞定
- python计算机视觉:创建缩略图
- 从0到1搭建数据湖Hudi环境
- C语言二维数组的大小的获取
热门文章
- 阿里P7大佬手把手教你!腾讯团队实力打造flutter入门教程,系列篇
- 阿里上市的造富运动,由世界上最富有的冲击引起的,马云缩水达,儿子约峰会...
- 葛洲坝集团电力有限责任公司召开第七次董事会
- 编写C语言程序,输入一个以回车符结束的字符串(少于80个字符),统计并输出其中大写辅音字母的个数(大写辅音字母是除‘A’,‘E’,‘I’,‘O’,‘U’以外的大写字母)。
- ssh rsa秘钥不可用
- Boosting算法原理(Adaboost篇)
- centos Cockpit
- 《博士学位真的那么重要吗?》读后感
- 安全基线、本地安全策略、账户安全----Windows应用安全
- kgsl ioctl