日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Catalan数应用

發(fā)布時(shí)間:2024/8/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Catalan数应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Catalan數(shù)應(yīng)用

  • Catalan數(shù)應(yīng)用
    • 原理
    • 卡特蘭數(shù)經(jīng)典應(yīng)用
      • 括號(hào)化
      • 買票找零
      • 組合數(shù)與階乘計(jì)算

卡特蘭數(shù)又稱卡塔蘭數(shù),是組合數(shù)學(xué)中一個(gè)常出現(xiàn)在各種計(jì)數(shù)問題中的數(shù)列。由以比利時(shí)的數(shù)學(xué)家歐仁·查理·卡塔蘭 (1814–1894)命名。
其前幾項(xiàng)為 : 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, … Catalan數(shù)是許多計(jì)數(shù)問題的最終形式。

原理

  • 令h(0)=1,h(1)=1,catalan數(shù)滿足遞推式:
    h(n)=h(0)?h(n?1)+h(1)?h(n?2)+...+h(n?1)?h(0)(n>=2)

  • 另類遞推公式:

  • h(n)=h(n?1)?(4?n?2)/(n+1)
  • x=(2nn)n+1(n=0,1,2,?)
  • h(n)=(2nn)?(2nn?1)(n=0,1,2,?)

公式中(nm)=n!(n?m)!

卡特蘭數(shù)經(jīng)典應(yīng)用

括號(hào)化

矩陣鏈乘: f(n)=a1×a2×a3×?×an,依據(jù)乘法結(jié)合律,不改變其順序,只用括號(hào)表示成對(duì)的乘積,試問有幾種括號(hào)化的方案?

思路:可以這樣考慮,首先通過括號(hào)化,將公式分成兩個(gè)部分,然后分別對(duì)兩個(gè)部分進(jìn)行括號(hào)化。比如分成(a1)×(a2×a3×?×an),然后再對(duì)(a1)(a2×a3×?×an)分別括號(hào)化;又如分成(a1×a2)×(a3×?×an),然后再對(duì)(a1×a2)(a3×?×an)括號(hào)化;以此類推,得公式

f(n)=f(1)f(n?1)+f(2)f(n?2)+f(3)f(n?3)+?+f(n?1)f(1)

f(1) = 1, f(2) = 1, f(3) = 2, f(4) = 5,結(jié)合遞歸式,不難發(fā)現(xiàn)f(n)=h(n-1)。

買票找零

原題描述如下:

2n個(gè)人排隊(duì)買票,其中n個(gè)人持50元,n個(gè)人持100元。每張票50元,且一人只買一張票。初始時(shí)售票處沒有零錢找零。請(qǐng)問這2n個(gè)人一共有多少種排隊(duì)順序,不至于使售票處找不開錢?

思路:隊(duì)伍的序號(hào)標(biāo)為0,1,…,2n-1,并把50元看作左括號(hào),100元看作右括號(hào),合法序列即括號(hào)能完成配對(duì)的序列。對(duì)于一個(gè)合法的序列,第0個(gè)一定是左括號(hào),它必然與某個(gè)右括號(hào)配對(duì),記其位置為k。那么從1到k-1、k+1到2n-1也分別是兩個(gè)合法序列。那么,k必然是奇數(shù)(1到k-1一共有偶數(shù)個(gè)),設(shè)k=2i+1。那么剩余括號(hào)的合法序列數(shù)為f(2i)*f(2n-2i-2)個(gè)。取i=0到n-1累加即可。

f(2n)=i=0n?1f(2i)f(2n?2i?2)(n1)

f(0)=0,(00)=0,即可得

f(2n)=(2nn)n+1(n1)

公式推導(dǎo)如下,出自從《編程之美》買票找零問題說(shuō)起,娓娓道來(lái)卡特蘭數(shù)——兼爬坑指

構(gòu)造生成函數(shù):

g(x)=h0x2+h2x4+?+h2n?2x2n+h2nx2n+2+?
其中 h2n=f(2n)=n?1i=0f(2i)f(2n?2i?2)(n1)

生成函數(shù)平方:

[g(x)]2==h0x2+h2x4+?+h2n?2x2n+h2nx2n+2+?h20x4+(h0h2+h2h0)x6+?+(h0h2n?2+h2h2n?4+?+h2n?2h0)x2n+2+?

則:

[g(x)]2?g(x)=h20x4?h2x4?h0x2

對(duì)于題目,假設(shè)h0=f(0)=0,則根據(jù)遞推公式后續(xù)項(xiàng)全為0,不合題意,那么h0=f(0)=1,可以推出h2=f(2)=1,帶入公式,則有:

[g(x)]2?g(x)+x2=0

解得g(x)=1±1?4x2??????2
根據(jù)生成函數(shù)的各項(xiàng)系數(shù)為非負(fù),舍去其一,在根據(jù)

(1+z)1/2=1+n=1(?1)n?1n×22n?1(2n?2n?1)zn

可以得到

g(x)=n=11n(2n?2n?1)x2n

h2n=1n+1(2nn)

組合數(shù)與階乘計(jì)算

#!/usr/bin/env python # -*- coding: utf-8 -*-import operator'''factorial function:階乘函數(shù);也可用math.factorial''' def factorial(n):return reduce(operator.mul, range(1, int(n+1)));'''combinational calculation:組合計(jì)算''' def comb(n, m):return reduce(operator.mul, range(n-m+1, n+1)) / factorial(m)'''calculation on the arrangement:排列組合計(jì)算''' def arr(n, m):return factorial(n) / factorial(n-m)if __name__ == "__main__":print factorial(10)print comb(6,3)print arr(10,7)

參考:

  • http://www.cnblogs.com/wuyuegb2312/p/3016878.html

總結(jié)

以上是生活随笔為你收集整理的Catalan数应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。