首页 > 其他分享 >『置顶』组合数学

『置顶』组合数学

时间:2023-08-04 21:00:58浏览次数:39  
标签:盒子 组合 sum 数学 dp 为空 binom 置顶

排列组合

从 $n$ 个互不相同的球里选出 $m$ 个,顺序有影响则称为排列,没有影响则称为组合。

$P_n^m$ 表示排列的方案数,$C_n^m$ 表示组合的方案数。其中 $C_{n}^m$ 也可表示为 $\binom nm$,$P_n^m$ 在数值上与 $n^{\underline m}$(下降幂)相等。

  • 我们以下认为 $P_n^m$ 用阶乘表示,下降幂用连乘表示。此外,组合数只考虑整数域。

  • 由于 $m\ge n$ 时 $C_n^m=0$,所以涉及组合数的求和可以不写边界。

求 $P_n^m$ 是简单乘法原理:第一步可以取 $m$ 种,第二步可以取 $m-1$ 种 $\dots$。所以 $Pm_n=\prod\limits_{i=n-m+1}n i$。乘除同补,得到 $P_{n}m=n=\frac{n!}{(n-m)!}$。

考虑求 $C_n^m$,唯一的区别在于顺序无关,所以取出的 $m!$ 种顺序视为一种方案。因此 $C_n^m=\frac{n!}{m!(n-m)!}$。

更一般的,$\binom nm=\frac{n^{\underline m}}{m!}$。

不过,方便起见,认为 $m\ge 0$,且 $n,m$ 均为整数。

二项式定理

$\large(x+y)n=\sum\limits_{i=0}n\binom nixiy$。

感性理解,就相当于 $n$ 个 $(x+y)$,从中取 $0\dots n$ 个 $x$,其余的取 $y$。对于负指系数的情况,在生成函数那里有,不做赘述。值得注意的是其矩阵表示。

$$

(x+y)n=\begin{bmatrix}a0&a1&\dots&an\end{bmatrix}\begin{bmatrix}\binom n0\&\ddots\&&\binom nn\end{bmatrix}\begin{bmatrix}&&1\&\dots\1\end{bmatrix}\begin{bmatrix}b0\b1\\vdots\b^n\end{bmatrix}

$$

头尾两个矩阵很好理解。中间有一个组合数式矩阵也很好。第三项是单位矩阵反过来,相当于乘法中的 $-1$ 项,作用是将 $a$ 翻转一遍,使得 $a_i$ 与 $b_{n-i}$ 而非 $b_i$ 匹配。

二项式反演

容斥原理

很简单,不多说。最经典的就是求一堆集合的并,一加两减 $\dots$。

更进一步的,假设对于集合 $S$,$S_{ans}=|S|$,记 $f(n)$ 表示 $n$ 个集合补集的交集大小,$g(n)$ 表示原集交集大小,有:

  • $f(n)=\sum\limits_{i=0}(-1)^i\binom ni g(i)\iff g(n)=\sum\limits_{i=0}(-1)^i\binom nif(i)$。

从这个式子开始延伸。证明太长的话就不写了。

  1. $f(n)=\sum\binom nig(i)\iff g(n)=\sum(-1)^{n-i}\binom nif(i)$。令 $g(n)=(-1)^ng(n)$ 带回原始式得证。

  2. $f(n)=\sum\limits_{i=n}^m\binom ing(i)⇔g(n)=\sum\limits_{i=n}m(−1)\binom inf(i)$。左右互带得证。

我们考虑的过程中,都是从组合意义出发。从钦定 $k$ 个的方案容斥出恰好 $k$ 个,二项式系数在其中作用就是决定钦定的是哪 $k$ 个。

组合数的神奇式子

杨辉三角

