Stirling 第二类数与 Bell 数
组合数 回答的是「选出哪一部分」,划分数回答的是「切成哪几块」。后者不给块贴标号:把 个可辨的球分成恰 个非空且互不可辨的组,方式数记作 Stirling 第二类数(Stirling numbers of the second kind),也就是 元集合分成 块的划分数。对块数求和得到 Bell 数 ,即一个 元集合全部划分的个数。
1 · 分块与选取的差别
选取产出的是一个子集,它与自己的补集身份不同;划分产出的是一族块,块之间既无先后也无名字,写成 还是 都是同一个划分。四元集合分成两块共 种,与 只差一个数值上的巧合,两者问的不是同一件事。
有一条快捷的核对路线:给两块临时贴上标号 与 ,等价于为每个元素挑一个标号,共 种,扣掉两种让某一块落空的挑法得 ;标号是临时加的,撕掉它即除以 ,回到 。
2 · 三角上的递推
盯住第 个球,它只有两种去处。并入前 个球已经分好的 块中的某一块:前 个球须已占满 块,有 种分法,而第 个球有 个块可挑。或者自己单独成块:前 个球只分成 块,有 种分法。两类互斥且穷尽,
边界取 (空集只有一个划分,即不含任何块)、,以及 时为 。
这条递推与 Pascal 三角与二项式定理 的 结构相同,差别只在左项多出的系数 。系数的来历在于两种「不动」的做法数不一样:Pascal 里「第 个元素不选」只有一种做法,而划分里「第 个球并入已有的块」有 种——块虽不带标号,却由各自的成员互相区别开,是 个不同的去处。
3 · Bell 数与 Bell 三角
固定 把各块数的方案数相加,得到不限块数的划分总数 ,序列开头是 。它另有一条不经过 的算法:Bell 三角首行写 ,此后每行以上一行的末项开头,其余每项等于它的左邻加上一行的同列项,每行首项即 。第 4 行 的首尾两数是 与 。
按第 个元素所在的块有多大来分类,还能得到 :与它同块的 个同伴从其余 个元素里选,剩下的 个元素任意划分。
警示 · Bell 数越出双精度安全整数的位置比预想的早。本页的 bell() 走 Bell 三角的加法递推,在
上首次给出错值:算得 44152005855084344,精确值是 44152005855084346,差 2。
尚在 Number.MAX_SAFE_INTEGER 之内,
已经越过。加法递推本身不制造额外误差,失真全部来自结果放不进 53 位尾数。
枚举侧的规模涨得更凶。setPartitions(12) 材料化 4213597 个划分,在 node 26.6.0 上实测约 2.1 秒;
的 27644437 个划分在默认 4 GB 堆上跑了 73 秒后以 heap out of memory 中止。计数走递推是
次加法,枚举走递归是
次输出,两条路的分野在个位数的
上还看不出来。
4 · 满射与贴标号
给 个块重新贴上标号,一个划分就分裂成 个不同的对象,而这些对象恰好是 元集合到 元集合的满射:满射把定义域切成 个非空的原像,再把这 块与 个目标元素配对。于是满射数为 。同一个数也能由容斥算出——从全部 个映射里减去漏掉某个像的,加回漏掉两个像的,逐层交替:
见 容斥原理。两侧互不依赖,一侧走递推、一侧走带符号求和,对照起来便是一组现成的测试断言。
注 · 这组断言在
、
处分家:容斥式给出 566658892802,而
。结果本身只有约
,远在安全整数之内,坏掉的是中间项——
那一项
已是 Number.MAX_SAFE_INTEGER 的 3.3 倍,各项量级约为结果的五万倍,交错相消把有效位一并消去,残差落在末位。核算这类交错和须换 BigInt,或者干脆改走递推那一侧。测试里的等价断言也据此只覆盖
。
集合论那一侧关心的是怎样不重不漏地把这 个划分列出来,三种生成算法见 枚举全部划分:三种算法。 与 在球盒模型里各占若干格,全表见 十二重计数法。
5 · 参考文献
- Stirling numbers of the second kind. Wikipedia. 的递推、闭式与满射解释。https://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind
- Bell number. Wikipedia. Bell 数、Bell 三角与几条等价递推。https://en.wikipedia.org/wiki/Bell_number
- Twelvefold way. Wikipedia. 球盒模型的十二格总表。https://en.wikipedia.org/wiki/Twelvefold_way
- Graham, R. L., Knuth, D. E., & Patashnik, O. (1994). Concrete Mathematics (2nd ed.). Addison-Wesley. 第 6 章给出两类 Stirling 数的记号与恒等式表。