一、对称矩阵的压缩存储
对称矩阵的特点:在一个n阶方阵中,有aij=aji(0<=i,j<=n-1)。例如:
对称矩阵关于主对角对称,因此只需要存储下三角的部分(包括主对角线)即可。这样,原来需要n*n个存储单元,现在只需要n*(n+1)/2个存储单元,节约了近一半的存储空间。
由于下三角中共有n*(n+1)/2个元素,可以将这些元素按照行存储到一个数组A[n*(n+1)/2]中。这样,下三角中的元素aij存储到A[k]中,在数组A中的下标k与i和j的对应关系是:
k=i*(i+1)/2+j。例如:
symmetryArray.cpp
#include <iostream>
using namespace std;
void symmetryArray(int a[][5],int* b){
int i=0;
int j=0;
for(i=0;i<5;i++){
for(j=0;j<=i;j++){
b[i*(i+1)/2+j]=a[i][j];
}
}
}
int main(){
int a[5][5]={
{3,6,4,7,8},
{6,2,8,4,2},
{4,8,1,6,9