从软考题,看计算机的经典数学应用-卡特兰数

2019年上半年选择题第58题

有3个结点的二叉树有5种,可以推测出4个结点的二叉树有几种形态?

 

这是个卡塔兰数应用,把没使用节点看做0  使用了节点看做1  最后看出现的形状

定义

1.卡特兰数是一种数列,以比利时的数学家欧仁·查理·卡塔兰命名。是组合数学中一个常出现在各种计数问题中出现的数列
2.卡特兰数列:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012……

公式

  1. 令h(0)=1,h(1)=1,catalan数满足递推公式

    h(n)= h(0)h(n - 1) + h(1)h(n-2) + ... + h(n - 1)h(0) (n≥2) 【1】
    例如:
    h(2)=h(0)h(1) + h(1)h(0)=1·1 + 1·1=2
    h(3)=h(0)h(2) + h(1)h(1) + h(2)h(0)=1·2 + 1·1 + 2·1=5
  2. 项与项之间递推式
    h(n)=h(n - 1)(4·n - 2)/(n + 1)(n≥1) 【2】
  3. 组合公式
    h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】(其中C(2n,n)表示2n个中取n个的组合数)

注:组合数的计算

从n个不同元素中每次取出m个不同元素(0≤m≤n),不管其顺序合成一组,称为从n个元素中不重复地选取m个元素的一个组合。所有这样的组合的总数称为组合数,

 或

排列组合计算方法如下:

排列A(n,m)=n×(n-1).(n-m+1)=n!/(n-m)!(n为下标,m为上标,以下同)

组合C(n,m)=P(n,m)/P(m,m) =n!/m!(n-m)!;

例如:

A(4,2)=4!/2!=4*3=12

C(4,2)=4!/(2!*2!)=4*3/(2*1)=6

C(6,3)=6×5×4÷(3×2×1)=20。

公式理解

将递推公式【1】转化成给定N个节点,能构成多少种形状不同的二叉树问题。
将二叉树分为左子树和右子树以及根节点,已知根节点需要1个节点数,令i(i<N)个节点构成左子树,得到N - i - 1个节点构成右子树。这时可将由i个节点的左子树递归看成由i个节点构成的树的问题,同样N-i-1个节点的右子树仍可递归看成N-i-1个节点构成的树。没使用节点看做0  使用了节点看做1  最后看出现的形状
h(i)·h(N - i - 1)即第i(0≤i≤N-1)种情形,又因为i的取值范围为[0,N-1],所以得:
h(n)= h(0)h(n - 1) + h(1)h(n-2) + ... + h(n - 1)h(0) (n≥2)【1】。
当N=3时的二叉树种类:

3个节点的二叉树

将递推公式【3】转化为01排列问题,有n对01排成一个序列,从左往右统计该序列0和1的个数,1的个数小于等于0的个数即视为合法序列。
将n个0放入2n个位置上有C(2n,n)个组合情况为全排列情形,再减去不合法序列即为卡特兰数。
例如:
001101为一合法序列
011010为不合法序列(异常位为3)
经分析得知不合法序列的异常位总会出现在奇数位。
假设异常位为2i+1(0≤i<n),由此可知[0,2i+1]序列有i个0,i+1个1,在[2i+1,2n]序列有n-i个0,n-i-1个1,将[2i+1,2n]序列中的1置换为0,0置换为1,如(011010==>011101)由此可知2n的序列中有n-1个0,n+1个1,将n-1个0放入2n个位置上则有C(2n,n-1)个组合情况,该排列即为不合法情形。
所以可得:h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值