You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何n较大时Bell数计算结果不准确?

整数分拆结合Faà di Bruno公式计算Bell数出错排查

我尝试通过整数分拆和Faà di Bruno公式计算大集合的Bell数(Bell数表示n个元素集合的所有可能划分方式总数),思路是遍历n的所有整数分拆,计算每个分拆对应的组合数后累加得到Bell数。

我采用Nicolas Blanc的整数分拆代码,结合视频介绍的Faà di Bruno公式计算组合数:公式逻辑为用n!除以分拆中每个子集大小的阶乘乘积,再除以各相同大小子集数量的阶乘乘积,得到该分拆对应的集合划分数目,最终累加所有分拆的结果得到Bell数。

小数值n的计算结果正常,比如n=4时能得到正确的Bell数15,但当n≥12时结果出现偏差:

  • 输入n=12时,代码输出4213663,正确值应为4213597
  • 输入n=13时,代码输出27645945,正确值应为27644437

我无法定位问题根源,可能是公式使用错误、代码存在bug或其他未知问题。相关参考方向:Bell多项式、集合划分、Bell数。

附Python代码:

import math

in_par = []
stack = []
bell = 0  

def partitions(remainder, start_number = 1):
    if remainder == 0:
        in_par.append(list(stack))
        #print(stack)
    else:
        for nb_to_add in range(start_number, remainder+1):
            stack.append(nb_to_add)
            partitions(remainder - nb_to_add, nb_to_add)
            stack.pop()

x = partitions(13) # <------- 输入元素数量

for part in in_par:
    combo = 1
    n = 13 # <------- 输入元素数量
    
    part.reverse()
    refined = []
    counts = []
    
    for elem in part:
        if str(refined).find(str(elem)) == -1:
            refined.append(elem)

        #print(str(combo) + " * " + str(math.factorial(elem)) + " a")
        combo = combo * math.factorial(elem)
    
    for elem in refined:
        
        #print(str(combo) + " * !" + str(part.count(elem)) + " b")
        combo = combo * math.factorial(part.count(elem))
        
        counts.append(str(part.count(elem)))
    
    
    for i in range(len(part)):
        part[i] = str(part[i])
    
    print(str(n) + "! / (" + ("!").join(part) + "! * " + ("!").join(counts) + "!)")
    
    for i in range(len(part)):
        part[i] = int(part[i])
    
    combo = math.factorial(n) // combo
    bell = bell + combo
    part.append([combo])
    
    print(part)
    print("")
    
    #print(str(bell))

print("Bell Number: " + str(bell))

内容的提问来源于stack exchange,提问作者lordfoog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:31:12