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

    组合数学

    加法原理和乘法原理

    分类相加 分步相乘

    排列数

    讲顺序

    [A_{n}^{m}=frac{n!}{(n-m)!}\,\,\,\,\,\,\, (mleq n,m与n均为自然数) ]

    组合数

    不讲顺序

    [dbinom{n}{m}=C_{n}^{m}=frac{A_n^m}{m!}=frac{n!}{m!(n-m)!} ]

    显然的公式:

    [sum_{k=0}^ndbinom{n}{k}=2^n ]

    [dbinom{n}{k}=dbinom{n-1}{k}+dbinom{n-1}{k-1} ]

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

    [dbinom{n}{k}=frac{n}{k}dbinom{n-1}{k-1} ]

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

    [sum_{i=0}^n(-1)^idbinom{m}{m-i}=dbinom{m+n}{m}\,\,\,(ngeq m) ]

    [sum_{i=0}^mdbinom{n}{i}^2=dbinom{2n}{n} ]

    [sum_{i=0}^nidbinom{n}{i}=n2^{n-1} ]

    [sum_{i=0}^ni^2dbinom{n}{i}=n(n+1)2^{n-2} ]

    [sum_{l=0}^ndbinom{l}{k}=dbinom{n+1}{k+1} ]

    [dbinom{n}{r}dbinom{r}{k}=dbinom{n}{k}dbinom{n-k}{r-k} ]

    [F_n表示斐波那契数列第n项:\,\,\,\,\,sum_{i=0}^ndbinom{n-i}{i}=F_{n+1} ]

    二项式定理

    [(a+b)^n=sum_{i=0}^ndbinom{n}{i}a^{n-i}b^{i} ]

    范德蒙德卷积

    [dbinom{n+m}{k}=sum_{i=0}^kdbinom{n}{i}dbinom{m}{k-i} ]

    多重集合的排列

    (n)个物品划分为(k)个集合,且每个集合的大小分别为(c_1,c_2,…c_k),且(sum c_i=n)。则其方案数为(frac{n!}{prod c_i!})

    现在有若干种相同的物品,每种的个数为(c_i),现在将这些物品排成一排,其方案数为(frac{(sum c_i )!}{prod c_i!})

    容斥原理

    盒子与球

    常用方法

    插板法

    就是在 (n) 个物品之间插上 (m) 个板,将其分为 (m+1) 组。

    捆绑法

    在解决对于某几个元素要求相邻的问题时,先整体考虑,将相邻元素视作一个大元素进行排序,然后再考虑大元素内部各元素间顺序的解题策略就是捆绑法。

    球相同,盒子不同,不能有空盒

    实质是n 个小球分为 m 组(不能空)

    插板法解决

    [ans=C_{n-1}^{m-1} ]

    球相同,盒子不同,可以有空盒

    转化为上面的问题,先在每个盒子里装一个球,最后再拿出来

    [ans=C_{n+m-1}^{m-1} ]

    球不同,盒子不同,可以有空盒

    [ans=m^n ]

    球不同,盒子相同,不能有空盒

    第二类斯特林数(简称S2)的定义为将(n)个物体划分成k个非空的没有区别的集合的方法数,大致就是把(n)个不同的小球放入(m)个相同的盒子中(且盒子不能为空)的方案数。

    递推公式为((S2[i][j])表示前 (i)个小球放到前 (j) 个盒子里的方案数):

    [S2[i][j]=S2[i−1][j]∗j+S2[i−1][j−1] ]

    还有一个公式(容斥原理可以证明):

    [S2(n,m)=frac{1}{m!}*sum_{k=0}^m(-1)^kdbinom{m}{k}*(m-k)^n ]

    球不同,盒子不同,不能有空盒

    就是算S2再消除球的有序性就行了

    [ans=m!*S2[n][m] ]

    球不同,盒子相同,可以有空盒

    由第二类斯特林数得

    [ans=sum_{i=1}^{m}S2[n][i] ]

    贝尔数(Bell数):第n个Bell数表示集合{1,2,3,...,n}的划分方案数

    [B_{n+1}=sum_{k=0}^ndbinom{n}{k}B_k ]

    [B_n=sum_{k=1}^nS2(n,k) ]

    球相同,盒子相同,可以有空盒

    (f[n][m])(n)个球放到(m)个盒子里的方案数

    如果只有一个盘子或者没有小球,方案数自然为(1)

    如果小球比盒子要少,小球肯定是放不满盒子的,由于盒子相同,可以得到转移(f[i][j]=f[i][i])

    如果小球比盒子要多,就分为将盘子放满和没放满两种情况,即(f[i][j]=f[i-j][j]+f[i][j-1])

    球相同,盒子相同,不能有空盒

    和上面一种有联系,先在每个盒子里放一个球,最后再拿出来

    [ans=f[n-m][m] ]

  • 相关阅读:
    python之+=与+(转载)
    python之上下文管理器与contextlib
    python之类中的super函数
    python之__dict__与dir(转载)
    python多继承之c3算法(转载)
    python之比较is与==(转载)
    python之鸭子类型
    python之抽象基类
    raindi python魔法函数(一)之__repr__与__str__
    Win7系统无法记住网络访问的凭据怎么办?
  • 原文地址:https://www.cnblogs.com/wsyunine/p/14477395.html
Copyright © 2011-2022 走看看