组合数学 错排问题【装错信封问题】【递归】

小编 2026-07-08 阅读:761 评论:0
n个人,每个人都有一件礼物想送给他人,他们决定把礼物混在一起,然后每个人随机拿走一件,问恰好有m个人拿到的礼物恰好是自己的概率是多少? 输出结果保留8位小数,为了保证精度,我们用字符串作为返回类型。 输入:...

n个人,每个人都有一件礼物想送给他人,他们决定把礼物混在一起,然后每个人随机拿走一件,问恰好有m个人拿到的礼物恰好是自己的概率是多少? 输出结果保留8位小数,为了保证精度,我们用字符串作为返回类型。 输入:n,m (0<n<100, 0<=m<=n) 例如: n = 2,m = 1,输出:0.00000000; n = 99,m = 0,输出:0.36787944 ......
注:上述题目来源http://club.csdn.net/module/club/student/programming_challenges

分析:

n个人的排列数是n的阶乘n!,随机选取m个人作为拿到自己礼物的一组,有Cnm种方法,假设用D(n-m)表示剩下的n-m个人全部拿错的方法数,那么答案就是:

D(n-m)*Cnm/n!.

问题是D(n-m)如何计算呢?

这个涉及到组合数学里面的错排问题。先看下面的例题。

(下面的资料来源:http://blog.csdn.net/fisher_jiang/article/details/2493805)

组合学中有这样一个问题:某人给五个朋友写信,邀请他们来家中聚会。请柬和信封交由助手去处理。

粗心的助手却把请柬全装错了信封。请问:助手会有多少种装错的可能呢?

这个问题是是由当时有名的数学家约翰·伯努利(Johann Bernoulli,1667—1748)的儿子

丹尼尔·伯努利(Danid Bernoulli,17OO一1782)提出来的。

瑞士著名数学家欧拉按一般情况给出了一个递推公式

D(n) = (n-1) [D(n-2) + D(n-1)]

特殊地,D(1) = 0, D(2) = 1.

例题:

    用A、B、C……表示写着n位友人名字的信封,a、b、c……表示n份相应的写好的信纸。把错装的总数为记作D(n)。假设把a错装进B里了,包含着这个错误的一切错装法分两类:

(1)b装入A里,这时每种错装的其余部分都与A、B、a、b无关,应有D(n-2)种错装法。    

(2)b装入A、B之外的一个信封,这时的装信工作实际是把(除a之外的)n-1份信纸b、c……装入(除B以外的)n-1个信封A、C……,显然这时装错的方法有D(n-1)种。

总之在a装入B的错误之下,共有错装法D(n-2)+D(n-1)种。

a装入C,装入D……的n-2种错误之下,同样都有D(n-1)+D(n-2)种错装法,因此D(n)=(n-1)[D(n-1)+D(n-2)]

  这是递推公式,令n=1、2、3、4、5逐个推算就能解答蒙摩的问题。

    D(1)=0,D(2)=1,D(3)=2,D(4)=9,D(5)=44

答案是44种。

关于错排公式,可以参考百度百科的详细解释:

http://baike.baidu.com/link?url=HXwg_a83XxbwAMjVLaEOvLJgCA7HxurXM17dDeDbbeae3bsl1kT0BYm0YeZBcx49

也可以参考维基百科的解释:

http://zh.wikipedia.org/wiki/%E9%94%99%E6%8E%92%E9%97%AE%E9%A2%98

\"\"

\"\"

所以:真正编程时应考虑采用错排公式直接求解,最好不要用递推公式求解,否则在效率上可能会大打折扣。

来自大佬博客

http://www.cnblogs.com/huashanqingzhu/p/3524551.html

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表