資料結構(二)之稀疏矩陣篇

2021-09-05 12:14:46 字數 1277 閱讀 5656

稀疏矩陣是指矩陣中大多數元素為零的矩陣。從直觀上講,當非零元素個數低於總元素的30%,這樣的矩陣被稱為稀疏矩陣。

稀疏矩陣的表示方法

ex1a=

一 三元組表示法

rowcole1

12122

1393

31-34

36145

43246

52187

61158

74-7 我們在實現經典矩陣轉置時

for(int i=0;i而我們在實現稀疏矩陣用三元組表示時,也可以把行列互換,但轉置之後三元組變得無序,重新排序三元組影響演算法的效率。

有兩種方法實現

①多次掃瞄,設乙個標記數k,標記在轉置矩陣的位置,多次掃瞄三元組,將列數為col(1<=col<=n)的依次放入轉置矩陣中,i++;

核心演算法為

int k=1;

for(int col=1;col<=n;col++)

for(int i=1;i<=a.len;i++)

}

即可實現轉置後按順序排列

②一次掃瞄轉置

我們可以建立兩個陣列num[i],postion[i],

num[i]用來存放待轉置矩陣列為i的個數,

positon[i]用來存放轉置矩陣放置列為i的個數。

核心演算法

for(int i=1;i<=a.n;i++)

num[i]=0;

for(int i=1;i<=a.len;i++)

num[a[i].col]++;//初始化num

int positon[1]=1;

for(int i=2;i<=a.n;i++)

//初始化positon

//我們知道列數為i的轉置後的陣列位置positon[i],接著position[i]++;指向下乙個列數為i的儲存位置

for(int i=1;i<=a.len;i++)

}

第一種演算法有兩層for迴圈時間複雜度=o(a.n*a.len);

第二種演算法有一層for迴圈時間複雜度為o(a.n+a.len);

演算法在時間複雜度的提公升是犧牲空間為代價的。

稀疏矩陣表示法之三,十字鍊錶表示法

typedef strucr node 

olnode,*olink;

typedef struct

crosslist;

//核心**

//對列同理插入

資料結構實驗之陣列二 稀疏矩陣

include include using namespace std typedef struct arry int main cin qq for i 0 i time limit 5ms memory limit 1000k 對於乙個n n的稀疏矩陣m 1 n 1000 採用三元組順序表儲存表...

資料結構實驗之陣列二 稀疏矩陣

time limit 5ms memory limit 1000k 有疑問?點這裡 對於乙個n n的稀疏矩陣m 1 n 1000 採用三元組順序表儲存表示,查詢從鍵盤輸入的某個非零資料是否在稀疏矩陣中,如果存在則輸出ok,不存在則輸出error。稀疏矩陣示例圖如下 連續輸入多組資料,每組資料的第一行...

資料結構實驗之陣列二 稀疏矩陣

time limit 5ms memory limit 1000k 有疑問?點這裡 對於乙個n n的稀疏矩陣m 1 n 1000 採用三元組順序表儲存表示,查詢從鍵盤輸入的某個非零資料是否在稀疏矩陣中,如果存在則輸出ok,不存在則輸出error。稀疏矩陣示例圖如下 連續輸入多組資料,每組資料的第一行...