貪心演算法 Strassen矩陣乘法

2021-07-27 05:42:35 字數 1489 閱讀 8771

兩個矩陣的乘法學過線性代數的都知道怎麼求,一般來說複雜度為o(n^3).直接給出標準的演算法

**:

public

class martixmultiply

public

static

void

main(string args) , };

int b = , };

int c = multiply(a, b);

system.out.println(c[0][0] + " " + c[0][1] + " " + c[1][0] + " "

+ c[1][1]);

}}

strassen提出了演算法打破了o(n^3)的屏障.用到分治演算法,把矩陣分為4塊.

其中

可以得到遞推關係t(n)=7t(n/2)+o(n²),依據主定理得到解t(n)=o(n^2.81).

這兒不做出證明,顯然這用到了分治法的思想

**:

public

class martixmultiply

// /分割得到子矩陣

private

static

int divide(int a, int flag)

return result;

} // 矩陣加法

private

static

int addarrays(int a, int b)

}return result;

} // 矩陣減法

private

static

int subarrays(int a, int b)

}return result;

} // 將b複製到a的指定位置

private

static

void

merge(int a, int b, int flag)

} // 常規做法

public

static

int multiply(int a, int b)

public

static

void

main(string args) , , ,

};int b = , , ,

};int c = multiply(a, b);

system.out.println(c[0][0] + " " + c[0][1] + " " + c[1][0] + " "

+ c[1][1]);

}}

Strassen矩陣相乘演算法

strassen的矩陣相乘方法是一種典型的分治演算法。目前為止,我們已經見過一些分治策略的演算法了,例如歸併排序和karatsuba大數快速乘法。現在,讓我再來看看分治策略的背後是什麼。同動態規劃不同,在動態規劃中,為了得到最終的解決方案,我們經常需要把乙個大的問題 展開 為幾個子問題,但是這裡,我...

矩陣乘法 之 strassen 演算法

一般情況下矩陣乘法需要三個for迴圈,時間複雜度為o n 3 現在我們將矩陣分塊如圖 來自mit演算法導論 一般演算法需要八次乘法 r a e b g s a f b h t c e d g u c f d h strassen將其變成7次乘法,因為大家都知道乘法比加減法消耗更多,所有時間複雜更高!...

演算法導論 矩陣乘法strassen演算法

矩陣運算在做科 算時是必不可少的,如果採用matlab來計算,這倒也容易。但是如果是自己寫c或者c 一般而言,需要做三次迴圈,其時間複雜度就是o n 3 上圖給出了我們一般會採用的方法,就是對應元素相乘和相加。如果把c a b進行分解,可以看出,這裡需要進行8次的乘法運算 分別是 r a e b g...