1. 程式人生 > >我們可以推測矩陣乘法最優解的時間複雜度麼?

我們可以推測矩陣乘法最優解的時間複雜度麼?

矩陣乘法的定義為:

(AB)_{ij} = \sum_{r=1}^n a_{ir}b_{rj} = a_{i1}b_{1j} + a_{i2}b_{2j} + \cdots + a_{in}b_{nj}.

按照定義,一個簡單的方陣乘法虛擬碼如下:

int A[48,48],B[48,48],C[48,48]  
    for i in 1 to 48  
        for j in 1 to 48  
            for k in 1 to 48  
                C[i,j]+=B[i,k]*A[k,j]

三層巢狀,時間複雜度為O(n3),n為方陣的邊長。

由於矩陣乘法的廣泛運用,如何優化矩陣乘法運算,有重要的意義。在不考慮矩陣的疏密程度下,如何有效減少矩陣乘法中算術乘法的使用次數是一個主要的優化方向。

最早的矩陣乘法優化演算法,是由德國數學家Volker Strassen於1969年

提出並以其名字命名的Strassen演算法。該演算法堪稱經典,能在大多演算法,運算優化的教科書中找到該演算法的介紹。這裡也有演算法的基本介紹。它的主要思路是通過拼湊一些間接的項,並利用這些間接的項的加減法相消掉一部分項得到最終答案的。簡單說來,是以加減法代替了乘法。對於一個二階的方陣,原來需要8(23)次的乘法運算,被縮減到了7(2log7))次。這個演算法的重要意義有兩方面,首先是它將矩陣乘法的時間複雜度,由O(n3)降為O(nlog7),log7約為2.807355.即原來的立方運算被降維了(O(n2.807355)),然而更為重要的是,這個演算法讓數學家意識到,這個問題不是單純的三維問題,而是很有可能更低維度的問題,也就是說,可能有很大的優化空間。

在此之後,不少更好的演算法被相繼提出。這裡列舉一些我能夠找到對應文獻的:1981年Pan的演算法(O(n2.494)),1987年的Coppersmith–Winograd演算法(O(n2.376)),和該演算法於1990釋出的改進演算法(O(n2.375477)),此處存疑,未找到對應文獻)。在1990年後,相關研究進入了長達20年的冬眠期。直到愛丁堡大學數學系博士生Andrew Stothers在2010年於其博士論文裡面,提出了一個新的演算法,使時間複雜度進一步降維(O(n2.374),但他本人並沒有在期刊或學術會議發表這一成果!),這也讓沉寂20年的矩陣乘法優化重新火熱起來。2011年底,斯坦福大學的Virginia Vassilevska Williams在基於Andrew Stothers的基礎上,把時間複雜度降至O(

n2.3728642)。而目前最為優化的解法,是2014年秋由François Le Gall簡化的斯坦福方法,能夠達到時間複雜度O(n2.3728639)。

縱觀這數十年的發展,每一丁點的優化都可謂得之不易,而且愈發困難,可以說如果現在能夠把維度艱難地降低0.0000001,都是很了不起的學術成果。在尋找最優解的同時,一個問題也很自然地進入研究人員的視線:矩陣乘法最優解的時間複雜度是什麼?是否可能從數學理論角度證明該最優解的時間複雜度?即使我們暫時無法知道最優解的具體辦法?

換言之,也就是該問題的真實維度是多少。若假設真實維度為D,那麼,自然地:


由於現在最好的演算法已經降維到2.3728642,我們可以進一步收縮這個範圍:


為什麼2是一個簡單(naive)的下限?因為對於一個N階方陣而言,完全的一次訪問(寫入答案)就需要N的2次方操作,所以2是一個簡單的下限。很多人相信D的真實值就是2,實際上,D很可能是遠大於2的,因為若D為2,意味著沒有運算操作(僅有讀寫),所以我傾向於進一步收縮這個範圍:


