ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 1254|回复: 5

皇帝陪妃子的概率计算

[复制链接]
认证徽章
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44紫蛋头
日期:2011-09-03 20:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2017-2-4 22:41 | 显示全部楼层 |阅读模式
本帖最后由 qingyun 于 2017-2-6 11:07 编辑

古代皇帝都号称三宫六院,72妃;
当然实际上没有这么多,
洪秀全那个老文盲,胸中无点墨,只会写写10该打之类的打油诗,但是却首先用上了数字化管理,给每个妃子都编号;

比如皇帝一共有100个;而且皇帝很懒,随机翻牌;遵守随机概率;
题目1:
      皇帝至少“工作”多少天,才能让每个人都曾经被雨露均沾过的概率达到90%;
题目2:
     皇帝“工作了”了1000天,问达到每个人都被雨露均沾过的概率是多少(理论上无论“工作”多少天,也不会100%,只不过会无限逼近)?

用概率论,也许能够算出公式,但是仔细想象,发现公式好像不大好写,当然也许真的可以;

换一条路,用sql;

先简化一下,假如皇帝比较洁身自好,身边就4个人;连续“工作”5天,那么雨露均沾的概率是多少呢?

第1一步:

先算总样本:
   连续工作5天应该是 power(4,5)=1024 ;

也可以写下面的sql,计算总样本:


  1. WITH
  2. A AS ( SELECT LEVEL AS X FROM DUAL CONNECT BY LEVEL<=4) --人员编号


  3. SELECT A1.X AS 第1天,2.X AS 第2天,A3.X AS 第3天,A4.X AS 第4天,A5.X AS 第5天
  4. FROM A A1,A A2,A A3,A A4,A A5
复制代码


  第2步:
    计算每个人都被雨露均沾的样本,这里如果用概率论的数学方法,可以认为是其中有两天选的同一个人,其他都互不相同,
   所以可以用 C(5,2)*4*P(3,3)=240  --该公式的理解:5天当中任选两天都是陪相同的人,组合是C(5,2), 每种组合,都可以在4个人中任选,所以*4;其他3个人各不相同就是P(3,3)  
   但是然并卵,不同的人数,不同的天数,公式都不一样,越多越复杂,没有通用公式;

   所以用SQL相对来说,不需要太费脑筋,方法如下(当然应该有更优化,更通用的写法);
  1. WITH
  2. A AS ( SELECT LEVEL AS X FROM DUAL CONNECT BY LEVEL<=4)


  3. SELECT ALL_DAY
  4. FROM
  5. (
  6. SELECT ','||A1.X ||','||A2.X||','||A3.X ||','||A4.X||','||A5.X||',' AS ALL_DAY
  7. FROM A A1,A A2,A A3,A A4,A A5 )

  8. WHERE INSTR(ALL_DAY,',1,')>0 AND INSTR(ALL_DAY,',2,')>0 AND INSTR(ALL_DAY,',3,')>0 AND INSTR(ALL_DAY,',4,')>0

复制代码
所以:只有4个老婆的皇帝,如果连续随机工作5天,这4个老婆都被陪到(其中一个人被陪2天,其他3个每人各自1天)的概率是 240/1000=0.234  ;大概也就是1/4的概率概率全部陪到;

  概率有点低,那么连续随机工作10天呢?
    总体样本: power(4,10)=1048576
    每个人都被服务到的可能性个数:

  1. WITH
  2. A AS ( SELECT LEVEL AS X FROM DUAL CONNECT BY LEVEL<=4)


  3. SELECT COUNT(1)
  4. FROM
  5. (
  6. SELECT ','||A1.X ||','||A2.X||','||A3.X ||','||A4.X||','||A5.X||','
  7. ||A6.X ||','||A7.X||','||A8.X ||','||A9.X||','||A10.X||','
  8. AS ALL_DAY
  9. FROM A A1,A A2,A A3,A A4,A A5, A A6,A A7,A A8, A A9 ,A A10 )

  10. WHERE INSTR(ALL_DAY,',1,')>0 AND INSTR(ALL_DAY,',2,')>0 AND INSTR(ALL_DAY,',3,')>0 AND INSTR(ALL_DAY,',4,')>0
复制代码
上面这个sql运算下来已经有点慢了,我电脑上大概运行了18多秒;结果是:818520

    所以:只有4个老婆的皇帝,如果连续随机工作10天,这4个老婆都被陪到的概率是 818520/1048576=0.78;大概80%的概率概率全部陪到;这个概率已经算比较高了;





但是如果人数再多一点,比如100人,天数再多一些,比如1000天,这种写法就太长了,肯定超出sql长度限制了,而且性能估计也吃不消;
而且样本也越界了,所有可能性是总样本: power(100,1000) ;也是天文数字了;
所以最好用迭代的方法,消化掉每增加一天,样本几何级数增长方法;

所以应该有更好的sql写法;
当然如果把通用的概率论公式写出来,就更牛叉了;