首先我们要知道组合递推式:$C_{n}m=C_{n-1}+C_{n-1}^m$。从 dp 角度考虑,就是我们第 $n$ 个物品选与不选的决策。将数组中非零的项左对齐写下来,得到的三角形即杨辉三角。


  • $C_{n}m=C_{n}$。选原集和选补集的方案等价。

  • $C_{n}m=C_{n-1}m+C_{n-1}^{m-1}$。在组合数两维均不大的时候,我们可以直接利用这个预处理,常数极小。

  • $(n+1)C_nm=(m+1)C_{n+1}$。把 $n+1$ 乘进 $n!$,分母强凑组合数。

  • $C_{n}^m=\frac nmC_{n-1}^{m-1}$。利用上一个式子得到的结果。

  • $\sum C_{n}i=2n$。从组合数定义上考虑,共有 $2^n$ 种集合。用二项式定理证,是 $(1+1)^n$ 的展开形式。

  • $\sum C_{n}^{2i}=\sum C_{n}^{2i+1}(n\neq 0)$。两侧相减,变成二项式定理 $(1-1)^n$ 的展开形式。特例是 $x^0=1$。

  • $C_{n}^m\times C_{m}k=C_{n}k\times C_{n-k}^{m-k}$。代数式依旧暴力拆开,组合意义上,我们先选出 $m$ 个,从中挑出 $k$ 个等价于先挑出 $k$ 个,再从剩下的选出 $m-k$ 个。

  • $\sum\limits_{i=0}^k C_ni=C_{n+1}$。从杨辉三角的递推上看,每个位置都会对右下总体产生贡献,其中等于总贡献的就是右下一格的位置。

  • $\sum\limits_{i=0}^k \binom ni\binom m{k-i}=C_{n+m}^k$。从组合意义上考虑,相当于从 $n$,$m$ 两堆共取 $k$ 个物品,枚举其中一堆取了多少个。

这个式子配合 $\binom ni=\binom n{n-i}$ 食用,可以得到一些非常有趣的式子:

  • $C_{2n}^{n+1}=\sum\binom ni\binom n{i+1}$。将其中一个变一下就是了。
  • $C_{2n}^n=\sum\binom ni^2$。(和上一个相减就是卡特兰数)
  • $\sum\binom ni\binom mi=C_{n+m}^m$。

第二类斯特林数(Stirling)

在讲述这个问题前,我们先看八个古老的问题,均要求方案数:

  1. 将 $n$ 个不同的球放入 $m$ 个不同盒子,可以为空。

每个球相互独立,$n^m$。

  1. 将 $n$ 个不同的球放入 $m$ 个不同盒子,不能为空。

钦定 $k$ 个盒子为空,拿上一问结论容斥即可。但还有一种策略,稍后讲。

  1. 将 $n$ 个相同的球放入 $m$ 个不同盒子,不能为空。

等价于 $a_1+\dots+a_m=n$ 的正整数解,插板即可。也可以生成函数+二项式定理推,结果一样。

  1. 将 $n$ 个相同的球放入 $m$ 个不同盒子,可以为空。

等价于上一问的自然数解。

  1. 将 $n$ 个相同的球放入 $m$ 个相同盒子,可以为空。

显然可以 dp,做法略。另一种思路是对每个盒子构造生成函数。类似于代码拍卖会,我们一层一层放,即前 $m$ 个盒子放入 $0\ldots n$ 个球,前 $m-1$ 个盒子再放入 $0\ldots n$,以此类推。最后答案就是 $x^n$ 项系数。等比求和后是分式的形式,多项式乘法逆解决。

  1. 将 $n$ 个相同的球放入 $m$ 个相同盒子,不能为空。

先在每个盒子各放一个球,转化为 $(n-m,m)$ 的上一问。

  1. 将 $n$ 个不同的球放入 $m$ 个相同盒子,可以为空。

  2. 将 $n$ 个不同的球放入 $m$ 个相同盒子,不能为空。

这两问统一处理。$dp_{i,j}$ 表示已经用了 $i$ 个球、$j$ 个盒子的方案数。新增一个球可以放进之前的盒子,也可以另开一个盒子。所以 $dp_{i,j}=dp_{i-1,j-1}+j\times dp_{i-1,j}$。

对于第 8 问,答案即为 $dp_{n,m}$,对于第 7 问,答案为 $dp_{n,0\dots m}$ 之和。

此外,我们发现,第二问本质上是 $dp_{n,m}\times m!$。(盒子有无编号区别)

第八问的结果也称为第二类斯特林数,记作 $S_n^m$,也可以记作 $n\brace m$(第一类斯特林数是 $n\brack m$)。

第二类斯特林的递推公式 $S_nm=S_{n-1}+mS_{n-1}^m$。

根据第二问的结果容斥形式列出等式:

$$m!S_{n}m=\sum_{k=0}m(-1)^k\binom mk(m-k)^n$$

看到 $(-1)^k\binom mk$,可以猜出这东西能反演。不过暂时长的不像反演形式,我们继续推。

$$=\sum_{k=0}m(-1)k\binom m{m-k}(m-k)n\=\sum_{k=0}m(-1)^{m-k}\binom m{k}k^n$$

记 $f(x)=x!S_nx,g(x)=xn$。

