第十一章數數難題
尼爾打開了下一題,這個問題很簡單,但是卻又很複雜。
“恭喜你通過了第一道基礎編程,下麵進入第二題,阿道夫老師前往辦公室的路上,總有許多台階,他的步子可以一次邁上一塊台階,也可以一次邁過兩次台階。這天,他突然想知道,他有多少種方法,邁上第n階台階?“
尼爾在紙上胡亂畫了兩筆,一看到計數問題,尼爾第一反應是組合數學,可是直接求解第n階時,繁複的數字完全沒有頭緒,因為組合數求出來的,有許多無效的路徑,根本無法去除,不過想了一會,尼爾忽然靈光一閃,如果把到達第一階的方法數目記成a1,到達第二階的方法數目記作a2,那麼到達第三階的方法數目記作a3,那麼a3就等於a2+a1!為什麼?因為第三階台階隻可能是從第一階,邁兩步到達,或者是從第二階,邁一步到達!同理推廣到第n階,那麼an=an-1 + an-2!那麼問題就化歸為求解這個遞推公式的通項了。
而這讓尼爾想起了那個著名的數學公式,斐波那契數列!第一次在教科書上,看到前人用簡單的初等數學,便完美的推導出斐波那契數列通項時,尼爾內心是感歎的,他到底是如何聯想到這種構造的方法的?靈感麼?
(附一個初等數學證明地址,高等數學裏麵還有差分法的,比較難。 https://wenku.baidu.com/view/571c93f858f5f61fb6366630.html)
不過,這已經有了現成的結論,那麼,便拿來用吧! an=((1+sqrt(5))^n-(1-sqrt(5))^n)/sqrt(5),尼爾套用了這個結論,果然,卡牌一時振動,一道accpet的意識流反饋了回來,但是,卻彈出了一段阿道夫的話。
“作為一個數學家的話,這題是滿分,但是如果作為一個魔語者,那麼這題還沒有入門。這題裏麵有深意,且往下試試吧。”
這段意識流就如同阿道夫那親切的聲音一樣,在耳邊響起,隨後又變成了評測卡片那機械的意識流
“根據你的回答,進入此題的變形分支係列,阿道夫大師這次,最多一次可以跨越三步,請問,到達第n階的方式有多少種?n小於10萬”
尼爾隻是略微思考一番,便得出了結論,an=an-1+an-2+an-3,但是,這已經不是斐波那契數列了,不能再用那套通項公式結論,若是要尼爾再推導一遍這個遞推數列的通項結論,可能有些困難。而且尼爾聽完阿道夫老師的提醒,心有明悟,自己是在學習魔語,雖然數學可以很好的幫助魔語的實現,但是,運用魔語的才是核心,魔語有什麼特性?計算快速!超越人腦反應的速度,那麼何不暴力一些呢?推不出,我便直接從第一項開始遞推好了!
a[1]=1
a[2]=1
a[3]=2
n=3
while(n0)
{
a[i][j]+=a[i-1][j];
}
if(j>0)
{
a[i][j]+=a[i][j-1];
}
}
尼爾用了兩重循環,來遞推這個公式,並且考慮到,這個地麵最邊緣的情況時,阿道夫大師是隻能從一個方向過去的,比如最右邊時,是隻能沿著右邊邊緣往上走的,所以這個格子是不能加上越界的無效數據,這樣就遞推出了這題的答案,當尼爾通過這道題目的時候,內心隱約起了一些明悟,這時,阿道夫大師預留的總結性意識流流了進來,幫助尼爾對這些知識進行總結。
“這在魔語中,是一種重要的方法。我們把它叫做動態規劃,動態規劃的本質,是對問題狀態的定義和狀態轉移方程的定義。並且這個狀態可以由更小的狀態轉移過來,那麼我隻要知道了最小解的初始狀態,就可以一步步的推演,變成最終要求解的目標解,比如前幾個問題裏,定義下走到第n階的方法數為一個狀態,而這個狀態可以由第n-1階的解加上第n-2階的解得到。這是與數學不同的。”
尼爾感覺心裏那些朦朧的感覺一下被戳破了。腦子裏忽然閃現出一片朦朧的場景。那是神創世的那個夢境,夢境的天空裏,有一行行的文字
啟動世界....
設置宇宙初始參數.....
定義轉移方程中 e=mc^2 ....
世界推演中.....