十個利用矩陣乘法解決的經典題目

2021-02-24 數學算法俱樂部

日期:2019年5月26日

正文共:2558字7圖

預計閱讀時間:7分鐘

來源:Matrix67

好像目前還沒有這方面題目的總結。這幾天連續看到四個問這類題目的人,今天在這裡簡單寫一下。這裡我們不介紹其它有關矩陣的知識,只介紹矩陣乘法和相關性質。

不要以為數學中的矩陣也是黑色屏幕上不斷變化的綠色字符。在數學中,一個矩陣說穿了就是一個二維數組。一個n行m列的矩陣可以乘以一個m行p列的矩陣,得到的結果是一個n行p列的矩陣,其中的第i行第j列位置上的數等於前一個矩陣第i行上的m個數與後一個矩陣第j列上的m個數對應相乘後所有m個乘積的和。比如,下面的算式表示一個2行2列的矩陣乘以2行3列的矩陣,其結果是一個2行3列的矩陣。其中,結果的那個4等於2*2+0*1:

下面的算式則是一個1 x 3的矩陣乘以3 x 2的矩陣,得到一個1 x 2的矩陣:

 

矩陣乘法的兩個重要性質:一,矩陣乘法不滿足交換律;二,矩陣乘法滿足結合律。為什麼矩陣乘法不滿足交換律呢?廢話,交換過來後兩個矩陣有可能根本不能相乘。為什麼它又滿足結合律呢?仔細想想你會發現這也是廢話。假設你有三個矩陣A、B、C,那麼(AB)C和A(BC)的結果的第i行第j列上的數都等於所有A(ik)*B(kl)*C(lj)的和(枚舉所有的k和l)。

經典題目1 

給定n個點,m個操作,構造O(m+n)的算法輸出m個操作後各點的位置。操作有平移、縮放、翻轉和旋轉。

這裡的操作是對所有點同時進行的。其中翻轉是以坐標軸為對稱軸進行翻轉(兩種情況),旋轉則以原點為中心。如果對每個點分別進行模擬,那麼m個操作總共耗時O(mn)。利用矩陣乘法可以在O(m)的時間裡把所有操作合併為一個矩陣,然後每個點與該矩陣相乘即可直接得出最終該點的位置,總共耗時O(m+n)。假設初始時某個點的坐標為x和y,下面5個矩陣可以分別對其進行平移、旋轉、翻轉和旋轉操作。預先把所有m個操作所對應的矩陣全部乘起來,再乘以(x,y,1),即可一步得出最終點的位置。

經典題目2 

給定矩陣A,請快速計算出A^n(n個A相乘)的結果,輸出的每個數都mod p。

由於矩陣乘法具有結合律,因此A^4 = A * A * A * A = (A*A) * (A*A) = A^2 * A^2。我們可以得到這樣的結論:當n為偶數時,A^n = A^(n/2) * A^(n/2);當n為奇數時,A^n = A^(n/2) * A^(n/2) * A (其中n/2取整)。這就告訴我們,計算A^n也可以使用二分快速求冪的方法。例如,為了算出A^25的值,我們只需要遞歸地計算出A^12、A^6、A^3的值即可。根據這裡的一些結果,我們可以在計算過程中不斷取模,避免高精度運算。

經典題目3 

POJ3233 (感謝rmq)

題目大意:給定矩陣A,求A + A^2 + A^3 + … + A^k的結果(兩個矩陣相加就是對應位置分別相加)。輸出的數據mod m。k<=10^9。

這道題兩次二分,相當經典。首先我們知道,A^i可以二分求出。然後我們需要對整個題目的數據規模k進行二分。比如,當k=6時,有:

A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3)

應用這個式子後,規模k減小了一半。我們二分求出A^3後再遞歸地計算A + A^2 + A^3,即可得到原問題的答案。

經典題目4 

VOJ1049

題目大意:順次給出m個置換,反覆使用這m個置換對初始序列進行操作,問k次置換後的序列。m<=10, k<2^31。

