解析組合技巧

2021-06-30 16:40:09 字數 4177 閱讀 8004

解析組合的主要思想是利用數學分析的方法來分析組合物件的性質,主要用於「組合類「的計數問題,它的最基本形式類似初等組合數學裡面的母函式方法。

我們考察如下問題:

考慮乙個n+

2 邊的凸多邊形

m ,每個頂點標註為0…

n+1(逆時針)。乙個三角剖分是將

m 分為一系列內部不相交的三角形。問:有多少種剖分方法?

這是乙個典型的組合計數問題,由於對於任意三角剖分使得

m的每條邊屬於唯一的三角形,所以我們考慮邊(0

,n+1

) 對應的三角形的另乙個頂點

a 。容易知道

a一共有

n 種可能,每種可能將

m分成兩個分別具有i,

j 個頂點的凸多邊形,使得i+

j=n−

1 。記an

為n+2 個頂點的凸多邊形三角剖分個數,我們可以的到如下遞推式(不難發現這就是catalan數): an

=∑i=

0n−1

aian

−i−1

,(n≥

2),a

0=a1

=1.(1

) 記

f(x)

=a0+

a1x+

⋯+an

xn+⋯

為 an

的組合生成函式,通過觀察(並不十分顯然)可以發現: f

(x)=

1+xf

(x)2

(2)

所以通過泰勒展開式可以的到 a

n=1n

+1(2

nn).

事實上我們上面的例子所用的方法就是傳統的組合生成函式法,我們先通過組合直觀得到了遞推式(1

) ,然後再將其轉化成母函式對應的函式方程(2

) 。但第二個轉換過程並不十分直觀,解析組合的思想即是通過一些組合運算元直接將組合直觀轉換成其生成函式的函式方程。

定義(組合類):乙個組合類是乙個可數集合

a ,以及乙個大小函式f:=

s→n ,使得對任意自然數n∈

n ,

是有窮的,其個數記為an

。一般的,對任意a∈

a 我們記f(

a)=|a|。

定義(計數序列):組合類

a 的乙個計數序列是指(a

n)n≥

0 。

定義(類等價):兩個組合類a,

b 是等價的,當且僅當其對應的計數序列相同,記為a≃

b 。

定義(ogf):計數序列(a

n)n≥

0 的一般計數函式(ogf)是指形式冪級數: a(

z)=∑

n=0∞

anzn

.

因此,對於任意組合類 a

其一般計數函式等價為:a(

z)=∑

a∈az

|a|.

我們接下來定義幾個簡單組類合構造運算元(a,

b 為組合類):

笛卡爾積:c=

a×b=

,其大小函式定義為|(

a,b)

|c=|

a|a+

|b|b

不交並:c=

a+b=

(a×)

∪(b×

) 。這裡□,

△ 大小為

0 ,且

c的大小函式繼承自原類。

序列:c=

seq(

b)=+

b+(b

×b)+

(b×b

×b)+

⋯ ,這裡

ϵ 大小為

0 。

利用這些運算元,我們構造如下複雜的運算元:

週期迴圈:cy

c(b)

=(se

q(b)

∖)/s

,這裡s

表示等價關係:(b

1,b2

,⋯,b

l)s(

b′1,

b′2,

⋯,b′

l)當且僅當(b

′i) 是(b

i)的乙個迴圈移位

重集:ms

et(b

)=se

q(b)

/r,這裡

r 表示等價關係: (b

1,b2

,⋯,b

l)r(

b′1,

b′2,

⋯,b′

l)當且僅當(b

′i) 是(b

i)的乙個任意置換冪集:ps

et(b

)⊂ms

et(b

) ,表示

b 的所有有窮子集構成的集合,即ms

et(b

) 中沒有重複元素的元組。

組合運算元和計數函式方程有如下對應:

a=b+ca=

b×ca

=seq

(b)⟹

a(z)

=b(z

)+c(

z)⟹a

(z)=

b(z)

⋅c(z

)⟹a(

z)=1

1−b(

z)a=

pset

((b)

)⟹a(

z)=⎧

⎩⎨⎪⎪

⎪⎪⎪⎪

⎪⎪∏n

≥1(1

+zn)

bnexp(∑k

=1∞(

−1)k

−1kb

(zk)

)

a=mset(

(b))

⟹a(z

)=⎧⎩

⎨⎪⎪⎪

⎪⎪⎪⎪

⎪∏n≥

1(1−

zn)−

bnexp(∑k

=0∞1

kb(z

k))

a=cyc((

b))⟹

a(z)

=∑k=

1∞φ(

k)klog11

−b(z

k)這裡φ

(k) 為尤拉函式。

這些對應直接驗證即可,或參考:page 27 of [1]

對任意正整數

n ,它的乙個劃分是指乙個無序陣列(x

1,x2

,⋯,x

k),x

i∈n+

使得x1+

⋯+xk

=n(例如1+

2+1 和2+

2 是不同劃分,但和1+

1+2 是相同的)。問:

n 一共有多少種不同的劃分?

我們記n=

為所有整數構成的組合類,其大小即為其對應的整數值。記所有整數劃分構成的組合類為

m ,其大小函式即為陣列的和。

顯然,我們有:m=

mset

(n) 。另一方面,如果我們記

z 為由單個大小為

1 的元素組成的組合類,那麼n=

seq(

z)。所以由上面的對應關係我們有:

m(z)=∏m

=1∞1

1−zm

.

至此,我們已經得到了

m 的生成函式,但我們並不能顯然的得到他的冪級數的係數。我們可以用所謂的「鞍點估計法」(參考chapter viii of [1])得到mn

=eo(

n√) 。

[1]. philippe flajolet and robert sedgewick. analytic combinatorics. cambridge university press 2009.

類的組合舉例解析

兩個類只要其一完蛋,就全完蛋了!類的組合其實描述的就是在乙個類裡內嵌了其他類的物件作為成員的情況,它們之間的關係是一種包含與被包含的關係。簡單說,乙個類中有若干資料成員是其他類的物件。如果在乙個類中內嵌了其他類的物件,那麼建立這個類的物件時,其中的內嵌物件也會被自動建立。因為內嵌物件是組合類的物件的...

組合模式 設計模式系列之組合模式解析

今天為大家帶來死磕設計模式系列的第11個模式,屬於結構型模式的 組合模式。什麼是組合模式?組合模式解決了什麼問題?適用場景是什麼?將物件組合成樹形結構以表示 部分 整體 的層次結構。composite 使得使用者對單個物件和組合物件的使用具有一致性。如果業務中需要定義複雜的資料結構,可以用樹形巢狀來...

組合數取模深度解析

分類 數論 2013 02 13 15 47 63人閱讀收藏 舉報今天我們來討論如何求 c n,m p 首先如果n,m,p的範圍均為 1,1000 那麼我們完全可以用兩個迴圈搞定,c n,m c n 1,m p c n 1,m 1 p p。但是如果n,m,p的範圍均為 1,10 9 另外p為素數,則...