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