生成関数は、カウントアルゴリズムを設計するときに役立ちます。つまり、特定のプロパティを持つオブジェクトの数を探しているときだけでなく、これらのオブジェクトを列挙する方法を探しているとき(そしておそらく、オブジェクトをカウントするアルゴリズムを生成するとき)もです。Ronald Graham、Donald Knuth、およびOren Patashnikによる具象数学の第7章には非常に優れたプレゼンテーションがあります。以下の例はこれらの本からのものです(間違いや明確さの欠如は私のものです)。
コインのセットを変更する方法を探しているとします。たとえば、一般的な米国の金種¹では、可能なコインはです。変化に¢42を与えるための1つの可能性は、です。別の可能性はです。書きます。より一般的には、変化を与えるすべての方法に対して生成関数を書くことができます:
より専門的な用語では、は5つの変数のべき級数空間の項です[1],[5],[10],[25],[100][25][10][5][1][1][10][10][10][10][1][1]42⟨[25][10][5][1]2⟩=⟨[10]4[1]2⟩
H=∑h≥0∑q≥0∑d≥0∑n≥0∑p≥0[100]h[25]q[10]d[5]n[1]p
H[100],[25],[10],[5],[1]。この空間での単項式の評価を
変化にセント
を与える方法は、評価がである単項式の数です。最初にペニーのみを変更する方法を書き留め、次にペニーとニッケルを変更する方法を書き留めることで、を漸進的に表現できます。(はコイン意味しません。)
⟨[100]h[25]q[10]d[5]n[1]p⟩=100h+25q+10d+5n+p
vvHPNIP=I+[1]+[1]2+[1]3+…=II−[1]N=(I+[5]+[5]2+[5]3+…)P=PI−[5]D=(I+[10]+[10]2+[10]3+…)N=NI−[10]Q=(I+[25]+[25]2+[25]3+…)D=DI−[25]H=(I+[100]+[100]2+[100]3+…)Q=QI−[100]
変更を与える方法を列挙するだけでなく数えたい場合は、取得した正式なシリーズを使用する簡単な方法があります。準同型適用し
の係数における与えるために多くの方法であり変化セント。
S:[1]↦X,[5]↦X5,[10]↦X10,[25]↦X25,[100]↦X100
XvS(C)v
より難しい例:2×1ドミノで長方形を並べるすべての方法を勉強したいとします。たとえば、2つの水平ドミノまたは2つの垂直ドミノを使用して、2×2の長方形を並べるには2つの方法があります。長方形を並べる方法の数を数えるのはかなり簡単ですが、場合はすぐに明らかになります。ドミノを貼り付けることで、高さ3の水平バンドのすべての可能なタイルを列挙できます。これにより、繰り返しパターンがすばやく生成されます。
2×n3×n
⎧⎩⎨⎪⎪⎪⎪⎪⎪U=o+LV+ΓΛ+≡UV=IU+=−VΛ=IU+−=Λ
ここで、面白い形は基本的なドミノ配置を表します。はドミノではなく、は水平ドミノの左部分の上にある垂直ドミノ、は、高さ3のバンドの下部に揃えられた垂直ドミノです。は、バンドの上部とその下の2つの水平ドミノと1ステップ右に揃えられた水平ドミノです。ここでは、乗算は水平連結を表し、可換ではありませんが、このべき級数の変数を形成する基本パターン間に方程式があります。コインの場合と同様に、すべてのドミノの代わりにを使用し、タイルの数の生成シリーズを取得できます
oLI−=X3×(2n/3)長方形(つまり、係数は、ドミノを含み、幅がの領域長方形を方法の数です)。このシリーズは、より用途の広い方法でも使用できます。たとえば、垂直ドミノと水平ドミノを区別することにより、指定された数の垂直ドミノと水平ドミノのタイルをカウントできます。
X3k6k3k2k
繰り返しますが、コンクリート数学を読んで、急ぎの少ない³プレゼンテーションをご覧ください。
¹ リストが不完全であることはわかっています。数学的な例に適した簡略化された米国を想定します
。²² また、それが出てきたら、球形のコインを想定します。
³ そしてより良い組版。