论坛徽章:
390
宝马
日期:2013-11-22 20:41:54马上加薪
日期:2014-02-19 11:55:14马上有钱
日期:2014-03-11 11:59:122014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37
发表于 2017-2-5 09:29 | 显示全部楼层
把皇帝改为彩票,妃子改为彩民

使用道具 举报

回复
论坛徽章:
78
生肖徽章2007版:牛
日期:2012-08-02 22:43:00紫蛋头
日期:2012-12-08 09:43:38鲜花蛋
日期:2012-11-17 12:02:07鲜花蛋
日期:2013-02-05 21:53:34复活蛋
日期:2012-11-17 12:02:07SQL极客
日期:2013-12-09 14:13:35SQL数据库编程大师
日期:2013-12-06 13:59:43SQL大赛参与纪念
日期:2013-12-06 14:10:50ITPUB季度 技术新星
日期:2012-11-27 10:16:10最佳人气徽章
日期:2013-03-19 17:24:25
发表于 2017-2-6 09:32 | 显示全部楼层
才看了一眼,就发觉你不懂什么叫概率。
概率和样本数有什么关系,不管皇帝工作多少天,概率不变

使用道具 举报

回复
认证徽章
论坛徽章:
164
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
发表于 2017-2-6 10:31 | 显示全部楼层
题目掠过。。。

使用道具 举报

回复
认证徽章
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44紫蛋头
日期:2011-09-03 20:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2017-2-6 10:38 | 显示全部楼层
本帖最后由 qingyun 于 2017-2-6 11:46 编辑
udfrog 发表于 2017-2-6 09:32
才看了一眼,就发觉你不懂什么叫概率。
概率和样本数有什么关系,不管皇帝工作多少天,概率不变


可能术语上有些不够准确;
就上面那个简单例子说明吧:
一个富豪取了4个老婆;连续5晚每天随机陪一个;
那么这4个女人都被陪到的概率是:(5天陪同中包含1,2,3,4的所有组合/ 5天陪同的任意情况的所有组合)
[C(5,2)*4*P(3,3)] /POWER(4,5)=240/1024= 0.23
也就是大概1/4的概率全部陪到;

现在如果有100个老婆,连续陪300天,也是每晚随机;
那么这个概率是多少,能用数学方法,列出通用公式最好;
如果不能,用通用一点的sql做出来也不错;


======================

其实,最初的题目想的不是皇帝陪老婆,这不过这个题目相对吸引眼球一些;

想到这个问题是这样:
      家附近有个健身房,如果不出差,每天都去逛逛,主要是为了方便洗个澡,顺便再跑跑步,举举铁之类;
      每天过去,都会有个柜子放衣服;但是这个柜子是随机的,由于常去,所以每次拿到柜子钥匙,基本就能知道位置在那里;
      我就想,比如有100个柜子,得去多少次,才能把这些柜子全部都至少用过一次; 理论上永远不会100%,最极端的例子,服务员每次给你的钥匙
      都是1号柜子; 当然有个概率;
      比如你可以和其他人打个赌: 比如一共100个衣柜,你连续去了1年,你说:我把这里面的所有柜子都至少用了一遍(健身房电脑里有每次的手牌号记录的),我们查电脑记录验证;
                                                          一般人都认为可能性不大的,因为毕竟你有很大的概率是很多柜子重复用了多次,有些柜子一次用不到;
                                                          所以要用概率论知识算一下,概率是多少?万一概率是80%呢,拿你的赢面就很大了;

     
有个经典的例子:
  公司有50个人,你可以和同事打赌,说我们公司自少有1对生日相同的;
   概率计算方法:
            考虑所有人生日都不相同的情况 : P(365,50)
             总体组合样本:                         POWER(365,50)
所以出现至少一对生日相同的情况概率是:
    1- P(365,50)/POWER(365,50)   =0.97 ;   好高的概率,你可以 1赔10的去打赌,都划算;

如果要算出不同人数的概率,写sql要迭代处理,否者样本太大,超出电脑的数值范围;

  1. with t(n,p) as
  2. ( select 1, 1 from dual
  3. union all
  4. select t.n+1,t.p*( (365-n)/365) from t
  5. where t.n<=365)
  6. select n, 1-p from t
复制代码

其实不到150人,概率已经是0.99999999... 无限接近100%了;





使用道具 举报

回复
论坛徽章:
450
秀才
日期:2015-08-18 09:49:27秀才
日期:2015-10-10 11:14:46秀才
日期:2015-10-10 11:14:46举人
日期:2015-09-09 10:34:21秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01状元
日期:2015-09-09 10:34:21榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01
发表于 2017-2-6 22:48 | 显示全部楼层
udfrog 发表于 2017-2-6 09:32
才看了一眼,就发觉你不懂什么叫概率。
概率和样本数有什么关系,不管皇帝工作多少天,概率不变

怎么一说到这个你就跳出来了?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表