《資料結構》複習之稀疏矩陣(矩陣轉置)

2021-07-14 06:39:55 字數 1432 閱讀 8023

矩陣在資料結構中常用二維陣列(int a[m][n],m為列的元素個數,n為行的元素個數)表示,這也是最簡單的表示方法。

然而當矩陣中含有大量0元素時,也稱為稀疏矩陣,這樣的表示方法會浪費大量的儲存空間,為了節省儲存單元,最好只存非零元素。常用的儲存稀疏矩陣的方法有順序儲存和鏈式儲存兩種,這裡只介紹順序儲存。

稀疏矩陣的順序儲存方法也被稱為三元組表示法,資料結構如下:

typedef

struct ele

ele;

typedef

struct t

t;

除了結構體的定義,總的來說就是用乙個陣列來記錄非零元素的資訊。

對於普通的矩陣來說,矩陣轉置很簡單,比如要將a[nu][mu]轉置成b[mu][nu]。只需要兩個for迴圈,**如下:

for(i=0;i

i++)

它的時間複雜度為o(n2)。

對於稀疏矩陣來說,轉置演算法可以是這樣的。

它的時間複雜度也是o(n2)。

但是我們可以用技巧將轉置的複雜度o(n)。**如下:  

#include

#include

using

namespace

std;

typedef

struct ele

ele;

typedef

struct t

t;void tran(t t1, t &t2)

int loc[1000];

memset(loc, 0, sizeof(loc));

loc[0] = 0;

for (i = 1; i//計算每列元素應該在陣列中儲存的起始位置

for (i = 0; i//開始在陣列中

}int main()}}

tran(t1, t2); //呼叫轉置函式

num = 0;

for (i = 0; i//輸出矩陣

else

}cout

<< endl;

}return

0;}

**中展示了稀疏矩陣的輸入輸出和轉置。對於轉置演算法,最主要的是找到轉置的元素在陣列中的位置,如果找到了位置,我們將它放入相應的位置即可。由於,轉置過程中,列變成了行,為了找到位置,我們計算列座標為0-n的元素的個數(思想是列座標為0轉置後行座標就為0,應該放在陣列前面),在計算每列元素應該在陣列中儲存的起始位置(loc[i] = loc[i - 1] + count[i - 1]),起始位置等於前面的列的起始位置+前面列元素的個數。計算算出起始位置後,就可以將元素放入相應的位置。記住,每放乙個元素後,起始位置要加1。

稀疏矩陣轉置 資料結構

description 輸出稀疏矩陣的轉置矩陣。行列均不大於20 input 第一行輸入兩個正整數n和m,分別表示矩陣的行數和列數,然後輸入矩陣三元組,最後輸入 0 0 0 表示結束輸入。output 轉置後的矩陣。sample input 4 41 1 1 2 1 2 3 2 3 0 0 0 sa...

資料結構 稀疏矩陣轉置

我們來看看這個矩陣,五行五列,可以包含二十五個元素,但是此矩陣只有七個元素。但是我們在存放資料的時候分配了二十五塊int單元。這樣是不是有點太 浪費了。如果我們只儲存這七個元素我想會節省一部分記憶體空間。但是如果我們只儲存矩陣中的元素還是不行的,因為只有元素我們就無法還原矩陣,我們還需要此 元素的行...

資料結構 稀疏矩陣的轉置

熟悉稀疏矩陣的三元組順序儲存方式。稀疏矩陣如圖所示,輸出矩陣和三元組錶用轉置演算法 求轉置矩陣並輸出轉置後的矩陣和三元組表 初始矩陣為 n dispmatrix mm printf 矩陣的三元組順序表為 n dispmat mm printf n n tsmatrix t trantat mm,t ...