矩陣乘法的運算量計算(華為OJ)

2021-09-22 17:36:02 字數 1410 閱讀 7233

矩陣乘法的運算量與矩陣乘法的順序強相關。

例如:a是乙個50×10的矩陣,b是10×20的矩陣,c是20×5的矩陣

計算abc有兩種順序:((ab)c)或者(a(bc)),前者需要計算15000次乘法,後者只需要3500次。

編寫程式計算不同的計算順序需要進行的乘法次數

輸入描述:

輸入多行,先輸入要計算乘法的矩陣個數n,每個矩陣的行數,列數,總共2n的數,最後輸入要計算的法則

輸出描述:

輸出需要進行的乘法次數

示例1輸入

350 10

10 20

20 5

(a(bc))

輸出顯然用棧做。但是細節要把控好。

考慮這樣的資料,**也應該能handle:

450 10

10 20

20 5

5 6(a(bcd))

輸出思路:

每個字母肯定不會重複,每個字母對應到乙個(r,c)元組上,弄成結構體比較方便。

將字母括號串從左到右掃瞄,遇到')'則彈棧,一直彈到遇到'(',那麼彈出的這些字母(對應到乙個個矩陣,也對應到乙個包含(r,c)維度資訊的結構體),它們的列數c相乘,再乘以最後彈出元素(也即緊鄰'('右邊的字母)的行數r。

注意,這裡還沒有結束,遇到了'('應該把彈出這些元素計算結果進行儲存,並且,更新一下維護的字母括號序列的元素,我的做法是把原有的「(***xz)」這個東西用z來替代,因為z的列數c後續還是會被使用。

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

void ex21_clean() ;

while (cin >> n)

string s; cin >> s;

stackstk;

int ans = 0;

stack cal;

int delta;

int idx;

char ch1, ch2;

for (int i = 0; i < s.length(); i++)

idx = ch1 - 'a';

dim = vd[idx];

delta = dim.c;

while (!cal.empty())

dim = vd[idx];

delta *= dim.c;

}delta *= dim.r;

ans += delta;}}

else

}cout << ans << endl;

}}int main()

OpenGL 向量計算和矩陣轉換

v k v k cos 使用點乘可以很容易測試兩個向量是否正交 orthogonal 或平行 正交意味著兩個向量互為直角 點乘是通過將對應分量逐個相乘,然後再把所得積相加來計算的。叉乘只在3d空間中有定義,它需要兩個不平行向量作為輸入,生成乙個正交於兩個輸入向量的第三個向量。只有當左側矩陣的列數與右...

計算矩陣運算的乘法次數

描述 矩陣乘法的運算量與矩陣乘法的順序強相關。例如 a是乙個50 10的矩陣,b是10 20的矩陣,c是20 5的矩陣 計算a b c有兩種順序 ab c 或者 a bc 前者需要計算15000次乘法,後者只需要3500次。編寫程式計算不同的計算順序需要進行的乘法次數 知識點 字串 內部整理 練習階...

ArcPy批量計算Mean Center的兩個例項

很久沒用arcpy了,碰了好幾次壁,把這次做的貼上來,以備下次可以跳過這些簡單的問題 1 import arcpy 2 arcpy.env.workspace c users qian documents arcgis default.gdb 3 a sichuan1990 sichuan2000 ...