typedef struct element
elem;
elem b[m];
(1)簡單複製法
for(
inti =0
;i i ++)
時間複雜度:o(t)。
缺點:轉置結果不是按行順序儲存的,而是按列順序儲存的。
(2)逐行複製法
思想:按行號從小到大依次複製矩陣中的各行非0元素。即先在陣列b中尋找列號為0(b[i].col == 0)的元素,將其逐一複製到陣列c中;
然後再在陣列b中尋找序列號為1(b[i].col == 1)的元素,將其注意複製到陣列c中。(複製時要調換行列域的值)
時間複雜度:o(nt)。for(
intk =0
,j =0
;j j ++)}}
(3)分段定位法
包括預處理階段和轉置階段,時間複雜度:o(n+t)
1)預處理階段
對陣列b進行一遍掃瞄,統計出矩陣的各列(即轉置後的矩形的各行)非0元素個數,並記錄在陣列num[n]中。
然後利用num[n]計算行定位陣列pot[n]各元素pot[j](j = 0,1,2,3,4.....n - 1)的值
(行定位陣列pot[n]的作用是將儲存轉置矩陣的陣列c分成n段,以便將轉置矩陣第j行上的num[j]個非0元素儲存在第j段。具體的說,pot[j]用來指示轉置矩陣第j行非0元素在陣列c中的起始儲存位置)
pot[0] = 0;
pot[j] = pot[j - 1] + num[j - 1]; (j = 1,2,3...n-1)
預處理結果 0
1 2 3 4
5num21
2212
pot0
2 3
5 7
8
2) 轉置階段
對陣列b進行第二次掃瞄。當掃瞄到b[i]時,取出其序列號 j = b[i].col,由j找到行定位指標k = pot[j],將該非0元素複製到c[k]。當然要交換行列號。
voidtranspose
(elem b
,elem c
,intn,
intt)}
稀疏矩陣轉置
輸出稀疏矩陣的轉置矩陣。行列均不大於20 第一行輸入兩個正整數n和m,分別表示矩陣的行數和列數,然後輸入矩陣三元組,最後輸入 0 0 0 表示結束輸入。轉置後的矩陣。include include define maxsize 100 typedef struct triple typedef st...
稀疏矩陣轉置矩陣
num 矩陣a中某列的非零元素的個數 cpot 初值表示矩陣a中某列第乙個非零元素在b中的位置,並有如下遞推 cpot 1 0 cpot col cpot col 1 num col 1 2 col nu end right.const int maxterm 100 struct sparsema...
稀疏矩陣的轉置
稀疏矩陣的轉置 使用了兩個輔助陣列 num num j 矩陣a中第j列非零元素的個數 cpot cpot j 矩陣a中第j列的第乙個非零元素在其轉置矩陣b的三元組順序表的位置。推出2個規則 1 cpot 1 1 2 cpot j cpot j 1 num j 1 演算法思路 根據1,2規則計算num...