C#数据结构-稀疏矩阵
生活随笔
收集整理的這篇文章主要介紹了
C#数据结构-稀疏矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
了解稀疏矩陣之前,我們先聊聊數組,數組都清楚string[10] str;這里的str就是一個數組,它的存儲方式是str[0],str[1],str[2]...這樣,放在一個連續存儲空間里面。。那么同樣的,二維數組我們這里stirng[2][2]?str;,它的存儲結構也是一個順序存儲,所以我們這里把這個str的2*2寫全,str[0][0],str[0][1],str[1][0],str[1][1]這樣。。。
二維數組通常稱為矩陣,so,矩陣跟稀疏矩陣文字上面是非常相近了,稀疏:我們可以認為是少,什么少,數組里面只有元素...so,元素非常少的矩陣就是稀疏矩陣。比如說100*100的矩陣,里面不為0的元素只有100個,那么我們可以稱為他是稀疏矩陣,也就是有效元素遠小于總元素的時候,我們可以稱為稀疏矩陣。
稀疏矩陣的特點:
1.非0(有效)元素非常少
/// <summary>/// 一個三元組類型/// </summary>public struct TupNode{//行號public int r;//列號public int c;//元素值public int d;}/// <summary>/// 稀疏矩陣順序表/// </summary>public struct TupSparseMatrix{//行數public int rows;//列數public int cols;//非0元素個數public int nums;public TupNode[] data;} 然后就是操作了
/// <summary>/// 稀疏矩陣的操作/// </summary>class SparseMatrixClass{readonly int MaxSize = 100;public TupSparseMatrix trip;public SparseMatrixClass(){trip = new TupSparseMatrix();trip.data = new TupNode[MaxSize];}#region 把二維數組(矩陣)轉換成三元組public void CreateTupSparseMatrix(int[,] matrix){//GetLength是求維度的個數,從0開始trip.rows = matrix.GetLength(0);trip.cols = matrix.GetLength(1);trip.nums = 0;//遍歷這個二維數組for (int i = 0; i < trip.rows; i++){for (int j = 0; j < trip.cols; j++){//不等于0并且存儲數量不超過存儲數量的存儲if (matrix[i, j] != 0 && MaxSize > trip.nums){trip.data[trip.nums].r = i;trip.data[trip.nums].c = j;trip.data[trip.nums].d = matrix[i, j];trip.nums++;}}}}#endregion#region 輸出三元組(i,j,d)public string DispTupSparseMatrix(){string tupStr = "";for (int i = 0; i < trip.nums; i++){tupStr += string.Format("({0},{1},{2})", trip.data[i].r, trip.data[i].c, trip.data[i].d);}return tupStr;}#endregion#region 矩陣轉置,這里稍微優化了下public void Transpose(ref SparseMatrixClass tb){SparseMatrixClass sm = new SparseMatrixClass();sm.trip.rows = tb.trip.cols;sm.trip.cols = tb.trip.rows;sm.trip.nums = tb.trip.nums;//置換for (int i = tb.trip.nums; i >0; i--){sm.trip.data[i].r = tb.trip.data[i].c;sm.trip.data[i].c = tb.trip.data[i].r;sm.trip.data[i].d = tb.trip.data[i].d;}tb = sm;}#endregion}
2.排列沒有規律
根據這些特點,我們存儲稀疏矩陣元素的時候會以:行號,列號,元素(i,j,a)這樣的三元組存儲,接下來我們對稀疏矩陣的一些操作。 首先創建數據:/// <summary>/// 一個三元組類型/// </summary>public struct TupNode{//行號public int r;//列號public int c;//元素值public int d;}/// <summary>/// 稀疏矩陣順序表/// </summary>public struct TupSparseMatrix{//行數public int rows;//列數public int cols;//非0元素個數public int nums;public TupNode[] data;} 然后就是操作了
/// <summary>/// 稀疏矩陣的操作/// </summary>class SparseMatrixClass{readonly int MaxSize = 100;public TupSparseMatrix trip;public SparseMatrixClass(){trip = new TupSparseMatrix();trip.data = new TupNode[MaxSize];}#region 把二維數組(矩陣)轉換成三元組public void CreateTupSparseMatrix(int[,] matrix){//GetLength是求維度的個數,從0開始trip.rows = matrix.GetLength(0);trip.cols = matrix.GetLength(1);trip.nums = 0;//遍歷這個二維數組for (int i = 0; i < trip.rows; i++){for (int j = 0; j < trip.cols; j++){//不等于0并且存儲數量不超過存儲數量的存儲if (matrix[i, j] != 0 && MaxSize > trip.nums){trip.data[trip.nums].r = i;trip.data[trip.nums].c = j;trip.data[trip.nums].d = matrix[i, j];trip.nums++;}}}}#endregion#region 輸出三元組(i,j,d)public string DispTupSparseMatrix(){string tupStr = "";for (int i = 0; i < trip.nums; i++){tupStr += string.Format("({0},{1},{2})", trip.data[i].r, trip.data[i].c, trip.data[i].d);}return tupStr;}#endregion#region 矩陣轉置,這里稍微優化了下public void Transpose(ref SparseMatrixClass tb){SparseMatrixClass sm = new SparseMatrixClass();sm.trip.rows = tb.trip.cols;sm.trip.cols = tb.trip.rows;sm.trip.nums = tb.trip.nums;//置換for (int i = tb.trip.nums; i >0; i--){sm.trip.data[i].r = tb.trip.data[i].c;sm.trip.data[i].c = tb.trip.data[i].r;sm.trip.data[i].d = tb.trip.data[i].d;}tb = sm;}#endregion}
總結
以上是生活随笔為你收集整理的C#数据结构-稀疏矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HttpClient超时设置
- 下一篇: c#枚举