$$f(m)=\sum_{k=0}m(-1)\binom mkg(k)$$

回看二项式反演形式一:

$$f(n)=\sum\binom nig(i)\iff g(n)=\sum(-1)^{m-i}\binom nif(i)$$

所以 $g(m)=\sum \binom mif(i)=\sum \binom mi{n\brace i}i!=m^n$。

所以我们得到第二类斯特林数一个很重要的式子:

$$

m^n=\sum

\binom mi{n\brace i }i!

$$

以及它的通项公式

$$

S_n^m=\frac 1{m!}\sum(-1)^{m-k}\binom mkkn\=\sum_{k=0}m\frac{(-1){m-k}}{(m-k)!}\frac{kn}{k!}

$$

这是一个裸的卷积。$k^n$ 由线性筛处理,总复杂度 $O(m\log m)$。

标签:盒子,组合,sum,数学,dp,为空,binom,置顶
From: https://www.cnblogs.com/DreamerBoy/p/17607027.html

相关文章

  • 线性方程组数学原理、矩阵原理及矩阵变换本质、机器学习模型参数求解相关原理讨论
    线性方程组数学原理、矩阵原理及矩阵变换本质、机器学习模型参数求解相关原理讨论1.线性方程组0x1:无处不在的线性方程组日常生活或生产实际中经常需要求一些量,用未知数x1,x2,....,xn表示这些量,根据问题的实际情况列出方程组,而最常见的就是线性方程组(当然并不......
  • MFC-数学函数
     sin正弦函数FLOATpi=3.1415926;FLOATf=sin(pi/2);//正弦函数/*参数:FLOAT以弧度为单位返回值:FLOAT*/       ......
  • 通过华为杯竞赛、高教社杯和数学建模国赛实现逆袭;助力名利双收
    文章目录⭐赛事介绍⭐参赛好处⭐辅导比赛 ⭐赛事介绍华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决,培养研究生的创新能力和团队合作精神,推动科技创新和应用。华为杯竞赛分为初赛和决赛两个阶段。初赛......
  • DFS 算法模板——二叉树的遍历非递归写法要会,排列组合的一定要自己画一颗树,变量i和当
    dfs算法模板:1、下一层仅2个节点的dfs,也就是二叉树的dfs先序遍历,迭代和递归写法都要熟悉:defpreoder_traversal(root):ifnotroot:returnstack=[root]whilestack:node=stack.pop()dosomethingwithnodeifnode.ri......
  • 组合数学合集
    前置芝士加法原理完成一项工作有\(n\)类方法,每类方法有\(a_i\)种,则总共有\(\sum\limits_{i=1}\limits^{n}a_i\)种方法完成这项工作。乘法原理完成一项工作有\(n\)个步骤,每个步骤有\(a_i\)种方法,则\(\prod\limits_{i=1}\limits^{n}a_i\)种方法完成这项工作。排......
  • 转载:图灵的停机问题背后令人着迷的数学(哲学)原理
    之前备考时无意间看到这篇文章【康托尔、哥德尔、图灵——永恒的金色对角线】,令我惊为天人。刘未鹏从一系列深奥的理论背后找到了一条线,用一个至为简单而又至为深刻的数学方法将其串联起来,然我们看到了最纯粹的数学之美!现在终于有时间能够静下心来重新看一遍,顺便写一篇读书笔记......
  • 考研数学欧几里得六点档整理
    时间内容类型7/4计算技巧7/5分部积分的一个绝妙用法计算技巧7/6对称区间定积分的计算二级结论7/7变限积分的积分的破题法题型归纳7/8变限积分的连续性与可导性二级结论7/9变限积分的奇偶性和周期性二级结论7/10求极限的第一要义——拆分......
  • 组合式API
    setupsetup选项的写法与执行时机setup函数代码示例<script>import{ref}from'vue'exportdefault{setup(){constcount=ref(0)//返回值会暴露给模板和其他的选项式API钩子return{count}},mounted(){console.log(......
  • 《窗体篇》设置Form窗体置顶
    设置Form窗体置顶参考链接:https://blog.csdn.net/txwtech/article/details/115478324只要设置窗体的TopMost属性即可:Form1.TopMost=true;......
  • 线性代数 | 机器学习数学基础
    前言线性代数(linearalgebra)是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究,同时也涉及到所有的向量空间的一般性质。本文主要介绍机器学习中所用到的线性代数核心基础概念,供读者学习阶段查漏补缺或是快速学习参考。线性代数行列式1.行列式按行(列)展开......