生成整数并设置分区

生成所有整数分区并设置分区,其中部分/子集的数量可以是固定的或任意的。
对象类型
整数/集的大小$n$ (最多15个)
零件/子集的数量$m$ (1到$n$)
输出格式
输出  编号绘图

对象信息

这个整数分区描述所有把这个数写成正数和的方法,称为部分,其中部分的顺序无关紧要。 零件通常是按降序列出的。 例如,5的七个整数分区是$5=4+1=3+2=3+1+1=2+2+1=2+1+1+1=1+1+1+1$。 数字分区可以通过费雷尔图,它由一系列的框组成,每一行中的框的数量由分区中的部分给出,例如,前面的5个分区产生了下图所示的图。

A设置分区地集的一个划分就是将这个集合划分为非空子集,其中子集的排序是不相关的。每个子集中元素的排序也是不相关的,我们在不损失一般性的情况下使用字典序排序。例如,ground set$\{1,2,3\}$的五个集合分区都是$123,12 | 3,1 | 2,3,1 | 23,13 | 2$,其中,子集之间的边界用竖线表示,为了简单起见,省略了子集括号。

这个网站上运行的算法是Jörg Arndt的FXT库的一部分。 生成整数分区的算法在Knuth的书[第7.2.1.4节,Knu11]中描述。 生成集合分区的算法在Knuth的书中被描述为算法H[第7.2.1.5节,Knu11]。

枚举(OEI)

整数分区的数目由分区编号给出(OEIS A000041),集合分区的个数由Bell数给出(OEIS A000110).

下载源代码

[压缩C++源代码(GNU GPL)]
[链接到Jörg Arndt的FXT库(GNU GPL)]

工具书类