组合数学与计数原理

组合数学与计数原理

date: 2024/10/29.

不同情况求组合数

求组合数的四种方法。

Lucas 定理

如果 \(p\) 是质数,则对于 \(\forall m, n \in \text{Z},1 \leq m \leq n\),有:

\[\binom{n}{m}=\binom{m \bmod p}{n \bmod p}*\binom{m/p}{n/p} (\bmod p) \]

即把 \(n,m\) 表示为 \(p\) 进制数字,对其每一位分别计算组合数,最后乘起来。

Lucas 定理证明。

ll locas(int x, int y) {if (x < p && y < p)return get_c(x, y);elsereturn (get_c(x % p, y % p) * locas(x / p, y / p)) % p;
}

多重集的排列数

多重集是指包含重复元素的广义集合。设集合 \(S\) 是由 \(n_1\)\(a_1\)\(n_2\)\(a_2\) ...... \(n_k\)\(a_k\) 组成的多重集,记 \(n=\displaystyle\sum_{i=1}^k n_i\)

\(S\) 的排列数为:

\[\frac{n!}{\displaystyle\prod_{i=1}^k{n_i!}} \]

多重集的组合数:

设集合 \(S\) 是由 \(n_1\)\(a_1\)\(n_2\)\(a_2\) ...... \(n_k\)\(a_k\) 组成的多重集,设 \(r \in \Z\)\(r \leq \forall n_i\)。从 \(S\) 中取出 \(r\) 个元素组成一个多重集(不考虑元素顺序),产生的不同多重集数量为:

\[\binom{k+r+1}{k-1} \]

\(Proof:\)

即不定方程 \(a_1+a_2+...+a_k=r\)\(\forall a_i \geq0\),整数解的个数。

等号两侧同加 \(k\),使式子变为 \(b_1+b_2+...+b_k=r\)\(\forall b_i \geq1\)

所以利用隔板法思想,答案为 \(\binom{k+r+1}{k-1}\)

证毕.

对于更一般的 \(r\) 的情况,暂不讨论。

Catalan 数列

给定 \(n\)\(0\)\(n\)\(1\),它们按照某种顺序排成 \(len=2n\) 的序列,满足任意前缀中 \(0\) 的个数不少于 \(1\) 的个数的序列数量为:

\[Cat_n=\frac{\binom{2n}{n}}{n+1} \]

OI Wiki。

例题:

网格:

某城市的街道呈网格状,左下角坐标为 \(A(0,0)\),右上角坐标为 \(B(n,m)\),其中 \(n \ge m\)

现在从 \(A(0,0)\) 点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的点,即任何途径的点 \((x,y)\) 都要满足 \(x \ge y\),请问在这些前提下,到达 \(B(n,m)\) 有多少种走法。

解法: 求出 \((0,0)\) \(\rightarrow\) \((n, m)\) 的总方案数,为 \(\binom{n+m}{n}\)

考虑到如果一条路径触碰到 \(y=x+1\) 直线,那么这条路径不合法。

把所有不合法路径,自触碰到 \(y=x+1\) 起,对于 \(y=x+1\) 对称。

那么可以发现所有不合法路径最终聚于一点,即为 \((n,m)\) 对于 \(y=x + 1\) 的对称点。记为点 \(P\)

所以所有不合法路径数量为 \((0,0)\) \(\rightarrow\) \(P\) 的路径数量。

用总方案数减去不合法方案数即为答案。

化简组合数式子

关于古代猪文

将一个所有质因子指数为一的数字称为 \(square-free-number\)

如果求组合数时模数不为质数,但是其为 \(square-free-number\),那么可以针对其每一个质因子求组合数,最后用 \(CRT\)

二项式定理

\[(a+b)^n=\displaystyle\sum_{k=0}^n{\binom{n}{k}a^kb^{n-k}} \]

Proof。

百度百科。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825458.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题中高级进阶(JVM篇Java垃圾回收)

说说Java对象创建过程?知道类的生命周期吗?简述Java的对象结构?如何判断对象可以被回收?JVM的永久代中会发生垃圾回收么?你知道哪些垃圾收集算法?似乎有点模糊了,那就大概看一下面试题吧。前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!说说Java对象创…

不写完整sql,DBeaver如何查询数据?效率翻倍!

前言 我们在使用DBeaver时,最常用的就是查询数据,除了在DBeaver里面直接写完整的sql语句进行查询外,其实还可以用不完整的sql语句来查询,效率翻倍。那么,我们该如何操作呢? 如何操作 首先,我们还是照旧打开某一张表的数据,这样默认是没有任何查询条件的。当我们需要按照…

在机器学习中,L2正则化为什么能够缓过拟合

在机器学习中,L2正则化作为一种有效的技巧,能够显著缓解模型的过拟合现象。主要原因包括:1.对权重进行约束,减少模型复杂性;2.增强模型的泛化能力;3.防止权重过大导致的数值不稳定;4.与损失函数相结合,实现模型目标的平衡;5.鼓励权重的均匀分布。通过L2正则化,我们可…

CTF学习(15)MISC(FLAG)

1.图片(?)--->查看详细信息(无果)--->010editor查看是否修改宽高或内藏编码(无果)---使用stegsolve逐层查看(无果) --->选中RGB三个通道的0层使用preview按钮发现存在PK文件(知识点:PK是一种压缩文件)选择SAVE Bin保存为.zip格式的文件 (目前遇到的这种LSB隐写题目都…

全栈(full stack)是什么意思

全栈(Full Stack)指的是一种技能集合和开发理念,涵盖软件开发的各个层面,从前端用户界面到后端服务器端、数据库和服务器管理等多个领域。全栈开发者具备跨越整个技术堆栈的能力,能够综合处理应用程序开发的各个方面,从而构建完整、高效且稳定的应用系统。1. 全栈开发的涵…

找不到符号

问题详情:有依赖有插件在代码里可以看到关联但注解后编译提示找不到符号尝试方法:清除缓存重新启动 无效重新加载maven 无效是否添加dependence 是否安装Lombok插件 有 无效先clear再compile 无效

2024御网线上Pwn方向题解

ASM Checksec检查保护基本上保护都关闭了 64位ida逆向程序只有一段,并且返回地址就是输入的数据,看起来就是srop了,找一下可以用的gadget通过异或清空rax值,然后通过异或ecx和1,异或rax和rcx即可增加rax的值,同理左移一位同样可以增加rax的值,将rax增加到0xf然后打srop,…

基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现四

三、系统部分功能描述关于我们信息数据层Dao、物品分类信息数据层Dao、快递柜格子信息数据层Dao、投诉信息数据层Dao、快递柜类型信息数据层Dao、快递柜信息数据层Dao、新闻信息数据层Dao、日志信息数据层Dao、小区信息数据层Dao、用户信息数据层Dao一、前言介绍: 1.1 项目摘要…

为什么安卓不去掉 Java 语言底层_2

为什么安卓不去掉 Java 语言底层? 在探讨为什么安卓不去掉 Java 语言底层时,我们可以立即指出几个核心原因:兼容性保持、开发生态成熟度、跨平台性能。其中,兼容性保持是最为关键的一点。Android平台自推出以来,就大量采用Java语言进行应用开发。这背后不仅仅是因为Java语…

java中对象池的在什么时候应用比较合适

对象池是一种软件设计模式,其主要目的是重用对象,减少对象的频繁创建和销毁。在Java中,对象池在特定场景下表现出色,如数据库连接、线程池或重资源操作。本文深入探讨对象池的概念、优势和Java中的合适应用场景。1.对象池的基本介绍 对象池是一种存储已初始化对象的容器,让…

07C++选择结构(1)——教学

一、基础知识 1、关系运算符 因为我们要对条件进行判断,必然会用到关系运算符:名称 大于 大于等于 小于 小于等于 等于 不等于符号 > >= < <= == !=关系表达式的值是一个逻辑值,即“真”(True)或“假”(False)。如果条件成立,其值为“真”;如果条件不成立…

Javascript中includes函数

用处 用于数组和字符串,用于判断数组是否包含某个值。或者用于字符串是否包括某个子串。 如果找到该值或者字符串,则返回true,否则返回false 语法:arr.includes(valueToFind[, fromIndex]) valueToFind:必需。需要查找的元素值。 fromIndex:可选。从该索引处开始查找 val…