- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
2024-11-12 11:25 修改了一些格式错误且增加了二项式反演的例题 。
2024-11-12 14:33 改进了二项式反演的证明 。
完成某个工作有 \(n\) 类办法,第 \(i\) 类办法有 \(a_i\) 种,则完成此工作的方案数有 \(\sum\limits _{i=1}^n a_i\) 种.
完成某个工作有 \(n\) 个步骤,第 \(i\) 个步骤有 \(b_i\) 种,则完成此工作的方案数有 \(\prod\limits _{i=1}^n b_i\) 种.
1.排列数:从 \(n\) 个物体中选出 \(m\) 个物体按一定顺序排为一列的方案数,用 \(A_n ^m\ (\)或\(P_n^m)\) 表示, \(A_n^m=\dfrac{n!}{(n-m)!}\).
2.组合数:从 \(n\) 个物体种选出 \(m\) 个物体(不考虑顺序)的方案数,用 \(\begin{pmatrix} n \\ m \end{pmatrix}\)(或 \(C_n^m\))表示,\(\dbinom{n}{m}=\dfrac{A_n^m}{m!}=\dfrac{n!}{m!(n-m)!}\).
3.插板法 。
现有 \(n\) 个完全相同的元素,要求将其分为 \(k\) 组.
考虑拿 \(k - 1\) 块板子插入到 \(n\) 个元素两两形成的 \(n - 1\) 个空里面。因为元素完全相同,所以答案就是 \(\dbinom{n - 1}{k - 1}\).
本质是求 \(x_1+x_2+\cdots+x_k=n\) 的正整数解的组数.
给总体先加上 \(k\) 个,以保证每组至少一个,接下来处理同上,最后相当于每组减一还回去即可。答案为 \(\dbinom{n+k-1}{k-1}\)。因为 \(\dbinom{n}{m}=\dbinom{n}{n-m}\),答案即为 \(\dbinom{n+k-1}{n}\).
本质是求 \(x_1+x_2+\cdots+x_k=n\) 的非负整数解的组数.
本质是求 \(x_1+x_2+\cdots+x_k=n\) 的整数解的组数.
模仿第三种情况,我们设 \(x'_i=x_i-a_i\) 以保证每组最少分到 \(a_i\) 个。现在相当于求 \(x'_1+x'_2+\cdots+x'_k=n\) 的整数解.
过程:
所以答案为 \(\dbinom{n-\sum a_i+k-1}{n-\sum a_i}\).
例:\(\ \ 1 \sim n\) 这 \(n\) 个自然数中选 \(k\) 个,使得这 \(k\) 个数中任何两个数都不相邻的组合有 \(\dbinom {n-k+1}{k}\) 种.
证明:设选的 \(k\) 个数分别为 \(x_1,x_2,\cdots,x_k (x_1\le x_2\le \cdots \le x_k)\),设 \(x'_i=x_i+i-1\),则一定有 \(x'_1<x'_2<\cdots<x'_k\ \ (x'_k\le n)\),即两两都不相邻。因为 \(x'_k=x_k+k-1\le n\),所以 \(x_k\le n-k+1\),我们只需在 \(1\sim n-k+1\) 中选 \(k\) 个数即可,答案为 \(\dbinom{n-k+1}{k}\) 种.
采用数学归纳法.
先理解一个引理:帕斯卡法则,即:
调换下顺序得到:
得证.
现在证明二项式定理.
当 \(n=1\) 时,原式显然成立.
假设当 \(n=k\) 时原式成立,设 \(n=k+1\):
将 \(a,b\) 乘进来:
把前半部分 \(i=1\) 时提出来:
将 \(j\) 化为 \(i-1\)
把后半部分 \(i=k+1\) 时提出来:
将中间两个求和合并:
套用帕斯卡法则:
所以当 \(n=k+1\) 时,结论仍成立。因此对任意 \(n\in \mathbb{N} ^{+}\),均可使所证等式成立, 得证.
将 \(n\) 个物体,划分为 \(k\) 组,那么至少存在一个分组,含有大于或等于 \(\left \lceil \dfrac{n}{k} \right \rceil\) 个物品.
反证法.
设每个分组含有小于 \(\left \lceil \dfrac{n}{k} \right \rceil\) 个物体,则其总和 \(S\leq (\left \lceil \dfrac{n}{k} \right \rceil -1 ) \times k=k\left\lceil \dfrac{n}{k} \right\rceil-k < k(\dfrac{n}{k}+1)-k=n\) ,矛盾.
设 \(U\) 中元素有 \(n\) 种不同的属性,而第 \(i\) 种属性称为 \(P_i\),拥有属性 \(P_i\) 的元素构成集合 \(S_i\),那么 。
数学归纳法,懒得写了以后填坑() 。
定义卡特兰数 \(H_n\) 表示坐标轴上从 \((0,0)\) 点到 \((n,n)\) 的路径中不越过直线 \(y=x\) 的路径数。下图为一种不合法的方案.
如下图,对每个非法的方案都可以通过把在第一个越过 \(y=x\) 的点之后的路径以直线 \(y=x+1\) 做对称从而构造一条自 \((0,0)\) 至 \((n-1,n+1)\) 的路径.
因为一共需要走 \(2n\) 步,所以从 \((0,0)\) 到 \((n,n)\) 的方案总数有 \(\dbinom{2n}{n}\) 种,从 \((0,0)\) 到 \((n-1,n+1)\) 的方案数有 \(\dbinom{2n}{n-1}\) 种.
综上可得:
证明:\((0,0)\) 到 \((n,n)\) 的路径可以分作以下几步:
从 \((0,0)\) 走到 \((i,i)\),方案数为 \(H_i\).
从 \((i,i)\) 走到 \((n-1,n-1)\),方案数为 \(H_{n-i-1}\).
从 \((n-1,n-1)\) 走到 \((n,n)\),方案数为 \(1\).
枚举每一个 \(i\),由此得到 \(H_n = \sum_{i=0}^{n-1}H_iH_{n-i-1}\).
故得证.
正确性显然,用组合数意义理解,在 \(n\) 个中选 \(m\) 个相当于在 \(n\) 个中挑 \(n-m\) 个不选.
即帕斯卡定理的略微转换,具体见上.
将 \(a=b=1\) 带入二项式定理即可.
\([a]\) 表示当 \(a\) 为真时答案为 \(1\),否则为 \(0\)(相当于一个 bool).
证法基本等同于性质 \(4\),将 \(a=1,b=-1\) 带入二项式定理即可.
我们这里认为 \(0^0=1\),所以 \(n=0\) 时答案为 \(1\).
具体证明略.
考虑通过组合数意义来理解.
假设现在有 \(n\) 个男生,\(m\) 个女生,我们现在要从这 \(n+m\) 个人中选出 \(m\) 个人,方案数显然为 \(\dbinom{n+m}{m}\)。另一种思考方式是从男生中选 \(i\) 个,女生中选 \(m-i\) 个,对于每个 \(i\) 方案数为 \(\dbinom{n}{i}\dbinom{m}{m-i}\),枚举每个 \(i\) 即为总方案数.
性质 \(6\) 的特殊情况,取 \(m=n\) 即可.
拓展:求证 $$\begin{aligned} \sum_{i=1}{n}im\dbinom{n}{i}&=n{\overline{m}}2 \end{aligned}$$.
发现形式一的形态很对称,那我们设一个反演系数.
设矩阵 \(A_{n,i}=(-1)^i\begin{pmatrix} n \\ i \end{pmatrix}\),现在变为求证 $$F_n=\sum_{i=0}^{n}A_{n,i}G_i \iff G_n=\sum_{i=0}^{n}A_{n,i}F_i$$,即证 \(A*A=I\).
发现后面的那块是二项式定理,所以原式可以化简为:
仔细观察,此式只有在 \(n=m\) 时值为 \(1\),其余时间都为 \(0\),即 \([n=m]\),也就是单位矩阵 \(I\).
由此得证 \(A*A=I\) 即矩阵 \(A\) 自逆,从而得证形式一,而形式二通过移动 \(-1\) 的次幂即可推得.
CF997C Sky Full of Stars 。
虽然 Codeforces 题库炸了,但不影响这是一道能用来练二项式反演的好题(好像也可以用容斥原理做?).
套路化的,我们设 \(F_{i,j}\) 为 至少 有 \(i\) 行 \(j\) 列同色的方案数,\(G_{i,j}\) 为 恰好 有 \(i\) 行 \(j\) 列同色的方案数。很明显,我们有:
发现这是 二维二项式反演 的经典式子,反演后可得:
而我们要求的答案是总方案数 \(3^{n^2}-G_{0,0}\),问题即转化为求 \(F\),接下来分类讨论.
把 \(F\) 带回去算出 \(G_{0,0}\) 用全部方案数一减即可.
最后此篇关于组合数学学习笔记的文章就讲到这里了,如果你想了解更多关于组合数学学习笔记的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个 mysql 表,其中包含一些随机数字组合。为简单起见,以下表为例: index|n1|n2|n3 1 1 2 3 2 4 10 32 3 3 10 4 4
我有以下代码: SELECT sdd.sd_doc_classification, sdd.sd_title, sdd.sd_desc, sdr.sd_upl
如果我有两个要合并的数据框 Date RollingSTD 01/06/2012 0.16 01/07/2012 0.18 01/08/2012 0.17 01/09/20
我知道可以使用 lein ring war 创建一个 war 文件,但它似乎仍然包含码头依赖项。当我构建 war (并在 tomcat 上部署)时,有没有办法排除码头依赖项? 如果我根本不能做这件事,
维基百科关于封装的文章指出: “封装还通过防止用户将组件的内部数据设置为无效或不一致的状态来保护组件的完整性” 我在一个论坛上开始讨论封装,在那里我问你是否应该始终在 setter 和/或 gette
对于我使用的组合框内的复选框: AOEDComboAssociationName = new Ext.form.ComboBox({ id: 'AOEDComboAssociationName',
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I combine LINQ expressions into one? public boo
如何在 rust 中找到排列或组合的数量? 例如C(10,6) = 210 我在标准库中找不到这个函数,也找不到那里的阶乘运算符(这就足够了)。 最佳答案 以@vallentin 的回答为基础,可以进
我有一个复杂的泛型类型用例,已在下面进行了简化 trait A class AB extends A{ val v = 10 } trait X[T<:A]{ def request: T }
如何使用 Hibernate 限制来实现此目的? (((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z'))) 最佳答案 思考有效 Criteria c
我一定会在我的一个项目中使用谷歌图表。我需要的是,显示一个条形图,并且在条形图中,与每个条形相交的线代表另一个值。如果您查看下面的 jsfiddle,您会发现折线图仅与中间的条形图相交,并继续向其他条
只是一个简单的问题,我也很想得到答案,因为我不能百分百理解 Javascript 示例:假设您提示用户输入名称。够简单吧?但是你有一个数组,上面写着一些名字(其中之一就是),基本上就是我到目前为止所说
我试图通过 Haskell 理解函数式编程,但在处理函数组合时遇到了很多麻烦。 其实我有这两个功能: add:: Integer -> Integer -> Integer add x y = x
我正在寻找一种在 Realm 查询中组合 AND 和 OR 的方法。 这是我的课: class Event extends RealmObject { String id; String
例如,我有一个包含 5 个元素的哈希: my_hash = {a: 'qwe', b: 'zcx', c: 'dss', d: 'ccc', e: 'www' } 我的目标是每次循环哈希时都返回,但没
我是Combine 的新手,我想得到一个看似简单的东西。假设我有一个整数集合,例如: let myCollection = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 我想以例如 0
关于“优先组合而不是继承”的问题,我的老师是这样说的: 组合:现有类成为新类的组件 转发:新类中的每个实例方法,在现有类的包含实例上调用相应的方法并返回结果 包装器:新类封装了现有的 这三个概念我不是
我正在尝试将单个整数从 ASCII 值转换为 0 和 1。相关代码如下所示: int num1 = bin.charAt(0); int num2 = bin.charAt(1);
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 我经常看到“嵌套”类中的非静态变
我尝试合并两个数据集(DataFrame),如下所示: D1 = pd.DataFrame({'Village':['Ampil','Ampil','Ampil','Bachey','Bachey',
我是一名优秀的程序员,十分优秀!