首页 > 其他分享 >球盒模型

球盒模型

时间:2023-07-25 10:11:19浏览次数:48  
标签:盒子 相同 int qquad 模型 元素 return 球盒

参考

算法学习笔记(7):球盒模型

斯特林数 - OI Wiki

贝尔数 - OI Wiki

基本模型

球盒模型可根据:

  • 球与球之间是否相同
  • 盒子与盒子之间是否相同
  • 盒子是否能为空

分为\(2^3=8\)种基本模型

n个相同的球,k个相同的盒子,盒子可为空

int box0(int n, int k) {
    if (!n) return 1;
    if (!k) return 0;
    if (n < k) return box0(n, n);
    return box0(n - k, k) + box0(n, k - 1);
}

n个相同的球,k个相同的盒子,盒子不为空

int box1(int n, int k) {
    if (n < k) return 0;
    return box0(n - k, k);
}

n个相同的球,k个不相同的盒子,盒子可为空

隔板法:

考虑将\(k-1\)个隔板插入\(n\)个小球中,转换成隔板插入的方案数

将木板和隔板都当作物品,即将\(n+k-1\)个物品中选出\(k-1\)个作为隔板,方案数为\(C_{n+k-1}^{k-1}\)

const int N = 1010, mod = 1e9 + 7;
ll c[N][N];

void initC() {
    c[0][0] = 1;
    for (int i = 1; i <= 1000; ++ i) {
        c[i][0] = 1;
        for (int j = 1; j <= 1000; ++ j)
            c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
    }
}

int box2(int n, int k) {
    return c[n + k - 1][k - 1];
}

n个相同的球,k个不相同的盒子,盒子不可为空

隔板法:

隔板只能插入球与球的间隔,方案数为\(C_{n - 1}^{k-1}\)

int box3(int n, int k) {
    return c[n - 1][k - 1];
}

n个不相同的球,k个相同的盒子,盒子可为空

从第二类斯特林数考虑:

盒子是相同的,考虑通过枚举一共几个非空盒子,即\(\sum_{k=0}^{n}{n \brace k}\)

int box4(int n, int k) {
    ll res = 0;
    for (int i = 1; i <= k; ++ i) res = (res + s[n][i]) % mod;
    return res;
}

特别的当\(n \leq k\)时,答案为贝尔数,记作\(B_{n}\)

\[B_{n+1}=\sum_{k=0}^{n}C_{n}^{k}B_{k} \]

\(B_{n+1}\)比\(B_{n}\)多一个元素\(a_{n+1}\),考虑:

  • 若这个元素单独划分为一类,剩下\(n\)个元素,共\(C_{n}^{0}B_{n}\)种方案
  • 若这个元素与另一个元素划分成一类,剩下\(n-1\)个元素,共\(C_{n}^{1}B_{n-1}\)种方案
  • 若这个元素与另两个元素划分成一类,剩下\(n-2\)个元素,共\(C_{n}^{2}B_{n-2}\)种方法
  • \(\cdots \cdots\)

贝尔数可通过贝尔三角形计算

\[\begin{aligned} & 1 \\ & 1\quad\qquad 2 \\ & 2\quad\qquad 3\quad\qquad 5 \\ & 5\quad\qquad 7\quad\qquad 10\,\,\,\qquad 15 \\ & 15\,\,\,\qquad 20\,\,\,\qquad 27\,\,\,\qquad 37\,\,\,\qquad 52 \\ & 52\,\,\,\qquad 67\,\,\,\qquad 87\,\,\,\qquad 114\qquad 151\qquad 203\\ & 203\qquad 255\qquad 322\qquad 409\qquad 523\qquad 674\qquad 877 \\ \end{aligned} \]

  • \(a_{0,0}=1\);
  • \(a_{n,1}=a_{n-1,n-1}\)
  • \(a_{n,m}=a_{n,m-1}+a_{n-1,m-1}\)

\(a_{n,1}\)即为\(B_{n}\)

void initBell(int n) {
    bell[0][0] = 1;
    for (int i = 1; i <= n; ++ i) {
        bell[i][0] = bell[i - 1][i - 1];
        for (int j = 1; j <= n; ++ j)
            bell[i][j] = (bell[i][j - 1] + bell[i - 1][j - 1]) % mod;
    }
}

n个不相同的球,k个相同的盒子,盒子不可为空

第二类斯特林数(斯特林子集数)\(n \brace k\),也记作\(S(n, k)\),表示将\(n\)个不同的元素划分为\(k\)个非空子集的方案数

\[{n \brace k}={n-1 \brace k-1}+{k}{n-1 \brace k} \]

即插入一个元素,可以:

  • 将元素单独放入一个集合
  • 将元素放入一个现有的集合
void initS2() {
    s[0][0] = 1;
    for (int i = 1; i <= 1000; ++ i)
        for (int j = 1; j <= 1000; ++ j)
            s[i][j] = (s[i - 1][j - 1] + j * s[i - 1][j] % mod) % mod;
}

