zoukankan      html  css  js  c++  java
  • 卡特兰数相关

    这一块一直学的不太好,基本停留在看到题可以看出来是个卡特兰数,但进一步的思考和推导,对我来说就变得困难起来,所以今天趁有时间,复习一下

    前言

    卡特兰数多用在组合数学的计数问题中,多是那种有两种选择,也就是求有限制的方案数

    公式

    $h(n)=h(0){ imes}h(n-1)+h(1){ imes}h(n-2)+{cdots}+h(n-1){ imes}h(0)$

    $h(n)=frac{h(n-1){ imes}(4{ imes}n-2)}{n+1}$

    $h(n)=C_{2{ imes}n}^{n}-C_{2{ imes}n}^{n-1}$

    $h(n)=frac{C_{2{ imes}n}^{n}}{n+1}$

    最后两个通项公式在组合数学中较为常用,关于最后两个通项公式的推倒,我简单推一下,其实就是对组合数公式的应用

    $h(n)=C_{2{ imes}n}^{n}-C_{2{ imes}n}^{n-1}$

       $=C_{2{ imes}n}^{n}-frac{(2{ imes}n)!{ imes}n}{n!{ imes}n!{ imes}(n+1)}$

       $=C_{2{ imes}n}^{n}-C_{2{ imes}n}^{n}{ imes}frac{n}{n+1}$

       $=frac{1}{n+1}{ imes}C_{2{ imes}n}^{n}$

    最常见模型

    常见的卡特兰数最基本最常见的模型是进出栈问题,也就是对于n个数,求其不同出栈次序的方案数,下面来自学长的解释

    关键在于那个前缀和不小于零,很多题都可以简化为这种问题,对于卡特兰数这种进出栈模型,在下面还会提到另一种理解

    简单应用

    1.进出栈模型

    2.二叉树计数

    3.多边形划分

    4.括号匹配

    5.有限制的网格路径

    关于这些,前方链接

    简单例题

    BZOJ3907网格

    当$n=m$时,这道题就是一个裸的卡特兰数,向右看作进栈,向上看为出栈

    那当$n>m$时呢?我们来考虑一下对于卡特兰数的另一种理解

    我们将这道题化减为一个模型,给你$n$个1,$m$个0,要求一个$01$串,使得任意前k位中0的个数不少与1的个数,双倍经验,我们考虑用总的方案数减去不满足的方案数,总方案显然是$C_{n+m}^{m}$,现在我们考虑不满足要求的01串,前提是满足$n$个$1$,$m$个$0$,对于一个不合法$01$串,我们设在第$i$位上为1,且第一次出现1的个数-0的个数=1,那么此时假如我们把这个串的前$i$个位置,$01$取反,那在此时的串中就出现了$m+1$个0和$n-1$个1,我们发现这种相互转化的关系是唯一对应的,所以不合法的$01$串的方案数是$C_{n+m}^{m+1}$,所以最后的答案就是$C_{n+m}^{m}-C_{n+m}^{m+1}=C_{n+m}^{n}-C_{n+m}^{n-1}$,当$n=m$时,这个式子就是卡特兰数的通项公式

    送一道还可以的练习题

  • 相关阅读:
    vscode 整理————开篇之力(一)
    重学c#系列——datetime 和 datetimeoffset[二十一]
    重新点亮shell————什么是shell[一]
    重新整理 .net core 实践篇——— 权限中间件源码阅读[四十六]
    为什么构建容器需要Namespace?
    基于Windows Mobile 5.0的掌上天气预报设计
    使用.NE平台调用服务访问非托管 DLL 中的函数
    .NET Framework 3.0 RC1 开发环境构建
    ASP.NET未处理异常的处理
    基于Silverlight的Windows Phone 推箱子程序开发
  • 原文地址:https://www.cnblogs.com/hzjuruo/p/11373035.html
Copyright © 2011-2022 走看看