稀疏矩陣的轉置

2021-06-26 07:28:51 字數 1219 閱讀 4649

介紹三種求稀疏矩陣的轉置的矩陣演算法。

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中。(複製時要調換行列域的值)

for(

intk =0

,j =0

;j j ++)}}

時間複雜度:o(nt)。

(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]。當然要交換行列號。

void

transpose

(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...