列挙的組合せ論

4638576個中3個[ 1 ]または580717個中[ 2 ]、回転と反射を別個に数えない場合、正方格子グラフ8х8上のハミルトン閉路

列挙的組合せ論は、特定のパターンが形成できる方法の数を扱う組合せ論の一分野です。この種の問題の例としては、組み合わせの数え上げと順列の数え上げが挙げられます。より一般的には、自然数でインデックス付けされた有限集合S iの無限集合が与えられたとき、列挙的組合せ論は、各nについてS nに含まれるオブジェクトの数を数える計数関数を記述しようとします。集合内の要素の数を数えることはかなり広範な数学的問題ですが、応用場面で生じる問題の多くは、比較的単純な組合せ論的記述が可能です。12通りの方法は、順列組み合わせ、および分割を数えるための統一的な枠組みを提供します。

最も単純な関数は閉式であり、階乗累乗などの基本関数の合成として表現できます。例えば、以下に示すように、n枚のカードの可能な順序の数はf ( n ) = n !です。閉式を求める問題は代数的列挙として知られており、多くの場合、漸化式または生成関数を導出し、それを用いて目的の閉式に到達することが求められます。

多くの場合、複雑な閉式では、カウントするオブジェクトの数が増えていくにつれて、カウント関数の挙動についてほとんど洞察が得られません。このような場合、単純な漸近近似が望ましい場合があります。関数は、が であるとき、の漸近近似です。この場合、次のように書きます。グラムn{\displaystyle g(n)}fn{\displaystyle f(n)}fn/グラムn1{\displaystyle f(n)/g(n)\rightarrow 1}n{\displaystyle n\rightarrow\infty}fnグラムn{\displaystyle f(n)\sim g(n).\,}

生成関数

生成関数は、組み合わせ論的オブジェクトの族を記述するために使用されます。オブジェクトの族を とし、その生成関数をF ( x ) とします。すると、 F{\displaystyle {\mathcal {F}}}

F×n0fn×n{\displaystyle F(x)=\sum _{n=0}^{\infty }f_{n}x^{n}}

ここで はサイズnの組合せ的オブジェクトの数を表す。したがって、サイズnの組合せ的オブジェクトの数は の係数によって与えられる。ここでは、組合せ的オブジェクトの族に対する一般的な演算と、それが生成関数に与える影響について述べる。指数的生成関数が用いられることもある。この場合、 指数的生成関数は以下の形となる。fn{\displaystyle f_{n}}×n{\displaystyle x^{n}}

F×n0fn×nn!{\displaystyle F(x)=\sum _{n=0}^{\infty }f_{n}{\frac {x^{n}}{n!}}}

生成関数が決定されると、これまでのアプローチで得られた情報が得られます。さらに、加算、乗算、微分など、生成関数に対する様々な自然演算は組み合わせ論的な意味を持ちます。これにより、ある組み合わせ論的問題の結果を他の問題にも拡張することができます。

連合

2つの組合せ族と、それぞれ生成関数F ( x )とG ( x )を持つ組合せ族が与えられた場合、2つの族の非結合和( )は生成関数F ( x )+ G ( x )を持つ。 F{\displaystyle {\mathcal {F}}}G{\displaystyle {\mathcal {G}}}FG{\displaystyle {\mathcal {F}}\cup {\mathcal {G}}}

ペア

上記のような2つの組み合わせ族の場合、2つの族( )の直積(ペア)の生成関数はF ( x ) G ( x )です。 F×G{\displaystyle {\mathcal {F}}\times {\mathcal {G}}}

シーケンス

(有限)列は、上で定義したペアの概念を一般化したものです。列は、組み合わせオブジェクトとそれ自身の任意の直積です。正式には、

Seq(F)=ϵ  F  F×F  F×F×F {\displaystyle {\mbox{Seq}}({\mathcal {F}})=\epsilon \ \cup \ {\mathcal {F}}\ \cup \ {\mathcal {F}}\!\times \!{\mathcal {F}}\ \cup \ {\mathcal {F}}\!\times \!{\mathcal {F}}\!\times \!{\mathcal {F}}\ \cup \cdots }

