今天在二叉搜索树(随机组成情况)分析复杂度遇到 catalan数,学习并记录一下。
背景:
分析二叉搜索树(BST)的平均性能时,我们可以分为随机生成和随机组成分析。
随机生成:将各节点按照数的顺序随机排列。若含有n个节点(n个互异关键码),则有n!种全排列。若各排列作为输入序列的概率 均等,则只要它们各自所生成二叉收缩树的平均查找长度进行平均,则可在一定程序上反映二叉搜索树的平均查找性能。
根据Devroye, Luc. A note on the height of binary search trees[J]. Journal of the ACM, 1986, 33(3):489-498.和 Flajolet P , Odlyzko A . The average height of binary trees and other simple trees[J]. Journal of Computer and System Sciences, 1982, 25(2):171-213.文档的描述。我们可以得到,在这一随机意义下,二叉搜索树的平均高度为O(logn)。
随机组成:假定n个互异的节点同时给定,然后再遵循顺序性的前提下,随机确定它们之间的拓扑联接。可以证明,如此所得到的BST的总数恰好等于Catalan(n)。同时,因为这种分析得到的结果没有图7.9第五种情况一种BST结构对应两种不同的关键码序列,即结果更为准确。若这些树出现的概率相等,则通过对其高度做平均可知,平均查找长度为O()。
Catalan数
卡塔兰数是排列组合经常遇见的问题。以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名。
背景:
非负整数上的加泰罗尼亚数字是一组数字,这些数字出现在类型的树枚举问题中,“ 如果不同的方向分别计算,有多少种方法可以将正 n 边形 分为 n-2 个 三角形?” (欧拉多边形除法问题)。解决方案是加泰罗尼亚数字(Pólya1956;Dörrie1965; Honsberger 1973; Borwein和Bailey 2003,第21-22页)。
卡塔兰数前20項為(OEIS中的数列A000108):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 17672631
特点:
1.卡特兰数的一个特点是问题有n点,选择某一点后分成两个子问题,两个子问题互相独立
2.或者可以直接往原始定义方向建模:每一步有两种决策,规定任意时刻一种决策数量不能超过另一种
推导过程:
我们首先连接 n 边形的一条对角线,此时,我们会发现,这条对角线把当前图形分割成了2部分。那我们设其中一块有k+1条边(这样我们就可以得到k个三角形)。另一块图形我们剩余n-k-1条边,可以得到n-k-1个三角形。因为乘法原理,这样剖分的方案数就为 * 。
显然,k可以从0一直变化到n-1(注意,考虑边界情况,并注意到这里的对角线不相交,所以这里不会出现重复计数)。
所以,递推式为
这个数列就是著名的Catalan数列。
现在,我们将这玩意整成我们熟悉的带有组合数的通项公式:
基本公式
卡塔兰数的一般公式为:
我们常使用以下形式:
其中组合公式(二项式系数):
= 可以用阶乘法写成
拓展:
的另一个表达形式为
它也满足
这提供了一个更快速的方法来计算卡塔兰数。
卡塔兰数的渐近增长为
它的含义是当n → ∞时,左式除以右式的商趋向于1。(这可以用n!的斯特灵公式来证明。)
所有的奇卡塔兰数都满足。所有其他的卡塔兰数都是偶数。
参考文献:
https://en.wikipedia.org/wiki/Combination
https://baike.baidu.com/item/%E6%8E%92%E5%88%97%E7%BB%84%E5%90%88/706498?fr=aladdin