喵~ 喵~ 喵~
组合数学
公式定义
Anm=(n−m)!n!
Cnm=m!Anm=m!(n−m)!n!
插板法1
n个相同苹果放入m个有编号的箱子,即
x1+x2+⋯+xn=n,xi≥1 (i=1,2,…,n)
方案数=Cn−1m−1
插板法2
n个相同苹果放入m个有编号的箱子,即
x1+x2+⋯+xn=n,xi≥0 (i=1,2,…,n)
方案数=Cn+m−1m−1
多重集合排列
同一元素多次出现求排列组合
排列数=n1!n2!⋯nr!n!,n1+n2+⋯+nr=n
相邻不能选择问题
从n个排成一行的数中选k个,要求任意两个数不相邻的方案数
方案数=Ckn−k+1
容斥原理
三容斥原理问题
∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
四容斥原理问题
∣A1∪A2∪A3∪A4∣=i∑∣Ai∣−i<j∑∣Ai∩Aj∣+i<j<k∑∣Ai∩Aj∩Ak∣−∣A1∩A2∩A3∩A4∣
其他数学知识
欧拉回路
定义:每条边恰好经过一次,最终回到起点
欧拉路径
定义:每条边恰好经过一次,起点和终点可以不同
二分图
定义:顶点可以分成两组,任意相邻两点属于不同组
联通与强联通
只有有向图可以说强联通,意思是任意两点可到达;
联通分量指的是任意两点可到达的子图
排序时间复杂度
| 排序算法 |
最优时间复杂度 |
最差时间复杂度 |
平均时间复杂度 |
实现大致思路 |
| 冒泡排序 |
O(n) |
O(n2) |
O(n2) |
反复遍历相邻元素并交换逆序对,每轮将最大元素"冒泡"到末尾;可加标志位优化已有序情况 |
| 插入排序 |
O(n) |
O(n2) |
O(n2) |
将未排序元素逐个插入到已排序序列的正确位置,类似整理扑克牌 |
| 选择排序 |
O(n2) |
O(n2) |
O(n2) |
每轮从未排序部分选出最小(大)元素,放到已排序序列末尾 |
| 归并排序 |
O(nlogn) |
O(nlogn) |
O(nlogn) |
分治法:递归地将数组二分至单元素,再自底向上合并两个有序子数组 |
| 快速排序 |
O(nlogn) |
O(n2) |
O(nlogn) |
分治法:选基准值将数组分为小于和大于基准的两部分,递归排序两部分;最差情况可通过随机化/三数取中避免 |
| 计数排序 |
O(n+k) |
O(n+k) |
O(n+k) |
非比较排序:统计每个值出现次数,按值域顺序还原;k 为值域范围,仅适用于整数且 k 不太大时 |
| 基数排序 |
O(d⋅(n+k)) |
O(d⋅(n+k)) |
O(d⋅(n+k)) |
非比较排序:按位(个十百…)依次进行稳定排序(通常用计数排序作子过程);d 为位数,k 为每位基数 |
Linux系统指令
| 命令 |
作用 |
mkdir |
创建目录 |
cd |
切换目录 |
ls |
查看文件 |
pwd |
查看当前路径 |
rm |
删除 |
cp |
复制 |
mv |
移动 / 重命名 |
有帮助,赞一个