注意乙個轉置的前提:該順序表是排好序的,即行優先,列其次。
這種演算法比較簡單,也很容易想到: 對
m.data
從頭至尾掃瞄: «
第一次掃瞄時,將
m.data
中列號為
1的三元組賦值到
t.data中
«第二次掃瞄時,將
m.data
中列號為
2的三元組賦值到
t.data中
«依此類推,直至將
m.data
所有三元組賦值到
t.data
中
//轉置運算演算法
void transpose2(tsmatrix m, tsmatrix t)
}
這種演算法往往理解起來較為困難。 «
按m中三元組次序轉置,轉置結果放入t中恰當位置。 «
關鍵 v預先確定m中每一列第乙個非零元在t中位置 v
為確定這些位置,轉置前應先求得m的每一列中非零元個數
«實現:設兩個陣列
num[ ]
、cpos[ ]
vnum[col]
:儲存m
中第col
列非零元個數
vcpos[col]
:儲存m
中第col
列第乙個非零元三元組在
t.data
中的位置
«cpos[col]
的計算方法:
//稀疏矩陣快速轉置演算法(c語言描述)
void transpose (tsmatrix m, tsmatrix &t)
{ //採用三元組順序表儲存表示,求稀疏矩陣m的轉置矩陣t
t.m=m.n; t.n=m.m; t.tu=m.tu; //將m的行數賦值給t的列數,將m的列數賦值給t的行數,非零元素總數也賦值過去
for (col=1; col<=m.nu; ++col) num[col]=0; //初始化假設原三元組每一列都是0
for (t=1; t<=m.tu; ++t) ++num[m.data[t].j]; //列舉每乙個非0元素, m.data[t].j 為其相應的列
cpot[1]=1; //求第 col列中第乙個非零元在t.data中的序號
for(col=2; col<=m.t; ++col) //儲存m中第
col列第乙個非零元三元組在
t.data
中的位置
cpot[col]=cpot[col-1]+num[col-1];
for(p=1; p
C 稀疏矩陣的普通轉置與快速轉置
因為稀疏矩陣的有效元素個數較少,所以以行優先的順序把有效元素的資訊封裝在乙個三元組中儲存在順序表裡 include includeusing namespace std define m 5 define n 6 struct tuple class sparsematrix datacount a...
稀疏矩陣的轉置與快速轉置
假設在m n的矩陣中,有t個元素不為0。令稀疏因子s t m n 通常認為s 0.05時稱為稀疏矩陣。有時為了節省儲存空間,可以對這類矩陣進行壓縮儲存。所謂的壓縮儲存就是,為多個相同的值分配儲存在乙個空間,對零元不分配空間。而稀疏矩陣是只儲存有效值,無效值只分配乙個空間。在這裡我們用乙個順序表vec...
稀疏矩陣的轉置(矩陣轉置和快速轉置)
實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...