组合数学中将物体放入盒子中的四种情况

news/2024/5/20 6:03:14 标签: 聚类, 机器学习, 算法

在实现生活中, 如何将物体分配到盒子里面是一个非常普通且常见的一个问题。
要解决这个问题需要考虑几种清空。
首先我们把这个问题分成四个类别的的问题。

  1. 将不同的物体分配到不同的盒子中

  2. 将相同的物体分配到不同的盒子中

  3. 将不同的物体分配到相同的盒子中

  4. 将相同的物体分配到相同的盒子中

将不同的物体分配到不同的盒子中

  • 举例:如果将52张扑克开(一套扑克牌)分配给4个玩家, 每人5张牌。
    有多少种分配方法?

  • 解答:这个问题就是典型的将不同的物体分配到不同的盒子中的问题。
    要解决这个问题其实很简单, 只需要采用乘法原理即可。采用五个步骤,
    第一步分配给第一个玩家, 第二步分配给第二个玩家, 并以此类推。

    ( 52 5 ) ( 47 5 ) ( 42 5 ) ( 37 5 ) = 52 ! 5 ! 5 ! 5 ! 5 ! 32 ! \binom{52}{5}\binom{47}{5}\binom{42}{5}\binom{37}{5}=\frac{52!}{5!5!5!5!32!} (552)(547)(542)(537)=5!5!5!5!32!52!

  • 总结:将n个不同的物体分配给k个不同盒子,
    并且每一个盒子分配得到的数量是 n i , i = 1 , 2 , ⋯   , k n_i, i=1,2,\cdots, k ni,i=1,2,,k.
    分配方案的个数是 n ! n 1 ! n 2 ! ⋯ n k ! \frac{n!}{n_1!n_2! \cdots n_k!} n1!n2!nk!n!

将相同的物体分配到不同的盒子中

  • 举例:对于算式 a + b + c + d = 10 , a , b , c , d ∈ N a+b+c+d = 10, a,b,c,d\in \mathbb{N} a+b+c+d=10,a,b,c,dN. 请问 a , b , c , d a,b,c,d a,b,c,d
    有多少种不同的取值?

  • 解答: 这个问题相当于用隔板去把10个1, 分割来开。
    隔板的数量是3就可以了。 注意这里不能用插入, 插入会造成重复。
    而是选择隔板的位置。 从10+3个位置中选择3个位置的隔板。

    ( 13 3 ) = ( 10 + 4 − 1 4 − 1 ) \binom{13}{3}=\binom{10+4-1}{4-1} (313)=(4110+41)

  • 总结:将n个相同的物体分配到r个不同的盒子中,总的分配方案是

    ( n + r − 1 r − 1 ) \binom{n+r-1}{r-1} (r1n+r1)

将不同的物体分配到相同的盒子中

虽然看起来这个问题比较简单, 但是这个问题比前面两个问题都要复杂得多。
这个问题没有一个统一的公式。 因为包含很多种情况。 比如只放在一个盒子里,
只放在两个盒子里面, 等等。这其中, 每个盒子不为空的情况有统一公式,
这个公式在机器学习中的应用就是聚类。 把n个不同的物体聚成4类,
这四个类别其实就是4个相同的盒子。但是这个问题有一个要求及时每个盒子不能为空,
否则不能聚为一个类别。这个问题的答案其实就是第二类的Stirling数。

n个不同的对象分到k个相同的盒子里面, 要求每个盒子至少有一个对象.
有多少种分法. 这是在k均值聚类里面的一个组合数学问题.
在k均值聚类里面有n个对象各不相同,
要把这个n个对象分到k个类别里面并要求每个类别必须至少含有一个对象.
总共的分法有多少中? 这道题的答案是第二类的stirling number.
我们来看看如何来求解.我们把原问题定义为 P ( n , k ) P(n,k) P(n,k)

初探

如果将n个不同的对象放到k个不同的盒子里面总共有多少种方法?
这个问题不再限制每个盒子必须含有一个对象. 我们定义这个事件为 S S S,答案是
∣ S ∣ = k n |S|=k^n S=kn

接下来,
我们再来定义特殊的几个事件.我们先假设盒子各不相同并且有 k k k个盒子.
A i A_i Ai表示第 i , ( 1 ⩽ i ⩽ k ) i, (1\leqslant i\leqslant k) i,(1ik)个盒子是空的事件.
那么,我们定义下面一个事件

