矩阵三元组的快速转置
生活随笔
收集整理的這篇文章主要介紹了
矩阵三元组的快速转置
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 三元組矩陣的快速轉(zhuǎn)置主要借助了兩個外部數(shù)組,Num[]和Copt[],Num[]存放了轉(zhuǎn)置之前的矩陣每一列中元素的個數(shù)。Copt[]矩陣存放了轉(zhuǎn)置之后的三元組舉證項應(yīng)該存放的數(shù)據(jù)結(jié)構(gòu)中的位置。
2. 由于轉(zhuǎn)置前第n列第一個元素位置在轉(zhuǎn)置之后的位置是轉(zhuǎn)置之前第n列之前所有元素之和,所以通過Num[]和Copt[]數(shù)組就可以記錄轉(zhuǎn)置之后三元組矩陣每一項應(yīng)該存放的位置。
?代碼:
status FasterTransposesMatrix(TSMatrix M, TSMatrix &T){T.mu = M.nu;T.nu = M.mu;T.tu = M.tu;//將數(shù)據(jù)結(jié)構(gòu)中M三元組的表頭轉(zhuǎn)置的復(fù)制到T的三元組表頭中int Num[] = 0;if(T.tu){//初始化Num數(shù)組for(int col = 1; col <= M.nu; ++col){Num[col] = 0;}for(int t = 1; t <= M.tu; ++t){++Num[M.data[t].j];//計算原數(shù)組中每一列的元素個數(shù)}int copt[1] = 1;//初始化copt數(shù)組,該數(shù)組存放轉(zhuǎn)置后元素應(yīng)該存放的三元組位置for (int col = 2; col <= M.nu; ++col){copt[col] = copt[col-1] + Num[col-1];}for (int p = 1; p<=M.tu; ++p){//找到轉(zhuǎn)換之前M三元組對應(yīng)數(shù)據(jù)結(jié)構(gòu)位置col = M.data[p].j;//找到copt中存放的當(dāng)前轉(zhuǎn)置之前的三元組應(yīng)該存放的轉(zhuǎn)置之后的位置q = copt[col];T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;T.data[q].v = M.data[p].v;//不要忘記在后移一項下一個元素需要移動的位置++copt[col];}} }?
總結(jié)
以上是生活随笔為你收集整理的矩阵三元组的快速转置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA技术总结
- 下一篇: iPhone手机各代系拆机图