首页 > 代码库 > 2017.3.10组合数学学习——多重集合的排列

2017.3.10组合数学学习——多重集合的排列

多重集合的排列
定理:设S是多重集合,他有k种不同类型的对象,每一种类型的有限重复数是n1,n2,n3,…nk。设S的大小为n=n1+n2+n3+…nk。则S的n排列数目为n!/(n1!n2!n3!…nk!)
证明:
先从S中选出n1个位置放a1,有C(n,n1)种放法,再选出n2个位置放a2,有C(n-n1,n2)种放法……
由乘法原理得:
S的排列个数=C(n,n1)*C(n-n1,n2)*C(n-n1-n2,n3)*…*C(n-n1-n2-…-nk-1,nk)
∵C(n,r)=p(n,r)/r!=n!/[r!*(n-r)!]
∴原式=  n!           (n-n1)!                (n-n1-n2-…-nk-1)!       
        --------- *   -----------     * … *---------------------- 
        n!(n-n1)!   n2!(n-n1-n2)!          nk!(n-n1-n2-…-nk)!
  去公因式可得证
如果S只有2种对象a1,a2,重复数分比为n1,n2,其中n=n1+n2
那么由以上定理可得
S的排列数=n!(n1!n2!)=n!/[n1!*(n-n1)!]=C(n,n1)
所以C(n,n1)即可以看做n对象集合的n1子集数量,
也可以看做有两种类型的对象且重复数分别是n1和n-n1的多重集合排列数
定理:设n是正整数,并设n1,n2,…,nk,是正整数,且n=n1+n2+…nk。把n对象集合划分为k个标有标签的盒子,且第1个盒子含有n1个对象,第2个盒子含有n2个对象,…,第k个盒子含有nk个对象,这样的划分方法数=n!(n1!n2!…nk!)
如果盒子没有标签,且n1=n2=n3=…=nk,那么划分数=n!(k!n1!n2!…nk!)
定理:有k种颜色的n个车,第一种颜色有n1个,第二种颜色有n2个,…,第k种颜色有nk个。把这些车放在一个n*n的棋盘上使车之间不能互相攻击的方案数=(n!)²/(n1!n2!…nk!)
所以,一种颜色的n个车有n!种方法,n种颜色的n个车有(n!)²个
感性认知:
放置n个同颜色的车与n的排列有一一对应关系。即n的排列有n!种,每种排列放置的行不一都是一种新方案。颜色限制,相当于多重集合S的n排列。
注:以上所有公式前提:n=n1+n2+…nk
若两边不相等时
例:S={3*a,2*b,4*c},求S的8排列数
解:S的集合可被划分为3个部分,由多重集合排列公式可得:
    ① 少一个a:s1=8!/(2!*2!*4!)
    ② 少一个b:s2=8!/(3!*1!*4!)
    ③ 少一个c:s3=8!/(3!*2!*3!)
   ans=s1+s2+s3
错解:s1=6!/(2!*4!)*C(7,2)
订正:s1=6!/(2!*4!)*[C(7,2)+C(7,1)]
因为2个a可以挨着

2017.3.10组合数学学习——多重集合的排列