S n , k = A ‾ 1 ∩ A ‾ 2 ∩ ⋯ ∩ A ‾ k S_{n,k}=\overline{A}_1\cap \overline{A}_2 \cap \cdots \cap \overline{A}_k Sn,k=A1A2Ak

事件 S n , k S_{n,k} Sn,k表示, k k k个盒子都非空.

∣ S n , k ∣ = ∣ S ∣ − ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A k ∣ |S_{n,k}|=|S|-|A_1\cup A_2\cup \cdots \cup A_k| Sn,k=SA1A2Ak

如果我们能够计算出 ∣ S n , k ∣ |S_{n,k}| Sn,k那么 P ( n , k ) = 1 k ! ∣ S n , k ∣ P(n,k)=\frac{1}{k!}|S_{n,k}| P(n,k)=k!1Sn,k

容斥原理

现在我们剩下的唯一目的就是计算 ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A k ∣ |A_1\cup A_2\cup \cdots \cup A_k| A1A2Ak.
而这个集合可以使用容斥原理来计算

∣ A 1 ∪ A 2 ∪ ⋯ ∪ A k ∣ = ∑ i = 1 k ∣ A i ∣ − ∑ i ≠ j k ∣ A i ∩ A j ∣ + ∑ i ≠ j ≠ h k ∣ A i ∩ A j ∩ A h ∣ + ⋯ + ( − 1 ) k ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A k ∣ |A_1\cup A_2\cup \cdots \cup A_k| = \sum_{i=1}^{k}|A_i|-\sum_{i\neq j}^k|A_i\cap A_j|+\sum_{i\neq j \neq h}^{k}|A_i\cap A_j\cap A_h|+\cdots+ (-1)^k|A_1\cap A_2\cap \cdots \cap A_k| A1A2Ak=i=1kAii=jkAiAj+i=j=hkAiAjAh++(1)kA1A2Ak

∣ A 1 ∪ A 2 ∪ ⋯ ∪ A k ∣ = ( k 1 ) ( k − 1 ) n − ( k 2 ) ( k − 2 ) n + ( k 3 ) ( k − 3 ) n + ⋯ + ( − 1 ) k − 1 ( k k ) ( k − k ) n |A_1\cup A_2\cup \cdots \cup A_k|=\binom{k}{1}(k-1)^n-\binom{k}{2}(k-2)^n+\binom{k}{3}(k-3)^n+\cdots + (-1)^{k-1}\binom{k}{k}(k-k)^n A1A2Ak=(1k)(k1)n(2k)(k2)n+(3k)(k3)n++(1)k1(kk)(kk)n

最后可得

∣ S n , k ∣ = ∣ S ∣ − ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A k ∣ = ( k 0 ) ( k − 0 ) n − ( k 1 ) ( k − 1 ) n + ( k 2 ) ( k − 2 ) n + ( k 3 ) ( k − 3 ) n + ⋯ + ( − 1 ) k ( k k ) ( k − k ) n = ∑ i = 0 k ( k i ) ( − 1 ) i ( k − i ) n \left. \begin{aligned} |S_{n,k}|&=|S|-|A_1\cup A_2\cup \cdots \cup A_k|\\ &=\binom{k}{0}(k-0)^n-\binom{k}{1}(k-1)^n+\binom{k}{2}(k-2)^n+\binom{k}{3}(k-3)^n+\cdots + (-1)^{k}\binom{k}{k}(k-k)^n\\ &=\sum_{i=0}^{k}\binom{k}{i}(-1)^i(k-i)^n \end{aligned} \right. Sn,k=SA1A2Ak=(0k)(k0)n(1k)(k1)n+(2k)(k2)n+(3k)(k3)n++(1)k(kk)(kk)n=i=0k(ik)(1)i(ki)n

最后得到第二类stirling number为

P ( n , k ) = 1 k ! ∣ S n , k ∣ = 1 k ! ∑ i = 0 k ( k i ) ( − 1 ) i ( k − i ) n P(n,k)=\frac{1}{k!}|S_{n,k}|=\frac{1}{k!}\sum_{i=0}^{k}\binom{k}{i}(-1)^i(k-i)^n P(n,k)=k!1Sn,k=k!1i=0k(ik)(1)i(ki)n

总结

至此, 我们可以最终得到我们原问题的答案

∑ r = 1 k P ( n , r ) \sum_{r=1}^{k}P(n,r) r=1kP(n,r)