有不少人嘗試證明D是某一個確定值,但目前沒有太多決定性的進展。

我並沒有嘗試從數學理論角度去找出D值,但是在將年份和降維作畫在一張圖上,可以看到:


這個看起來像是可以擬合到負指數函式上。但是考慮到我們有兩個明確的上下限(兩條漸近線,Degree=3和Degree=D,D值未知,但小於等於2.3728642,大於2。)為了求出D,我們可以把這7個點(7次演算法改進)擬合到有上下漸近線的函式,根據下漸近線的表示式,我們可以推測D的真實值。

一個比較好的候選函式是玻爾茲曼函式(Bolztman function):

y=\frac{A_1-A_2}{1+e^{(x-x_0)/dx}}+A_2

我自己構造了一個類似的函式:

其中D就是最優解法的維度,x0用於消除演算法研究開始年份和公元年份零點對擬合的影響,p算是一個衡量演算法研究進展的指標。明顯地,這個模型有兩條漸近線,符合上面的描述。

擬合結果:R方為0.9914, D為2.366!

整個曲線為:


所以說,如果用這個模型去預測矩陣乘法最優解的時間複雜度是2.366

利用這個模型,我們可以做很多有意思的東西,例如預測何時能夠到達2.36。還可以更進一步,例如說,假設我們已知2150年,會有一個演算法大突破,將問題維度降到2.1。那麼我們將這個點添入,重新擬合,發現模型無法收斂,也就是說,按照這個模型,2150年不太可能有這樣的突破。

注意,這只是一個預測模型,所有預測都有可能遭遇黑天鵝的。

實際上,我對這個模型的準確度也沒抱有很大信心,因為首先這個模型把演算法的研究發展看成是一個指數過程(越接近極限越難),這當然在一定程度上有合理性,但這本身是個複雜的問題,最優解的時間複雜度,是一個確定的值(D),它本身並不由我們已知演算法的時間複雜度決定。

另外一方面,如果我們看下圖(維基百科整理的年份與維度圖,其中一些點我找不到文獻出處,所以我的模型是基於以上7個點):


實際上,在整個發展過程,我們已經數次目睹了黑天鵝(相對豎直的線就是演算法大的突破,相當於黑天鵝)。如果我們擷取,例如說1980年前的成果來進行預測,我們很可能得到在2.8左右的D,從今天來看,我們知道這個是個錯誤的答案。

出乎意料地,按照原來的辦法來進行擬合,如果只有前面4個點(1990年前的成果),我們得到的曲線(R方0.9968)是:


也就是說,如果我們現在還在1990年,按照這個方法預測,D值比在2015年的預測值(2.366)更低(2.32)!


所以,按照這個模型,新的進展,除了降低了D的上限,也會提升D的下限!也算有意思的預測。

所以總的來說,如果矩陣乘法運算演算法的發展符合這個模型的話,我們可以作以下預測:

  1. 矩陣乘法是一個(約)2.366維問題;
  2. 當前已經非常接近矩陣乘法的最優解了,大概只有0.05左右的提升空間。
但是,怎麼知道運算演算法的發展符合這個模型?答案是,我不知道,並且這個模型很有可能是錯誤的。 不過,從這個角度去考慮問題,也許會讓數學家找到證明D下限的出發點(很有可能是2.366,而不是2)。正如愛因斯坦所言:"Problems cannot be solved with the same mind set that created them." 時間,會給我們答案。

References:

1.Strassen, Volker. "Gaussian elimination is not optimal." Numerische Mathematik13.4 (1969): 354-356.

2.Pan, V. Ya. "New combinations of methods for the acceleration of matrix multiplications." Computers & Mathematics with Applications 7.1 (1981): 73-125.

3.Coppersmith, Don, and Shmuel Winograd. "Matrix multiplication via arithmetic progressions." Proceedings of the nineteenth annual ACM symposium on Theory of computing. ACM, 1987.

