Bell数入门
贝尔数
贝尔数是以埃里克·坦普尔·贝尔命名,是组合数学中的一组整数数列,开首是(OEIS的A000110数列):
$$B_0 = 1, B_1 = 1, B_2 = 2, B_3 = 5, B_4 = 15, B_5 = 52, B_6 = 203, ...$$
$B_n$ 的含义是基数为 $n$ 的集合划分成非空集合的划分数。
例如, $B_3=5$ 是因为3个元素的集合有5种划分方法:
{{a}, {b}, {c}}
{{a}, {b, c}}
{{b}, {a, c}}
{{c}, {a, b}}
{{a, b, c}};
贝尔数有递推公式:
$$\displaystyle B_{n+1} = \sum_{k=0}^n\binom{n}{k}B_k$$
上述组合公式的证明:
可以这样来想,$B_{n+1}$ 是含有 $n+1$ 个元素集合的划分个数,考虑元素 $b_{n+1}$,
假设他被单独划分到一类,那么还剩下n个元素,这种情况下划分个数为 $\binom{n}{n}B_n$
假设他和某一个元素被划分为一类,那么还剩下n-1个元素,这种情况下划分个数为 $\binom{n}{n-1}B_{n-1}$
假设他和某两个元素被划分为一类,那么还剩下n-2个元素,这种情况下划分个数为 $\binom{n}{n-2}B_{n-2}$,
依次类推,得到了上述组合公式
它们也适合“Dobinski公式”:
$\displaystyle B_n = \frac{1}{e}\sum_{k=0}^{\infty}\frac{k^n}{k!}$
即期望值为1 的泊松分布的 $n$ 次矩。
它们也适合"Touchard同余":若 $p$ 是任意素数,那么
$$B_{p+n} = B_n + B_{n+1}$$
$$B_{p^m+n} = mB_n + B_{n+1}$$
贝尔数模素数 $p$ 的周期为:
$$T_p = \frac{p^p-1}{p-1}$$
每个贝尔数都是相应第二类斯特林数的和
$$\displaystyle B_n = \sum_{k=0}^nS(n, k)$$
因为,第二类斯特林数 $S(n, k)$ 是把基数为 $n$ 的集合划分为正好 $k$ 个非空集合的方案数。
此外,贝尔数的指数型母函数是
$$\displaystyle \sum_{n=0}^{\infty }\frac{B_n}{n!}x^n = e^{e^x-1}$$
贝尔三角形
用以下方法建构一个三角矩阵(形式类似杨辉三角形):
- 第一行第一项为1($a_{1,1}=1$)
- 对于 $n>1$,第 $n$ 行第一项等于第 $n-1$ 项的最后一项($a_{n,1} = a_{n-1, n-1}$)
- 对于 $m,n>1$,第 $n$ 行第 $m$ 项等于它左边和左上两个数之和($a_{n,m} = a_{n, m-1} + a_{n-1, m-1}$)
结果如下:(OEIS:A011971)
每行首项是贝尔数。每行之和是第二类Stirling数。
可以利用这个三角形来求Bell数,
#include<bits/stdc++.h>
using namespace std; const int maxn = +;
const int mod = ; //周期为13
int bell[maxn], T[maxn]; void Bell(int n, int mod) //求前n项Bell数
{
bell[] = bell[] = ;
T[] = ;T[] = ;
for(int i = ;i <= n;i++)
{
T[i-] = bell[i-];
for(int j = i-;j >= ;j--) //滚动数组
T[j] = (T[j] + T[j+]) % mod;
bell[i] = T[];
}
} int main()
{
Bell(, mod);
for(int i = ;i < ;i++)
printf("%d%c", bell[i], (i+)% == ? '\n' : ' ');
}
参考链接:
1. https://zh.wikipedia.org/w/index.php?title=%E8%B4%9D%E5%B0%94%E6%95%B0
2. https://blog.csdn.net/ACdreamers/article/details/12309269
Bell数入门的更多相关文章
- Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- Stirling数,Bell数,Catalan数,Bernoulli数
组合数学的实质还是DP,但是从通式角度处理的话有利于FFT等的实现. 首先推荐$Candy?$的球划分问题集合: http://www.cnblogs.com/candy99/p/6400735.ht ...
- Bell数和Stirling数
前面说到了Catalan数,现在来了一个Bell数和Stirling数.什么是Bell数,什么是Stirling数呢?两者的关系如何,有用于解决什么算法问题呢? Bell数是以Bell这个人命名的,组 ...
- codeforces 569D D. Symmetric and Transitive(bell数+dp)
题目链接: D. Symmetric and Transitive time limit per test 1.5 seconds memory limit per test 256 megabyte ...
- 恶补---bell数
定义 bell数即一个集合划分的数目 示例 前几项的bell数列为 1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975 ,... 求值方法 1.bell ...
- (转) [组合数学] 第一类,第二类Stirling数,Bell数
一.第二类Stirling数 定理:第二类Stirling数S(p,k)计数的是把p元素集合划分到k个不可区分的盒子里且没有空盒子的划分个数. 证明:元素在哪些盒子并不重要,唯一重要的是各个盒子里装的 ...
- Catalan卡特兰数入门
简介 卡特兰数是组合数学中的一种常见数列 它的前几项为: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, ...
- Day9--Python--函数入门
函数神马是函数: 函数是对功能或动作的封装函数的定义: def 函数名(形参列表): #参数 函数体(return) 调用: ret = 函数名(实参列表) 函数名就是变量名: 函数名的命名规则:变量 ...
- 卡特兰(Catalan)数入门详解
也许更好的阅读体验 基本概念 介绍 学卡特兰数我觉得可能比组合数要难一点,因为组合数可以很明确的告诉你那个公式是在干什么,而卡特兰数却像是在用大量例子来解释什么时卡特兰数 这里,我对卡特兰数做一点自己 ...
随机推荐
- 分布式session一致性
实现思路:当客户端发送请求到服务端后,在后台生成一个token,将token作为key,用户状态信息作为value,存入redis缓存中,并设置过期时间,最后把token返回给客户端 客户端第会保存t ...
- Mybatis 批量插入带oracle序列例子+ORA-02287: 此处不允许序号
在使用mybatis进行批量插入时,发现对于使用Oracle的自动增长序列时提示 : ORA-02287: 此处不允许序号 的错误,下面的这种使用可以解决问题: <!-- 批量插入 --> ...
- C语言 小球撞击反弹
计算法(略) #include <stdio.h> #include <stdlib.h> int main() { int x, y, a, resu; scanf(&quo ...
- ElasticSearch动态修改副本个数
创建只有 一个主分片,没有副本的小索引: PUT /my_temp_index{ "settings": { "number_of_shards" : 1, & ...
- DNS原理及劫持问题
对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被“连接”起来的.本文通过“我”,一个普通的网络请求的视角,给大家介绍下“我”的工作流程是如何的. 人们动动手指,点 ...
- kali之nmap
nmap简介 Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包.可以扫描主机.端口.并且识别端口所对应的协议,以及猜测操作系统 Ping扫描(-sP参数) TCP ...
- 【强烈推荐】ok-admin 一个好看又好用的后台模版!!!
ok-admin 一个很赞的,扁平化风格的,响应式布局的后台管理模版,旨为后端程序员减压! 目前一共有两个版本:ok-admin v1.0和ok-admin v2.0可自由选择! 源码地址:https ...
- idea2019的安装与激活
1.安装及相关资料下载 链接:https://pan.baidu.com/s/1njKjorAvaWftuGCvCQzP3A 提取码:r8h8 2.安装步骤 几乎是傻瓜式的安装,点击下一步即可 注意两 ...
- MySQL修炼之路三
1. SQL查询 1. 执行顺序 3. select ... 聚合函数 from 表名 1. where ... 2. group by ... 4. having ... 5. order by . ...
- 基于centos7.6离线部署开k3s
K3S简介: https://k3s.io/ https://github.com/rancher/k3s https://github.com/rancher/k3s/releases / ...