日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快速幂矩阵

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速幂矩阵 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

整數(shù)快速冪:
為了引出矩陣的快速冪,以及說明快速冪算法的好處,我們可以先求整數(shù)的冪。
如果現(xiàn)在要算X^8:則 XXXXXXXX 按照尋常思路,一個一個往上面乘,則乘法運算進行7次。
(XX)(XX)(XX)(XX)
這種求法,先進行乘法得X^2,然后對X^2再執(zhí)行三次乘法,這樣去計算,則乘法運算執(zhí)行4次。已經(jīng)比七次要少。所以為了快速算的整數(shù)冪,就會考慮這種結(jié)合的思想。
現(xiàn)在要考慮應(yīng)該怎么分讓計算比較快。接下來計算整數(shù)快速冪。例如:X^19次方。
19的二進制為:1 0 0 1 1 。
由(X^m)(X^n) = X^(m+n)
則X^19 = (X^16)(X^2)*(X^1)
那么怎么來求解快速冪呢。請看下列代碼:
求解X^N的值。
///整數(shù)快速冪,計算x^N

int QuickPow(int x,int N) {int res = x;int ans = 1;while(N){if(N&1){ans = ans * res;}res = res*res;N = N>>1;}return ans; }

那么讓我們來看看下面這段代碼到底對不對:
對于X^19來說:
19的二進制為:1 0 0 1 1
初始:

ans = 1; res = x;

則10011最后一位是1,所以是奇數(shù)。

ans = res*ans = x; res = res*res = x^2;

然后右移一位,1 0 0 1
則1001最后一位是1,所以是奇數(shù)

ans = res*ans = x*(x^2) = x^3 res = res*res = x^2*x^2 = x^4

然后右移一位,1 0 0
則最后一位是0,所以當(dāng)前的數(shù)為偶數(shù)。

res = res*res = x^4*x^4 = x^8

然后右移一位,1 0
最后一位是0,當(dāng)前數(shù)是偶數(shù)。

res = res*res =x^8*x^8= x^16

然后右移一位,1
最后一位是1,當(dāng)前數(shù)是奇數(shù)

ans = ans*res = (x^3)*(x^16) = x^19 res = res*res = x^32

可以看出res = X^m,m 始終是與二進制位置上的權(quán)值是相對應(yīng)的。當(dāng)二進制位為0時,我們只讓resres使冪指數(shù)2.對應(yīng)下一個二進制位的權(quán)值,當(dāng)二進制位為1時,ans = ans*res 。則乘上了該乘的X冪次。
2.矩陣快速冪算法篇

看了一個整數(shù)數(shù)的快速冪,現(xiàn)在我們就正式介紹矩陣快速冪算法。假如現(xiàn)在有一個n*n的方陣A。所謂方陣就是行數(shù)和列數(shù)相等的矩陣,先給出一個數(shù)M,讓算矩陣A的M次冪,A^M.在此只要求計算并不需要去深究這個矩陣到底是什么含義。則上面代碼可以化為。


上面只是簡單的計算矩陣的冪,大家會感覺很抽象,因為上述矩陣并沒有具體的含義,
現(xiàn)在就舉例說明矩陣快速冪在實際運用中的意義:
以最常見的斐波那契數(shù)列為例:眾所周知:斐波那契數(shù)列遞推公式為:
F[n] = F[n-1] + F[n-2]. 由f[0]=0,f[1]=1,可以遞推后面的所有數(shù)。
在以前,我們會常常用for循環(huán),這是最直接的算法。
POJ 3070 題目,讓求斐波那契數(shù)列,其n更是高達10億。
直接遞推的局限性:
(1)本題讓你遞推的斐波那契數(shù)n高達10億。測試時間僅1秒的時間,for循環(huán)用遞推公式遞歸導(dǎo)致超時。
(2)想要打表實現(xiàn)隨機訪問根本不可能,先把斐波那契數(shù)列求到10億,然后想去進行隨機訪問。題目未給出那么多內(nèi)存,數(shù)組也開不到10億。
因此它可以用矩陣快速冪來寫。
觀察f[n] = f[n-1]+f[n-2] 第n相是由第n-1項和第n-2項遞推而來。
同理,第n+1項由第n項和第n-1項遞推而來。
因此可以用矩陣表示:

則,知道f[n-1]、f[n-2]則乘上左方矩陣,就能得到等號左側(cè)矩陣,第一個位置
即為要求的f[n]。

轉(zhuǎn)載于:https://www.cnblogs.com/A-Little-Nut/p/10352772.html

總結(jié)

以上是生活随笔為你收集整理的快速幂矩阵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。