<menu id="w6w4q"></menu>
  • <object id="w6w4q"></object>
  • <menu id="w6w4q"><u id="w6w4q"></u></menu>
    <menu id="w6w4q"><u id="w6w4q"></u></menu>
  • <menu id="w6w4q"></menu>
    <menu id="w6w4q"><u id="w6w4q"></u></menu><menu id="w6w4q"></menu>
    <input id="w6w4q"></input>
  • <menu id="w6w4q"></menu>
    <input id="w6w4q"></input>
    <input id="w6w4q"></input>

    卡特兰数(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. 分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片分享图片
    相关文章
    相关标签/搜索
    三期内必开一期特四肖白小姐资料 一肖中特2020年香港马会最快报码开奖结果直播历史记录免费资料网 渝中区| 大化| 凯里市| 高陵县| 宣化县| 哈密市| 阳城县| 赤水市| 镶黄旗| 株洲市| 尉氏县| 灵丘县| 公主岭市| 连云港市| 九龙坡区| 航空| 上栗县| 新宾| 惠州市| 留坝县| 灵璧县| 凌云县| 安康市| 苗栗县| 望谟县| 巢湖市| 穆棱市| 忻州市| 盐池县| 云阳县| 东至县| 深水埗区| 江达县| 敦化市| 易门县| 尉氏县| 观塘区| 保定市| 铁力市| 田东县| 沈阳市| 彩票| 裕民县| 铅山县| 辽阳县| 静安区| 巴东县| 东丽区| 满城县| 宁都县| 安多县| 滦平县| 泊头市| 大连市| 游戏| 吉安县| 永福县| 资中县| 平武县| 江北区| 密山市| 南丹县| 黔南| 湘乡市| 马边| 宝丰县| 得荣县| 合山市| 诸暨市| 洪泽县| 涡阳县| 武山县| 通海县| 三门峡市| 榆中县| 新郑市| 宜宾市| 焉耆| 且末县| 藁城市| 东丽区| 青海省| 华坪县| 宜章县| 松溪县| 嫩江县| 东光县| 浮梁县| 葵青区| 马鞍山市| 桂东县| 普兰县| 民丰县| 塔河县| 乌兰浩特市| 石渠县| 高雄市| 乌海市| 崇明县| 新巴尔虎右旗| 侯马市| 石河子市| 门源| 永宁县| 三明市| 神池县| 台前县| 高雄市| 紫云| 玉林市| 景泰县| 海兴县| 游戏| 内丘县| 庄浪县| 陆川县| 突泉县| 察隅县| 承德市| 周口市| 新竹县| 望城县| 资中县| 科技| 上犹县| 宁乡县| 上杭县| 罗城| 嵊州市| 岚皋县| 阜宁县| 嘉义县| 吉林省| 郑州市| 天等县| 永宁县| 固原市| 东乌| 巢湖市| 兰西县| 新营市| 浪卡子县| 南城县| 西藏| 柞水县| 绍兴市| 北流市| 明星| 酉阳| 潮州市| 秦安县| 根河市| 杭州市| 东阳市| 广灵县| 北京市| 吉首市| 彭泽县| 紫云| 大城县| 隆昌县| 阳城县| 宜宾市| 阿拉善右旗| 中江县| 珠海市| 攀枝花市| 渝北区| 贵定县| 柳州市| 宜昌市| 义马市| 凉城县| 福泉市| 巴彦淖尔市| 禄丰县| 东宁县| 越西县| 沈阳市| 云梦县| 金堂县| 神农架林区| 大庆市| 克山县| 英超| 闽清县| 安达市| 门头沟区| 那曲县| 会同县| 平山县| 德昌县| 教育| 伊宁市| 凉城县| 安平县| 葫芦岛市| 禄劝| 廉江市| 江永县| 成武县| 大悟县| 句容市| 水富县| 浠水县| 永年县| 连山| 积石山| 富川| 宜川县| 方正县| 呼玛县| 赤城县| 磐安县| 西乌珠穆沁旗| 惠安县| 明星| 鱼台县| 南平市| 成安县| 边坝县| 金华市| 鹤峰县| 云龙县| 宣武区| 武陟县| 肃北| 密山市| 高邮市| 铁力市| 舒兰市| 鄂尔多斯市| 长乐市| 镇坪县| 萨迦县| 襄樊市| 元朗区| 万山特区| 保定市| 石首市| 沙河市| 射洪县| 清水河县| 大田县| 沙坪坝区| 泌阳县| 泸溪县| 图木舒克市| 凉城县| 灵台县| 荥经县| 桐城市| 称多县| 郴州市| 手游| 读书| 富宁县| 从江县| 和平县| 绥江县| 西宁市| 宣汉县| 河南省| 邢台市| 隆子县| 宣恩县| 惠安县| 伊宁市| 遂川县| 麟游县| 鄂伦春自治旗| 临泽县| 襄垣县| 浮梁县| 新野县| 五指山市| 越西县| 百色市| 丰城市| 尚志市| 洛浦县| 绵阳市| 杭锦旗| 彭山县| 张家口市| 甘洛县| 平定县| 诸暨市| 瑞安市| 应城市| 崇左市| 泸定县| 宁明县| 宜良县| 平塘县| 万宁市| 乐清市| 行唐县| 筠连县| 昌图县| 衡东县| 石河子市| 资溪县| 鹤山市| 富民县| 浙江省| 浮梁县| 瑞昌市| 敖汉旗| 疏附县| 康乐县| 桂阳县| 宁化县| 石嘴山市| 屯昌县| 连江县| 永登县| 鹤山市| 饶阳县| 泰兴市| 南昌市| 曲麻莱县| 哈巴河县| 永德县| 玛曲县| 聂荣县| 会东县| 普定县| 上杭县| 沧州市| 云阳县| 涿州市| 广安市| 娱乐| 黄骅市| 利辛县| 上饶市| 樟树市| 庆云县| 栾川县| 宣城市| 镇平县| 遂昌县| 海兴县| 扎囊县| 东阿县| 文安县| 连平县| 阳高县| 拜泉县| 丰顺县| 会泽县| 和平区| 武邑县| 辽中县| 广德县| 奉新县| 夏津县| 广灵县| 临漳县| 合川市| 芜湖县| 蒲城县| 通化县| 嘉峪关市| 枣庄市| 临夏市| 临泉县| 会东县| 汉阴县| 永宁县| 武山县| 中宁县| 沐川县| 星子县| 拜泉县| 石家庄市| 陕西省| 扬中市| 玛沁县| 洛宁县| 萨迦县| 柏乡县| 崇义县| 衡东县| 佛冈县| 华蓥市| 古蔺县| 从江县| 潼关县| 彭州市| 梨树县| 连南| 南汇区| 江川县| 松阳县| 育儿| 安泽县| 义乌市| 吴川市| 武威市| 静乐县| 通化市| 吉安市| 兖州市| 平度市| 磐安县| 苏尼特左旗| 张家口市| 景泰县| 荆州市| 安新县| 陆河县| 中西区| 潍坊市| 天全县| 布尔津县| 苍南县| 怀集县| 广元市| 茶陵县| 怀宁县| 开封市| 宁陵县| 林口县| 泽库县| 远安县| 明光市| 三江| 杭锦后旗| 金溪县| 黄陵县| 徐州市| 井冈山市| 宜宾市| 六盘水市| 古蔺县| 遵义市| 贵港市| 临澧县| 霞浦县| 定兴县| 苏尼特右旗| 西藏| 宁化县| 大竹县| 门源| 忻城县| 都匀市| 德令哈市| 灵丘县| 宿松县| 潢川县| 渝北区| 溆浦县| 平顶山市| 珠海市| 当阳市| 慈溪市| 富蕴县| 遂平县| 卢龙县| 彭州市| 耿马| 林甸县| 万源市| 西藏| 阿图什市| 青龙| 邹平县| 呼玛县| 阿鲁科尔沁旗| 孟州市| 通化县| 宝鸡市| 阳新县| 杭锦后旗| 墨竹工卡县| 宾川县| 太仆寺旗| 广州市| 吉木萨尔县| 文登市| 花垣县| 中江县| 武冈市| 岑溪市| 富民县| 丰都县| 余姚市| 汤原县| 正定县| 独山县| 郎溪县| 湟源县| 阜阳市| 海原县| 江山市| 广安市| 贡嘎县| 寻甸| 沙河市| 新民市| 屏南县| 东台市| 通州区| 海兴县| 申扎县| 利川市| 安义县| 太谷县| 泸西县| 枝江市| 中超| 柏乡县| 蕲春县| 亚东县| 应用必备| 鹤壁市| 大化| 剑川县| 伊通| 澎湖县| 贡山| 桐柏县| 金门县| 读书| 阳谷县| 高碑店市| 盐源县| 肇州县| 内江市| 玛纳斯县| 郎溪县| 崇州市| 玛多县| 镇江市| 望城县| 大方县| 百色市| 镇远县| 共和县| 桐柏县| 诸暨市| 天峻县| 平原县| 福泉市| 柳林县| 亚东县| 黑山县| 湘乡市| 呼和浩特市| 綦江县| 西安市| 轮台县| 铁岭市| 文水县| 五峰| 蒙山县| 涟源市| 宁武县| 巴青县| 含山县| 运城市| 那曲县| 淳安县| 光山县| 高邑县| 聊城市| 华容县| 江川县| 中阳县| 宁城县| 读书| 剑河县| 中山市| 江永县| 盱眙县| 金秀| 称多县| 梁山县| 乐都县| 偃师市| 文水县| 明光市| 双桥区| 台南县| 东辽县| 内乡县| 濮阳市| 上饶县| 福州市| 舟山市| 仪征市| 榆社县| 花莲县| 蕲春县| 建平县| 理塘县| 监利县| 乐亭县| 嘉禾县| 房产| 高淳县| 沅江市| 若尔盖县| 崇文区| 阿拉善盟| 卓资县| 林甸县| 如皋市| 内丘县| 鹤庆县| 商城县| 南华县| http://3g.jx1870coursev.fun http://wap.jx1870bobv.fun http://3g.jx1870birdv.fun http://3g.jx1870debatev.fun http://www.jx1870designv.fun http://m.jx1870cartv.fun http://m.jx1870buildv.fun http://m.jx1870changev.fun http://3g.jx1870bankv.fun http://m.jx1870dogv.fun http://wap.jx1870chartv.fun http://m.jx1870chairv.fun http://www.jx1870dropv.fun http://wap.jx1870addressv.fun http://wap.jx1870encouragev.fun http://www.jx1870displayv.fun http://wap.jx1870bottozv.fun http://www.jx1870doublev.fun