4.Stothers, Andrew James. "On the complexity of matrix multiplication." (2010).

5.Williams, V. Vassilevska. "Breaking the coppersmith-winograd barrier." E-mail address: [email protected] math. tamu. edu (2011).

6.Gall, François Le. "Powers of tensors and fast matrix multiplication." arXiv preprint arXiv:1401.7714 (2014).

相關推薦

我們可以推測矩陣乘法時間複雜

矩陣乘法的定義為: 按照定義,一個簡單的方陣乘法虛擬碼如下: int A[48,48],B[48,48],C[48,48] for i in 1 to 48 for j in 1 to 48 for k in

矩陣乘法序列問題

該問題是給定一系列矩陣求一個最少乘法次數。 這是一個動態規劃問題,狀態轉移方程 long thisCost = m[left][i] + m[i+1][right]+c[left-1]*c[i]*c[

稀疏矩陣的轉置【時間複雜較高的】

#include <stdio.h>#define MAXSIZE 12500typedef int ElemType;typedef struct{int i,j;ElemType e;}Triple;typedef struct{Triple data[MAX

排序的最好和壞的時間複雜問題

排序時間複雜度問題 面試時被問到氣泡排序,選擇排序和快速排序的時間複雜度問題,由於自己基礎不紮實,當場懵逼,這件事一直讓我反思了好幾天。 可能你會正確地寫出這幾種排序,可能你會背過別人給你說的時間複雜度。我也是這樣。 先說氣泡排序: 氣泡排序不管序列是怎樣,都是要比較n(n

程序員代碼面試指南 IT名企算法與數據結構題目 ,左程雲著pdf高清版免費下載

公共子串 鏈表相交 com 內容 全面 構造 位數 n) 字母 下載地址:網盤下載 備用地址:網盤下載 內容簡介 · · · · · ·這是一本程序員面試寶典!書中對I

ZOJ 3593 One Person Game(ExGcd + )題解

i++ 題解 mes tdi spa code game max include 思路:題意轉化為求 (ax+by=dis) || (ax+cy=dis) || (bx+cy=dis) 三個式子有解時的最小|x| + |y|。顯然求解特解x,y直接用擴展歐幾裏得,那麽怎麽求

[BZOJ3523][Poi2014]KLO-Bricks——全網唯一 一篇O(n)題解+bzoj

Description 有n種顏色的磚塊,第i種顏色的磚塊有a[i]個,你需要把他們放成一排,使得相鄰兩個磚塊的顏色不相同,限定第一個磚塊的顏色是start,最後一個磚塊的顏色是end,請構造出一種合法的方案或判斷無解。   HINT   【資料範圍】 n,m≤1000000,1

Excel,R求解問題

1. Excel最優化 本人使用的是2016版Excel,一開始是沒有Solver這個求解最優解的包的按鈕的。MS Excel在裝載時會下載該包,但是不予啟用。所以如果在“資料”這一欄沒有找到“Solver/規劃求解”按鈕,需要自行啟用,方法如下: (1)點開“選項”按鈕,選中“載入項”,點

718. Maximum Length of Repeated Subarray 字尾陣列長公共子串 O(n log^2 n)時間複雜

題意 找最長公共子串 思路 用dp的方法很容易在O(n^2)解決問題,這裡主要討論用字尾陣列的思路解決這個問題 字尾數組裡有兩個經典的概念或者稱為資料結構,就是字尾陣列SA,以及高度陣列LCP SA陣列的定義是:將原串S所有的字尾按字典序排序

用貪心演算法求

題目:有 m 元錢,n 種物品;每種物品有 j 磅,總價值 f 元,可以 使用 0 到 f 的任意價格購買相應磅的物品,例如使用 0.3f 元,可以購買 0.3j 磅物 品。要求輸出用 m 元錢最多能買到多少磅物品 演算法思想:,每次都買價效比最高的產品,價效比的計算公式為(重量\價格),價效比

P1056 排座椅(找,可以聯想一下貪心)

ACM題集:https://blog.csdn.net/weixin_39778570/article/details/83187443 題目:https://www.luogu.org/problemnew/show/P1056 解法: 輸入資料保證最優方案的唯一性。所以一定有一個唯一

大連續子序列和可能的

問題描述: 給定一個整數序列,a0, a1, a2, …… , an(項可以為負數),求其中最大的子序列和。如果所有整數都是負數,那麼最大子序列和為0; 解決這個問題的演算法有很多種,比如兩重迴圈的暴力破解,或者利用分治的思想,但是還有一種線性時間複雜度的演算法:線上處理,可以比較好的解決這

Java一組資料,滿足數量和求和的

記錄一下,方便以後使用: 有一件物品是240元,需要所有人一起湊錢購買,求最優解:1、第一優先的是人數,湊夠錢買物品的人的組合裡,人數最少的2、第二優先的是價格,要求超過240,但是離240最接近的一組,因為從大到小排列一定能得到人數最少的,但是可能會比目標數額大很多,導致找零太多 最後要求

程式設計師程式碼面試指南:IT名企演算法與資料結構題目

網站 更多書籍點選進入>> CiCi島 下載 電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支援正版,喜歡的請購買正版書籍 電子書下載(皮皮雲盤-點選“普通下載”) 購買正版 封頁 編輯推薦 如何在IT名企的面試中脫穎

嶺迴歸直接得到的公式推導

多元線性迴歸 下面是線性迴歸的公式推導,沒有加上 L2 正則化因子。 假設 y^=Xw\hat y = Xwy^​=Xw, 因為 L(w)=∣∣y^−y∣∣22=∣∣Xw−y∣∣22=(Xw−y)T(Xw−y)=wTXTXw−yTXw−wTXTy−yTy, \b

遞迴DFS揹包問題求

揹包問題大家都知道,已知揹包的最大儲存量是V,給定n個物品,求取怎樣盛放才能是揹包價值最大。 #include<iostream> #include<algorithm> using namespace std; const int maxn=30; int n,

區域性

反對回答區中一部分稱“模型收斂於鞍點”的回答。當然也有的大牛可以一針見血,那我就對這個問題多展開一下吧,讓鮮血流的更猛烈一些。(害怕.jpg) 真的結束於最優點嗎? 我們知道,在區域性最優點附近,各個維度的導數都接近0,而我們訓練模型最常用的梯度下降法又是基於導數與步長的乘積去更新模型引數的,因此一旦陷入

別陷在你人生的區域性

在數學上,所謂的區域性最優解,就是說在一定範圍內是最優解,但是在全域性情況下卻不是最優解。如下圖所示,A、B、C、D 點都是函式區域性的最小值點,而 G 點才是函式真正的全域性最小值點。 同樣地,在漫長的人生歷程中,你也會遇到生活的區域性最優解,或深陷其中而不自知,或苦苦掙扎無

問題的求解

1. 一般來說題目中需要求解出最優解的問題,我們是可以使用普通遞迴,遞推,深度優先搜尋,記憶型的遞迴,貪心或者動態規劃來進行求解的 其中使用普通的遞迴或者深搜,遞推這些資料量較小的情況下求解速度還行,假如資料量相對大一點的情況下,而且節點的數量比較多,這個時候使用這些方法來

破譯營銷,2018E-UP效果營銷案例大賽終審完美收官

12月13日,由今日頭條聯合金滑鼠數字營銷大賽主辦的2018 E-UP效果營銷案例大賽終審在北京拉開帷幕。派瑞威行、凱麗隆、58同城、西安微聚、信淼傳媒、樂推、品眾互動、優矩互動、鯨魚無限、睿道網路共10家代理公司及廣告主,總計17件優秀案例進入終審,並展開精彩提案PK對決。 現場由13位