考慮數列 ,如果 可以用之前的若干項表示,則稱此種表達式為遞迴關係式
通常是題目給定了遞迴關係式,我們要證明該通解是正確的
例如知名的 Ackerman's function:
Show .
Sol:
當 時, ,原式成立
設 時原式成立
則 時, 原式亦成立
故由數學歸納法知,
Suppose that is defined recursively by . Show that .
Sol:
對 中所有有序對依字典順序排序,而對 做歸納
當 時, ,原式成立
假設排在 前的有序對皆使題目敘述成立
則對 , 如果 則因為 排在 前,故 ;
若 則因為 排在 前,故
故由數學歸納法知,
由規律性來求出整體通解,在解遞迴演算法的時間複雜度時,是相當常用的技巧
通常代個幾項就能看出規律了
例如:
,
Sol:
,
Sol:
Let
若有 為相異特徵根,則通解
例如:
,
特徵式: , or
Let
假設 解出有 個,那就要修正成
這是為了防止同類項合併
例如:
,
解出特徵根:
Let
如果解出複數根如 ,則令 ,其中 、
例如:
,
解出特徵根為
Let
如果題目是長
則通解 ,其中 叫齊次解、 為特殊解
就是我們不看 把原式當齊次式,用上面的方法解出來的解
則要看 的長相,求出 的模樣後代回原式以解出其係數
長相 | 修正之注意事項 | |
---|---|---|
次多項式 | 若有 個特徵根為 ,修正為 | |
以 為底的指數 | 若有 個特徵根為 ,修正為 | |
三角函數 | ||
上述情況之線性組合 | 上述之線性組合 | (遵照上面) |
這邊的修正也是防止同類項合併
例如:
,
特徵根求出為
齊次解令為
特殊解令為 (因為特徵根有 ) ,代回原式:
故
,
特徵根為
(因為有特徵根與 之底數相同)
代回原式求出是
故
解出
常見的一般生成函數要熟悉,例如
一般來說,用生成函數解很佔計算空間,通常都是題目要求你要用生成函數解題才用,不然就用其他方法快速解
用生成函數算可能會出包,所以建議先用特徵方程之類的方法求出答案,再用生成函數寫計算過程,最後看看有沒有計算錯誤
例如:
,
我們先偷算答案到底是多少
首先不難看出特徵根是
所以我們搶先算出了
我們這樣只需要花幾秒鐘
接著才是用生成函數開始計算,首先我們要把原式變成 的模樣
原式是
所以寫成
可以看到係數的部分還沒都是 ,接著我們要對 的 index 動手腳 使得每個係數都能寫成 的模樣:
比對等號左右兩邊的係數,便可得
回去看一下事先算好的答案,我們算對了
可以看到,生成函數的算法很考驗你的細心,還有熟不熟悉生成函數
基本上是建議可以直接把原式寫成
然後就能跳到上面計算過程的第二步:
省一步思考的功夫,其實會輕鬆一點
將 個自然數 排列使得 不在第 位 (亂序排列, Derangement) ,令其方法數為 則
(1)
,
考慮任一數 () 放置到位置 ()
則 可以分成兩種情況:
以 1. 來說,代表我們只需要考慮剩下 個數的亂序方法數,即
至於 2. 的情況,我們就需要考慮 個數亂序的方法數,即
而對於數字 總共有 種 可以選擇,故
只有一個數字沒得亂序,故 ;兩個數字之亂序只會是兩數交換位置,故
(2)
Let , then
根據 得
(用代入大法)
接著我們對上式使用生成函數法解題:
(3) 通解?
字串型的問題,其實就是討論子字串開頭會是誰,進而構建出遞迴關係式
剩下就簡單了
子字串從原始字串開始討論
雖然看似純幹話,但遞迴應用問題基本上你想辦法構建出遞迴關係式,答案便呼之欲出了
通常就是你總覺得這問題有個模式可以重複遵循
解演算法的 DP 也是這樣子想出遞迴關係式的
我們很多東西的答案是 Catalan number ,例如 節點的相異 binary tree 有 種,即第 個 Catalan number
我在LeetCode 96. Unique Binary Search Trees 有講過要怎麼想出遞迴關係式,不過我沒有說明 Catalan number 怎麼從遞迴關係式解出通解
其實呢,我們可以生成函數來解
這邊留給讀者思考怎麼求
至於各種姿勢的 Catalan number 證法可以參考wiki
費氏數,老朋友了吧,用特徵函數能求出
這數字應該要很熟悉了
其中 就是大名鼎鼎的黃金比例 ()
有些題目呢,看起來無關但其實就是費氏數
例如著名的爬樓梯問題(LeetCode 上有一題,你可以點開此連結來寫)
You are climbing a staircase. It takes steps to reach the top.
Each time you can either climb or steps. In how many distinct ways can you climb to the top?
設有 種走法
分兩種情況討論:
故 ,
這不就老朋友嗎?
剩下不用我解了吧