首页 > 其他分享 >笔记——排列组合

笔记——排列组合

时间:2024-08-06 22:19:12浏览次数:7  
标签:方案 le sum 笔记 cdots 排列组合 小朋友 mathrm

蓝月の笔记——排列组合篇

摘要

万恶的数学!

Part 1 加乘原理

小学奥数内容

加法原理:当多个方案并列(即互不影响)时,总方案数为各个方案数之和

例:共有 \(k\) 种交通工具可以从A地到B地,第 \(i\) 种交通工具有 \(a_i\) 班次,那么从A地到B地的总方案数为 \(\sum_{1 \le i \le k} a_i\)

乘法原理:当多个方案分步完成时,总方案数为各步方案数之积

例:从 \(1\) 地到 \(k\) 地,规定只能从 \(i\) 地单项移动到 \(i+1\) 地,且有 \(a_i\) 种路线,那么从 \(1\) 地到 \(k\) 地的总方案数为 \(\prod_{i \le i < k}a_i\)

Part 2 排列组合数

排列数

从 \(n\) 个小朋友种选择 \(k\) 个小朋友排成一队的方法数,记为 \(\mathrm{A}_n^k\)

公式推导

选第 \(1\) 个小朋友有 \(n\) 种方案,选第 \(2\) 个小朋友有 \(n-1\) 种方案(因为有一个被选了),\(\cdots\),选第 \(k\) 个小朋友有 \(n-k+1\) 种方案

根据乘法原理,\(\mathrm{A}_n^k=\prod_{(n-k+1) \le i \le n} i=\large\frac{n!}{(n-k)!}\)

组合数

从 \(n\) 个小朋友种选择 \(k\) 个小朋友的方法数(不考虑顺序),记为 \(\mathrm{C}_n^k\)

公式推导

选出 \(k\) 个不考虑顺序的小朋友,相当于选出 \(k\) 个考虑顺序的小朋友再打乱顺序,除以顺序数即可

\(\mathrm{C}_n^k = \large\frac{\mathrm{A}_n^k}{k!}=\large\frac{n!}{(n-k)!k!}\)

对称性

在 \(n\) 个里面选 \(k\) 个相当于在 \(n\) 个里面选 \(n-k\) 个丢掉,所以 \(\mathrm{C}_{n}^{k}=\mathrm{C}_{n}^{n-k}\)

多重组合数

实际上是全排列,有 \(k\) 对多胞胎,共 \(n\) 个人,第 \(i\) 对有 \(a_i\) 个人,因为每一对多胞胎之间长得太像了,所以在给他们排队时会把他们是为同一个人(即交换位置只算做一种方案),排队的方案数即为多重组合数,记为 \(\large{n \choose {a_1,a_2,\cdots,a_k}}\)

公式推导

假设多胞胎交换位置算作多种方案,答案显然为 \(n!\)

每一对多胞胎之间都有 \(a_i!\) 种先后位置关系,将这些重复计算除掉即可,\(\large{n \choose {a_1,a_2,\cdots,a_k}}=\large\frac{n!}{\prod_{1 \le i \le k}a_i!}\)

Part 3 插板法

可以理解为求不定方程 \(\sum_{1 \le i \le k} x_i=n\) 的解的数量

\(x_i > 0\)

在 \(n\) 个 \(1\) 之间的 \(n-1\) 空插 \(k-1\) 个板子,分成的 \(k\) 个空间的 \(1\) 的个数为每一个 \(x_i\) 的值

答案为 \(\mathrm{C}_{n-1}^{k-1}\)

\(x_i \ge 0\)

在 \(n\) 个 \(1\) 后补 \(k\) 个 \(1\),再插 \(k-1\) 个板子,最后拿掉补的 \(k\) 个 \(1\),就可以留出 \(0\) 个 \(1\) 的区间了

答案为 \(\mathrm{C}_{n+k-1}^{k-1}=\mathrm{C}_{n+k-1}^{n}\)(对称性)

\(x_i \ge a_i\)

令 \(t=\sum a_i,s_i=x_i-a_i\)

在 \(n\) 个 \(1\) 后补 \(t\) 个 \(1\),此时可以保证 \(k\) 个区间内都达到了 \(x_i \ge a_i\) 的要求,那么原方程转化为 \(\sum_{1 \le i \le k} (s_i+a_i)=n\),则 \(\sum_{1 \le i \le k} s_i=n-t(s_i \ge 0)\),变成了 \(x_i \ge 0\) 的形式,按公式求解即可

答案为 \(\mathrm{C}_{n-t+k-1}^{n-t}\)

Part 4 杨辉三角&二项式定理

杨辉三角:

\[1 \]

\[1\,\,1 \]

\[1\,\,2\,\,1 \]

\[1\,\,3\,\,3\,\,1 \]

\[1\,\,4\,\,6\,\,4\,\,1 \]

\[\cdots\cdots\cdots\cdots \]

通过瞪眼法可以知道,杨辉三角的第 \(i\) 行 \(j\) 个数为 \(\mathrm{C}_{i-1}^{j-1}\)

再次通过瞪眼法可以知道,杨辉三角最左一列和最右一列都是 \(1\),其它数都是它左上的数和右上的数的和,那么组合数的递推式就是 \(\mathrm{C}_{i}^{j}=\mathrm{C}_{i-1}^{j}+\mathrm{C}_{i-1}^{j-1}\)

再再次通过瞪眼法,可以发现杨辉三角的第 \(i\) 列为 \((x+y)^{i-1}\) 展开后每一项的系数,这就是二项式定理,用公式表示为:

