• 卡特兰数(Catalan Number)

     

    卡特兰数又称卡塔兰数2477203708名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。该数在计算机专业中比较重要,有一些具体的应用实例。这篇文章主要分三部分:

    1. 卡特兰数递归式的含义解释
    2. 卡特兰数表达式的证明过程
    3. 卡特兰数的计算机中的应用

    Catalan Number递归式解释

    假设h(0)=1,h(1)=1,catalan数满足递推式:

    h(n)=h(0)?h(n?1)+h(1)?h(n?2)+h(2)?h(n?3)+...+h(n?1)?h(0)(1.1)(1.1)h(n)=h(0)?h(n?1)+h(1)?h(n?2)+h(2)?h(n?3)+...+h(n?1)?h(0)

    递归式背后有什么物理含义呢,这里以出栈序列问题进行说明:

     

    问题描述:一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

    含义解释:首先,我们设h(n)h(n)=序列个数为n的出栈序列种数。(我们假定,最后出栈的元素为k,显然,k取不同值时的情况是相互独立的,也就是求出每种k最后出栈的情况数后可用加法原则,由于k最后出栈,因此,在k入栈之前,比k小的值均出栈,此处情况有h(k?1)h(k?1)种,而之后比k大的值入栈,且都在k之前出栈,因此有h(n?k)h(n?k)种方式,由于比k小和比k大的值入栈出栈情况是相互独立的,此处可用乘法原则,h(n?k)?h(k?1)h(n?k)?h(k?1)种,求和便是Catalan递归式。

    Catalan Number表达式证明

    第n个卡特兰数h(n)表达式如下

    h(n)=Cn2nn+1=Cn2n?Cn?12n(1.2)(1.2)h(n)=C2nnn+1=C2nn?C2nn?1

    具体证明过程如下

    为了便于编程实现,需要进一步推导h(n)与h(n-1)之间的关系

    已知h(n)h(n),易知

    h(n?1)=Cn?12n?2nh(n?1)=C2n?2n?1n

    推导 h(n)h(n)的Cn2nC2nn和h(n?1)h(n?1)的Cn?12n?2C2n?2n?1之间的关系,由kCkn=nCk?1n?1kCnk=nCn?1k?1知
    n?Cn2nCn2nCn2nCn2nCn2nn+1h(n)=2nCn?12n?1=2Cn?12n?1=2(2n?1)Cn?12n?2n=2(2n?1)h(n?1)=2(2n?1)n+1h(n?1)=2(2n?1)n+1h(n?1)(1)(2)(3)(4)(5)(6)(1)n?C2nn=2nC2n?1n?1(2)C2nn=2C2n?1n?1(3)C2nn=2(2n?1)C2n?2n?1n(4)C2nn=2(2n?1)h(n?1)(5)C2nnn+1=2(2n?1)n+1h(n?1)(6)h(n)=2(2n?1)n+1h(n?1)

    最终得到h(n)h(n)和h(n?1)h(n?1)之间的递归式h(n)=2(2n?1)n+1h(n?1)h(n)=2(2n?1)n+1h(n?1)

     

    Catalan Number应用实例

    括号匹配问题

    问题描述: 矩阵连乘 P=A1A2...AnP=A1A2...An,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,问有几种括号化的方案?

    问题转换一下就是n对括号的正确匹配方案,可以做一下LeetCode-22

    出栈次序问题

    问题描述: 一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?

    出栈问题问题正是卡特兰数递归式h(n)=h(0)h(n?1)+h(1)h(n?2)+...+h(n?1)h(0)h(n)=h(0)h(n?1)+h(1)h(n?2)+...+h(n?1)h(0)的由来

    相关应用问题

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

    2. n个1和n个0组成一个2n位的二进制数,要求从左到右扫描,0的累计数不小于1的累计数,求满足条件的的数。

    3. 12个人排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

      我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排。对问题进行转化:用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,并且任意前缀中0的个数大于等于1的个数就对应一种方案,转化后的问题就是问题2了。

    4. 给定节点组成二叉树的问题:给定n个节点,能构成多少种形状不同的二叉树?

      先取一个点作为顶点,然后左边依次可以取0至n-1个相对应的,右边是n-1到0个,两两配对相乘,就是h(0)?h(n?1)+h(2)?h(n?2)+...+h(n?1)h(0)=h(n)h(0)?h(n?1)+h(2)?h(n?2)+...+h(n?1)h(0)=h(n)能构成h(n)h(n)个,因此二叉树问题也可以解释卡特兰数递归式(1.1)式的由来

    5. n*n棋盘从左下角走到右上角而不穿过主对角线的走法?

      要从左下角走到右上角则必须向上走n步,向右n步,同时为了不跨过主对角线,则走过的步数中向上走的步数必须大于等于向右走的步数,剖析之后发现这个问题与问题3是等价问题,走法有卡特兰数h(n)h(n)种。

      可以做一下下面两题练练手:

      hdoj2067-小兔的棋盘

      LeetCode62-Unique Paths

    6. n个+1和n个-1构成的2n项序列,其部分和总满足:a1+a2+...+an>=0a1+a2+...+an>=0的序列的个数。

      卡特兰数表达式(1.2)式就是以该问题模型为基础推导出来的

    7. 分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片
    相关文章
    相关标签/搜索
    六开彩开奖结果2017玽蓝月亮精选料二四六开奖结果下载-蓝月亮精选料天天好彩192.168.0.1开奖结果2019官方版 鄯善县| 阿拉善盟| 房产| 阿鲁科尔沁旗| 嘉义市| 冀州市| 乌兰察布市| 清涧县| 淳化县| 留坝县| 铜山县| 沐川县| 南投市| 克东县| 汪清县| 胶州市| 色达县| 抚松县| 观塘区| 肇东市| 延边| 丰都县| 衡阳县| 抚顺县| 商洛市| 老河口市| 清水河县| 西乌| 太白县| 沙田区| 平定县| 逊克县| 且末县| 沁水县| 洪湖市| 武威市| 深水埗区| 巴马| 商河县| 瑞金市| 浦东新区| 景泰县| 延津县| 遂昌县| 民和| 来安县| 和田县| 黑河市| 八宿县| 常熟市| 罗田县| 邻水| 金平| 宁津县| 腾冲县| 富平县| 平乡县| 辽源市| 井陉县| 靖远县| 布尔津县| 江孜县| 通许县| 乌苏市| 无极县| 湘乡市| 崇州市| 文山县| 平阴县| 娄底市| 罗平县| 青海省| 玛多县| 双桥区| 鞍山市| 神木县| 洪湖市| 麦盖提县| 乌审旗| 济南市| 鲁甸县| 富裕县| 太原市| 大冶市| 隆昌县| 乌兰浩特市| 清水河县| 涞源县| 老河口市| 济源市| 康定县| 德州市| 祁连县| 明光市| 沙雅县| 台北市| 铜山县| 京山县| 清新县| 宁都县| 建平县| 五峰| 玛沁县| 南昌市| 屏东县| 通化市| 汉川市| 左贡县| 兴城市| 康保县| 宁安市| 江华| 穆棱市| 秦皇岛市| 淮安市| 山西省| 普格县| 梅河口市| 龙口市| 新沂市| 富民县| 苏尼特左旗| 新丰县| 九龙坡区| 平湖市| 兴仁县| 弥渡县| 湖南省| 江都市| 镇原县| 修武县| 广灵县| 常宁市| 江口县| 五常市| 方城县| 临洮县| 共和县| 定西市| 礼泉县| 延寿县| 永济市| 三江| 翁牛特旗| 汤原县| 永靖县| 临朐县| 甘南县| 日土县| 资阳市| 稷山县| 兰考县| 梁河县| 华池县| 晋城| 桃江县| 青神县| 宜良县| 那坡县| 社旗县| 武义县| 会泽县| 蛟河市| 江北区| 旬邑县| 武邑县| 灵璧县| 安陆市| 绥阳县| 潞西市| 略阳县| 镇沅| 黄骅市| 普兰县| 衡南县| 密云县| 两当县| 河曲县| 新乡县| 台南市| 沁水县| 东山县| 岳阳市| 共和县| 克什克腾旗| 红安县| 岑巩县| 湖北省| 广灵县| 达尔| 巩留县| 新乡市| 平利县| 虹口区| 丘北县| 巩留县| 卢龙县| 文安县| 泰顺县| 恩施市| 安福县| 兴山县| 濉溪县| 丰县| 防城港市| 五常市| 崇礼县| 尼勒克县| 友谊县| 武威市| 福安市| 湘乡市| 锦屏县| 华宁县| 彭山县| 天等县| 安仁县| 义马市| 道真| 焦作市| 南昌市| 新源县| 田东县| 绩溪县| 德钦县| 那坡县| 阿克陶县| 凌源市| 金沙县| 岫岩| 珠海市| 济宁市| 绥芬河市| 阜平县| 富蕴县| 绥江县| 来凤县| 辽阳县| 大足县| 满洲里市| 马鞍山市| 高邮市| 望城县| 南华县| 汶川县| 始兴县| 霍邱县| 峨边| 封丘县| 青阳县| 乌兰浩特市| 灵石县| 高要市| 平山县| 夏邑县| 仁怀市| 晴隆县| 南开区| 汶上县| 岳普湖县| 汉阴县| 盐池县| 哈密市| 读书| 罗田县| 芮城县| 同仁县| 小金县| 泸西县| 延寿县| 宾阳县| 桦川县| 客服| 玛纳斯县| 独山县| 柳河县| 滨海县| 衡水市| 马公市| 独山县| 古浪县| 曲麻莱县| 建宁县| 南宫市| 广元市| 大城县| 浦北县| 牙克石市| 如皋市| 桂阳县| 丽江市| 宣汉县| 龙里县| 泾阳县| 高陵县| 开平市| 汤阴县| 临颍县| 永定县| 泰兴市| 兰坪| 修文县| 清苑县| 韶山市| 屏边| 永登县| 芜湖县| 武穴市| 鲁甸县| 全南县| 松江区| 甘孜| 无为县| 高碑店市| 驻马店市| 太湖县| 平山县| 宜昌市| 大化| 民和| 绥宁县| 合川市| 吉木萨尔县| 咸丰县| 舟曲县| 杂多县| 铁岭市| 岢岚县| 通辽市| 定边县| 陆良县| 孝昌县| 临朐县| 西青区| 广水市| 孙吴县| 萨迦县| 锦州市| 汉川市| 若尔盖县| 洛隆县| 离岛区| 搜索| 遵义县| 宁强县| 贵阳市| 漯河市| 兰溪市| 织金县| 淮阳县| 满洲里市| 卫辉市| 柞水县| 喀喇沁旗| 铁岭县| 三门县| 钟山县| 鄂温| 合山市| 沙坪坝区| 台山市| 思南县| 甘德县| 柯坪县| 凭祥市| 上犹县| 汉沽区| 泸水县| 泗洪县| 南投县| 鸡东县| 莱州市| 东至县| 福清市| 上林县| 光山县| 即墨市| 开封县| 新巴尔虎左旗| 东乌珠穆沁旗| 包头市| 哈巴河县| 巴东县| 东乌珠穆沁旗| 双流县| 五家渠市| 昌图县| 江川县| 邢台市| 新昌县| 文昌市| 黄龙县| 浪卡子县| 仁寿县| 城固县| 蓬安县| 永定县| 普洱| 平阴县| 九台市| 酒泉市| 潼南县| 晋城| 成安县| 济南市| 资阳市| 大竹县| 思南县| 巴东县| 渝北区| 三穗县| 湄潭县| 泉州市| 富蕴县| 红原县| 金华市| 定安县| 崇仁县| 盈江县| 保德县| 新巴尔虎右旗| 太康县| 衡东县| 汝城县| 宿松县| 武邑县| 宝鸡市| 资阳市| 莒南县| 高尔夫| 个旧市| 绥芬河市| 尤溪县| 罗甸县| 抚松县| 吉首市| 雅江县| 德钦县| 绥德县| 和硕县| 和硕县| 碌曲县| 察隅县| 资阳市| 巩义市| 巴彦淖尔市| 铁岭市| 安顺市| 会昌县| 富蕴县| 宣城市| 德阳市| 阿尔山市| 石城县| 唐河县| 县级市| 尼勒克县| 乃东县| 六盘水市| 栖霞市| 佳木斯市| 灵丘县| 石阡县| 进贤县| 北辰区| 连平县| 西林县| 张北县| 昭觉县| 英超| 阿拉善右旗| 贞丰县| 教育| 灵丘县| 肥西县| 来宾市| 潼南县| 长岛县| 隆化县| 米林县| 三门峡市| 赤城县| 彭州市| 丰宁| 萝北县| 平凉市| 乌拉特前旗| 和田县| 将乐县| 修水县| 郸城县| 瑞昌市| 河曲县| 本溪| 吉水县| 蛟河市| 房产| 进贤县| 弋阳县| 朝阳区| 格尔木市| 来凤县| 扬中市| 红河县| 紫云| 融水| 铜川市| 读书| 永昌县| 财经| 酒泉市| 惠东县| 竹溪县| 菏泽市| 泉州市| 治多县| 金山区| 修文县| 开封市| 延庆县| 西华县| 凤庆县| 突泉县| 新蔡县| 周宁县| 吕梁市| 五峰| 常宁市| 宝山区| 全南县| 东光县| 山丹县| 汝阳县| 基隆市| 江永县| 沈阳市| 中江县| 遵化市| 龙泉市| 昆明市| 桃园县| 威海市| 天峨县| 内江市| 亳州市| 吉林省| 河西区| 曲水县| 自贡市| 惠安县| 临猗县| 沁源县| 楚雄市| 新巴尔虎左旗| 山阴县| 海门市| 南昌市| 黎平县| 同德县| 旅游| 汉沽区| 临漳县| 巨鹿县| 定结县| 珠海市| 溧水县| 河北区| 十堰市| 陇南市| 嘉荫县| 竹溪县| 甘泉县| 阳城县| 安丘市| 正镶白旗| 五莲县| 湘潭市| 白银市| 弥渡县| 杭锦旗| 满城县| 枣强县| 喀什市| 东方市| 永清县| 安仁县| 广西| 鹿邑县| 贞丰县| 诸暨市| 汉川市| 青河县| 交城县| 龙江县| 三明市| 静安区| 大连市| 财经| 栾川县| 孟村| 云浮市| 溧水县| 金秀| 利津县| 城市| 富阳市| 当阳市| 昆明市| 铜川市| 馆陶县| 托克托县| 阳曲县| 达尔| 远安县| 玉山县| http://m.jx1870defaultv.fun http://jx1870appealv.fun http://m.jx1870antiquev.fun http://wap.jx1870causev.fun http://m.jx1870bowlv.fun http://m.jx1870appealv.fun http://m.jx1870buyv.fun http://m.jx1870cashv.fun http://wap.jx1870corev.fun http://wap.jx1870dezov.fun http://wap.jx1870controlv.fun http://jx1870addv.fun http://3g.jx1870cozzissionv.fun http://m.jx1870affiliatev.fun http://3g.jx1870chairzanv.fun http://3g.jx1870dryv.fun http://3g.jx1870becozev.fun http://3g.jx1870abusev.fun