稀疏矩陣的壓縮儲存與轉置

2021-07-12 04:39:01 字數 2009 閱讀 3809

稀疏矩陣的三元組表述法:

型別結構:

template struct triple

;template class sparsematrix

;

**實現壓縮儲存:

//稀疏矩陣

template sparsematrix::sparsematrix(){}

template sparsematrix::sparsematrix(const t* array, size_t row, size_t col, const t& invalid)

:_rowcount(row), _colcount(col), _invalid(invalid)

); }

} }}template sparsematrix::~sparsematrix()

{}template void sparsematrix::display()const

else

}cout <

}}

稀疏矩陣的轉置:

1)列序遞增轉置法:找出第i行全部元素:從頭到尾掃瞄三元組表a,找出其中所有_col==i的三元組,轉置後放入三元組表b中。**實現如下:

template sparsematrixsparsematrix::transport()const

); }

} }return ret;

}

2)一次定位快速轉置法

在方法1中為了使轉置後矩陣的三元組表b仍按行序遞增存放,必須多次掃瞄被轉置的矩陣的三元組表a。為了能將被轉置三元組表a的元素一次定位到三元組b的正確位置上,需要預先計算以下資料:

i)待轉置矩陣三元組表a每一列中非0元素的總個數,即轉置後矩陣三元組元素b的每一行的非0元素總個數

ii)待轉置矩陣每一列中第乙個非0元素在三元組表b中的正確位置,即轉置後矩陣每一行中第乙個非0元素在三元組b中的正確位置

為此,需要設兩個陣列分別為num 和 pos ,其中num[col]用來存放三元組表a第col列中非0元素元素總個數,pos[col]用來存放轉置前三元組表a中第col列中第乙個非0元素在三元組表b中的儲存位置。

num[col]的計算方法:將三元組表a掃瞄一遍,對於其中列號為col的元素,給相應的num陣列中下標為col的元素加1.

pos[col]的計算方法:

i)pos[0] = 0,表示三元組表a中,列值為0的第乙個非0元素在三元組表b中的下標值。

ii)pos[col] = pos[col - 1] + num[col - 1],其中1<=coleg:

0  1  9  0  0  0  0

0  0  0  0  0  0  0

3  0  0  0  0  4  0

0  0  2  0  0  0  0

0  8  0  0  0  0  0

5  0  0  7  0  0  0 

col012

3456

num[col]22

2101

0pos[col]02

4677

8**實現:

template sparsematrixsparsematrix::transport()const

); }

} }return ret;

}template sparsematrixsparsematrix::fasttransport()const

for (size_t col = 1; col _colcount; ++col)

for (size_t i = 0; i 

; }return ret;

}

執行結果:

稀疏矩陣的壓縮儲存與轉置

稀疏矩陣 m n的矩陣,矩陣中有效值的個數 遠小於無效值的個數,且這些資料的分布沒有規律。1 0 3 0 5 0 0 0 0 0 0 0 0 0 0 2 0 4 0 6 0 0 0 0 0 0 0 0 0 0 稀疏矩陣的壓縮儲存 壓縮儲存值儲存極少數的有效資料。使用 三元組儲存每乙個有效資料,三元組...

稀疏矩陣的壓縮儲存與轉置

眾所周知,稀疏矩陣的定義如下 設乙個m n的矩陣,矩陣中有效值的個數遠小於無效數的個數,且這些資料的分布沒有規律時,該矩陣是稀疏矩陣。稀疏矩陣的壓縮儲存儲存極少的有效資料,使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序一次存放。稀疏矩陣的轉置,即將原矩陣的行 列對換。詳細 如下 ...

稀疏矩陣的壓縮儲存及轉置

稀疏矩陣的壓縮儲存及轉置 include using namespace std 三元組順序表的型別定義 define itemsize 100 typedef struct int row,col int item thnode typedef struct thnode data data 0 ...