数学集

向量

(有方向的值叫做向量)

定义?

这个东西放在平面直角坐标系里会好理解一些所以开始吧:

向量是有一个起点\((x1,y1)\)与一个终点\((x2,y2)\)的,而这个向量的值我们就表示为:\((x2-x1,y2-y1)\)

向量是可以平移的,由于平移,那么起点与终点坐标之差是不变的,所以移动向量,向量的值也不便。

那么放在平面直角坐标系时,我们可以把起点就设为原点,那么这个向量的值就将会是终点的坐标,相当于是将其平移,使起点与原点重合。

计算?

向量加法

课本里有一个三角形法则平行四边形法则,我感觉没有必要,因为两个向量相加,我们可以看成一个点的移动,由于已经放入了平面这叫坐标系,那么我们的移动方向其实就是移动值的正负,于是先按照第一条向量的长度要求来移动,再按照第二个向量的长度要求来移动即可。

向量数乘

(别问我减法呢?)

数乘指的是一个数乘一个向量,相当于是一堆这个向量相加,所以将向量的每个值乘一个要乘的数即可。

那么一个向量的相反向量,即往相反方向走,既是将向量乘一个 \(-1\)

向量减法

与其做减法,不如做加法,直接将减数乘 \(-1\) 然后相加即可。(啊,说的好抽象)

点积(数量积)

\(|\vec{a}|\) 指向量长度即起点终点之间的欧氏距离。

定义为:\(\vec{a}\bullet\vec{b}=|\vec{a}|\times |\vec{b}| \times \cos(\Theta)\)

我们有:\(|\vec{a}|^2=\vec{a}\bullet\vec{a}\)

在平面直角坐标系中,两向量 \(\vec{a}(x1,y1)\vec{b}(x2,y2)\) 的向量积为:\(x1x2+y1y2\) 证明如下:

设一个平面直角坐标系,将两个单位设为 \(i, j\),两个向量 \(a, b\),坐标分别为 \((x1,y1)(x2,y2)\)

\(a\bullet b=|a|\times |b| \times \cos(\Theta)=(ix1+jy1)\bullet(ix2 + jy2)=iix1x2+ijx1y2+ijy1x2+jjx2y2=x1x2+y1y2\)

叉积(我终于不知道这个东东叫个啥了)

定义为:\(\vec{a}\times\vec{b}=|\vec{a}|\times |\vec{b}| \times \sin(\Theta)\)

在平面直角坐标系中,两向量 \(\vec{a}(x1,y1)\vec{b}(x2,y2)\) 的叉积为:\(x1y2-x2y1\),证明如下:

设一个平面直角坐标系,将两个单位设为 \(i, j\),两个向量 \(a, b\),坐标分别为 \((x1,y1)(x2,y2)\)

\(a\times b=|a|\times |b| \times \sin(\Theta)=(jx1+iy1)\times(jx2+iy2)=jx1jx2+jx1iy2+iy1x2+iy1iy2=x1y2-y1x2\)

叉积求面积

这里只用三角形做示范,因为其它的都可以被分成一堆的三角形。

有三角形 \(ABC\)

面积公式中有一个为底乘高除二,然后找到一个点 \(A\),像另外两点 \(B, C\) 做向量,叉积的定义里的 \(|\vec{b}| \times \sin(\Theta)\),放到这里就是 \(|\vec{AC}| \times \sin(\Theta)\),那么对于这个东西,其实就是过 \(C\)\(AB\) 做垂,垂足为 \(D\),那么叉积会变成:\(AB\times AD\),最后除个二,其实就是面积公式

康托展开

对于 \(1\)\(n\) 的全排列,建立排名和排列的双向映射

理解:由排列映射到排名可以视为一种哈希。

原理:设有 \(1\)\(n\) 的某个排列 \(p_i\),其排名应该等于小于该排列的数量 \(+ 1\)

\(\sum\limits_{i=1}^{n}a_i(n-i)!\) \((a_i=\sum\limits_{j=i + 1}^{n}(p[j]<p[i]))\)

卡特兰数

是一种数列,其通项公式的一种形式为:\(Cat_n=\frac{1}{n+1}\times C_{2n}^n\)

另一种为:\(Cat_n = C_{2n}^{n}-C_{2n}^{n-1}\)

递归定义式

  1. \(Cat_n=\sum\limits_{i=0}^{n-1}Cat_i\times Cat_{n-i-1}\)

理解:对于 \(n\) 个点构成的二叉树,其形态有 \(Cat_n\)

  1. \(Cat_n=Cat_{n-1}\times \frac{4n-2}{n+1}\)

使用场景

递归式 \(1\) 适用于 \(n\) 不大的情况下求卡特兰数,不用处理除法。\((n\le 500)\)

