稀疏矩陣的列序遞增法和一次定位快速轉置法

2021-07-12 04:22:19 字數 1560 閱讀 7056

稀疏矩陣:矩陣中大多數元素為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.試述資料庫設計的...