• 贝尔数学习笔记


    我们定义贝尔数(Bn)为:(n)个元素划分为任意个集合的方案数。

    根据定义可以知道(B_n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix})。根据这个式子计算单个贝尔数是(O(nlogn))

    贝尔数还可以通过递推式计算。假设前(n)个元素已经任意划分,现在加入第(n+1)个元素;枚举新元素与前面i个元素分为一个集合,剩下的(n-i)个元素任意划分,就有:

    [B_{n+1}=sum_{i=0}^n{nchoose i}B_{n-i}=sum_{i=0}^n{nchoose i}B_i ]

    这样可以(O(n^2))计算前(n)个贝尔数的值。

    贝尔数还可以写出生成函数。设(f_n)为n个元素划分为一个集合的方案数,显然(f_n=1)。写出(f_n)的指数型生成函数(F(x))就是:

    [F(x)=sum_{n=1}frac{x^n}{n!}=e^x-1 ]

    那么(n)个数划分为i个集合的方案数就是:

    [[x^n]F^i(x) ]

    枚举划分为多少个集合,那么贝尔数(B)的指数型生成函数(B(x))就可以写成:

    [B(x)=sum_{n=0}frac{F^n(x)}{n!}=e^{F(x)}=e^{e^x-1} ]

    使用多项式exp,就可以(O(nlogn))计算前(n)项贝尔数的值。

    我还在知乎写过贝尔数的一些性质:贝尔数满足Touchard同余

  • 相关阅读:
    Unity 小笔记
    UE4 Pure函数的特点
    C++ const总结
    配色问题lingo实现
    选址问题lingo求解
    迷宫问题python实现(靠右手摸墙)
    环形队列C++实现
    排队论的C实现
    递归实现全排列序列C语言实现
    双人贪吃蛇小游戏C++原创
  • 原文地址:https://www.cnblogs.com/akura/p/12463127.html
Copyright © 2020-2023  润新知