例1. 01 排列问题
给定 \(n\)\(0\)\(n\)\(1\)\(2n\) 个元素的数列,要求该数列的前缀,\(0\) 的个数不少于 \(1\) 的个数,求方案数。
起点左下角 \((0, 0)\),重点 \((n, n)\),往右走为 \(0\),往上走为 \(1\),那么路径方案书为:\(C_{2n}^{n}\)

\(01\) 合法排列对应的方案,应该不越过左图红色对角线

将原路径第一次接触新对角线(紫色)之后的路径沿新对角线反转,则原路径与以 \((n-1,n+1)\) 结尾的新路径一一对应。

那么求原路径中的非法路径数量等价于求以 \((n-1,n+1)\) 结尾的路径数量:\(C_{2n}^{n}-C_{2n}^{n-1}=Cat_{n}\)

例2. 给定 \(n\) 个左括号和 \(n\) 个右括号,其合法的匹配序列的方案数为卡特兰数

例3. 给定 \(n\) 个元素,从 \(1\)\(n\),其进出栈的不同方案数为卡特兰数

例4. 给定 \(n\) 条边的凸多边形,用 \(n - 3\) 条边划分成 \(n - 2\) 个三角形,其方案数为卡特兰数

\(prufer\) 序列

是一种树形结构与序列相互映射的规则。

区别

\(dfs\) 序,将一棵子树映射为一段连续的区间
欧拉序
二叉搜索树
\(prufer\) 序列是和树的双向唯一映射,同时包含了结点的读书与连接关系,将构造树转化为构造序列,将统计树的信息转化为统计序列的信息,将树 \(dp\) 转化成序列 \(dp\)

如何得到

  1. 统计树上所有结点的度数 \(deg_i\)
  2. 找到所有度数为 \(1\) 的结点中编号最小的那个 \(cur\)
  3. 令序列 \(p_i = fa_{cur}\),同时将 \(deg_{fa_{cur}} - 1\)
  4. 重复 \(2,3\),直到剩余两个点时结束
void to_p() {
  int k;
  for (int i = 1; i <= n; i++) {
    if (deg[i] == 1) {
      k = i;
      break;
    }
  }
  for (int i = 1, j = k; i <= n - 2; i++) {
    int nf = fa[j];
    p[i] = nf;
    deg[nf]--;
    if (deg[nf] == 1 && nf < k) {
      j = nf;
      continue;
    }
    for (k++, j = k; deg[k] != 1; k++, j = k) {
    }
  }
}

性质

  1. 结点 \(x\)\(prufer\) 序列中出现次数加 \(1\) 就是 \(deg_x\)
  2. 编号最大的点 \(n\) 一定是剩下的 \(2\) 个结点之一
  3. 对于 \(n\) 个点的完全图,其生成树的方案数为 \(n^{n-2}\)
  4. 对于 \(n\) 个点的无根树,其树的方案书为 \(n^{n-2}\)
  5. 对于 \(n\) 个点的有根树,其树的方案书为 \(n^{n-1}\)
  6. 对于 \(n\) 个点,约定点 \(i\) 的度数为 \(d_i\),满足条件的树的方案数为 \(\frac{(n-2)!}{\prod\limits_{i=1}^n(d_i - 1)!}\)

还原

void to_t() {
  for (int i = 1; i <= n; i++) {
    deg[i]++, deg[p[i]]++;
  }
  int k, cnt = 0, j;
  for (int i = 1; i <= n; i++) {
    if (deg[i] == 1) {
      k = j = i;
      break;
    }
  }
  for (int i = 1; i <= n - 2; i++) {
    int nf = fa[j] = p[i];
    deg[nf]--;
    if (deg[nf] == 1 && nf < k) {
      j = nf;
      continue;
    }
    for (k++, j = k; deg[k] != 1; k++, j = k) {
    }
  }
  fa[j] = n;
}

基本计数原理

  1. 加法原理:解决一件事情,有 \(k\) 类方法,第 \(i\) 类方法有 \(a_i\) 种选择,那么总方案数 \(= \sum\limits_{i=1}^{k}a_i\)
  2. 乘法原理:解决一件事情,有 \(k\) 个步骤,第 \(i\) 个步骤有 \(a_i\) 种选择,那么总方案数 \(= \prod\limits_{i=1}^ka_i\)

排列与组合

  1. 排列:将 \(n\) 个元素选取 \(k\) 个出来构成一组排列,方案数 \(=A_{n}^{k}=\frac{n!}{(n-k)!}\)
  2. 组合:将 \(n\) 个元素选取 \(k\) 个出来构成一组集合,方案数 \(=C_{n}^{k}=\frac{A_{n}^{k}}{k!} = \frac{n!}{k!(n-k)!}\)

多重集的排列数与组合数

