• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 深入理解卡特兰数及其应用

深入理解卡特兰数及其应用

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了卡特兰数,卡特兰数公式,卡特兰数公式推导,什么是卡特兰数,卡特兰数程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div> </div> </div>

递推关系:

C_0 = 1 \quad \mbox{and} \quad C_{n+1}=\sum_{i=0}^{n}C_i\,C_{n-i}\quad\mbox{for }n\ge 0.

它也满足

C_0 = 1 \quad \mbox{and} \quad C_{n+1}=\frac{2(2n+1)}{n+2}C_n, 
这提供了一个更快速的方法来计算卡塔兰数。

卡特兰数的应用n个元素顺序入栈,出栈顺序有多少种?此问题是一个卡特兰数问题,证明过程如下:

令1表示进栈,0表示出栈,则可转化为求一个2n位、含n个1、n个0的二进制数,满足从左往右扫描到任意一位时,经过的0数不多于1数。显然含n个1、n个0的2n位二进制数共有{2n \choose n}个,下面考虑不满足要求的数目。

考虑一个含n个1、n个0的2n位二进制数,扫描到第2m+1位上时有m+1个0和m个1(容易证明一定存在这样的情况),则后面的0-1排列中必有n-m个1和n-m-1个0。将2m+2及其以后的部分0变成1、1变成0,则对应一个n+1个0和n-1个1的二进制数。

反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。同样在后面部分0和1互换,使之成为由n个0和n个1组成的2n位数,即n+1个0和n-1个1组成的2n位数必对应一个不符合要求的数。
因而不合要求的2n位数与n+1个0,n-1个1组成的排列一一对应。 显然,不符合要求的方案数为c(2n,n+1)。

从而C_n = {2n \choose n} - {2n \choose n + 1} = \frac{1}{n+1}{2n \choose n}。证毕。

括号化问题   如,矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)

出栈次序问题  
1、一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?
2、有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)。

将多边行划分为三角形问题  
1、将一个凸多边形区域分成三角形区域的方法数?
2、一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?
3、在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

给顶节点组成二叉树的问题  给定N个节点,能构成多少种不同的二叉树?</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入理解卡特兰数及其应用

相关文章

  • 2017-05-28如何正确的使用语句块
  • 2017-05-28有关C++中类类型转换操作符总结(必看篇)
  • 2017-05-28获取一个文件行数的方法
  • 2017-05-28C语言中操作进程信号的相关函数使用详解
  • 2017-05-28C语言system 自动关机函数代码
  • 2017-05-28C++中将string类型转化为int类型
  • 2017-05-28C语言中使用lex统计文本文件字符数
  • 2017-05-28链接库动态链接库详细介绍
  • 2017-05-28详解C++编程中的变量相关知识
  • 2017-05-28C语言实现斗地主的核心算法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言 动态内存分配的详解及实例
    • c++编写简单的计算器程序
    • 剖析C++的面向对象编程思想
    • 基于C++ cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解
    • Linux线程管理必备:解析互斥量与条件变量的详解
    • C语言中强制地址跳转详解
    • C语言双向链表实现根据使用频率安排元素位置的功能实例代码
    • 深入解析C语言中常数的数据类型
    • 深入解读C++中的指针变量
    • c语言快速排序算法示例代码分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有