当前位置: 首页 > wzjs >正文

网站页面一般做多大推广软文300字范文

网站页面一般做多大,推广软文300字范文,怎么做网站里的悬浮窗口,野望是什么意思前情提要,参考资料:卡特兰数 - OI Wiki 一、定义 卡特兰数(Catalan number)是一个在组合数学中经常出现的数列,应用范围很广,例如括号匹配问题、出栈顺序问题、多边形三角剖分问题等。在 C 中,可以使用多种…

前情提要,参考资料:卡特兰数 - OI Wiki

一、定义

        卡特兰数(Catalan number)是一个在组合数学中经常出现的数列,应用范围很广,例如括号匹配问题、出栈顺序问题、多边形三角剖分问题等。在 C++ 中,可以使用多种方法来计算卡特兰数,包括动态规划和递归等。​


 

二、推导

        1.速记20项:

C0 = 1,         
C1 = 1,         C2 = 2,          C3 = 5,          C4 = 14,          C5 = 42,
C6 = 132,       C7 = 429,        C8 = 1430,       C9 = 4862,        C10 = 16796,
C11 = 58786,    C12 = 208012,    C13 = 742900,    C14 = 2674440,    C15 = 9694845,
C16 = 35357670, C17 = 129644790, C18 = 477638700, C19 = 1767263190, C20 = 6564120420, ...

        2.通项公式:C_n= for(1-n)\frac{4k-2}{k+1}C_{n-1}(但其适用范围约1~100)

//算法:Catalan数
//时间复杂度:O(n)
#include <iostream>
#include <algorithm>
#define int unsigned long long
using namespace std;
const int N = 1e5+9;
int n,f[N];signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);cin >> n;f[0] = 1;for(int i = 1; i <= n; ++i)  f[i] = f[i-1]*(4*i-2)/(i+1);cout << f[n] << "\n";return 0;
}

        3.二叉树绘图

        说明: 3-0 中 左边的数为向左拓几个节点,右边则向右拓节点。那 3 即向左拓 3 个节点,0则不拓。见图

        4.括号序列:

                注:请对照以上二叉树观察

                说明:区域内单独一个括号为向左拓点,标注在括号中的括号为向右拓。若有不清请自行思考。

1. ()()()
2. (())()
3. ()(())
4. (()())
5. ((()))

        5.节点式:(或动态规划法)

                仍是以以上二叉树为例,n 个节点共 n-1 种搭配方式,一共 C_n = \sum_{k=0}^{n-1} C_kC_{n-1-k} 种方案。

                ed:

                C_3 = C_2C_0+C_1C_1+C_0C_2 = 2*1+1*1+1*2=5

                C_4=C_3C_0+C_2C_1+C_1C_2+C_0C_3=5*1+2*1+1*2+1*5=14

        Code ed:

//算法:卡特兰数
//时间复杂度:O(n^2) 
#include <iostream>
#include <vector>
#include <algorithm>
#define int unsigned long long
using namespace std;int Catalan(int n){//递推法(动态规划)计算第n个卡特兰数vector<int> f(n + 1, 0);f[0] = 1;for(int i = 1; i <= n; ++i){for(int j = 0; j < i; ++j){f[i] += f[j] * f[i - j - 1];}}return f[n];
}signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int n; cin >> n;cout << Catalan(n) << "\n";return 0;
}

        6.二项式系数法:

        直接公式:C_n=\frac{1}{n+1}*C(2n,n) 

        Code ed:

//算法:卡特兰数
//时间复杂度:O(n) 
#include <iostream>
#include <algorithm>
#define int unsigned long long
using namespace std;int binomialCoeff(int n, int k){if(k > n-k)  k = n-k;int res = 1;for(int i = 0; i < k; ++i){res *= (n - i);res /= (i + 1);}return res;
}int Catalan(int n){int C = binomialCoeff(2*n, n);return C / (n+1);
}signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int n; cin >> n;cout << Catalan(n) << "\n";return 0;
}

        注:该算法当 n≥20 时可能溢出 unsigned long long 的范围

               且必须使用整数运算除法必须在最后一步进行。

 


三、应用 

        范围较为广泛:

  • 括号序列: 合法的括号序列数量。
  • 二叉树: 二叉搜索树的数量。
  • 出栈序列: 出栈后1~n多少排列方式
  • Dyck 语言:在形式语言理论中,卡特兰数与 Dyck 语言中的字符串数量有关。
  • 山脉数量:由 nn 个“上”和 nn 个“下”组成的山脉序列的数量。
  • 路径问题:在网格中,从左下角到右上角的非交叉路径的数量。

统一模板:

//算法:卡特兰数
//时间复杂度:O(n^2) 
#include <iostream>
#include <vector>
#include <algorithm>
#define int unsigned long long
using namespace std;int Catalan(int n){vector<int> f(n + 1, 0);f[0] = 1;for(int i = 1; i <= n; ++i){for(int j = 0; j < i; ++j){f[i] += f[j] * f[i - j - 1];}}return f[n];
}signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int n; cin >> n;cout << Catalan(n) << "\n";return 0;
}
/*
//算法:Catalan数
//时间复杂度:O(n)
#include <iostream>
#include <algorithm>
#define int unsigned long long
using namespace std;
const int N = 1e5+9;
int n,f[N];signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);cin >> n;f[0] = 1;for(int i = 1; i <= n; ++i)  f[i] = f[i-1]*(4*i-2)/(i+1);cout << f[n] << "\n";return 0;
}
*/
/*
//算法:卡特兰数
//时间复杂度:O(n^2) 
#include <iostream>
#include <algorithm>
#define int unsigned long long
using namespace std;int binomialCoeff(int n, int k){if(k > n-k)  k = n-k;int res = 1;for(int i = 0; i < k; ++i){res *= (n - i);res /= (i + 1);}return res;
}int Catalan(int n){int C = binomialCoeff(2*n, n);return C / (n+1);
}signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int n; cin >> n;cout << Catalan(n) << "\n";return 0;
}
*/

 

四、典例

        1.出栈顺序:

                ed:P1044 [NOIP 2003 普及组] 栈 - 洛谷

                思路: 需利用乘法原理加法原理。1~n分为 1~k-1,序列个数为k-1;另外的是k+1~n,序列个数为n-k。通过递归的、得f(n)=f(k-1)*f(n-k)。接着往下推即可得到形似于C_n = \sum_{k=0}^{n-1} C_kC_{n-1-k} 的公式。

        2.二叉树计数

                类似于以上讲解,作图推导即可。

        3.阶梯问题

                需要用到动态规划。

               同上: C_n = \sum_{k=0}^{n-1} C_kC_{n-1-k}

        


 

五、总结        

        性质:卡特兰数随着 nn 的增加而迅速增长。

                   卡特兰数在组合数学中具有许多有趣的性质,例如它们是对称的,即 Cn=C2n−nCn​=C2n−n​。

        计算:在实际编程中,计算卡特兰数时需要注意整数溢出的问题,特别是当 nn 较大时。可以使用大数库或模运算来处理大数。

        省流:卡特兰数是一个强大的工具,用于解决各种组合问题。它们在计算机科学、数学和物理学中都有广泛的应用。理解卡特兰数的定义、递推公式和应用可以帮助你在解决相关问题时更加得心应手。当然,速记20项能记住就记住哦!


 

六、习题

        P1044 [NOIP 2003 普及组] 栈 - 洛谷

        P2532 [AHOI2012] 树屋阶梯 - 洛谷

        P1722 矩阵 II - 洛谷

        P1976 鸡蛋饼 - 洛谷

http://www.dtcms.com/wzjs/789926.html

相关文章:

  • 网站左侧 导航网站字体字号
  • 山东网站开发制作网站换了域名还被k站不
  • 网站建设实训报告册中山建设网站的公司
  • 微网站 pc网站同步wordpress搭建两个主题
  • 如何做文档附网站做二手车有哪些网站有哪些手续费
  • 免费网站怎么做排名建设一个网站得多少钱
  • 长沙推广网站中英文双语企业网站
  • 网站改版公司哪家好制作书签的感受心得
  • 中国建设银行网站如何注册长沙seo优化推广公司
  • 西安单位网站制作明星个人网站建设方案
  • 使用他人注册商标做网站大型手机网站制作
  • 珠宝公司网站模板免费发布产品信息网站
  • 国际网站建设与维护网站会员管理系统
  • 市妇联门户网站平台建设情况站长工具seo综合查询外部链接数量
  • 企业建站方案辽宁定制网站建设推广
  • 做网站一般用什么配置的电脑怎样学习做网站的编程
  • 网站举报平台毕节市建设厅网站
  • 河南网站建设公司|河南网站建设价格费用wordpress如何防止ddos
  • 网站投诉平台个人网站如何优化关键词
  • 烟台 o2o平台带动做网站行业wordpress页面难看
  • 贵州城市和城乡建设官方网站不适合做设计的人
  • 校园网站建设重要性沈阳专业制作网站公司哪家好
  • 邢台有什么网站免费做团购网站的软件好
  • 沈阳城市建设招生网站档案网站建设与知识管理
  • 戴尔的网站建设有哪些主要特色关键词优化公司排名榜
  • 3g开发网站学做川菜的网站
  • 网站建设昆山做机械设计的要知道哪些网站
  • 哪些网站百度不收录投资公司经营范围有哪些内容
  • 公司网站php重庆网站备案在那里
  • 怎么在网站做直播间小红书seo排名帝搜软件