\[(x+y)^n=\sum_{0 \le i \le n}\mathrm{C}_{n}^{i}x^iy^{n-i} \]

将二项式推广为多项式,同理可得 \((\sum_{1 \le i \le k}x_i)^n=\sum_{(a_1,a_2,\cdots,a_k)满足性质P}({n \choose {a_1,a_2,\cdots,a_k}}\prod_{1 \le i \le k}x_i^{a_i})\)

我们称 \(k\) 元组 \((a_1,a_2,\cdots,a_k)\) 满足性质 \(P\),当且仅当 \(\forall i \in [1,k],x_i=a_i\) 是不定方程 \(\sum_{1 \le i \le k}x_i=n\) 的一组解

Part 5 圆排&项链排&错排

圆排列

\(n\) 个人坐在一个圆桌上吃饭,排位置的方案数就是圆排列数(旋转前后算一种方案)

显然为全排列除以旋转次数,\(R_{n}=\frac{\mathrm{A}_n^n}{n}=(n-1)!\)

项链排列

\(n\) 个不同的珠子串成一个项链,可以串成的项链数量就是项链排列数(旋转、翻转前后算一种方案)

在圆排列的基础上除以两种翻转方式,\(N_n=\frac{R_n}{2}=\frac{(n-1)!}{2}\)

错位排列(信封问题)

例题终于有题了

令 \(p\) 是 \(1 \sim n\) 的一个排列,如果 \(\forall i \in [1,n],p_i \not= i\),那么我们称 \(p\) 是 \(n\) 的一个错位排列

错排数可以使用递推求解,Oi Wiki上已经讲的很清楚了,我就(懒)不(得)讲了

Code:

d[0] = 1, d[1] = 0, d[2] = 1;
for (int i = 3; i < kMaxN; i++) {
  d[i] = ((i - 1) * ((d[i - 1] + d[i - 2]) % kP)) % kP;
}

To be continued

标签:方案,le,sum,笔记,cdots,排列组合,小朋友,mathrm
From: https://www.cnblogs.com/bluemoon-blog/p/18345390

相关文章

  • 【论文笔记】Cross-Domain WiFi Sensing with Channel State Information: A Survey
    Cross-DomainWiFiSensingwithChannelStateInformation:ASurveyIntroduction检测领域:检测领域里,大部分用的阈值检测或者简单的学习算法,例如SVM。fallsRT-Fall:Areal-timeandcontactlessfalldetectionsystemwithcommodityWiFidevicesWiFall:Device-fr......
  • jQuery基础学习笔记
    jQuery基础学习个人说明:本文所涉及的到各种jQuery中的函数,方法,api等都不完整,只是一些常用的方法而已,详情还得阅读官方文档中文版:https://www.jquery123.com/jQuery的简单介绍jQuery:是一个快速,小,功能丰富的]avaScript库。它使诸如HTML文档遍历和操作,事件处理、动画和Aja......
  • dp学习笔记
    数位dp对于数位上每个数的有约束的各类统计问题,可以考虑用数位dp解决。通常使用记忆化递归实现(更通用),属于比较板子的dp了。在进行记忆化递归时,通常需要考虑三个因素:前导零(有时需要考虑),值域边界限制(必定会有),题面要求限制。例题P2602[ZJOI2010]数字计数版子题,枚举\(0......
  • C++笔记,类和对象(上)
    对于类的初步认识目录对于类的初步认识(1)类的定义(2)类的访问限定符及封装(3)类的作用域(4)类的实例化(5)类的对象大小的计算(6)类成员函数的this指针(1)类的定义classclassName{//类体,由成员函数和成员变量组成};//一定要注意后面的分号类体中内容称为类的成员:类......
  • 【学习笔记】Matlab和python双语言的学习(最大最小化规划)
    文章目录前言一、最大最小化规划二、选址问题三、代码实现----Matlab1.Matlab的`fminimax`函数2.Matlab代码四、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187QF?p=28&vd_sour......
  • LLM学习笔记-位置编码篇
    在Transformer模型中,位置编码(PositionalEncoding)的引入是为了补充自注意力机制(Self-Attention)在捕捉序列位置信息方面的不足。自注意力机制是Transformer的核心,但它对输入序列的位置信息并不敏感。具体来说,Transformer模型对输入序列中的每个元素进行处理时是并行的,而不是像传统......
  • c语言11天笔记
    函数的概述函数:实现一定功能的,独立的代码模块。我们的函数一定是先定义,后使用。使用函数的优势:1.我们可以通过函数提供功能给别人使用。当然我们也可以使用别人提供的函数,减少代码量。2.借助函数可以减少重复性的代码。3.实现结构化(模块化)程序设计思想:结构化程序设......
  • 《数据资产管理核心技术与应用》读书笔记-第二章:元数据的采集与存储
    《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与......
  • Redux 及Redux-Toolkit 使用笔记及简易实现
    Redux及Redux-Toolkit使用笔记及简易实现依赖的包npminstall@reduxjs/toolkitreact-redux创建Store并且将它注入到app中。一般使用configureStore({reducers:{}}),这种方式,我们可以在各个模块里面定义各自的reducer,然后在store里面使用它。这个方法返回的就是store的实......
  • C:指针学习(1)-学习笔记
    目录前言:知识回顾:1、const1.1const修饰普通变量1.2 const修饰指针变量1.3总结:2、指针运算2.1指针+-整数2.2指针-指针2.3指针的关系运算3、指针的使用结语:前言:距离上一次更新关于初识指针的内容已经有一段时间了,本文旨在继续深入探讨指针的相关知识。在......