zoukankan      html  css  js  c++  java
  • 经典组合数学模型:盒子与球问题

    浅谈组合数学:盒子与球问题

    前言

    • 组合数学也是数学中一个比较重要的分支,而其中最经典的模型莫过于盒子与球问题。

    问题

    • 按照球是否不同,盒子是否不同,盒子是否允许为空,大致可以分为 (2^3),也就是 (8) 种问题。
    1. 给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?((A))
    2. 给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?((B))
    3. 给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?((C))
    4. 给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?((D))
    5. 给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?((E))
    6. 给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?((F))
    7. 给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?((G))
    8. 给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?((H))

    解法

    • 因为有些题目之间是有相互联系的,所以我们按照题目的难易程度顺序讲。
    • 丢个索引:A,B,C,D,E,F,G,H,
    • A :给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?

      对于每一个球,都有 (M) 种选择,所以答案即为 (M^N)

    • F :给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?

      经典隔板法问题,可以转化为:在 (N) 个球之间的 (N-1) 个间隙中选择 (M-1) 个位置将其分成 (M) 份,组合数直接求解。答案即为 (C_{N-1}^{M-1})

    • E :给定 (N) 个相同的球,放进 (M) 个不同的盒子,盒子允许为空,有多少种方案?

      (F) 题类似,只不过盒子允许为空,那么这个时候我们可以假设每个盒子里都已经放了一个球,这个时候实际上就有 (N+M) 个球了,类似的,我们再次使用隔板法。对于每一种方案,我们就可以想象成每个空隙右边的第一个球是提前放好在盒子里的,如果将这个球省略,正好就是盒子允许为空的一种方案。故答案即为 (C_{N+M-1}^{M-1})

    • G :给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?

      (f[n][m]) 表示将 (n) 个球放到 (m) 个盒子里的方案数。我们可以分两种情况来考虑:1.有一个盒子不放球的情况,那么答案就是 (f[n][m-1])。2.所有的盒子都放一个球,那么答案就是 (f[n-m][m])。根据加法原理,我们可以得到递推式:(f[n][m]=f[n][m-1]+f[n-m][m],m=min(m,n))。边界:(f[0][m]=1,f[n][1]=1)

    • H :给定 (N) 个相同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?

      每个盒先放一个球,然后就可以变成问题 (G)。答案:(0quad(N<M)) 或者 (f[N-M][M])

    • D :给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子不允许为空,有多少种方案?

      (f[n][m]) 表示将 (n) 个球放到 (m) 个盒子里的方案数。那么对于第 (n) 个球,则有两种选择:1.其单独放在一个盒子里,那么答案就是 (f[n-1][m-1])。2.其和其他的球共用一个盒子,因为有 (m) 个盒子可以选择,那么答案就为 (m imes f[n-1][m])。实际上这就是第二类斯特林数。根据加法原理,递推式为 (f[n][m]=f[n-1][m-1]+mcdot f[n-1][m])。边界:if(m==n||m==1) return 1

    • C :给定 (N) 个不同的球,放进 (M) 个相同的盒子,盒子允许为空,有多少种方案?

      (D) 类似,分别考虑有 (0sim M-1) 个盒子为空的情况,那么答案就为 (sum_{i=1}^nf[n][i])

    • B :给定 (N) 个不同的球,放进 (M) 个不同的盒子,盒子不允许为空,有多少种方案?

      (D) 题类似,假如我们现在已经得到了将 (N) 个不同的球放进 (M) 个相同的盒子里的方案,那么实际上由于盒子是不同的,那么还需要对盒子进行排序,(因为盒子有异,所以交换两个盒子的顺序算不同的方案),乘上 (M) 的阶乘即可。

    ——2021年2月9日

    靡不有初,鲜克有终
  • 相关阅读:
    记忆化搜索 E
    网络流 O
    线段树 B数据结构 牛客练习赛28
    N
    线段树 G
    K
    F
    补一下昨天的博客 J
    selenium-1-python
    selenium入门知识
  • 原文地址:https://www.cnblogs.com/pycr/p/14392407.html
Copyright © 2011-2022 走看看