資料結構八 稀疏矩陣(涉及三元組,十字鍊錶)

2021-08-17 07:04:56 字數 2778 閱讀 8386

###1. 稀疏矩陣的定義

稀疏矩陣是零元素居多的矩陣,稀疏矩陣和稠密矩陣之間並沒有乙個精確的界限。假設m行n列的矩陣含有t個非零元素,一般稱δ=t

mn

\delta = \dfrac

δ=mnt​

為稀疏因子。一般認為δ

≤0.05

\delta \le 0.05

δ≤0.05

的矩陣為稀疏矩陣。

稀疏矩陣常用的儲存方式是通過三元組來進行儲存。也就是對於每個非零元素,用三元組(行號,列號,值)來表示。接下來可以使用順序表或者鍊錶的方式來儲存這些三元組,具體實現如下:

實現的時候主要注意設定指定位置(r, c)的元素值v時,應該首先查詢是否在三元組中有指定的三元組。如果存在,當v=0時,則刪除此三元組;否則,修改三元組的的非零元素值。如果不存在指定位置的三元組,當v = 0時不做任何操作,否則插入三元組。

#pragma once

#define default_rows 10

#define default_cols 10

#define default_size 10

//三元組類

template

struct triple};

//稀疏矩陣三元組順序錶類

template

class trisparsematirx

;template

trisparsematirx::

trisparsematirx

(int rs ,

int cs ,

int size )

template

trisparsematirx::

~trisparsematirx()

template

int trisparsematirx::

getrows()

const

template

int trisparsematirx::

getcols()

const

template

int trisparsematirx::

getnum()

const

template

bool trisparsematirx::

setelem

(int r,

int c,

const elemtype& v)

int i, j;

for(j = num -

1; j >=

0&& r < elems[j]

.rows || r == elems[j]

.rows

&& c < elems[j]

.cols; j--);

//查詢三元組位置

if(j>=

0&& elems[j]

.rows == r || elems[j]

.cols == c)

num--;}

else

return true;

}else

if(v !=0)

//如果沒有找到且v不為0則插入

//j+1為空的位置插入元素

elems[j +1]

, rows = r;

elems[j +1]

.cols = c;

elems[j +1]

.value = v;

num++

;return true;

}else}}

template

bool trisparsematirx::

getelem

(int r,

int c, elemtype& v)

int i, j;

for(j = num -

1; j >=

0&& r < elems[j]

.rows || r == elems[j]

.rows

&& c < elems[j]

.cols; j--);

//查詢三元組位置

if(j >=

0&& elems[j]

.rows == r || elems[j]

.cols == c)

else

}template

trisparsematirx::

trisparsematirx

(const trisparsematirx

& copy)

}template

trisparsematirx

& trisparsematirx

::operator=

(const trisparsematirx

& copy)

}return

*this;

}

如果矩陣是用二維陣列表示的,則轉置操作很簡單。轉置操作主要是將每個元素的行號和列號互換。由於在三元組表中,元素按行號或者列號排列,所以在行號或列號交換之後,還要調整元素的位置,使其仍按行序或列序進行排列。轉置的具體步驟如下:

(1)將每個非零元素對應的三元組的行號和列號進行互換。

(2)對三元組重新排序,使其中的元素按行序或者列序排列。

如果要降低演算法的時間複雜度,這時可以開闢乙個新的三元組表,假設原三元組表為source,轉置後的三元組為dest,具體步驟如下:

(1)將三元組表source中的每個元素取出交換其行號和列號。

(2)將變換後的三元組存入目標dest三元組表中適當位置,使dest中的元素按照行序或者列序進行排列。

資料結構 三元組實現稀疏矩陣的儲存

三元陣列從左向右儲存依次為row 行號 clumn 列號 元素值 value 儲存稀疏矩陣的非0元素。from scipy import sparse help sparse 定義節點類 class triplenode object def init self,row 0,column 0,val...

資料結構習題 稀疏矩陣加法 三元組順序表

以下為功能函式的 define maxsize 12500 最大非零元素 typedef int elemtype typedef struct tripletriple 三元組結點定義 typedef struct tsmatrixtsmatrix 三元組順序表定義 將矩陣m和矩陣t相加的結果儲存...

資料結構課程設計稀疏矩陣的三元組儲存

利用c c 語言進行程式設計,並規範地完成課程設計報告。通過課程設計,鞏固和加深對線性表 棧 佇列 字串 樹 圖 查詢 排序等理論知識的理解 掌握現實複雜問題的分析建模和解決方法 包括問題描述 系統分析 設計建模 實現 結果分析等 提高利用計算機分析解決綜合性實際問題的基本能力。設計並實現稀疏矩陣的...