zoukankan      html  css  js  c++  java
  • 组合数学的那些事

    一些经典的排列组合问题

    • 可重复排列

    \(n\) 个不同元素中选取 \(m\) 个元素(同一元素允许重复取出),按照一定顺序排成一列,有 \(n ^ m\) 种取法。

    • 可重复的组合

    \(n\) 个不同元素种取 \(m\) 个元素(同一元素允许重复取出)并成一组,有 \(\dbinom{n + m - 1}{m}\) 种取法。

    证明:转化为原组合定义。

    • 不全相异元素的全排列

    如果 \(n\) 个元素中,分别有 \(n_1, n_2, ..., n_k\) 个元素相同,且 \(n_1 + n_2 + \cdots + n_k = n\),则这 \(n\) 个元素的全排列个数记作 \(\dbinom{n}{n_1\ n_2\ \cdots \ n_k} = \dfrac{n!}{n_1!n_2! \cdots n_k!}\)

    证明:类似于组合的证明

    • 多组组合

    \(n\) 个相异元素分为 \(k(k \le n)\) 个按照一定顺序排列的组,其中第 \(i\) 组有 \(n_i\) 个元素 \((i = 1, 2, \cdots, k, n_1 + n_2 + \cdots + n_k = n)\),则不同的分组方法种数为 \(\dbinom{n}{n_1 \ n_2 \ \cdots \ n_k} = \dfrac{n!}{n_1!n_2! \cdots n_k!}\)

    证明:用组合数选取获类似于上面那个的证明。

    • 圆排列

    \(n\) 个不同元素不分首尾排成一圈,其排列种数为 \((n - 1)!\)

    证明:考虑到将一个序列首尾相接成一个圆,那么将这个圆旋转一周所对应的序列和原序列等价但又算入了全排列,因此排列个数为 \(\dfrac{n!}{n} = (n - 1)!\)

    • 项链数

    \(n\) 粒不同的珠子用线串成一副项链,则得到的不同项链数

    \[f(n) = \begin{cases} 1, & (n = 1, 2) \\ \frac{1}{2}(n - 1)!, & (n \ge 3) \end{cases} \]

    证明:\(n = 1, 2\)时显然。\(n \ge 3\) 时考虑到将项链正着或反着来看是一致的即圆排列中顺时针逆时针的所有序列均一致,故个数为圆排列的一半。

    记一道题

    \(6\) 位女同学和 \(15\) 位男同学围成一圈跳集体舞(每名同学不同),要求每两名女同学之间至少有两名男同学,那么一共有多少种不同的围圈跳舞的方法?

    首先可以将一个女同学和两个男同学配对,将这两个男同学放在这个女同学两边。那么这样形成六个组的方案为 \(A^{12}_{15}\),接下来将剩下的三个男生单独看成一组,那么这九组构成圆排列的方案为 \(8!\),根据乘法原理总方案为 \(A^{12}_{15} \cdot 8!\)

    再记一道题 51nod 1677 treecnt

    题意:给你一颗大小为 \(n(n \le 10 ^ 5)\) 的树,你需要选出 \(k(k \le n)\) 个点,找到最少的边使得他们联通,求这些最少的边数之和。

    直接考虑选那些点再算边很不好做,考虑每条边对答案的贡献。枚举每一条边,设它左边的点数为 \(x\) 右边的点数为 \(y\),显然这个东西可以 \(dfs\) 预处理出来。那我们考虑选择这条边的数量有那些,如果这 \(k\) 个点都在左边或者都在右边是不需要经过当前边的,但是如果这 \(k\) 个点分布在两个集合就一定需要经过这条边,所以这条边的贡献就用总方案减去不合法的方案就好了,即 \(\dbinom{n}{k} - \dbinom{x}{k} - \dbinom{y}{k}\).

    一些组合数恒等式:

    \[\dbinom{n}{m} = \dbinom{n - 1}{m} + \dbinom{n - 1}{m - 1} \]

    \[\dbinom{n}{m + 1} = \frac{n - m}{m + 1} \dbinom{n}{m} \]

    \[\dbinom{n + 1}{m} = \frac{n + 1}{n - m + 1} \dbinom{n}{m} \]

    \[\dbinom{n + 1}{m + 1} = \frac{n + 1}{m + 1} \dbinom{n}{m} \]

    \[\dbinom{n}{m} \dbinom{m}{k} = \dbinom{n}{k} \dbinom{n - k}{m - k} = \dbinom{n}{k \quad m - k \quad n - m} \]

    \[\dbinom{l}{m} + \dbinom{l + 1}{m} \cdots + \dbinom{r}{m} = \dbinom{r + 1}{m + 1} - \dbinom{l}{m + 1} \]

    \[\dbinom{l}{m} + \dbinom{l + 1}{m + 1} + \cdots + \dbinom{r}{m + r - l} = \dbinom{r + 1}{m + r - l} - \dbinom{l}{m - 1} \]

    \[\sum\limits_{k = 0} ^ p \dbinom{n}{k} \dbinom{m}{p - k} = \dbinom{n + m}{p} \]

    二项式定理:

    \[(x + y) ^ n = \sum\limits_{k = 0} ^ n \dbinom{n}{k} x ^ k y ^ {n - k} \]

    • 扩展

    \(y = 1\):

    \[(x + 1) ^ n = \sum\limits_{k = 0} ^ n \dbinom{n}{k} x ^ k \]

    对两边同时求导可得:

    \[n(x + 1) ^ n - 1 = \sum\limits_{k = 1} ^ n \dbinom{n}{k} \cdot k x ^ {k - 1} \]

    再令 \(x = 1\):

    \[n 2 ^ {n - 1} = \sum\limits_{k = 1} ^ n k \dbinom{n}{k} \]

    通过类似的方法可以求 \(\sum\limits_{k = 0} ^ n k ^ 2 \dbinom{n}{k}\)\(\sum\limits_{k = 0} ^ n k ^ 3 \dbinom{n}{k}\) 以及更高次的级数。

  • 相关阅读:
    torch.nn.functional中softmax的作用及其参数说明
    from __future__ import包的作用
    python textwrap的使用
    深度学习框架PyTorch一书的学习-第五章-常用工具模块
    python实现命令行解析的argparse的使用
    pytorch visdom可视化工具学习—2—详细使用-1—基本使用函数
    pytorch visdom可视化工具学习—2—详细使用-3-Generic Plots和Others
    pytorch visdom可视化工具学习—2—详细使用-2-plotting绘图
    硬盘没有显示
    Eclipse中syso 快捷键 Alt + / 不能使用的问题
  • 原文地址:https://www.cnblogs.com/Go7338395/p/13270388.html
Copyright © 2011-2022 走看看