亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

編程之美 買票找零 寫的太贊了!

系統 1821 0

本文上半部分來自CSDN博客,轉載請標明出處: http://blog.csdn.net/jeiwt/archive/2010/01/30/5272541.aspx

下半部分轉載自 http://yishan.cc/blogs/gpww/archive/2009/10/08/2-1-catalan.aspx


題目描述:

假設有2N個人在排隊買票,其中有N個人手持50元的鈔票,另外有N個人手持100元的鈔票,假設開始售票時,售票處沒有零錢,問這2N個人有多少種排隊方式,不至使售票處出現找不開錢的局面?

題目分析:

這題時典型的卡特蘭數(Cartalan)問題


最典型的四類應用(實質上卻都一樣,無非是遞歸等式的應用,就看你能不能分解問題寫出遞歸式了)
1.括號化問題。
矩陣鏈乘: P=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?(h(n)種)
2.出棧次序問題。
一個棧(無窮大)的進棧序列為1,2,3,..n,有多少個不同的出棧序列?
類似:有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)

3.將多邊行劃分為三角形問題。
將一個凸多邊形區域分成三角形區域的方法數?
類似:一位大城市的律師在她住所以北n個街區和以東n個街區處工作。每天她走2n個街區去上班。如果她
從不穿越(但可以碰到)從家到辦公室的對角線,那么有多少條可能的道路?
類似:在圓上選擇2n個點,將這些點成對連接起來使得所得到的n條線段不相交的方法數?
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(N)個)




Cartalan數

令h(1)=1

h(n) = h(1)*h(n-1) + h(2)*h(n-2) + h(3)*h(n-3) + ....+h(n-1)*h(1) (其中n>=2)

該遞歸求解為h(n) = C(2n, n)/(n+1)

-------------------------------------------------------------------------------

Catalan數

中文:卡特蘭數
原理:
令h(1)=1,catalan數滿足遞歸式:
h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) (其中n>=2)
另類遞歸式:
h(n)=((4*n-6)/(n))*h(n-1);
該遞推關系的解為:
h(n)=C(2n,n)/(n + 1) (n=1,2,3,...)

最典型的四類應用(實質上卻都一樣,無非是遞歸等式的應用,就看你能不能分解問題寫出遞歸式了)
1.括號化問題。
矩陣鏈乘: P=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?(h(n)種)
2.出棧次序問題。
一個棧(無窮大)的進棧序列為1,2,3,..n,有多少個不同的出棧序列?
類似:有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)

3.將多邊行劃分為三角形問題。
將一個凸多邊形區域分成三角形區域的方法數?
類似:一位大城市的律師在她住所以北n個街區和以東n個街區處工作。每天她走2n個街區去上班。如果她
從不穿越(但可以碰到)從家到辦公室的對角線,那么有多少條可能的道路?
類似:在圓上選擇2n個點,將這些點成對連接起來使得所得到的n條線段不相交的方法數?
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(N)個)




*連載轉貼自 http://gpww.blog.163.com ,如圖片顯示有問題,請到原帖...

問題

《編程之美》中提到了“買票找零”問題,查閱了下資料,此問題和卡特蘭數 Cn有關,其定義如下:

image

卡特蘭數真是一個神奇的數字,很多組合問題的數量都和它有關系,例如:

  • Cn= 長度為 2n的 Dyck words的數量。 Dyck words是由 n個 X和 n個 Y組成的字符串,并且從左往右數, Y的數量不超過 X,例如長度為 6的 Dyck words為:

XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY

  • Cn= n對括號正確匹配組成的字符串數,例如 3對括號能夠組成:

((())) ()(()) ()()() (())() (()())

  • Cn= n+1個數相乘,所有的括號方案數。例如, 4個數相乘的括號方案為:


((ab)c)d (a(bc))d (ab)(cd) a((bc)d) a(b(cd))

  • Cn= 擁有 n+1 個葉子節點的二叉樹的數量。例如 4個葉子節點的所有二叉樹形態:

  • Cn=n*n的方格地圖中,從一個角到另外一個角,不跨越對角線的路徑數,例如, 4×4方格地圖中的路徑有:

  • Cn= n+2條邊的多邊形,能被分割成三角形的方案數,例如 6邊型的分割方案有:

  • Cn= 圓桌周圍有 2n個人,他們兩兩握手,但沒有交叉的方案數。

