多重集合的排列组合
论述一些在组合数学里比较基础的问题。
多重集合的排列
给定 n 个数:a1,a2,...,an,求不重复的排列方案数。
显然我们可以直接发现,由于求不重复的排列方案数,代数值相同的两个数是没有区别的。
那么,考虑建立一个桶的数组,对代数值相同的计个数,所以可以得到一个不同的表示方法:
t1×a1,t2×a2,...,tk×ak
ti×ai 表示给定的 n 个数中,数值大小为 ai 的数为 ti 个,且对于 a1,a2,...,ak 而言是 k 个互不相同的代数值,而此时一共具有 k 个不同的代数值。
那么依次对于 ti×ai 进行放置,考虑到如果现在剩余 m 个位置,那么放置的方案数为 (tim)。
每次操作之后对于剩余位置数的处理为 m−ti,所以总方案数则为:
i=1∑k(tin−∑j=1j<itj)
t1!(n−t1)!n!⋅t2!(n−t1−t2)!(n−t1)!⋅,...,⋅tk!0!tk!=∏i=1kti!n!
换一种方式而言,∏i=1kti!n! 的表示可以看成对于所有的排列方案中,除去代数值相同的数所产生的重复排列的方案数。即对于 ai 而言,他所产生的多余的贡献值则为一个累积上的 ti,即本身的排列数。
多重集合的组合
无限元素多重集合
设 S 为有 k 种对象类型对象的多重集合,每种元素均具有无限的重复数,求 S 的 r 组合的方案数。
稍微考虑到一个简单的转化,原问题即求出对于 x1+x2+...+xk=r 方程的非负整数解的个数。
考虑插板法,对于 k 个对象中选出 r 组合而言,考虑到由于组合不计顺序,则形同于在 r+k−1 个位置中选出 k−1 个来放置隔板,从而分段形成 k 个区间来表示 x1 到 xk 的大小,即:
(k−1r+k−1)
有限元素多重集合
设 S 为有 k 种对象类型对象的多重集合 { n1⋅a1,n2⋅a2,...,ak⋅nk },求 S 的 r 组合的方案数。
则此问题可以转化为:求对于 x1+x2+...+xk=r 方程中满足 0≤x1≤n1,0≤x2≤n2,...,0≤xk≤nk 时的非负整数解的个数。
此时考虑到会涉及容斥原理的相关内容,我们将放在以后通过利用容斥原理对其予以讨论。