已知乙個序列 \(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 的節點存字元而非邊。由於最前面是 \(0\),最後是 \(1\),所以字串可以看做是一大堆 \(0\) 後面跟個 \(1\) 拼起來。答案對 \(18888913\)(乙個質數),取模。
\(n,m\le 5\times 10^\)。
考慮 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 存在逆元的充要...