12
返回列表 发新帖
楼主: qingyun

[SQL] 生男生女比例猜想

[复制链接]
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
11#
发表于 2018-6-11 11:31 | 只看该作者
所以,如果假设题目生男生女概率3/2,那么100000个家庭的孩子的男女比例还是维持:3/2

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
12#
发表于 2018-6-11 11:36 | 只看该作者
如果比例是1:1的话,结果也是1:1

SQL>
SQL> with t as (select level n from dual connect by level<=100000),
  2       y(n,y,child) as ( select cast(n as varchar2(1000)),
  3                                1,
  4                                case when dbms_random.value <=1/2 then 1 else 0 end
  5                           from t
  6                          union all
  7                         select 'x'||y.n,
  8                                y.y+1,
  9                                case when dbms_random.value <=1/2 then 1 else 0 end
10                           from y
11                          where y.child = 0
12                         )
13  cycle n set x to 'Y' default 'N'
14  select sum(case when child = 1 then 1 end) boys,sum(case when child = 0 then 1 end) girls
15    from y
16  /
      BOYS      GIRLS
---------- ----------
    100000      99695

SQL>
SQL> with t as (select level n from dual connect by level<=100000),
  2       y(n,y,child) as ( select cast(n as varchar2(1000)),
  3                                1,
  4                                case when dbms_random.value <=1/2 then 1 else 0 end
  5                           from t
  6                          union all
  7                         select 'x'||y.n,
  8                                y.y+1,
  9                                case when dbms_random.value <=1/2 then 1 else 0 end
10                           from y
11                          where y.child = 0
12                         )
13  cycle n set x to 'Y' default 'N'
14  select sum(case when child = 1 then 1 end) boys,sum(case when child = 0 then 1 end) girls
15    from y
16  /
      BOYS      GIRLS
---------- ----------
    100000     100273

SQL>

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
13#
发表于 2018-6-11 12:41 | 只看该作者
cycle n set x to 'Y' default 'N' 是什么含意

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
14#
发表于 2018-6-11 12:50 | 只看该作者
solomon_007 发表于 2018-6-11 11:28
大约:

