稀疏矩陣:矩陣中大多數元素為0的矩陣,從直觀上講,當非零元素個數低於總元素的30%時,這樣的矩陣為稀疏矩陣。
如:int array [6][5] = ,
,
,
,
,
};稀疏矩陣的壓縮儲存:使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。
矩陣的轉置:將原矩陣的行、列對換,也就是將[i][j]和[j][i]位置上的資料對換。
稀疏矩陣的列序遞增法:
按照被轉置矩陣三元組表a的序列(即轉置後三元組表b的行序)遞增的順序進行轉置,則轉置後矩陣的三元組表b恰好是以「行序為主序的」.
一次定位快速轉置法:
在列轉置中演算法的時間浪費主要在雙重迴圈中,要改善演算法的效能,必須去掉雙重迴圈,使得整個轉置過程通過一次迴圈來完成。
為了使得被轉置的三元組表a中元素一次定位到三元組表b中,需要計算一下以下資料:
1)rowcounts,三元組表a中每一列有效值的個數,即轉置後矩陣三元組表b中每一行有效值的個數。
2)rowstart,三元組表b中每一行有效值的起始位置。
rowstart[i] = rowstart[i - 1] + rowcounts[i - 1];
**實現:
#include
using namespace std;
#include //動態陣列
//三元組
template
struct triple
template
class sparsematrix
public://invalid 非零值
protected:
void test()
int main()
執行結果:
列印原矩陣:
1 0 3 0
0 0 0 0
0 0 0 0
2 0 4 5
0 0 0 0
列印轉置後的矩陣:
1 0 0 2 0
0 0 0 0 0
3 0 0 4 0
0 0 0 5 0
請按任意鍵繼續. . .
兩種演算法比較:
假設有效資料的個數為100,原矩陣的列數為100,矩陣列序遞增轉置演算法,時間耗費為o(有效資料的個數*原矩陣的列數),即100*100=10000次;一次定位計數快速轉置演算法,時間複雜度為o(有效資料的個數+原矩陣的列數),即100+100=200次左右。顯然一次定位計數快速轉置演算法的時間效率要高的多,在時間效能上優於列序遞增轉置法,但是在空間耗費上增加了兩個輔助向量空間,即rowcounts和
rowstart,
由此可見,演算法在時間上的節省是以更多的儲存空間為代價的。
本文出自 「巖梟」 部落格,請務必保留此出處
稀疏矩陣 壓縮儲存 列轉置法 一次定位快速轉置法
稀疏矩陣的壓縮儲存 壓縮儲存值儲存極少數的有效資料。使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。壓縮儲存 行優先一行一行掃 有效資料存入以為矩陣 arr 列轉置法 從前向後遍歷壓縮矩陣,先找列號為0的存入 轉置矩陣的壓縮矩陣.然後從前向後找列號為1的 直到轉置...
矩陣的行序和列序儲存
在圖形處理中,矩陣操作時最基本的操作,但是不同的系統中對矩陣的儲存是不同,比如opengl和cg中就是不一樣的 比如乙個4x4矩陣 m11,m12,m13,m14 m21,m22,m23,m24 m31,m32,m33,m34 m41,m42,m43,m44 在實現中通常將其儲存為乙個一維的線性陣列...
sql相同順序法和一次封鎖法 SQL簡答題
問答題 1.簡述關係的性質?1 同一列中的分量是同一型別的資料。不同列可以取相同的資料型別。2 關係中的列又稱為屬性,並賦予屬性名。不同列的屬性名不同。3 列的次序可以任意交換。4 任意兩個元組不能完全相同。5 行的次序可以任意交換。6 列具有原子性,即每一列值是不可分的資料項 2.試述資料庫設計的...