首先將這m個置換「合併」起來(算出這m個置換的乘積),然後接下來我們需要執行這個置換k/m次(取整,若有餘數則剩下幾步模擬即可)。注意任意一個置換都可以表示成矩陣的形式。例如,將1 2 3 4置換為3 1 2 4,相當於下面的矩陣乘法:

 
置換k/m次就相當於在前面乘以k/m個這樣的矩陣。我們可以二分計算出該矩陣的k/m次方,再乘以初始序列即可。做出來了別忙著高興,得意之時就是你滅亡之日,別忘了最後可能還有幾個置換需要模擬。

經典題目5 

《算法藝術與信息學競賽》207頁(2.1代數方法和模型,[例題5]細菌,版次不同可能頁碼有偏差)

大家自己去看看吧,書上講得很詳細。解題方法和上一題類似,都是用矩陣來表示操作,然後二分求最終狀態。

經典題目6 

給定n和p,求第n個Fibonacci數mod p的值,n不超過2^31

根據前面的一些思路,現在我們需要構造一個2 x 2的矩陣,使得它乘以(a,b)得到的結果是(b,a+b)。每多乘一次這個矩陣,這兩個數就會多迭代一次。那麼,我們把這個2 x 2的矩陣自乘n次,再乘以(0,1)就可以得到第n個Fibonacci數了。不用多想,這個2 x 2的矩陣很容易構造出來:

 

經典題目7 

VOJ1067

我們可以用上面的方法二分求出任何一個線性遞推式的第n項,其對應矩陣的構造方法為:在右上角的(n-1)*(n-1)的小矩陣中的主對角線上填1,矩陣第n行填對應的係數,其它地方都填0。例如,我們可以用下面的矩陣乘法來二分計算f(n) = 4f(n-1) – 3f(n-2) + 2f(n-4)的第k項:

         

利用矩陣乘法求解線性遞推關係的題目我能編出一卡車來。這裡給出的例題是係數全為1的情況。

經典題目8 

給定一個有向圖,問從A點恰好走k步(允許重複經過邊)到達B點的方案數mod p的值

把給定的圖轉為鄰接矩陣,即A(i,j)=1若且唯若存在一條邊i->j。令C=A*A,那麼C(i,j)=ΣA(i,k)*A(k,j),實際上就等於從點i到點j恰好經過2條邊的路徑數(枚舉k為中轉點)。類似地,C*A的第i行第j列就表示從i到j經過3條邊的路徑數。同理,如果要求經過k步的路徑數,我們只需要二分求出A^k即可。

經典題目9 

用1 x 2的多米諾骨牌填滿M x N的矩形有多少種方案,M<=5,N<2^31,輸出答案mod p的結果

    

我們以M=3為例進行講解。假設我們把這個矩形橫著放在電腦屏幕上,從右往左一列一列地進行填充。其中前n-2列已經填滿了,第n-1列參差不齊。現在我們要做的事情是把第n-1列也填滿,將狀態轉

-- End --

更多精彩:

☞ 李源潮:我在數學系的日子

☞ 我的博士五年

☞ 為什麼梯度反方向是函數值下降最快的方向?

☞ 7年賺的2個億,數學家6年就花光了,全砸在自家的房子上

☞ 數據科學家最常用的十種算法

☞ 曲面論

