Catlan数

Catlan数是一种与括号序列、二叉树和特定路径数量相关的数学概念。通项公式为Cn=(n+1)!/n!(2n!),其前100项展示了这一序列。它在计算合法括号序列、二叉树结构以及特定路径数量等问题中有重要应用。此外,Catlan数的生成函数为F(x)=2x/(1-2/(1-4x)),并可以进行模数计算,如Lucas取模和非素数模数情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Catlan数
  • 100 100 100 C a t l a n Catlan Catlan

    string catalan[]=
    {
        "1",
        "2",
        "5",
        "14",
        "42",
        "132",
        "429",
        "1430",
        "4862",
        "16796",
        "58786",
        "208012",
        "742900",
        "2674440",
        "9694845",
        "35357670",
        "129644790",
        "477638700",
        "1767263190",
        "6564120420",
        "24466267020",
        "91482563640",
        "343059613650",
        "1289904147324",
        "4861946401452",
        "18367353072152",
        "69533550916004",
        "263747951750360",
        "1002242216651368",
        "3814986502092304",
        "14544636039226909",
        "55534064877048198",
        "212336130412243110",
        "812944042149730764",
        "3116285494907301262",
        "11959798385860453492",
        "45950804324621742364",
        "176733862787006701400",
        "680425371729975800390",
        "2622127042276492108820",
        "10113918591637898134020",
        "39044429911904443959240",
        "150853479205085351660700",
        "583300119592996693088040",
        "2257117854077248073253720",
        "8740328711533173390046320",
        "33868773757191046886429490",
        "131327898242169365477991900",
        "509552245179617138054608572",
        "1978261657756160653623774456",
        "7684785670514316385230816156",
        "29869166945772625950142417512",
        "116157871455782434250553845880",
        "451959718027953471447609509424",
        "1759414616608818870992479875972",
        "6852456927844873497549658464312",
        "26700952856774851904245220912664",
        "104088460289122304033498318812080",
        "405944995127576985730643443367112",
        "1583850964596120042686772779038896",
        "6182127958584855650487080847216336",
        "24139737743045626825711458546273312",
        "94295850558771979787935384946380125",
        "368479169875816659479009042713546950",
        "1440418573150919668872489894243865350",
        "5632681584560312734993915705849145100",
        "22033725021956517463358552614056949950",
        "86218923998960285726185640663701108500",
        "337485502510215975556783793455058624700",
        "1321422108420282270489942177190229544600",
        "5175569924646105559418940193995065716350",
        "20276890389709399862928998568254641025700",
        "79463489365077377841208237632349268884500",
        "311496878311103321137536291518809134027240",
        "1221395654430378811828760722007962130791020",
        "4790408930363303911328386208394864461024520",
        "18793142726809884575211361279087545193250040",
        "73745243611532458459690151854647329239335600",
        "289450081175264899454283846029490767264392230",
        "1136359577947336271931632877004667456667613940",
        "4462290049988320482463241297506133183499654740",
        "17526585015616776834735140517915655636396234280",
        "68854441132780194707888052034668647142985206100",
        "270557451039395118028642463289168566420671280440",
        "1063353702922273835973036658043476458723103404520",
        "4180080073556524734514695828170907458428751314320",
        "16435314834665426797069144960762886143367590394940",
        "64633260585762914370496637486146181462681535261000",
        "254224158304000796523953440778841647086547372026600",
        "1000134600800354781929399250536541864362461089950800",
        "3935312233584004685417853572763349509774031680023800",
        "15487357822491889407128326963778343232013931127835600",
        "60960876535340415751462563580829648891969728907438000",
        "239993345518077005168915776623476723006280827488229600",
        "944973797977428207852605870454939596837230758234904050",
        "3721443204405954385563870541379246659709506697378694300",
        "14657929356129575437016877846657032761712954950899755100",
        "57743358069601357782187700608042856334020731624756611000",
        "227508830794229349661819540395688853956041682601541047340",
        "896519947090131496687170070074100632420837521538745909320"
    };
    
  • 通项公式

    • C n = C 2 n n n + 1 C_n = \displaystyle\frac{C_{2n}^{n}}{n+1} Cn=n+1C2nn
    • C n = ( 2 n ) ! ( n + 1 ) ! n ! C_n = \displaystyle\frac{(2n)!}{(n+1)!n!} Cn=(n+1)!n!(2n)!
    • C n = C 2 n n − C 2 n n + 1 C_n = C_{2n}^{n} - C_{2n}^{n+1} Cn=C2nnC2nn+1
    • C n + 1 = ∑ i = 0 n C i C n − i C_{n+1} = \sum_{i = 0}^{n}C_{i}C_{n - i} Cn+1=i=0nCiCni C 0 = 1 C_0 = 1 C0=1
    • C n + 1 = 2 ( 2 n + 1 ) n + 2 C n C_{n + 1} = \displaystyle\frac{2(2n+1)}{n+2}C_n Cn+1=n+22(2n+1)Cn C 0 = 1 C_0 = 1 C0=1
    • C n ∼ 4 n n 3 / 2 π 2 C_{n} \sim \displaystyle\frac{4^n}{n^{3/2}\sqrt[2]{\pi}} Cnn3/22π 4n 渐进式
  • 应用

    • n n n 个左括号和 n n n 个右括号组成得合法括号序列数量

    • 1 , 2 , . . . , n 1,2,...,n 1,2,...,n 经过一个栈,形成的合法出栈序列的数量

    • n n n 个节点构成的不同二叉树的数量

    • 坐标中只能向上,向右走,从 ( 0 , 0 ) ∼ ( n , n ) (0,0)\sim(n,n) (0,0)(n,n) 并且除两个端点外不接触直线 y = x y = x y=x 的路线数量

  • c a t l a n catlan catlan 数列的生成函数
    证明:
    C n + 1 = ∑ i = 0 n C i C n − i 生 成 函 数 相 乘 性 质 : ( ∑ 0 ≤ n f n x n ) ( ∑ 0 ≤ n g n x n ) = ∑ 0 ≤ n ( ∑ i = 0 n f n g n − i ) x n 又 因 为 : C n + 1 = ∑ i = 0 n C i C n − i ( ∑ 0 ≤ n c n x n ) ( ∑ 0 ≤ n c n x n ) = ∑ 0 ≤ n c n + 1 x n 设 F ( x ) 为 C n 序 列 的 生 成 函 数 F ( x ) = c 0 + c 1 x + c 2 x 2 . . . . F ( x ) 2 = c 1 + c 2 x + c 3 x 3 . . . = F ( x ) − c 0 x F ( x ) = x F ( x ) 2 + 1 解 得 : F ( x ) = 1 ± 1 − 4 x 2 2 x 因 为 由 二 项 式 定 理 得 1 − 4 x 2 展 开 为 负 数 所 以 只 能 取 1 − 1 − 4 x 2 所 以 数 列 得 生 成 函 数 为 : F ( x ) = 1 − 1 − 4 x 2 2 x \begin{aligned} & C_{n+1} = \sum_{i = 0}^{n}C_{i}C_{n - i} \\ 生成函数相乘性质:&\bigg(\sum_{0 \leq n} f_nx^n\bigg) \bigg(\sum_{0 \leq n} g_nx^n\bigg) = \sum_{0 \leq n} \bigg(\sum_{i = 0}^{n} f_ng_{n -i}\bigg)x^n \\ & 又因为:C_{n + 1} = \sum_{i = 0}^{n}C_{i}C_{n - i} \\ &\bigg(\sum_{0 \leq n} c_nx^n\bigg) \bigg(\sum_{0 \leq n} c_nx^n\bigg) = \sum_{0 \leq n} c_{n+1}x^n \\ &设F(x) 为C_{n}序列的生成函数\\ &F(x) = c_0 + c_1x+c_2x^2....\\ &F(x)^2 = c_1+c_2x+c_3x^3... = \frac{F(x) - c_0}{x} \\ &F(x) = xF(x)^2 + 1 \\ &解得:F(x) = \frac{1 \pm \sqrt[2]{1-4x}}{2x} 因为由二项式定理得 \sqrt[2]{1-4x} 展开为负数所以只能取 1 - \sqrt[2]{1-4x} \\ & 所以数列得生成函数为:F(x) = \frac{1 - \sqrt[2]{1-4x}}{2x} \end{aligned} Cn+1=i=0nCiCni(0nfnxn)(0ngnxn)=0n(i=0nfngni)xnCn+1=i=0nCiCni(0ncnxn)(0ncnxn)=0ncn+1xnF(x)CnF(x)=c0+c1x+c2x2....F(x)2=c1+c2x+c3x3...=xF(x)c0F(x)=xF(x)2+1F(x)=2x1±214x 214x 1214x F(x)=2x1214x

  • 计算

    • 存在模数,且模数为素数 ( L u c a s Lucas Lucas取模)
    • 存在模数,且模数不为素数(预处理素数,唯一分解定理)
  • 参考资料:

    lyd

    wiki

BZOJ4001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值