SQL> with t as (select level n from dual connect by level

我的改过后对了
SQL> with t as(select level n from dual connect by level<=1e5),
  2  y(n,y,child) as(select n,1,decode(sign(mod(abs(dbms_random.random),5)-2.5),1,1,0.5) from t --girl 1 boy 0.5
  3  union all
  4  select n,y+1,child+decode(sign(mod(abs(dbms_random.random),5)-2.5),1,1,0.5) from y where round(child)=child and y<=10)
  5  select sum(trunc(child)) girls,sum(mod(child,1))/0.5 boys
  6  from y where mod(child,1)=0.5;

     GIRLS       BOYS
---------- ----------
     66574      99998

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
15#
发表于 2018-6-11 13:20 | 只看该作者
〇〇 发表于 2018-6-11 12:41
cycle n set x to 'Y' default 'N' 是什么含意

为了避免下面的错误:

SQL>
SQL> with t as (select level n from dual connect by level<=100000),
  2       y(n,y,child) as ( select n,
  3                                1,
  4                                case when dbms_random.value <=1/2 then 1 else 0 end
  5                           from t
  6                          union all
  7                         select y.n,
  8                                y.y+1,
  9                                case when dbms_random.value <=1/2 then 1 else 0 end
10                           from y
11                          where y.child = 0
12                         )
13  --cycle n set x to 'Y' default 'N'
14  select sum(case when child = 1 then 1 end) boys,sum(case when child = 0 then 1 end) girls
15    from y
16  /
with t as (select level n from dual connect by level<=100000),
     y(n,y,child) as ( select n,
                              1,
                              case when dbms_random.value <=1/2 then 1 else 0 end
                         from t
                        union all
                       select y.n,
                              y.y+1,
                              case when dbms_random.value <=1/2 then 1 else 0 end
                         from y
                        where y.child = 0
                       )
--cycle n set x to 'Y' default 'N'
select sum(case when child = 1 then 1 end) boys,sum(case when child = 0 then 1 end) girls
  from y
ORA-32044: cycle detected while executing recursive WITH query

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
16#
发表于 2018-6-11 16:16 | 只看该作者

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期: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
17#
 楼主| 发表于 2023-5-6 01:09 | 只看该作者
咨询gpt4:
  1. <p>生男生女的概率</p><p>小孩小学时,班上男的21人,女的14人;</p><p>如果生男生女的概率就是3:2,国家就制定了这样的政策: 生了儿子就不允许再生;</p><p>生了女儿就可以一直生,直到出现儿子;</p><p>如果大家都执行这个政策,必须生到出现男孩为止;</p><p>那么从概率的角度来说,这种政策导致的最终的男女概率是多少?</p><p></p>
复制代码

gpt4j解答:

  1. <p>这个问题可以通过计算期望值来解决。我们使用以下符号表示概率:</p><p>
  2. </p><p>P(男) = 3/5</p><p>P(女) = 2/5</p><p>注意:这里的概率是指生男生女的固定比例,不是实际生男生女的概率。</p><p>
  3. </p><p>根据题意,每个家庭都会生到出现男孩为止。我们可以计算每种组合的概率:</p><p>
  4. </p><p>第一胎是男孩:</p><p>男孩的概率:3/5</p><p>第一胎是女孩,第二胎是男孩:</p><p>女孩的概率:2/5</p><p>男孩的概率:3/5</p><p>组合概率:2/5 * 3/5 = 6/25</p><p>前两胎是女孩,第三胎是男孩:</p><p>女孩的概率:2/5</p><p>女孩的概率:2/5</p><p>男孩的概率:3/5</p><p>组合概率:(2/5)^2 * 3/5 = 12/125</p><p>以此类推,我们可以得出无限等比数列求和公式来计算最终的男女概率。</p><p>
  5. </p><p>设 n 代表家庭中的男孩人数,m 代表家庭中的女孩人数。</p><p>
  6. </p><p>n = 1 * (3/5) + 1 * (6/25) + 1 * (12/125) + ...</p><p>
  7. </p><p>m = 0 * (3/5) + 1 * (6/25) + 2 * (12/125) + ...</p><p>
  8. </p><p>我们可以观察到 n 是一个等比数列求和,公差为 3/5,公比为 2/5,我们可以计算求和:</p><p>
  9. </p><p>n = (3/5) / (1 - 2/5) = 3/3 = 1</p><p>
  10. </p><p>同样地,m 也是一个等比数列求和,公差为 6/25,公比为 2/5,我们可以计算求和:</p><p>
  11. </p><p>m = (6/25) / (1 - 2/5) = 6/15 = 2/5</p><p>
  12. </p><p>所以最终的男女比例为:</p><p>
  13. </p><p>P(男) = n / (n + m) = 1 / (1 + 2/5) = 5/7</p><p>P(女) = m / (n + m) = 2/5 / (1 + 2/5) = 2/7</p><p>
  14. </p><p>在这种政策下,从概率的角度来说,最终的男女比例为 5:2。</p>
复制代码

继续咨询:
  1. 如果反过来,生了男孩就可以一直生,直到出现女儿;概率是多少
复制代码

它给的答案:
  1. <p>
  2. </p><p>这次我们需要计算的是每个家庭都会生到出现女孩为止的情况下的男女概率。我们依然可以使用期望值来解决这个问题。我们使用以下符号表示概率:</p><p>
  3. </p><p>P(男) = 3/5</p><p>P(女) = 2/5</p><p>根据题意,每个家庭都会生到出现女孩为止。我们可以计算每种组合的概率:</p><p>
  4. </p><p>第一胎是女孩:</p><p>女孩的概率:2/5</p><p>第一胎是男孩,第二胎是女孩:</p><p>男孩的概率:3/5</p><p>女孩的概率:2/5</p><p>组合概率:3/5 * 2/5 = 6/25</p><p>前两胎是男孩,第三胎是女孩:</p><p>男孩的概率:3/5</p><p>男孩的概率:3/5</p><p>女孩的概率:2/5</p><p>组合概率:(3/5)^2 * 2/5 = 18/125</p><p>以此类推,我们可以得出无限等比数列求和公式来计算最终的男女概率。</p><p>
  5. </p><p>设 n 代表家庭中的男孩人数,m 代表家庭中的女孩人数。</p><p>
  6. </p><p>n = 0 * (2/5) + 1 * (6/25) + 2 * (18/125) + ...</p><p>
  7. </p><p>m = 1 * (2/5) + 1 * (6/25) + 1 * (18/125) + ...</p><p>
  8. </p><p>我们可以观察到 m 是一个等比数列求和,公差为 2/5,公比为 3/5,我们可以计算求和:</p><p>
  9. </p><p>m = (2/5) / (1 - 3/5) = 2/2 = 1</p><p>
  10. </p><p>同样地,n 也是一个等比数列求和,公差为 6/25,公比为 3/5,我们可以计算求和:</p><p>
  11. </p><p>n = (6/25) / (1 - 3/5) = 6/10 = 3/5</p><p>
  12. </p><p>所以最终的男女比例为:</p><p>
  13. </p><p>P(男) = n / (n + m) = 3/5 / (3/5 + 1) = 3/8</p><p>P(女) = m / (n + m) = 1 / (3/5 + 1) = 5/8</p><p>
  14. </p><p>在这种政策下,从概率的角度来说,最终的男女比例为 3:5。</p>
复制代码


使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期: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
18#
 楼主| 发表于 2023-5-6 01:19 | 只看该作者


这个问题可以通过计算期望值来解决。我们使用以下符号表示概率:
P(男) = 3/5
P(女) = 2/5
注意:这里的概率是指生男生女的固定比例,不是实际生男生女的概率。
根据题意,每个家庭都会生到出现男孩为止。我们可以计算每种组合的概率:
第一胎是男孩:
男孩的概率:3/5
第一胎是女孩,第二胎是男孩:
女孩的概率:2/5
男孩的概率:3/5
组合概率:2/5 * 3/5 = 6/25
前两胎是女孩,第三胎是男孩:
女孩的概率:2/5
女孩的概率:2/5
男孩的概率:3/5
组合概率:(2/5)^2 * 3/5 = 12/125
以此类推,我们可以得出无限等比数列求和公式来计算最终的男女概率。
设 n 代表家庭中的男孩人数,m 代表家庭中的女孩人数。
n = 1 * (3/5) + 1 * (6/25) + 1 * (12/125) + ...
m = 0 * (3/5) + 1 * (6/25) + 2 * (12/125) + ...
我们可以观察到 n 是一个等比数列求和,公差为 3/5,公比为 2/5,我们可以计算求和:
n = (3/5) / (1 - 2/5) = 3/3 = 1
同样地,m 也是一个等比数列求和,公差为 6/25,公比为 2/5,我们可以计算求和:
m = (6/25) / (1 - 2/5) = 6/15 = 2/5
所以最终的男女比例为:
P(男) = n / (n + m) = 1 / (1 + 2/5) = 5/7
P(女) = m / (n + m) = 2/5 / (1 + 2/5) = 2/7
在这种政策下,从概率的角度来说,最终的男女比例为 5:2。







如果反过来,生了男孩就可以一直生,直到出现女儿;概率是多少?


这次我们需要计算的是每个家庭都会生到出现女孩为止的情况下的男女概率。我们依然可以使用期望值来解决这个问题。我们使用以下符号表示概率:

P(男) = 3/5
P(女) = 2/5
根据题意,每个家庭都会生到出现女孩为止。我们可以计算每种组合的概率:

第一胎是女孩:
女孩的概率:2/5
第一胎是男孩,第二胎是女孩:
男孩的概率:3/5
女孩的概率:2/5
组合概率:3/5 * 2/5 = 6/25
前两胎是男孩,第三胎是女孩:
男孩的概率:3/5
男孩的概率:3/5
女孩的概率:2/5
组合概率:(3/5)^2 * 2/5 = 18/125
以此类推,我们可以得出无限等比数列求和公式来计算最终的男女概率。

设 n 代表家庭中的男孩人数,m 代表家庭中的女孩人数。

n = 0 * (2/5) + 1 * (6/25) + 2 * (18/125) + ...

m = 1 * (2/5) + 1 * (6/25) + 1 * (18/125) + ...

我们可以观察到 m 是一个等比数列求和,公差为 2/5,公比为 3/5,我们可以计算求和:

m = (2/5) / (1 - 3/5) = 2/2 = 1

同样地,n 也是一个等比数列求和,公差为 6/25,公比为 3/5,我们可以计算求和:

n = (6/25) / (1 - 3/5) = 6/10 = 3/5

所以最终的男女比例为:

P(男) = n / (n + m) = 3/5 / (3/5 + 1) = 3/8
P(女) = m / (n + m) = 1 / (3/5 + 1) = 5/8

在这种政策下,从概率的角度来说,最终的男女比例为 3:5。








使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
19#
发表于 2023-5-9 09:54 | 只看该作者
楼上是怎么连上chatgpt4的?是用 bing 吗?
话说这个政策,以前确实有专家提出过建议,叫做“生男即止”政策,后来被否决了,因为确实会加剧性别失衡。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表