普通生成函式學習筆記 做題記錄

2022-10-09 03:51:12 字數 3973 閱讀 1836

已知乙個序列 \(a\),可以有限項也可以無限項,定義其生成函式 \(f(x)\) 為。

\[f(x)=\sum a_ix^i

\]舉個例子。

序列 $a=\left \langle 1,2,3 \right \rangle $ 的生成函式是 \(f(x)=1+2x+3x^2\)。

序列 $a=\left \langle 1,2,3...\right \rangle $ 的生成函式是 \(f(x)=\sum (i+1)x^i\)。

生成函式本質是乙個多項式,所以可以進行多項式卷積,方便處理序列問題。

假設序列 \(a\) 的生成函式是 \(f(x)\),序列 \(b\) 的生成函式是 \(g(x)\)。

\[f(x)g(x)=\sum x^i\sum_^i a_jb_

\]封閉操作可以讓生成函式更加易於化簡。

簡而言之就是把無限項的多項式封閉為有限項。

比如 \(f(x)=\sum x^i\)。

可以列出方程

\[f(x)=xf(x)+1

\]解出 \(f(x)=\frac\),這樣就得到了生成函式的封閉形式。

幾種比較常見的封閉形式:

這種函式有下面幾種:

\(\left \langle 1,1,1,1...\right \rangle=\frac\)

\(\left \langle 1,2,3,4...\right \rangle=\frac\)

\(\left \langle 1,3,6,10...\right \rangle=\frac\)

\(\left \langle \binom,\binom,\binom,\binom...\right \rangle=\frac\)

本質上是二項式定理的負數形式(也叫牛頓二項式定理)。

\[(1-x)^=\sum \binomx^i

\]考慮證明一下。

用歸納法證明,對 \(n=1\) 時前面已經證明過了,成立。

設生成函式 \(f_n(x)=\sum \binomx^i\)。

\[f_n(x)-f_(x)=\sum (\binom-\binom)x^i\\

=\sum\binomx^i=xf_n(x)

\]相減這一步可以在楊輝三角上顯然得證。

然後可以得到

\[f_n(x)=\frac(x)}=(1-x)^

\]原定理得證。

這種就是等比數列求和,對應的序列是

\(\left \langle 1,n,n^2,n^3...\right \rangle\)

這種比較簡單,比如 \(\sum x^\),你把它變成 \(\sum (x^n)^i\),\(x^n\) 視作乙個整體,用上面的做就好了。

這也不大難,直接二項式定理,它對應展開形式是 \(\sum \binom x^i\)。

比如說 \(a=\left \langle 0,0,...0,0,1,2,3,4\right \rangle\)

前面有 \(n\) 個零,那就先把 \(0\) 後面的結果算出來,再右移,相當於乘上乙個 \(x^n\)。

上面的答案是 \(\frac\)。

一般來說可以拆成多個生成函式之和或者差,比如

\[\sum ix^i=\sum (i+1)x^i-\sum x^i

\]然後就可以直接做了。

\([x^n]f(x)\) 表示 \(x^n\) 的係數。

現在成功求出了 \(f(x)\) 的封閉形式,那麼咋求 \([x^n]f(x)\) 呢?此時需要去展開。

實際上就是封閉的逆過程,方法和上面的差不多,只不過多了一些小技巧。

看看下面的例子:

求斐波那契數列(\(f_1=f_2=1,f_i=f_+f_(i\ge 3)\))第 \(n\) 項的值,對 \(10^9+7\) 取模。

\(o(n)\),我會遞推!

\(o(\log n)\),我會矩陣快速冪!

\(o(1)\),我會矩陣塊速冪,我知道通項公式!

儘管斐波那契數列的通項已經變成地球人都知道了的常識,我們還是嘗試用生成函式來推出它。

設生成函式 \(f(x)=\sum f_ix^i\)。

列方程。

\[f(x)-xf(x)=x^2f(x)+x

\]得到封閉形式 \(f(x)=\frac\)。

然後咋展開?

發現這不屬於我們之前列到的任何一種情況。

一種展開方式是把分母中 \(x+x^2\) 看做整體展開,不過不是我們想要的結果。

一種簡單的方法是把分母是 \(2\) 次的式子換成兩個 \(1\) 次的式子相加。

