C++实现对称矩阵的压缩存储

#include <iostream>
using namespace std;

/*对称矩阵及对称矩阵的压缩存储*/

template<class T>
class SymmetricMatrix
{
public:
	SymmetricMatrix(T* a, size_t N)
		:_a(new T[N*(N+1)/2])
		,_n(N)
	{
		size_t index = 0;
		for (size_t i = 0; i < N; ++i)
		{
			for (size_t j = 0; j < N; ++j)
			{
				if (i >= j)
				{
					_a[index++] = a[i*N+j];
				}
				else
				{
					break;
				}
			}
		}
	}

	~SymmetricMatrix()
	{
		if (_a)
		{
			delete[] _a;
		}
	}

	T& Access(size_t i, size_t j)
	{
		if (i < j)
		{
			swap(i, j);
		}

		return _a[i*(i+1)/2+j];
	}

	void Display()
	{
		for (size_t i = 0; i < _n; ++i)
		{
			for (size_t j = 0; j < _n; ++j)
			{
				if (i >= j)
				{
					cout<<_a[i*(i+1)/2+j]<<" ";
				}
				else
				{
					cout<<_a[j*(j+1)/2+i]<<" ";
				}
			}

			cout<<endl;
		}
	}
protected:
	T* _a;//对称矩阵的压缩存储的一维数组
	size_t _n;//对称矩阵的行列数
};

void Test()
{
	int array[5][5] = 
	{
		{0, 1, 2, 3, 4},
		{1, 0, 1, 2, 3},
		{2, 1, 0, 1, 2},
		{3, 2, 1, 0, 1},
		{4, 3, 2, 1, 0},
	};

	SymmetricMatrix<int> sm((int*)array, 5);
	sm.Display();
}

int main()
{
	Test();

	return 0;
}

时间: 2024-08-10 12:54:43

C++实现对称矩阵的压缩存储的相关文章

c++对称矩阵的压缩存储

对称矩阵 对称矩阵及对称矩阵的压缩存储 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵. 以矩阵的对角线为分隔,分为上三 角和下三角. 压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存 储n(n+1)/2个数据. 对称矩阵和压缩存储的对应关系: 下三角存储i>=j, SymmetricMatrix[i][j] == Array[i*(i+1

对称矩阵及对称矩阵的压缩存储

    若设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵.以矩阵的对角线为分隔,分为上三角和下三角.     压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n(n+1)/2个数据. 对称矩阵和压缩存储的对应关系:下三角存储i>=j,  SymmetricMatrix[i][j] == Array[i*(i+1)/2+j] #define

矩阵-----对称矩阵及其压缩存储&&稀疏矩阵

什么是对称矩阵(SymmetricMatrix)? 对称对称-------看 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵.以矩阵的对角线为分隔,分为上三角和下三角. 压缩存就是矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n(n+1)/2个数据. 对称矩阵和压缩存储的对应关系:下三角存储i>=j,  SymmetricMatrix[i][j]

对称矩阵的压缩存储和输出

矩阵我个人理解就是一堆数据放在一块儿排列整齐,当然正规一点说就是m行n列的数据构成.在编程中一般采用数组对其进行存储,但矩阵中的某些特殊矩阵里,有时会出现很多数据相等或者存有很多0只有某几个位置为别的数据,那么这类矩阵我们在用数组存储的时候就会感觉比较的浪费空间,那么会对一些特殊矩阵进行压缩存储. 常见的能够压缩存储的矩阵有对称矩阵和稀疏矩阵,今天主要说说对称矩阵的压缩存储.先来说说什么是对称矩阵,相信大家都很熟悉,对于一个矩阵如果它的行和列相等并且矩阵中的数据是关于对角线对称的,那么我们称这样

【数据结构】对称矩阵及对称矩阵的压缩存储

对称矩阵: 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵.以矩阵的对角线为分隔,分为上三角和下三角. 如下面矩阵: 对称矩阵压缩存储时只需要存储i*(i+1)/2个数据. 对称矩阵与压缩矩阵的关系是: 对称矩阵SymmetricMatrix[i][j] =压缩矩阵Array(i*(i+1)/2+j). 下面我实现一下对称矩阵存储在压缩矩阵以及将压缩矩阵中的元

对称矩阵的压缩存储

对称矩阵:元素以主对角线为对称轴对应相等的矩阵 对称矩阵存储采用上三角.下三角存储,下三角符合i>=j(行大于等于列),我采用的是下三角存储,存储可以存储下三角的元素,但是打印时还需要将其转成对称矩阵形式打印 构造函数: SymmetricMatrix(T* a,size_t size) :_a(new T[size*(size+1)/2]) ,_size(size*(size+1)/2) ,_n(size) { int index=0; for(size_t i=0;i<size;i++)

c++:对称矩阵的压缩存储

SymmetricMatrix.hpp #pragma once #include<iostream> using namespace std; template<class T> class SymmetricMatrix{ public:  SymmetricMatrix(int arry[][3],size_t n){   _arrySize = n*(n + 1) / 2;   _arry = new int(_arrySize);   size_t index = 0;

对称矩阵、稀疏矩阵的压缩存储

1)对称矩阵的压缩存储 对称矩阵顾名思义就是符合行和列的个数相同,并且矩阵中存储的数据上三角和下三角中对应位置上的元素值是相等的.为了能够减少存储的空间,我们可以只存储上三角矩阵.或者下三角矩阵中的元素,这样就能够极大地节省空间的浪费.下面是对称矩阵的示列: 假设对称矩阵为n*n,这里以行优先存储下三角矩阵,总共需要存储的元素有n*(n+1)/2个元素,从而将n*n个元素压缩到n*(n+1)/2大小的空间中. 下面是具体的程序实现: --symmetric.h文件 //实现对称矩阵 #inclu

对称矩阵 压缩存储

对称矩阵及对称矩阵的压缩存储 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵.以矩阵的对角线为分隔,分为上三角和下三角. 压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n(n+1)/2个数据. 对称矩阵和压缩存储的对应关系:下三角存储i>=j,  SymmetricMatrix[i][j] == Array[i*(i+1)/2+j] #