即分成好几种情况进行处理, 每一种是一个Stirling Number。

将相同的物体分配到相同的盒子中

这个问题其实也没有一个简单的统一公式,我们把这个问题的解设为 H ( n , k ) H(n,k) H(n,k),
即把n个相同的物体分配给k个相同的盒子. 这个问题也是要分情况考虑的,
比如所有的对象放到一个,两个, 三个, 等等,
并且每一个盒子非空。我们用 W ( n , k ) W(n, k) W(n,k)来表示将n个相同的物体放倒k相同的盒子中,
并且每个盒子非空。那么原问题就等于

H ( n , k ) = ∑ r = 1 k W ( n , r ) H(n,k)=\sum_{r=1}^{k}W(n,r) H(n,k)=r=1kW(n,r)

那么, 这个问题转为话求 W ( n , r ) W(n,r) W(n,r).

W ( n , r ) = ∑ j = 1 r W ( n − r , j ) = H ( n − r , r ) W(n,r)=\sum_{j=1}^{r}W(n-r,j)=H(n-r, r) W(n,r)=j=1rW(nr,j)=H(nr,r)

这是因为,
每一个盒子分走一个之后剩下的就只有 n − r n-r nr个物体。然后剩下这 n − r n-r nr个物体再考虑以下情况,
非空的放入 1 1 1个盒子, 2 2 2个盒子, ⋯ \cdots , r r r个盒子。
:::


http://www.niftyadmin.cn/n/1571578.html

相关文章

三门问题(一个有趣的概率题)

::: CJK UTF8gbsn 三门问题是一个十分有趣的问题。 它讲述的是这样一个问题。 假如有一档节目。 节目里面有设置有三道门, 其中一道门里面有奖品。 主持人会让你选一道门。当你做出选择之后, 主持人会将你没有选择的两扇门中选择一个空门打开&#xff0…

解线性方程组的各种情况

解线性方程组的各种情况讨论。本文主要介绍解线性方程组的各种情况以及解的情况。已知线性方程组的形式如下 AxbAxbAxb 其中AAA是一个mnm\times nmn矩阵。根据AAA的性质, 解的情况有好几种。根据n,mn,mn,m之间的大小, 我们可以把AAA矩阵分为三种情况 mn…

两个不相交的闭集并不能保证两个集合可分

首先, 我们重申以下闭集的定义。如果一个集合的聚点都属于这个集合本身吗,那么这个集合是一个闭集。 比如[0,1][0,1][0,1]就是一个闭集,而(0,1](0,1](0,1]就不是。 接下来, 我们再来定义两个集合是否可分。首先我们要明确的一点…

如果{Eₙ}都是可测集,且他们处处收敛于E. 那么E也是可测集.

NOTE: 所谓集合的处处收敛,是说得他们的特征函数处处收敛. 证明: 首先, 定义在 EEE 上的可测函数序列,如果几乎处处收敛收敛于一个函数fff, 则这个函数fff也是可测函数。由1可得EEE的特征函数也是可测的。其次, 一个集合的特征函…

QQ校友相熟度怎么计算

今天七叶草无意中打开QQ校友录,发现右侧有个QQ校友相熟度,不同的人相熟度有所差别。七叶草感觉很好奇啊,这个相熟度是怎么计算的,有什么固定的原则么?利用百度搜索QQ校友相熟度的计算方法,搜索到一些结果&a…

C++标准库简介

C标准库的所有头文件都没有扩展名。C标准库的内容总共在50个标准头文件中定义&#xff0c;其中18个提供了C库的功能。 <cname>形式的标准头文件【 <complex>例外】其内容与ISO标准C包含的name.h头文件相同&#xff0c;但容纳了C扩展的功能。在 <cname>形式标…

舍弃浮躁, 50条重要的C++学习建议

1.把C当成一门新的语言学习&#xff08;和C没啥关系&#xff01;真的&#xff09;&#xff1b;  2.看《Thinking In C》&#xff0c;不要看《C变成死相》&#xff08;C编程思想&#xff0c;翻译的非常差&#xff09;&#xff1b;   3.看《The C Programming Language》&#…

MATLAB中mexFunction函数的接口规范

原文地址&#xff1a;MATLAB中mexFunction函数的接口规范作者&#xff1a;wennaisongvoid mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])nlhs&#xff1a;输出参数数目 plhs&#xff1a;指向输出参数的指针 nrhs&#xff1a;输入参数数目 例如&…