稀疏矩陣的三元組表述法:
型別結構:
template struct triple
;template class sparsematrix
;
**實現壓縮儲存:
//稀疏矩陣
template sparsematrix::sparsematrix(){}
template sparsematrix::sparsematrix(const t* array, size_t row, size_t col, const t& invalid)
:_rowcount(row), _colcount(col), _invalid(invalid)
); }
} }}template sparsematrix::~sparsematrix()
{}template void sparsematrix::display()const
else
}cout <
}}
稀疏矩陣的轉置:
1)列序遞增轉置法:找出第i行全部元素:從頭到尾掃瞄三元組表a,找出其中所有_col==i的三元組,轉置後放入三元組表b中。**實現如下:
template sparsematrixsparsematrix::transport()const
); }
} }return ret;
}
2)一次定位快速轉置法
在方法1中為了使轉置後矩陣的三元組表b仍按行序遞增存放,必須多次掃瞄被轉置的矩陣的三元組表a。為了能將被轉置三元組表a的元素一次定位到三元組b的正確位置上,需要預先計算以下資料:
i)待轉置矩陣三元組表a每一列中非0元素的總個數,即轉置後矩陣三元組元素b的每一行的非0元素總個數
ii)待轉置矩陣每一列中第乙個非0元素在三元組表b中的正確位置,即轉置後矩陣每一行中第乙個非0元素在三元組b中的正確位置
為此,需要設兩個陣列分別為num 和 pos ,其中num[col]用來存放三元組表a第col列中非0元素元素總個數,pos[col]用來存放轉置前三元組表a中第col列中第乙個非0元素在三元組表b中的儲存位置。
num[col]的計算方法:將三元組表a掃瞄一遍,對於其中列號為col的元素,給相應的num陣列中下標為col的元素加1.
pos[col]的計算方法:
i)pos[0] = 0,表示三元組表a中,列值為0的第乙個非0元素在三元組表b中的下標值。
ii)pos[col] = pos[col - 1] + num[col - 1],其中1<=coleg:
0 1 9 0 0 0 0
0 0 0 0 0 0 0
3 0 0 0 0 4 0
0 0 2 0 0 0 0
0 8 0 0 0 0 0
5 0 0 7 0 0 0
col012
3456
num[col]22
2101
0pos[col]02
4677
8**實現:
template sparsematrixsparsematrix::transport()const
); }
} }return ret;
}template sparsematrixsparsematrix::fasttransport()const
for (size_t col = 1; col _colcount; ++col)
for (size_t i = 0; i
; }return ret;
}
執行結果:
稀疏矩陣的壓縮儲存與轉置
稀疏矩陣 m n的矩陣,矩陣中有效值的個數 遠小於無效值的個數,且這些資料的分布沒有規律。1 0 3 0 5 0 0 0 0 0 0 0 0 0 0 2 0 4 0 6 0 0 0 0 0 0 0 0 0 0 稀疏矩陣的壓縮儲存 壓縮儲存值儲存極少數的有效資料。使用 三元組儲存每乙個有效資料,三元組...
稀疏矩陣的壓縮儲存與轉置
眾所周知,稀疏矩陣的定義如下 設乙個m n的矩陣,矩陣中有效值的個數遠小於無效數的個數,且這些資料的分布沒有規律時,該矩陣是稀疏矩陣。稀疏矩陣的壓縮儲存儲存極少的有效資料,使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序一次存放。稀疏矩陣的轉置,即將原矩陣的行 列對換。詳細 如下 ...
稀疏矩陣的壓縮儲存及轉置
稀疏矩陣的壓縮儲存及轉置 include using namespace std 三元組順序表的型別定義 define itemsize 100 typedef struct int row,col int item thnode typedef struct thnode data data 0 ...