求m个球随机放入n个固定容量c的urn发生溢出的精确解析概率
嘿,我来帮你推导这个问题的精确解析解——毕竟渐近结果虽然好用,但有时候我们就是需要准确的数值对吧?
核心思路很简单:先算没有溢出的概率(所有urn里的球数都≤c-1),再用1减去这个值就是溢出概率了。下面分两种最常见的场景(球可区分/不可区分)来细说:
场景1:球是可区分的(每个球独立选urn,均匀随机)
这种情况下,总共有 ( n^m ) 种可能的分配方式。我们可以用生成函数或者容斥原理来算无溢出的分配数:
生成函数法(更简洁)
每个urn最多放c-1个球,对应的指数生成函数(EGF)是:
[
f(x) = \sum_{t=0}^{c-1} \frac{x^t}{t!}
]
n个urn的联合EGF就是 ( f(x)^n ),无溢出的分配数等于 ( m! ) 乘以这个多项式里 ( x^m ) 的系数,也就是:
[
N_{\text{no overflow}} = m! \cdot [x^m] \left( \sum_{t=0}^{c-1} \frac{x^t}{t!} \right)^n
]
这里的 ( [x^m] ) 就是取 ( x^m ) 项的系数的意思。
那无溢出概率就是这个数除以总分配数 ( n^m ),溢出概率直接用1减就行:
[
P_{\text{overflow}} = 1 - \frac{m!}{n^m} \cdot [x^m] \left( \sum_{t=0}^{c-1} \frac{x^t}{t!} \right)^n
]
容斥原理法(更直观)
用容斥来排除“至少k个urn溢出”的情况:
[
N_{\text{no overflow}} = \sum_{k=0}^{\lfloor m/c \rfloor} (-1)^k \binom{n}{k} \sum_{s=kc}^m \binom{m}{s} \frac{s!}{(c!)^k (s - kc)!} (n - k)^{m - s}
]
简单解释一下:k代表我们指定k个urn必须溢出(每个至少c个球),先从n个urn里选k个,然后计算把s个球(s≥kc)分到这k个urn里(每个至少c个),剩下的m-s个球随便分到剩下的n-k个urn里的方式数,再用容斥的正负号调整。
同样,无溢出概率是这个数除以 ( n^m ),溢出概率=1-无溢出概率。
场景2:球是不可区分的(用隔板法计数)
这种情况总分配数是经典的隔板法结果:
[
N_{\text{total}} = \binom{m + n - 1}{n - 1}
]
无溢出的分配数就是满足 ( \sum_{i=1}^n k_i = m ) 且每个 ( k_i ≤ c-1 ) 的非负整数解的数目,用容斥算的话是:
[
N_{\text{no overflow}} = \sum_{k=0}^{\lfloor m/c \rfloor} (-1)^k \binom{n}{k} \binom{m - kc + n - 1}{n - 1}
]
如果m - kc < 0,那对应的项直接取0就行。
无溢出概率就是这个数除以总分配数,溢出概率还是1减它:
[
P_{\text{overflow}} = 1 - \frac{\sum_{k=0}^{\lfloor m/c \rfloor} (-1)^k \binom{n}{k} \binom{m - kc + n - 1}{n - 1}}{\binom{m + n - 1}{n - 1}}
]
几个特殊情况验证一下
- 当 ( m < c ):每个urn最多放m个球,肯定不会溢出,概率为0,公式完全符合。
- 当 ( m ≥ nc ):所有urn都放满c个球还剩球,必然有urn溢出,概率为1,也对。
- 举个小例子:n=2,c=2,m=3(可区分球):无溢出的分配数是0,所以溢出概率=1,和实际情况一致(3个球放2个urn,至少有一个urn≥2个球)。
内容的提问来源于stack exchange,提问作者seba