相關焦點

  • 線性代數入門——矩陣乘法的定義及其意義
    在內容上,以國內的經典教材「同濟版線性代數」為藍本,並適當選取了一些補充材料以開闊讀者的視野。本系列文章適合作為初學線性代數時的課堂同步輔導,也可作為考研複習的參考資料。文章中的例題大多為紮實基礎的常規題目和幫助加深理解的概念辨析題,並有相當數量的歷年考研試題。對於一些難度較大或對理解所學知識有幫助的「經典好題」,我們會詳細講解。
  • 矩陣分解 (乘法篇)
    對角和三角矩陣首先, 我們總結下, 在矩陣加法分解中出現了三種矩陣: 上三角矩陣, 下三角矩陣 和 對角陣。  這三種矩陣在乘法的分解中也會遇到。 那麼是不是乘法矩陣中有這三種矩陣就夠了呢? 不是的!正交矩陣還有一種經典的矩陣, 叫正交矩陣, 什麼叫正交矩陣呢?
  • No.3 矩陣乘法
    那麼矩陣的運算很自然地由數的運算推廣過來。         舉個列子吧。設,這8個數形成一個共同體(缺一不可,這才叫矩陣),那麼加法(➕)、減法(➖)很自然的要求能與矩陣A相加、相減的矩陣必須與A是同維數的,即行數與列數與A的行數與列數相同,比如矩陣就可以與A相加或相減,結果是但是矩陣就不能與A相加!
  • 線性代數入門——矩陣的轉置運算及對稱矩陣的概念
    在內容上,以國內的經典教材「同濟版線性代數」為藍本,並適當選取了一些補充材料以開闊讀者的視野。本系列文章適合作為初學線性代數時的課堂同步輔導,也可作為考研複習的參考資料。文章中的例題大多為紮實基礎的常規題目和幫助加深理解的概念辨析題,並有相當數量的歷年考研試題。對於一些難度較大或對理解所學知識有幫助的「經典好題」,我們會詳細講解。
  • Adreno GPU 矩陣乘法——第1講:OpenCL優化
    由於近來依賴於卷積的深度學習引起廣泛關注,矩陣乘法(MM)運算也在GPU上變得流行起來。我們也收到開發人員的反饋,希望利用配備Adreno™GPU的Qualcomm®Snapdragon™處理器加速深度學習(DL)應用。
  • blender python處理矩陣乘法變更符號
    如果對矩陣對象執行任何乘法,要注意一件事情,Python 的最新版本(當然還有包含Blender內置Python版本)為適當的矩陣乘法實現了新的表示方法。用blender腳本編寫器編寫任何矩陣乘法,乘法* 語法仍然有效,這個只能作為 2.8 中嘗試普通乘法,而不是 2.7 中的矩陣乘法。如果你用在矩陣乘法會報出有趣的錯誤,因為這並不一定會拋出一個錯誤,a * ba @ b想要支持 2.7 和 2.8 的相同矩陣乘法樣式?首先,這似乎是一個類似的挑戰,採用前面幾節中提到的欄位注釋。
  • 矩陣乘法的通俗理解
    今天先分享一下矩陣乘法的理解。一、問題引出 - 一道小學生應用題計算題一:小明今天要做飯,消耗2斤肉,1斤蔬菜。肉每斤20元,蔬菜每斤5元,則一共需多少花費?             解法: 20 X 2+ 5 X 1 = 45計算題二:小明第二天有另一種做飯的方法,需要消耗1斤肉,4斤蔬菜,那麼這兩種方法的花費各是多少呢?
  • cuda入門:如何進行矩陣乘法優化
    所以我們的第二個 CUDA 程序,要做一個確實有(某些)實用價值的程序,也就是進行矩陣乘法。而且,這次我們會使用浮點數。  雖然矩陣乘法有點老套,不過因為它相當簡單,而且也可以用來介紹一些有關 CUDA 的有趣性質。  矩陣乘法  為了單純起見,我們這裡以方形的矩陣為例子。
  • 線性代數的第一堂課──矩陣乘法的定義
    這段歷史顯示矩陣乘法──矩陣理論中最重要的一個代數運算──絕對不是如數學課本所述那般理所當然,矩陣乘法定義隱含深層的意義,否則為何眾多優秀的數學家竟然看不出矩陣理當如此相乘。今天我們事後諸葛,已然明了矩陣代數之所以遲至十九世紀中葉才誕生的最主要原因在於人們一直無法確定矩陣的本質與功用究竟為何。
  • 五道可逆矩陣題目你會做幾道呢?
    在線代矩陣中,可逆矩陣是重點中的重點,但是可逆矩陣的性質和計算你都明白麼?小編在本文帶來五道可逆矩陣題目的講解,如果你能夠快速、準確地解決,那麼小編相信,95%以上的可逆矩陣題目你都能正確解答了!例2:抽象的逆矩陣例2是一道抽象的可逆矩陣題目。同樣從既複雜又易化簡的地方入手,如題目中標綠的部分,具體操作如下:因此答案選C。注意上述解答過程中兩處標橙的地方。例3:矩陣運算的考察例3是一道出錯概率比較大的題目。這道題目可能有的同學會選B,有的同學會選C。
  • 拋棄複雜的運算來理解「矩陣乘法」和「行列式」
    上一篇我們知道了,矩陣其實就是一個線性變換,矩陣的各列就是由原來的基向量變換而來。在此基礎上,假如我們把兩個矩陣放在一起,也就是說,讓兩個矩陣做乘法,它又有什麼含義呢?矩陣乘法我們還是先從矩陣和向量的乘法看起:矩陣乘以一個向量,得到一個新向量。如果我們把新向量再乘以一個矩陣呢?
  • 矩陣的乘法在量子計算領域是一種基本操作
    矩陣的乘法在量子計算領域是一種基本操作,正是因為算法本身的簡單,矩陣乘法和導數結合非常容易。至於物理意義就是解一個能量問題,矩陣的結構就是基本原子或者分子電子的排列組合,基於一個組合態的結果,討論算符不知是不是可以算矩陣的非退化算符,即矩陣乘法不是一個主算符,有的只是一個導出算符而已。
  • 線性代數入門——矩陣乘積和乘冪在實際問題中的應用舉例
    在內容上,以國內的經典教材「同濟版線性代數」為藍本,並適當選取了一些補充材料以開闊讀者的視野。本系列文章適合作為初學線性代數時的課堂同步輔導,也可作為考研複習的參考資料。文章中的例題大多為紮實基礎的常規題目和幫助加深理解的概念辨析題,並有相當數量的歷年考研試題。對於一些難度較大或對理解所學知識有幫助的「經典好題」,我們會詳細講解。
  • 線性代數入門——矩陣的按行、列分塊及其簡單應用
    在內容上,以國內的經典教材「同濟版線性代數」為藍本,並適當選取了一些補充材料以開闊讀者的視野。本系列文章適合作為初學線性代數時的課堂同步輔導,也可作為考研複習的參考資料。文章中的例題大多為紮實基礎的常規題目和幫助加深理解的概念辨析題,並有相當數量的歷年考研試題。對於一些難度較大或對理解所學知識有幫助的「經典好題」,我們會詳細講解。
  • 六年級數學上冊分數乘法練習一,靈活運用計算法則解決問題!
    4個3/4相加可以用乘法表示3/4×4=3,3個5/8求和可以用乘法表示5/8×3=15/8,利用分數乘法的意義來計算,分數乘法意義與整數乘法意義相同,都是表示求幾個相同加數和的簡便運算。2.審題和提取信息能力非常重要!1千克衣服需要1/2勺洗衣粉,一共有5千克衣服,也就是有5個1/2求和,可以用乘法表示1/2×5=5/2勺。3.讀懂題目再做題!
  • 利用圖片理解矩陣的線性運算
    利用圖片理解矩陣的線性運算 圖片的儲存方式 在計算機中,按照顏色和灰度的多少可以將圖像分為二值圖像、灰度圖像、索引圖像和真彩RGB圖像四種基本類型。
  • 線性回歸與最小二乘法
    線性回歸模型是使用最廣泛的模型之一,也最經典的回歸模型,如下所示x軸表示自變量x的值,y軸表示因變量y的值,圖中的藍色線條就代表它們之間的回歸模型
  • 最小二乘法的數學公式
    之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?      本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • GD&T乾貨|最小二乘法的數學公式詳解
    (GZHl:智慧汽車供應鏈)之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • 不用背乘法口訣,也能學好乘法!DK新作教你輕鬆玩轉乘法
    為解決類似困難,英國出版名社DK專門聯合數學教育專家卡羅爾·沃德曼出了一本《DK超級數學小玩家:玩轉乘法》,用引導式教學,幫孩子輕鬆學會乘法。作為英國知名出版社,DK代表的不僅是一種圖文並茂的美學風格,更是一種面對世界和知識的態度。其實這套DK經典匠心之作《DK超級數學小玩家》包括兩本,其中一本《DK超級數學小玩家:玩轉測量》,我已經做過介紹。