多重集排列数是指 \(k\) 种元素,第 \(i\) 种元素有 \(a_i\) 个,总元素个数为 \(n\),其全排列的方案数 \(=\frac{n!}{\prod\limits_{i=1}^ka_i!}\)
多重集组合数 1:
设有 \(k\) 种元素,第 \(i\) 种元素的个数为 \(a_i\),取共计 \(r\) 个元素构成集合,且 \(r \le a_i\),其组合数 \(=C_{k-1}^{r+k-1}\)(将 \(r\) 个元素分成 \(k\) 类,可以有一类没有)

组合数常用性质

  1. \(\sum\limits_{i=0}^{n}C_{n}^{i} = 2^n\)
  2. \(C_{n}^{m} = C_{n}^{n - m}\)
  3. \(C_{n}^{m} = C_{n - 1}^{m - 1} + C_{n - 1}^{m}\)

二项式定理

\((a+b)^n=\sum\limits_{i=0}^{n}C_{n}^{i}\times a^i \times b^{n-i}\)

组合数计算

  1. 杨辉三角递推计算
  2. 定义式计算

错位排序

\(n\) 个位置和 \(n\) 个小球,编号均为 \((1,n)\),所有小球 \(i\) 不放入位置 \(i\) 的方案总和为 \(f_n\)

  1. 若前面的已错位排序,那么只要将当前的与之前的换一下即可:\((i-1)*f_{i-1}\)
  2. 若前面恰好有一个没错位,那么只要将当前的与前面的换一下即可:\((i-1)*f_{i-2}\)(有 \(i - 2\) 已经错位排序)
  3. 若都不满足,一次操作必然不可能使它错位,所以贡献为 \(0\)
    所以 \(f_i=(i-1)(f_{i-1}+f_{i-2})\)

卢卡斯定理

对于正整数 \(n,m,p\),若 \(1 \le m \le n\)\(p\) 为质数那么 \(C_{n}^{m}\equiv C_{n \bmod p}^{m \bmod p}\times C_{\frac{n}{p}}^{\frac{m}{p}}\pmod{p}\)

变式

\(a_i\)\(n\)\(p\) 进制下的第 \(i\) 位,设 \(b_i\)\(m\)\(p\) 进制下的第 \(i\)
\(C_{n}^{m}\equiv \prod C_{a_i}^{b_i}\pmod{p}\)

费马小定理

\(p\) 为质数,且 \(p \nmid a\),有 \(a^{p - 1} \equiv 1 \pmod{p}\),不给证明,只记结论。

  1. 那么 \(\frac{x}{a}\) 在模 \(p\) 意义下为 \(\frac{x}{a} \equiv \frac{x}{a} \cdot a^{p - 1} \equiv x \cdot a^{p - 2} \pmod{p}\)

  2. \(a\) 在模 \(p\) 意义下的乘法逆元为 \(a^{p - 2}\)\(p\) 为质数,\(p \nmid a\)
    记作:\(a^{-1} = a^{p-2} \pmod{p}\)

位运算的一个定理

\(x + y = 2(x \And y) + (x \oplus y)\)

\(x \mid y = (x \And y) + (x \oplus y)\)

线性计算逆元的小技巧:

设:\(a=\left\lfloor\dfrac{p}{x}\right\rfloor\)\(b = p\; mod\; x\)
\(\therefore ax+b \equiv p \pmod{p}\)
\(\therefore ax \equiv -b \pmod{p}\)
\(\therefore x \equiv -\frac{b}{a} \pmod{p}\)
\(\therefore x^{-1} \equiv -\frac{a}{b} \pmod{p}\)
\(\therefore x^{-1} \equiv -a\cdot \frac{1}{b} \pmod{p}\)
\(\therefore x^{-1} \equiv -a\cdot b^{-1} \pmod{p}\)
所以可以递推求解,对于 \(b^{-1}\) 之前显然已经求解过了,所以时间复杂度是线性的。

\((p^x-1^x)\)分解因式

首先可以将式子拆成:\((p-1)y\),然后构造式子 \(y\),使得 \((p-1)y=(p^x-1^x)\)
首先式子需要一个 \(p^x\),所以 \(y\) 需要加上 \(p^{x-1}\)\(y\) 变成:
\(y = (p^{x-1})\)
那么此时 \((p-1)y = p^{x}-p^{x-1}\),我们发现多了一个 \(-p^{x-1}\),所以删掉一个 \(-p^{x-1}\)\(y\) 变成:
\(y=(p^{x-1}+p^{x-2})\)
然后以此类推……
到最后便成了 \(y=(p^{x-1}+p^{x-2}+p^{x-3}+\cdots+p^{0})\),将 \(y\) 带入式子,则变成 \((p-1)(p^{x-1}+p^{x-2}+p^{x-3}+\cdots+p^{0})\)
所以可以扩展 \((a^x-b^x)\),则应该为 \((a-b)(ab^{x-1}+ab^{x-2}+ab^{x-3}+\cdots+ab^{0})\)

posted @ 2023-05-17 20:46  yabnto  阅读(43)  评论(6编辑  收藏  举报