• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            什么是catalan數?
            在網上找了n久,各種關于catalan數列的資料都殘缺不堪,弄了半天才理解什么是catalan數。所以干脆自己梳理一番。
            t_4acd74e802000azp.pngt_4acd74e802000azp.png
            原理:
            令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)=c(2n-2,n-1)/n (n=1,2,3,...)

            我并不關心其解是怎么求出來的,我只想知道怎么用catalan數分析問題。
            我總結了一下,最典型的三類應用:(實質上卻都一樣,無非是遞歸等式的應用,就看你能不能分解問題寫出遞歸式了)
            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條線段不相交的方法數?

            不過下面這個問題似乎不好歸類,它怎么來應用這個catalan遞歸方程呢?你說說:n個結點可構造多少個不同的二叉樹?

            看的人倒是不少,愿意想一想的倒是不多,唉

            Catalan numbers

            posted on 2006-11-06 16:39 哈哈 閱讀(3920) 評論(16)  編輯 收藏 引用

            評論:
            # re: catalan數在數據結構中的應用 2006-11-10 12:56 | 江水獸
            h(n)=c(2n-2,n-1)/n 是什么意思哈 C代表什么呀  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2006-11-10 12:57 | 江水獸
            順便說一下啊

            你的瀏覽計數器太大了 影響頁面訪問和美觀 呵呵呵 隨便提個建議  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2006-11-10 13:11 | pengkuny
            @江水獸
            c代表組合數,即2n-2個體種選取n-1個的種類  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2006-11-10 13:12 | pengkuny
            @江水獸
            謝謝啊
            不過字體設置到最小后,還是這么大,let it be  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2006-11-10 13:19 | 江水獸
            不過好像有些問題還不是那么好處理呵

            例如“有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)”這個問題;

            到底該如何利用類推法呢?

            假如用f(x)來表示x個人時的情況,
            那么一個人時f(1)=1;
            兩個人時f(2)=2f(1)+1;
            三個人時f(3)=3f(1)+f(2)f(1)+f(1)f(2);
            四個人時f(4)=4f(1)+2f(3)f(1)+f(2)f(2)+f(1)f(2)f(1);
            ……
            這樣貌似還是有點不好處理呀……  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2006-11-10 13:39 | pengkuny
            @江水獸
            你是說這么遞歸解這一堆遞歸式吧.
            大可不必,
            我們只需要發現一個問題滿足catalan數列的遞歸式,然后直接就可以得到解
            f(n)=h(n)=c(2n-2,n-1)/n
            有時候還要看具體問題,可能最終的解是h(n+1)或h(n-1)或h(2n)等等  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2006-11-10 17:22 | 江水獸
            @pengkuny
            好像有道理喲 我再看看!  回復  更多評論
              
            # re: catalan數在數據結構中的應用[未登錄] 2007-05-16 12:40 | yiyi
            應該是C(n)種吧
            C(n)=(2n)!/[n!*(n+1)!]  回復  更多評論
              
            # re: catalan數在數據結構中的應用[未登錄] 2007-05-16 12:42 | yiyi
            應該是C(n)種吧
            C(n)=(2n)!/[n!*(n+1)!]  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2007-05-30 11:44 | skyking
            我想知道catalan數是怎樣推導出來的呀
            怎樣用于算法的分析呀  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2007-07-18 20:44 | Menie
            ding~~
            好文啊,這幾個都很典型!  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2007-07-18 21:05 | Menie
            對于每一個數來說,必須進棧一次、出棧一次。我們把進棧設為狀態‘1’,出棧設為狀態‘0’。n個數的所有狀態對應n個1和n個0組成的2n位二進制數。由于等待入棧的操作數按照1‥n的順序排列、入棧的操作數b大于等于出棧的操作數a(a≤b),因此輸出序列的總數目=由左而右掃描由n個1和n個0組成的2n位二進制數,1的累計數不小于0的累計數的方案種數。
            在2n位二進制數中填入n個1的方案數為c(2n,n),不填1的其余n位自動填0。從中減去不符合要求(由左而右掃描,0的累計數大于1的累計數)的方案數即為所求。

            不符合要求的數的特征是由左而右掃描時,必然在某一奇數位2m+1位上首先出現m+1個0的累計數和m個1的累計數,此后的2(n-m)-1位上有n-m個1和n-m-1個0。如若把后面這2(n-m)-1位上的0和1互換,使之成為n-m個0和n-m-1個1,結果得1個由n+1個0和n-1個1組成的2n位數,即一個不合要求的數對應于一個由n+1個0和n-1個1組成的排列。
            反過來,任何一個由n+1個0和n-1個1組成的2n位二進制數,由于0的個數多2個,2n為偶數,故必在某一個奇數位上出現0的累計數超過1的累計數。同樣在后面部分0和1互換,使之成為由n個0和n個1組成的2n位數,即n+1個0和n-1個1組成的2n位數必對應一個不符合要求的數。顯然,不符合要求的方案數為c(2n,n+1)。由此得出
            輸出序列的總數目=c(2n,n)-c(2n,n+1)=1/(n+1)*c(2n,n)。


            (form 日照NOIP夏令營,by 王建德老師)  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2007-07-31 11:55 | etfl
            問題條件MS都不太清楚,可不可以說明白一點?

            比如
            3.將多邊行劃分為三角形問題。
            將一個凸多邊形區域分成三角形區域的方法數?

            劃分線是否可以相交?如果不可以相交那結果應該是catalan數,如果可以相交那就得另當別論了。

            再問一句,為什么c(2n,n)-c(2n,n+1)=1/(n+1)*c(2n,n)?  回復  更多評論
              
            # re: catalan數在數據結構中的應用 2007-08-12 21:14 | binyun714
            輸出前n個catalan數:
            program jk;
            const maxn=1000;
            type arraytype=array[0..maxn] of longint;
            var i,j,n:longint;

            procedure mul(var h:arraytype;k:longint);
            var i:longint;
            begin
            for i:=0 to maxn do h[i]:=h[i]*k;
            for i:=0 to maxn-1 do
            begin
            h[i+1]:=h[i+1]+h[i] div 10;
            h[i]:=h[i] mod 10
            end
            end;

            procedure devide(var h:arraytype;k:longint);
            var d,i,r:longint;
            begin
            r:=0;
            for i:=maxn downto 0 do
            begin
            d:=10*r+h[i];
            h[i]:=d div k;
            r:=d mod k
            end
            end;
            procedure cat(n:integer);
            var i,j:integer;
            h:arraytype;
            begin
            for i:=1 to maxn do h[i]:=0;
            h[0]:=1;
            for i:=3 to n-1 do
            begin
            mul(h,4*i-6);
            devide(h,i)
            end;
            i:=maxn;
            while (i>0) and (h[i]=0) do i:=i-1;
            for j:=i downto 0 do write(h[j]);
            writeln;
            end;

            begin
            assign(input,'input.dat');reset(input);
            assign(output,'output.dat');rewrite(output);
            readln(n);
            n:=n+2;
            for i:=1 to n do cat(i);
            close(input);close(output);
            end.
              回復  更多評論
              
            # re: catalan數在數據結構中的應用 2007-08-19 14:38 | 憂郁的魚
            對于有n個節點可構成幾棵不同形態的二叉樹,可以這么考慮:
            因為只有一個根節點,而且二叉樹只有左孩子或右孩子,所以可知:
            當左孩子有0個節點時,右孩子有n-1個節點,可構成的不同形態二叉樹的數目為:
            h(0)*h(n-1)
            當左孩子有1個節點時,右孩子有n-2個節點,可構成的不同形態二叉樹的數目為:
            h(1)*h(n-2)
            當左孩子有2個節點時,右孩子有n-3個節點,可構成的不同形態二叉樹的數目為:
            h(2)*h(n-3)
            依次類推:
            可知共有不同形態二叉樹的數目為:
            h(0)*h(n-1)+h(1)*h(n-2)+h(2)*h(n-3)...+h(n-1)*h(0)
            注:h(0)=1,h(1)=1,h(2)=2 h(3)=5  回復  更多評論
              
            # re: catalan數在數據結構中的應用[未登錄] 2009-06-07 10:31 | wolf
            內容有錯誤,別人又來復制,導致錯誤的事情擴大,可悲。。。  回復  更多評論
              
            中文成人久久久久影院免费观看| 无码人妻久久一区二区三区免费丨| 久久99精品综合国产首页| 亚洲国产精品热久久| 久久久久亚洲精品中文字幕| 久久久亚洲欧洲日产国码是AV| 久久精品亚洲中文字幕无码麻豆| 国产午夜精品理论片久久影视 | 国产成人久久777777| 久久人人爽人人爽AV片| 亚洲色欲久久久综合网| 国产69精品久久久久99尤物| 久久亚洲国产精品成人AV秋霞 | 亚洲中文字幕无码一久久区| 国产精品美女久久久久| 尹人香蕉久久99天天拍| 一本色道久久88加勒比—综合| 欧美日韩精品久久久免费观看| 国产精品欧美久久久天天影视| 一级a性色生活片久久无| 色综合久久天天综合| 亚洲中文字幕无码久久综合网| 久久久久亚洲精品中文字幕| 韩国三级大全久久网站| 亚洲国产精品无码久久久不卡| 亚洲午夜久久久| 久久国产精品免费一区二区三区| 国产亚洲婷婷香蕉久久精品| 青青草原精品99久久精品66| 亚洲天堂久久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 一级女性全黄久久生活片免费| 一本一道久久精品综合| 久久99国内精品自在现线| 久久久无码精品亚洲日韩蜜臀浪潮| 久久久久久久国产免费看| 久久精品免费观看| 亚洲国产精品热久久| 久久99精品综合国产首页| 久久精品aⅴ无码中文字字幕不卡| 亚洲AV无码一区东京热久久|