int box5(int n, int k) {
    return s[n][k];
}

n个不相同的球,k个不相同的盒子,盒子可为空

ll qpow(ll a, ll b) {
    a %= mod;
    ll res = 1;
    while (b) {
        if (b & 1) res = (res * a) % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}

int box6(int n, int k) {
    return qpow(k, n);
}

n个不相同的球,k个不相同的盒子,盒子不可为空

类似于\(n\)个不相同的球,\(k\)个相同的盒子,盒子不可为空,只不过此时盒子不相同

可以类比成将球先装入\(k\)个相同且不为空的袋子,再将袋子放入盒子,总的方案数为\({n \brace k} \times k!\)

void initFac() {
    fac[1] = 1;
    for (int i = 2; i <= 1000; ++ i) fac[i] = i * fac[i - 1] % mod;
}

int box7(int n, int k) {
    return s[n][k] * fac[n] % mod;
}

To Be Continue\(\dots \dots\)

标签:盒子,相同,int,qquad,模型,元素,return,球盒
From: https://www.cnblogs.com/Panmaru/p/17579050.html

相关文章

  • 傻瓜式零代码 临床预测模型构建、评价、验证LogisticApp
    傻瓜式临床预测模型软件LogisticApp无需复杂冗长的代码只需要鼠标点点,即可轻松完成3分SCI支持Windows32位、64位,Macintel芯片、M1/M2芯片视频教程见B站up主:R语言临床预测模型1LogisticApp简介傻瓜式零代码Logistic临床预测模型构建、评价、验证。......
  • TVM编译深度学习模型
    QuickStartTutorialforCompilingDeepLearningModels本文将展示如何使用Relaypython前端构建神经网络,并使用TVM为NvidiaGPU创建实时运行库,需要有cuda版本的TVM和llvm。TVM支持的硬件后端图中展示了TVM目前支持的硬件后端将选择cuda和llvm后端,首先导入Relay和TVMimpo......
  • 基础模型自监督预训练的数据之谜:大量数据究竟是福还是祸?
    前言 在自监督预训练中,是否数据越多越好?数据增广是否始终有效?本文转载自PaperWeekly作者|诺亚方舟实验室仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全......
  • 超详细图文教程:3DS Max 中创建低多边形游戏长剑模型
    推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景在由两部分组成的教程的第一部分中,我向您展示了如何:剑柄建模为剑的护手建模剑刃建模在本教程系列的第二部分中,我将向您展示如何:打开紫外线包装创建紫外线贴图在Photoshop中创建纹理贴图05.UVW去除步骤1......
  • 5模型机整体的联调【FPGA模型机课程设计】
    5模型机整体的联调【FPGA模型机课程设计】前言推荐5模型机整体的联调安排MIPS基本整数指令集MIPS扩展整数指令集测试与结果1FPGA模型计算机整体方案设计掌握MIPS指令集的相关设计2模型计算机各功能电路设计初始化数据I型指令测试R型指令测试J型指令测试访存指令测试3模型机指令......
  • 中文核心周刊复现(北大核心)-基于逻辑回归的金融风投评分卡模型实现
    最近有些学员有论文需求,让我提供一下逻辑回归,金融风控,评分卡相关参考论文,以供参考。我找了一篇描述评分卡模型原理的论文,题目是《基于逻辑回归的金融风投评分卡模型实现》,第一作者边玉宁。这篇论文发布于中文核心周刊,北大核心。核心周刊相对于普通周刊难度较大,查重率在5-10%,录取率......
  • ARMA-GARCH-COPULA模型和金融时间序列案例|附代码数据
    原文链接: http://tecdat.cn/?p=3385最近我们被客户要求撰写关于ARMA-GARCH-COPULA的研究报告,包括一些图形和统计输出。从读取数据中获得各种模型的描述,包括一些图形和统计输出。 > oil = read.xlsx(temp,sheetName =“DATA”,dec =“,”)然后我们可以绘制这三个时间序列......
  • 基于cvx求解储能调峰调频模型附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 1.负载均衡服务LVS及三种模型实战案例
    知识小课堂1.负载均衡会话保持sessionsticky:同一用户调度固定服务器sessionreplication:每台服务器拥有全部sessionsessionserver:专门的session服务器2.LVS集群工作模式NAT:DR:(必须在同一网络,用改内核参数)TUNNEL:(可以跨网络,不用改内核参数,需要单独增加tunnel网卡)FUL......
  • 传染病模型
    传染病模型中的符号表示SI模型(艾滋传染模型)%%直接求微分方程的解析解dsolve('Dx1=-0.1*x1*x2/1000','Dx2=0.1*x1*x2/1000','x1(0)=999,x2(0)=1','t');%%根据S+I=N做一个化简x1=dsolve('Dx1=-0.1*x1*(1000-x1)/......