在《Enumerative Combinatorics》一書中,竟然提到了多達 66種組合問題和卡特蘭數有關。

分析

“卡特蘭數”除了可以使用公式計算,也可以采用“分級排列法”來求解。以 n對括弧的合法匹配為例,對于一個序列 (()而言,有兩個左括弧,和一個右括弧,可以看成“抵消了一對括弧,還剩下一個左括弧等待抵消”,那么說明還可以在末尾增加一個右括弧,或者一個左括弧,沒有左括弧剩余的時候,不能添加右括弧。
由此,問題可以理解為,總共 2n個括弧,求 1~2n級的情況,第 i 級保存所有剩余 i 個左括號的排列方案數。 1~8級的計算過程如下表:

image

計算過程解釋如下: 1級:只能放 1個“(”; 2級:可以在一級末尾增加一個“)”或者一個“ (”
以后每級計算時,如果遇到剩余 n>0個“(”的方案,可以在末尾增加一個“ (”或者“ )”進入下一級;遇到剩余 n=0個“(”的方案,可以在末尾增加一個“ (”進入下一級。

奇數級只能包含剩余奇數個“(”的排列方案
偶數級只能包含剩余偶數個“(”的排列方案

從表中可以看出,灰色部分可以不用計算。

解法

關鍵代碼為:

      
        double
      
       Catalan(
      
        int
      
       n)
        {
            
      
        if
      
       (n == 0) 
      
        return
      
       1; 
      
        for
      
       (
      
        int
      
       i = 2; i <= 2 * n; i++)
            {
                var m = i <= n ? i : 2 * n + 1 - i;
                
      
        for
      
       (
      
        int
      
       j = (i - 1) & 1; j <= m; j += 2)
                {
                    
      
        if
      
       (j > 0) arr[j - 1] += arr[j];
                    
      
        if
      
       (j < n) arr[j + 1] += arr[j];

                    arr[j] = 0;
                }
            }
            
      
        return
      
       arr[0];
        }
    

其中:
n為 Cn中的 n;
arr = new double[n + 1];//arr代表有 k個括弧的時候,剩余 "("個數為 i的排列方案個數 arr[1] = 1;

討論

算法復雜度為 image = O(n^2),空間復雜度為 O(n+1)。相對于利用公式計算而言,此方法的優勢在于——沒有乘除法,只有加法。


編程之美 買票找零 寫的太贊了!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 特级毛片a级毛免费播放 | 欧美日韩在线成人免费 | 一区二区中文字幕在线观看 | 亚洲日韩中文字幕一区 | 久久夜夜操妹子 | 久久久久久久国产 | 草逼com | 国产小姨子 | 自拍亚洲国产 | 亚洲美女激情视频 | 欧美日韩高清在线 | 亚洲国产乱 | 性感毛片 | 性短视频在线观看免费不卡流畅 | 色视频亚洲 | 国产亚洲精品成人a在线 | 久九色| 四虎影视在线看免费观看 | 日韩第1页 | 日韩深夜 | 一级片 在线播放 | 日韩成人黄色片 | 欧美成人aaa大片 | 日韩在线观看视频网站 | 国产精品探花一区在线观看 | 一级黄色毛片 | 亚洲精品福利视频 | 97久久精品人人澡人人爽 | 夜夜爽夜夜叫夜夜高潮漏水 | 一线毛片| 国产亚洲精品在天天在线麻豆 | 国产欧美亚洲精品综合在线 | 国内一区亚洲综合图区欧美 | 久久午夜精品 | 久久99精品亚洲热综合 | 国产成人精品日本亚洲专一区 | 日韩黄色录像 | 图片亚洲va欧美va国产综合 | 天堂va亚洲va欧美va国产 | 亚洲欧美日韩中文字幕在线 | 久久男人资源站 |