設\[\frac=\frac+\frac

\]解出 \(a=\frac},a=-\frac},a=\frac},b=\frac}\)

把兩個式子分別展開,加起來就是 \(f(x)\) 的展開形式了。

\[f(x)=\sum x^i\frac}((\frac})^i-(\frac})^i)

\]這樣就得到了我們熟悉的形式。

更多構造、計算生成函式的技巧還是在習題中吧。

思維難度基本遞增。

bzoj3028

有 \(8\) 種物品,每個物品有自己的限制,現在要拿 \(n\) 個物品,求方案數,限制有點多,建議看原題。

經典板子題,考慮對於每一種食物構造乙個生成函式,每一項表示這種食物選多少個。

承德漢堡為例,直接構造 \(f(x)=\sum x^\)。

求出每乙個函式的封閉形式,然後全部卷積起來,再展開就是答案。

函式都比較簡單,不細講。

p7386

有 \(n\) 個 \(1\) 和 \(m\) 個 \(0\),你需要把它們排列,但要保證任意的 \(1\) 互不相鄰且第乙個位置是 \(0\)、最後乙個位置是 \(1\),現在把所有可以構造出的串放到一棵 0-1 trie 上,需要多少個節點,此處 0-1 trie 的節點存字元而非邊。

答案對 \(18888913\)(乙個質數),取模。

\(n,m\le 5\times 10^\)。

由於最前面是 \(0\),最後是 \(1\),所以字串可以看做是一大堆 \(0\) 後面跟個 \(1\) 拼起來。

考慮 dp,設 \(f_\) 表示 \(n\) 個 \(1\),\(m\) 個 \(0\) 的答案,容易得到:

\[f_=\sum_^m (f_+2)

\]因為下面的狀態前面要寫 \(01\),所以要加二。

並且顯然如果 \(n>m\),無解。

考慮這東西用生成函式做,設 \(f_n(x)=\sum f_x^i\)

考慮咋推到下乙個,設 \(g(x)=\sum x^i=\frac\)。

相當於 \(i\ge n\) 的每項加 \(2\),然後字首和後後移一位。

容易發現 \(f_(x)=(f_n(x)+2g(x)x^n)g(x)x\)。

把 \(g(x)\) 換掉,得到。

\[f_(x)=(f_n(x)+\frac)\frac

\]求一下數列通項,令 \(h_n(x)=\frac\)。

\[h_(x)=h_n(x)+2(1-x)^

\]計算一下 \(f_1(x)\)。

\[1+f_1(x)=\sum (i+1)x^i=\frac

\]\(f_1(x)=\frac\)。

\(h_1(x)=\frac\)。

然後就可以推出 \(h\) 的通項了。

\[h_n(x)=\frac+\sum_^ 2(1-x)^i=\frac+\frac}\\

f_n(x)=\frac}+\frac(2-2(1-x)^)}=\\ \frac(2-x^2)}}-\frac}\\

ans=[x^m]f_n(x)=[x^]\frac}\\

=[x^](\frac}-\frac)

\]\[=[x^]((2-x^2)\sum \binom x^i)-2 \\

=2\binom-\binom-2

\]直接用 lucas 算就好了。

code

ACM數學題做題記錄

僅以此部落格記錄每次遇到的數論,以便日後的複習 口胡 根本不可能再看 1.2020icpc 小公尺 網路選拔賽第一場 intelligent warehouse 數學 2.2020牛客noip賽前集訓營 提高組 第一場 牛牛的方程式 求解不定方程 3.math problem 2017廣西邀請賽 矩...

生成函式學習筆記

生成函式即為母函式 設 是任一數列,則形式冪級數 a t sum a it i 叫做數列 的常生成函式 引理 1 以 m k k 1,2,n 表示不定方程 x 1 x 2 x 3 x n r 中的未知數 x k 的可取值所成之集 以 a r 表示不定方程 x 1 x 2 x 3 x n r 滿足條件...

生成函式學習筆記

a是一類組合物件構成的集合 其中大小為i的物品數量為a i a x sum a n x n 組合元素可以理解為一種由基本元素構成的集合 這裡所說的seq a 是乙個以ogf為自變數的函式 表示的是有a中元素有序排列,大小相加構成的所有元素 所組成的集合 結合上文的兩個例子理解 f x 存在逆元的充要...