概念

可重复组合数和常规的组合数并不相同。可重复组合数是指,给出 种物品(假设 种物品都是足够的,且同种物品都是等价的),要求从这 种物品中拿出 个物品有多少种组合。

例子

显然,生活中有很多这样的例子。就例如一个简单的数学问题,设代数 ,求问这 3 个代数可以生成多少个二次项?

建模成上面的概念也就是,有 3 种物品(分别是 ),要求计算出这 3 种物品中拿出 2 个物品的组合数。

通过简单的枚举法,可以发现能够 总共 6 个二次项。

算法

显然我们不可以每次都依赖手动枚举,这样效率太低。为了方便叙述,我们先用下面这个符号表示从这 种物品中拿出 个物品的组合数。

首先给出结论

证明

数学归纳法

递推式

首先我们考虑一下 是否存在有一个递推式。答案是有的。这里也是首先给出结论:

还是刚才的例子,对于 而言,这 6 个二次项可以分为 3 类:

这样的分类很自然:毕竟生成的二次项中, 要么是 0 次,1 次或者 2 次。

那么,对于 为 0 次项的时候,它结合的就是 生成的 2 次项;对于 为 1 次项的时候,它结合的则是 生成的 1 次项……以此类推,你就明白了上面的这个递推式。

此外,不难定义一些边界:

  1. 生成 0 次项:
  1. 单个物品:

数学归纳法证明

首先对于上面提到的这些边界,显然是符合结论的。也就是说:

那么假设当 时,,试证明当 时,有

引入我们之前提到的递推式,其实就是试证:

我们把假设带入进上式,并把组合数改写成阶乘的形式,其实就是试证:

我们稍加整理,实际上就是试证:

现在既然通分了,自然可以只看分子了。所以其实就是试证:

这个时候我们不妨对等式两边不断地减去等号左边的单项式,我们会发现它具有一定的规律:

这是减去了第一个单项式:

接着减去第二个单项式:

最后不断地减下去……显然,剩下的会是这样:

因此得证有:当 时,有

所以:

一种形象的证明

这个证明来源于维基百科

首先我们可以这个问题看作是如下一个方程的自然数解的数量:

关于上述丢番图方程(Diophantine equation)的解,可以用如下方式表示:

先画出 个星星(★),接着放一个分隔符(竖线 |), 再画出 ​ 个星星,然后再放一个分隔符, 以此类推。

在这种表示法中,星星的总数是 ,而分隔符的数量是 (因为要把一个整体分成 份,需要 个分隔符)。

因此,一串包含 (或写作 )个符号(星星与竖线)的序列,如果其中有 个位置放的是星星,那么就对应一个方程的解。

换句话说: 每一个解都可以通过在这 个位置中选择 个位置放星星(剩下的放竖线)来表示。

例如,方程

(其中 )的一个解

可以表示为:

★ ★ ★ | ★ ★ | | ★ ★ ★ ★ ★