昨晚學長教了我們這樣一個神奇的算法---矩陣快速冪,矩陣快速冪在遞推優化上相當神奇,並且效率很高。
一、 先舉這樣一個例子。斐波那契數列大家都知道的吧。f[n]=f[n-1]+f[n+2](n=108),求f[n];
這種題目,要是用遞歸做下去肯定超時。但是用矩陣就很容易解決。
f[n] * 0 1 = f[n+1]
f[n+1] ...A 1 1 ...C f[n+2] ...B A矩陣*C矩陣得到B矩陣。C矩陣是推出來的;主要的核心就是推出一個矩陣與A得到B矩陣。(即我知道當前狀態和下一狀態,我就要求出中間的媒介,這樣的話就是可以無限知道下下狀態,下下下狀態....的值~~)我們知道f[1]=1,f[2]=1; A*Cn=B,接着對Cn快速冪取模就OK了!
略懂一點之后,轉變一下。
二、有a,b,c,d四個城市,如同所示。求從a->d在正好n步的條件下走到。n很大很大。求有多少種方法。
這個的初始的是走0步到達下一個位置的矩陣A=E(單位矩陣),然后很明顯的中介矩陣就是 a b c d
a 0 1 1 0
b 0 0 1 1
c 1 1 0 1
d 0 1 1 0....C 然后A*C就可以得到走兩步到一個地方的種數。其中"1"表示a->b有一種方法。
三、依舊是有a,b,c,d四個城市,如圖所示。我現在要從a到d在正好n步的條件下走到,加一個要求就是路程最短。求最短的路程。和上一個類似,這里就不進行詳解了0.0
學長還講了區域賽里的幾個題目,一時半會說不清楚,從早上總結到現在,該去吃飯了==總結一下吧
矩陣快速冪主要的就是要寫出那三個矩陣來解決問題,雖然現在講的只是一種思想,里面摻雜一些動態規划的問題,不過是很實用的,可以很快速的來解決n值特別大,或者類似的組合問題。