组合数学习笔记

组合数学习笔记

本文为上课的学习笔记

1.排列&组合

组合,从n个元素中选m个,不及顺序
方案数:

(nm)=n!m!(nm)!

排列,从n个元素中,选m个,考虑顺序
方案数:

P(n,m)=n!(nm)!

2.组合数性质

(n+mn)=(n+mm)
很显然,从n+m个元素中选n个,和选m个不要是一样的

(nm)=(n1m1)+(n1m)
一个很重要的性质,一般可以在n,m都不大的时候做递推来预处理
现在已经知道了有n1个元素的情况,考虑第n个元素
如果选它,则前n1的元素中只能选m1个,所以方案数为(n1m1)
如果不选它,则前n1的元素中要选m个,所以方案数为(n1m)
根据加法原理,相加即可

(n+m+1m)=(n+mm)+(n+m1m1)+(n+m2m2)++(n0)
根据上面那个式子,我们可以把(n+m+1m)拆成(n+mm)+(n+mm1)
然后,保留(n+mm),将(n+mm1)继续按同样的方法拆
最后一次拆就是:(n+21)=(n+11)+(n+10)
然后(n+10)=(n0),就不用拆了

i=0n(ni)=2n
等式左边意义是从n个元素中选i,0in个的方案和,则为从n个元素中选任意个的方案和
即为n个元素的子集个数2n

(n0)(n1)+(n2)=0
简单说,就是从n个元素中选偶数个的方案数和和选奇数个的方案数和相等
这个东西可以从杨辉三角上考虑
众所周知,杨辉三角的每一位等于它的左上方的数加上它右上方的数
那么取每一行的奇数位或偶数位(即从左到右数是第奇数/偶数个),都可以表示为它上一行所有数的和的形式
可以自己画一个体会体会,太懒所以不画在这了

(mm)+(m+1m)++(nm)=(n+1m+1)
和第三个式子证法有些相似相信你们已经忘了第三个式子是哪个式子
还是一项一项拆开
(n+1m+1)=(nm)+(nm+1)
保留(nm),继续拆(nm+1)(n1m)+(n1m+1)
然后再拆后面那项
一直拆到(m+1m+1)=(mm)+(mm+1)
当然,(mm+1)=0,所以得证

(x+y)n=i=0n(ni)xiyni
二项式展开,比较重要,可以看出它也对应了杨辉三角
不过想严格证明好像挺难

i=0n(ni)2=(2nn)
假设现在有2n个球,等式右边就是选n个的方案数
考虑将他们分成两组,每组n个,那么共选n个的方案数也可以表示为:
第一组选0个,第二组选n个,加上第一组选1个,第二组选n1个.....即第一组选i个,第二组选ni
即为i=0n(ni)(nni)=i=0n(ni)2

吸收公式:(nm)=nm(n1m1)
直接用定义展开即可

i=0n(im)=(n+1m+1)
0,1,2n 中选 m+1 个数,最大数为 i 的方案数为 (im)

(nm)(mk)=(nk)(nkmk)
左边:从 n 个里面选 m 个,再在这 m 个里选 k
右边:直接从 n 个里面选 k 个,然后在从剩下的 nk 个里选左边的描述里第二次选淘汰掉的 mk

和下降幂相关联:(nk)×km_=(nmkm)×nm_
仍然是拆成阶乘消一消

3.算组合数

这还用算?直接暴力枚举就行(bushi

3.1递推

复杂度O(nm)
直接用之前推的第二个性质,一边加一边取模

3.2约分

(nm)=n!m!(nm)!=n×(n1)××(nm+1)m!

适用于m较小,n较大
对于模数是质数,可以直接逆元
如果不是,对分数上下分别分解质因数来做除法,然后快速幂合并

3.3Lucas

适用于n,m较大,k为小质数
关于它的证明和使用看这里

3.4exLucas

不过和Lucas关系好像并不大

适用于n,m较大,k较小但不保证是质数
具体写起来还是挺复杂挺难的,也可能是我太蒻
具体看这里
花了好长时间才搞懂,然后写代码又写了一晚上+一早上......我太蒻了

4看点题

4.1P4369

x拆成k个不同组合数之和
很傻的一个题,前k1个写为一些元素选0个,每个都是1
最后一个写成xk+1个元素选一个
然后就没了

4.2P4370

用到一种神奇的取log方法快速比较两个组合数大小
具体看题解

4.3P3746

并没有做出了,待更
做出来了,懒得更

posted @   suxxsfe  阅读(1873)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1856 days 1 hours 59 minutes 45 seconds

Copyright © 2025 suxxsfe
Powered by .NET 9.0 on Kubernetes
点击右上角即可分享
微信分享提示