第二类斯特林数
定义:符号 {nk} 表示有 n 件物品的集合划分成 k 个非空子集的方案数。例如,将有一个有 4 个元素的集合分成两部分有 7 种方法:
{1,2,3}∪{4}, {1,2,4}∪{3}, {1,3,4}∪{2}, {2,3,4}∪{1}{1,2}∪{3,4}, {1,3}∪{2,4}, {1,4}∪{2,3}
我们来观察小的 k,恰有一种方法将 n 个元素分成一个单独的非空子集,于是对所有 n>0 有 {n1}=1,另一方面 {01}=0,因为有零个元素的集合是空集。
k=0 的情形:{00}=1,对于 n>0 有 {n0}=0。
k=2 的情形:有 {02}=0。如果一个有 n>0 个元素的集合被分成两个非空的部分,其中一部分包含最后一个元素以及前 n−1 个元素的某个子集。有 2n−1 种方式选择那个子集,但是我们不能把那些元素全部放入其中,因为我们想要划分出两个非空的部分。于是我们减去 1:{n2}=2n−1−1(n>0)
这个方法的修改引出一个递归式,通过它我们可以对所有的 k 计算 {nk}:给定有 n 个元素的集合,要把它分成 k 个非空的部分。我们可以将最后的元素单独放入一类(有 {n−1k−1} 种方式),或者把他与前面 n−1 个元素的某个非空子集放在一起(有 k{n−1k})。从而:
{nk}=k{n−1k}+{n−1k−1}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探