上記を言葉で表現すると、空のシーケンス、1 つの要素のシーケンス、2 つの要素のシーケンス、3 つの要素のシーケンスなどです。生成関数は次のようになります。

1+F(x)+[F(x)]2+[F(x)]3+=11F(x).{\displaystyle 1+F(x)+[F(x)]^{2}+[F(x)]^{3}+\cdots ={\frac {1}{1-F(x)}}.}

組み合わせ構造

上記の操作は、二元および平面)、ディック路、閉路などの一般的な組み合わせオブジェクトを列挙するために使用できます。組み合わせ構造は原子で構成されています。例えば、木の場合、原子はノードになります。オブジェクトを構成する原子は、ラベル付きまたはラベルなしのいずれかになります。ラベルなしの原子は互いに区別できませんが、ラベル付き原子は互いに区別できます。したがって、ラベル付き原子で構成される組み合わせオブジェクトの場合、2つ以上の原子を交換するだけで新しいオブジェクトを形成できます。

二分木と平面木

二分木と平面木は、ラベルなしの組み合わせ構造の例です。木は、循環がないように辺で結ばれたノードで構成されます。一般的に、ルートと呼ばれるノードがあり、ルートには親ノードがありません。平面木では、各ノードは任意の数の子を持つことができます。平面木の特殊なケースである二分木では、各ノードは2つの子を持つか、または0つの子を持つことができます。すべての平面木の族を とします。この族は次のように再帰的に定義できます。 P{\displaystyle {\mathcal {P}}}

P={}×Seq(P){\displaystyle {\mathcal {P}}=\{\bullet \}\times \,{\mbox{Seq}}({\mathcal {P}})}

この場合、は1つのノードからなるオブジェクトの族を表します。これは生成関数xを持ちます。P ( x ) を生成関数とします上記の説明を言葉で表すと、平面木は任意の数のサブツリーが接続されたノードで構成され、各サブツリーも平面木です。前述の組み合わせ構造の族に対する演算を用いると、これは再帰的な生成関数に変換されます。 {}{\displaystyle \{\bullet \}}P{\displaystyle {\mathcal {P}}}

P(x)=x11P(x){\displaystyle P(x)=x\,{\frac {1}{1-P(x)}}}

P ( x ) を解くと次のようになります。

P(x)=114x2{\displaystyle P(x)={\frac {1-{\sqrt {1-4x}}}{2}}}

x nの係数を抽出することで、サイズnのプラタナスの木の数に関する明示的な式を決定できます。

pn=[xn]P(x)=[xn]114x2=[xn]12[xn]1214x=12[xn]k=0(12k)(4x)k=12(12n)(4)n=1n(2n2n1){\displaystyle {\begin{aligned}p_{n}&=[x^{n}]P(x)=[x^{n}]{\frac {1-{\sqrt {1-4x}}}{2}}\\[6pt]&=[x^{n}]{\frac {1}{2}}-[x^{n}]{\frac {1}{2}}{\sqrt {1-4x}}\\[6pt]&=-{\frac {1}{2}}[x^{n}]\sum _{k=0}^{\infty }{{\frac {1}{2}} \choose k}(-4x)^{k}\\[6pt]&=-{\frac {1}{2}}{{\frac {1}{2}} \choose n}(-4)^{n}\\[6pt]&={\frac {1}{n}}{2n-2 \choose n-1}\end{aligned}}}

注: [ x n ] f ( x )という表記は、f ( x )におけるx nの係数を表します。平方根の級数展開は、ニュートンの二項定理の一般化に基づいています。4行目から5行目までは、一般化された二項定理を用いた操作が必要です。

最後の行の式は( n  − 1)番目のカタラン数に等しい。したがって、p n = c n −1 となる。

参照

参考文献