ACM中的矩陣優化總結


一、矩陣相乘

  設C,A,B三個矩陣,C = A * B

  則C[i][j] = ∑A[i][k] * B[k][j] (k = 0,1,2,...n-1)

  矩陣相乘就是這么算的,依次用前面矩陣的每一行,依次乘后面矩陣的每一列,i就是行,j就是列。所以矩陣相乘就不滿足交換律

  實現 : 3個變量,3重for循環。

二、矩陣快速冪(仿二分快速冪)  

  計算An

  將矩陣TEMP置為E單位矩陣

  if n為奇數

    TEMP = TEMP * A ;

    n--;

  if n為偶數

    A = A  * A ;

    n /= 2;

  循環到n為0,TEMP就是答案

  //109也承受不住30多次除2,時間復雜度0(logn * N3),N為矩陣階數(N*N矩陣),這樣的話100階矩陣也有超時的危險。

   

    推薦題目 : http://poj.org/problem?id=3233

   解題報告 : 點這里 (代碼寫的很一般)

三、矩陣優化遞推式

  F(n)= A * F(n-1)

  上面都是矩陣,根據矩陣的結合律,這個式子可以化為F(n)= An-1 * F(1)

  這樣求An-1用矩陣快速冪去求,計算原問題的時間復雜度就從0(n)優化成了O(logn)。

  一般難點是在怎么化為標准的式子(方程組化為矩陣)

  題目鏈接 : http://acm.nyist.net/JudgeOnline/problem.php?pid=301

  題目描述 :

    給你一個遞推公式:f(x)=a*f(x-2)+b*f(x-1)+c,並給你f(1),f(2),a,b,c的值,請求出f(n)的值,由於f(n)的值可能過大,求出f(n)對1000007取模后的值。

       注意 : -1對3取模后等於2,1<=n<=100000000 (10^9)

  解析 :

  化為標准式只有一個原則,F(n)的每個變量i,都對應着F(n-1)的每個變量i-1,有常量項就都為1。

  舉個栗子,看題目的遞推公式,顯然左邊還缺了個x-1來對應右邊的x-2,所以

           f(x) = a*f(x-2)+b*f(x-1)+c*1

          f(x-1) = 0*f(x-2)+b*f(x-1)+0*1

 

            1 = 0*f(x-2)+0*f(x-1)+1*1

  將這個方程組化為矩陣

  

  再化

  

  就OK了!

  *優化求斐波那契項是不是就很簡單了

  *推薦題目 : http://acm.hdu.edu.cn/showproblem.php?pid=5950

    *對一個二維dp的優化,題目鏈接 : 點這里

   dp分析:dp[i][j] = ( dp[i-1][j] + dp[i-1][j-1] )%2   //i表示第i秒,j表示第j個燈,注意下j=0的情況

      這個就不能像前面一樣,二維,而且j變量就根本不能那樣處理。。。。。

      所以...

      枚舉j,如果0≤j≤N。

      dp[i][0] = ( dp[i-1][0] + dp[i-1][N] )%2

      dp[i][1] = ( dp[i-1][1] + dp[i-1][0] )%2

      ......

      dp[i][N] = ( dp[i-1][1] + dp[i-1][N-1] )%2

      好像每次換一排燈,每個方程改變一個燈    

四、其它應用

  1,轉換

  有些轉可以等價於乘上了一個矩陣,那么多次轉換就好像依次乘了幾個矩陣,然后再用結合律...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM