zoukankan      html  css  js  c++  java
  • 组合数学习笔记

    本文为上课的学习笔记

    1.排列&组合

    组合,从\(n\)个元素中选\(m\)个,不及顺序
    方案数:

    \[\tbinom{n}{m}=\frac{n!}{m!(n-m)!} \]

    排列,从\(n\)个元素中,选\(m\)个,考虑顺序
    方案数:

    \[P(n,m)=\frac{n!}{(n-m)!} \]

    2.组合数性质

    \(\tbinom{n+m}{n}=\tbinom{n+m}{m}\)
    很显然,从\(n+m\)个元素中选\(n\)个,和选\(m\)个不要是一样的

    \(\tbinom{n}{m}=\tbinom{n-1}{m-1}+\tbinom{n-1}{m}\)
    一个很重要的性质,一般可以在\(n,m\)都不大的时候做递推来预处理
    现在已经知道了有\(n-1\)个元素的情况,考虑第\(n\)个元素
    如果选它,则前\(n-1\)的元素中只能选\(m-1\)个,所以方案数为\(\tbinom{n-1}{m-1}\)
    如果不选它,则前\(n-1\)的元素中要选\(m\)个,所以方案数为\(\tbinom{n-1}{m}\)
    根据加法原理,相加即可

    \(\tbinom{n+m+1}{m}=\tbinom{n+m}{m}+\tbinom{n+m-1}{m-1}+\tbinom{n+m-2}{m-2}+\dots+\tbinom{n}{0}\)
    根据上面那个式子,我们可以把\(\tbinom{n+m+1}{m}\)拆成\(\tbinom{n+m}{m}+\tbinom{n+m}{m-1}\)
    然后,保留\(\tbinom{n+m}{m}\),将\(\tbinom{n+m}{m-1}\)继续按同样的方法拆
    最后一次拆就是:\(\tbinom{n+2}{1}=\tbinom{n+1}{1}+\tbinom{n+1}{0}\)
    然后\(\tbinom{n+1}{0}=\tbinom{n}{0}\),就不用拆了

    \(\sum_{i=0}^n \tbinom{n}{i}=2^n\)
    等式左边意义是从\(n\)个元素中选\(i,0\leq i\leq n\)个的方案和,则为从\(n\)个元素中选任意个的方案和
    即为\(n\)个元素的子集个数\(2^n\)

    \(\tbinom{n}{0}-\tbinom{n}{1}+\tbinom{n}{2}-\dots=0\)
    简单说,就是从\(n\)个元素中选偶数个的方案数和和选奇数个的方案数和相等
    这个东西可以从杨辉三角上考虑
    众所周知,杨辉三角的每一位等于它的左上方的数加上它右上方的数
    那么取每一行的奇数位或偶数位(即从左到右数是第奇数/偶数个),都可以表示为它上一行所有数的和的形式
    可以自己画一个体会体会,太懒所以不画在这了

    \(\tbinom{m}{m}+\tbinom{m+1}{m}+\dots+\tbinom{n}{m}=\tbinom{n+1}{m+1}\)
    和第三个式子证法有些相似相信你们已经忘了第三个式子是哪个式子
    还是一项一项拆开
    \(\tbinom{n+1}{m+1}=\tbinom{n}{m}+\tbinom{n}{m+1}\)
    保留\(\tbinom{n}{m}\),继续拆\(\tbinom{n}{m+1}\)\(\tbinom{n-1}{m}+\tbinom{n-1}{m+1}\)
    然后再拆后面那项
    一直拆到\(\tbinom{m+1}{m+1}=\tbinom{m}{m}+\tbinom{m}{m+1}\)
    当然,\(\tbinom{m}{m+1}=0\),所以得证

    \((x+y)^n=\sum_{i=0}^n \tbinom{n}{i}x^iy^{n-i}\)
    二项式展开,比较重要,可以看出它也对应了杨辉三角
    不过想严格证明好像挺难

    \(\sum_{i=0}^n \tbinom{n}{i}^2=\tbinom{2n}{n}\)
    假设现在有\(2n\)个球,等式右边就是选\(n\)个的方案数
    考虑将他们分成两组,每组\(n\)个,那么共选\(n\)个的方案数也可以表示为:
    第一组选\(0\)个,第二组选\(n\)个,加上第一组选\(1\)个,第二组选\(n-1\)个.....即第一组选\(i\)个,第二组选\(n-i\)
    即为\(\sum_{i=0}^n \tbinom{n}{i}\tbinom{n}{n-i}=\sum_{i=0}^n\tbinom{n}{i}^2\)

    吸收公式:\(\tbinom{n}{m}=\frac{n}{m}\tbinom{n-1}{m-1}\)
    直接用定义展开即可

    \(\sum_{i=0}^n\tbinom{i}{m}=\tbinom{n+1}{m+1}\)
    \(0,1,2\cdots n\) 中选 \(m+1\) 个数,最大数为 \(i\) 的方案数为 \(\tbinom{i}{m}\)

    \(\tbinom{n}{m}\tbinom{m}{k}=\tbinom{n}{k}\tbinom{n-k}{m-k}\)
    左边:从 \(n\) 个里面选 \(m\) 个,再在这 \(m\) 个里选 \(k\)
    右边:直接从 \(n\) 个里面选 \(k\) 个,然后在从剩下的 \(n-k\) 个里选左边的描述里第二次选淘汰掉的 \(m-k\)

    和下降幂相关联:\(\dbinom{n}{k}\times k^{\underline{m}}=\dbinom{n-m}{k-m}\times n^{\underline{m}}\)
    仍然是拆成阶乘消一消

    3.算组合数

    这还用算?直接暴力枚举就行(bushi

    3.1递推

    复杂度\(O(nm)\)
    直接用之前推的第二个性质,一边加一边取模

    3.2约分

    \[\tbinom{n}{m}=\frac{n!}{m!(n-m)!}=\frac{n\times (n-1)\times \dots \times (n-m+1)}{m!} \]

    适用于\(m\)较小,\(n\)较大
    对于模数是质数,可以直接逆元
    如果不是,对分数上下分别分解质因数来做除法,然后快速幂合并

    3.3Lucas

    适用于\(n,m\)较大,\(k\)为小质数
    关于它的证明和使用看这里

    3.4exLucas

    不过和Lucas关系好像并不大

    适用于\(n,m\)较大,\(k\)较小但不保证是质数
    具体写起来还是挺复杂挺难的,也可能是我太蒻
    具体看这里
    花了好长时间才搞懂,然后写代码又写了一晚上+一早上......我太蒻了

    4看点题

    4.1P4369

    \(x\)拆成\(k\)个不同组合数之和
    很傻的一个题,前\(k-1\)个写为一些元素选0个,每个都是1
    最后一个写成\(x-k+1\)个元素选一个
    然后就没了

    4.2P4370

    用到一种神奇的取\(\log\)方法快速比较两个组合数大小
    具体看题解

    4.3P3746

    并没有做出了,待更
    做出来了,懒得更

  • 相关阅读:
    关键字,保留字
    20181024
    php连接mysql数据并查询
    java 字符串的json格式数据转换成Map集合
    IntelliJ IDEA的一些快捷键
    Java的反射机制简述
    java主函数知识
    单例设计模式---懒汉式的多线程安全隐患
    java的单例设计模式(对象的延时加载)考试专用
    java的单例设计模式
  • 原文地址:https://www.cnblogs.com/suxxsfe/p/12527225.html
Copyright © 2011-2022 走看看