母函式第二彈 之 真正的母函式入門
閒話:
上次第一期更完了之後,博主覺得題目貌似還是相對來說trl。
於是博主覺得在這一期除了介紹母函式以外,還帶來了一波富有思維量的 毒瘤題 水題。
嗯,就這樣吧。閒話不多說,現在就開講了!
定義:
生成函式即母函式,是組合數學中尤其是計數方面的一個重要理論和工具。
生成函式有普通型生成函式和指數型生成函式兩種,其中普通型用的比較多。
形式上說,普通型生成函式用於解決多重集的組合問題,而指數型母函式用於解決多重集的排列問題。
母函式還可以解決遞迴數列的通項問題(例如使用母函式解決斐波那契數列的通項公式)。
對於任意數列
即用如下方法與一個函式聯絡起來:
則稱G(x)是數列的生成函式
(注意:數列可以是有限的也可以是無限的,母函式也一樣)
(以上兩段摘自百度百科~~~)
嗯,這就是基本定義了。
不知各位看官們有沒有理解呢?
想必應該是沒有的,博主本人在第一次看到這些定義的時候也是一臉懵逼。
那麼既然如此,就通過上一些例題幫助大家理解,
然後博主在立足於這個定義,
給各位一邊解釋例題的證明,
一邊補充講解這些定義吧。
那麼,一波例題即將發車啦!
請各位繫好安全帶,並確認自己已經清楚上面例題內容。
為保證您的出行安全,如若您還有迷惑,請自行下車會看(向上翻)。
列車即將發車。下一站,例題!
例題:
(1)使用母函式法求Fib通項。
寫在前面:
博主首先宣告,如果只是為了證明Fib數列絕對不需要什麼鬼母函式。
如果您是高中生,請您使用特徵根法手撕本題。
如果您是初中生,這個問題就有一些困難了。
不過不要緊,如果您知道n次方差公式,您還是求出結論。
並另外給您一個傳送咒語:
http://www.jjchg.cn/show.aspx?id=2213&cid=26
這是一篇介紹初中生寫的純初等的方式解決Fib通項的文章,
不過應該還有學生習作的性質,畢竟還扯了一些閒話。
(不過不要緊啦,反正本章隨筆介紹的重點是用母函式法來做)
好了,關於Fib問題的 閒扯 介紹就先到這裡,下面將用母函式法怎麼搞。
解: 對於Fib數列{1, 1, 2, 3, 5, 8, 13, 21, 34,......,}
我們有生成函式(記不記得,又名母函式)F(x) = x + x2 + 2*x3 + 3*x4 + 5*x5 + ...... + Fib(n)*xn + ......
(換句話說,就是構造一個函式,使得它的n次方係數與Fib(n)形成一個一 一對應關係)
(那為啥要這樣構造呢?那當然有這樣做的意義。這個意義後面自然就會顯現。)
嗯,下面繼續我們的求解。根據Fib的遞推式 Fib(n+2) == Fib(n+1) + Fib(n),我們可知,
F(x) + x*F(x) == F(x)/x - 1; ···························································· (1)式
(這是顯然的。請讀者在草稿本上畫上幾項,就容易發現其顯然性。)
(額。。。算我沒說這句話吧還是稍微講一下當湊字。)
對於這個子問題的解釋(各位巨佬們大可考慮自行跳過):
首先我們看等式左邊:
F(x) = x + x2 + 2*x3 + 3*x4 + 5*x5 + ...... + Fib(n)*xn + ......
+ +
x*F(x) = x2 + x3 + 2*x4 + 3*x5 + ...... + Fib(n-1)*xn + ......
=
x + 2*x2 + 3*x3 + 5*x4 + 8*x5 + ...... + (Fib(n-1)+Fib(n)) Fib(n+1) *xn + ...... (說過了Fib(n+2) == Fib(n+1) + Fib(n)嘛!)
然後我們再來看等式右邊
F(x)/x = x1-1 + x2-1 + 2*x3-1 + 3*x4-1 + 5*x5-1 + ...... + Fib(n)*xn-1 + Fib(n+1)*xn ......
減去1之後,藍色的多餘部分顯然就沒有了。
然後我們對比每一項的係數(粉色部分),是不是發現,這兩個函式是完全相同的?
這樣不就證完了麼?是不是很顯然。
好了,然後迴歸證明吧。
我們把(1)式移項變形變形,是不是就得到了F(x) = -x /(x2+x+1)
因為分母這方程的兩個根下面會頻繁用,不過這個分式根式寫起來太複雜,
我們這裡就用 λ1 和 λ2 表示這個方程的兩根吧。
也就是說,x2+x+1 == (x-λ1)*(x-λ2)
那麼我們對變形後的(1)再進行拆分,顯然有F(x) = A/(x-λ1) + B/(x-λ2); A,B的意義同上面的λ。
(就是當某個式子經常要使用卻又比較複雜,我們常常會設一個量來表示。這可以類似理解成OI裡的define)
然後我們會注意到 (1-x)-1 == 1 + x + x2 + x3 + x4 + ... + xn + ... (就是這樣無限的加下去)
(這一步非常關鍵,也是一種經典的構造方法。就可以把分數的多項式與整數型式的來進行對應係數比較。)
就可以容易地推出Fib的通項就是 Fib(i) = -A/λ1 * λ1-i + -B/λ2 * λ2-i
然後把A, B, λ1, λ2 算出來帶進去就可以得到Fib的通項了。
//當然是沒有寫完的,不過博主要去吃飯了,晚上再更吧。讀者可以先自行思考回顧一下這個證明思想。