有矩陣m和n,都是用三元組壓縮儲存,設計高效率演算法求矩陣m*n得到的矩陣q(也用三元組壓縮儲存).
假設矩陣m*n=q 如下
那麼得到的矩陣q有三行三列,第一行中的元素有這樣的關係
所以我們可以這樣,在遍歷到m11時,由於n11,n12,n13是在順序表中連續排列的,所以我們可以建立乙個3個累加器(int qelem[4]=),
遍歷到m11時,先算q11,q12,q13的第一項,累加到累加器中即
然後遍歷到m12時計算第二項,累加到累加器中即
qelem[1]
+=m12*n21,
qelem[2]
+=m12*n22,
qelem[3]
+=m12*n23,
接著遍歷到m13時計算第三項,累加到累加器中即
這樣q中第一行的元素就計算出來了,我們把累加器裡的值存到q矩陣的順序表中就ok了
接著重複上述步驟,遍歷m矩陣的第2行元素,第三行也是同理
這樣每行m中的元素只需遍歷一次,就能計算出m乘以n得到得矩陣q了,效率比普通演算法更高
這裡來看一下**的具體實現,注意這個演算法需要乙個附加資訊,也就是矩陣每行第乙個非零元素在順序表中的位置序號,這個資訊是為了能夠準確遍歷矩陣中的某行所有元素
#include
"stdio.h"
#include
"stdlib.h"
#define maxsize 2000
//線性表0單元不用是為了便於理解程式
//元素型別
typedef
int sqpostype;
typedef
struct
triple;
//三元組
typedef
struct
rlsmatrix;
rlsmatrix m=,,
,,,,
,,,}
}; rlsmatrix n=,,
,,,,
,,,}
};//矩陣相乘演算法
void
multsmatrix
(rlsmatrix m,rlsmatrix n,rlsmatrix &q)
;//一行中每列的元素的累加器
q.sqpos[m_row]
=q.tu+1;
//相乘得到的矩陣每行非零元素在順序表中的位置
int sqpos2_m;
//遍歷到m矩陣的元素的下一行非零元素在順序表中的位置
//為了找出相同行的元素在順序表中的位置範圍
if(m_row
sqpos2_m=m.sqpos[m_row+1]
;//當前行的下一行非零元素在順序表中的位置
else
sqpos2_m=m.tu+1;
//當前行的下一行非零元素在順序表中的位置,因為m_row+1超界了,所以用尾元素位置加一
int sqpos_m;
//矩陣n中被遍歷到的元素在順序表中的位置
//遍歷m矩陣中一行中的所有元素
for(sqpos_m=m.sqpos[m_row]
;sqpos_m
//for sqpos_m
//m中的一行元素已經和n中所有列的元素計算完了,現在遍歷累加器中的元素,將計算得到的q中一行的元素存入順序表
for(
int col=
1;col<=q.nu;col++);
//非零元素存入q矩陣的順序表}}
//for col
}//for m_row
}//顯示三元組
void
print
(rlsmatrix m)
}int
main()
操作結果:
1.可以看到這裡定義的儲存矩陣三元組的結構體,還要儲存矩陣每行第乙個非零元素在順序表中的位置序號,這是為了能夠準確的遍歷到矩陣某一行的所有元素
注意:我們為了更好的理解這個演算法,所以很多陣列零單元都是不使用的
2.演算法中有3個層次的迴圈,第1層迴圈是依次遍歷矩陣m的行,第2層迴圈是遍歷m矩陣某行中的所有元素,第3層迴圈是遍歷n矩陣中某行的所有元素,並分別與第2層迴圈遍歷的m中的某個元素相乘然後結果分別加到q的累加器中.
3.第2層迴圈有兩個同層次的迴圈,
先進行遍歷m某行所有元素的迴圈,通過累加器.計算出q中某行所有元素的值.
然後我們再通過乙個迴圈把累加器裡的值儲存到q矩陣的順序表
7 稀疏矩陣的乘法運算
資料壓縮是提高傳輸 儲存效率一種技術。教材第5章介紹了兩種簡單的壓縮儲存方法。本實驗要求實現兩個稀疏矩陣相乘積的演算法。其中稀疏矩陣非零元素數量小於100.輸入 第1個 稀疏矩陣的行數 列數 非零元個數 三個數都大於0 三元組 第2個 稀疏矩陣的行數 列數 非零元個數 三個數都大於0 三元組 以行為...
稀疏矩陣的乘法
1492.稀疏矩陣的乘法 時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述計算兩個稀疏矩陣的乘法 輸入首先輸入第乙個矩陣的行數和列數,再輸入該矩陣的三元組形式,以0 0 0結束 然後輸入第二個矩陣的行數和列數,再輸入該矩陣的三元組形式,以0 0 0結束 輸出兩個矩陣相乘後得到...
稀疏矩陣儲存 轉置 乘法運算
使用順序儲存結構儲存稀疏矩陣,並實現轉置和乘法運算。include stdio.h include stdlib.h include string.h 順序結構的稀疏矩陣 轉置 乘法 define xishu max 100 define xishu increment 100 typedef st...